undefined詳解

【對於《JS高級程序設計》的理解】數組

「即便未初始化的變量會自動被賦值undefined值,但顯式地初始化變量依然是明智的選擇。若是可以作到這一點,那麼當typeof操做符返回‘undefined’值時,咱們就知道被檢測的變量尚未被聲明,而不是還沒有初始化。」spa

以前一直對這段話不理解,不知道說的究竟是什麼意思;今天從新回到這裏,思考這段話,仔細想了一下;設計

顯式地初始化變量依然是明智的選擇’這段話是歧義的根源,以前被我理解爲,顯示地初始化爲undefined,這樣作致使後面說的就不成立,不管是聲明不聲明結果仍是同樣的,由於默認undefined;code

而從新理解,應該是:初始化爲一個非undefined的值,這樣就成立了;能夠用空的佔位符,如:對象

  1. String類型:var str = '';
  2. Number類型:var num = 0;
  3. Boolean類型:var boo = true/false;
  4. Object類型:var obj = {};
  5. 數組:var arr = [];

意思就是,使用變量的時候,要對變量進行初始化一個非undefined的值,這樣後面咱們在用typeof進行檢測,只要返回undefined就認爲是未聲明的變量是成立的blog

【嚴格相等和undefined】console

var name;

if(name === undefined){
 //執行語句
}else{
 //不執行的語句
}

注意:這裏必須使用嚴格相等操做符(===)而不是標準相等操做符(==),由於undefined==null,也就是name == undefined會檢測name是否是null,可是嚴格相等不會檢查。程序設計

【Void操做符和undefined】class

console.log(void(0));//undefined
console.log(void 0);//undefined

因此:變量

if(x === void 0) {
    // 執行這些語句
}
// 沒有聲明y
if(y === void 0) {
    // 拋出一個RenferenceError錯誤(與`typeof`相比)
}

理解:能夠直接把void 0當成undefined看待

【undefined和null的不一樣點】

  1. null是一個字面量(不是屬性),undefined是全局對象的一個屬性
  2. typeof null; //object
  3. typeof undefined; //undefined
  4. null === undefined; // false
  5. null == undefined; // true
  6. isNaN(1 + null); //false
  7. isNaN(1 + undefined); //true
相關文章
相關標籤/搜索