【對於《JS高級程序設計》的理解】數組
「即便未初始化的變量會自動被賦值undefined值,但顯式地初始化變量依然是明智的選擇。若是可以作到這一點,那麼當typeof操做符返回‘undefined’值時,咱們就知道被檢測的變量尚未被聲明,而不是還沒有初始化。」spa
以前一直對這段話不理解,不知道說的究竟是什麼意思;今天從新回到這裏,思考這段話,仔細想了一下;設計
‘顯式地初始化變量依然是明智的選擇’這段話是歧義的根源,以前被我理解爲,顯示地初始化爲undefined,這樣作致使後面說的就不成立,不管是聲明不聲明結果仍是同樣的,由於默認undefined;code
而從新理解,應該是:初始化爲一個非undefined的值,這樣就成立了;能夠用空的佔位符,如:對象
意思就是,使用變量的時候,要對變量進行初始化一個非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的不一樣點】