之前在看一個 H5 demo 的時候發現好多變量的定義都是 var aaa = void 0
因此在 Chrome 控制檯測試了一下 undefined === void 0; //true
(事實上,void的返回值都是undefined, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void)
所以,疑問來了,相等 爲何不直接用 undefined ?
啥事都是有原因的:
- 1、防止被重寫(在ES5之前,window下的undefined是可以被重寫的,於是導致了某些極端情況下使用undefined會出現一定的差錯。所以,用void 0是爲了防止undefined被重寫而出現判斷不準確的情況。)
注: ES5之後的標準中,規定了全局變量下的undefined值爲只讀,不可改寫的,但是局部變量中依然可以對之進行改寫。
備註:非嚴格模式下,undefined是可以重寫的,嚴格模式則不能重寫。
- 2、可以減少字節。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