这个是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
这个是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
除了防止被重写外,还可以减少字节。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
---省略更多
有些浏览器允许你重写 undefined 而 void 0 一直返回 undefined
undefined = 1;
console.log(!!undefined); //true
console.log(!!void(0)); //false
因为void 0永远返回undefined
而undefined可以被重写,undefined其实是window的一个属性,可以给它赋值,这样undefined就不再是undefined了。
8 回答4.6k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
事实上,
void
的返回值都是undefined
。 https://developer.mozilla.org...在ES5之前,
window
下的undefined
是可以被重写的,于是导致了某些极端情况下使用undefined会出现一定的差错。所以,用
void 0
是为了防止undefined
被重写而出现判断不准确的情况。补充一下:非严格模式下,undefined是可以重写的,严格模式则不能重写。