javascript - 为什么js中要用void 0 代替undefined,还是有特别的含义呢
迷茫
迷茫 2017-04-10 17:55:15
[JavaScript讨论组]

这个是Backbone.js中的一句源码

if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;

此处void 0和undefined意义一样吗,我f12 chrome后,

undefined === void 0;//true
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(4)
迷茫

事实上,void的返回值都是undefined。 https://developer.mozilla.org...

在ES5之前,window下的undefined是可以被重写的,于是导致了某些极端情况下使用undefined会出现一定的差错。

所以,用void 0是为了防止undefined被重写而出现判断不准确的情况。

注: ES5之后的标准中,规定了全局变量下的undefined值为只读,不可改写的,但是局部变量中依然可以对之进行改写。

补充一下:非严格模式下,undefined是可以重写的,严格模式则不能重写。

PHP中文网

有些浏览器允许你重写 undefined 而 void 0 一直返回 undefined

undefined = 1;
console.log(!!undefined); //true
console.log(!!void(0)); //false
大家讲道理

除了防止被重写外,还可以减少字节。void 0代替undefined省3个字节。
类似的还有很多常用的写法,看到别人这样写的时候就当是老司机的套路就行了。

//取整
parseInt(a,10); //Before
Math.floor(a); //Before
a>>0; //Before
~~a; //After
a|0; //After

//四舍五入
Math.round(a); //Before
a+.5|0; //After

//内置值
undefined; //Before
void 0; //After, 快
0[0]; //After, 略慢

//内置值
Infinity;
1/0;

//布尔值短写法
true; //Before
!0; //After

//布尔值短写法
false; //Before
!1; //After

---省略更多

PHP中文网

因为void 0永远返回undefined

而undefined可以被重写,undefined其实是window的一个属性,可以给它赋值,这样undefined就不再是undefined了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号