衆所周知,Undefined是JS語言中的7大基本類型之一,表示未定義,它的值只有一個,就是undefined。任何變量在賦值前都是undefined。javascript
而在一些框架源碼中,會出現一些這樣的表達式:java
if (context === void 0) return func;
function foo() {
var a = arguments[0] !== (void 0 ) ? arguments[0] : 2; return a;
}
if (array == null) return void 0;
1. undefined是可變的?框架
在ES5的全局環境中,undefined是隻讀的。而在局部做用域中,undefined是可變的。這個是JS語言公認的設計失誤之一。spa
void是一元運算符,出如今操做數的左邊,操做數能夠是任意類型的值,void右邊的表達式能夠是帶括號形式(例如:void(0)),也能夠是不帶括號的形式(例如:void 0)。 設計
3. 使用void 0代替undefined的緣由是?code
① 使用void 0比使用undefined可以減小3個字節blog
>"undefined".length 9 >"void 0".length 6
② undefined並非javascript中的保留字,咱們能夠使用undefined做爲變量名字,而後給它賦值。void 0輸出惟一的結果undefined,保證了不變性。ip
4. undefined與null的區別?作用域
null表明空值,表明「定義了可是爲空」。而undefined的表明未定義。源碼