void 0 代替 undefined 前世今生?

原文鏈接:https://www.jianshu.com/p/9ab70183cd9e

之前在看一個 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章