天天看點

JS進階 03-09 資料類型-Undefined類型

Undefined類型隻有一個值,即特殊的undefined。在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined,例如

03-09UndefinedExample01.htm

var message;
alert (nessage == undefined); true      

這個例子隻聲明了變量message,但未對其進行初始化。比較這個變量與undefined字面量,結果表明它們是相等的。這個例子與下面的例子是等價的:

03-09UndefinedExample02.htm

var message = undefined;
console.log(message == undefined); // true      

這個例子使用​

​undefined​

​​值顯式初始化了變量message。但我們沒有必要這麼做,因為未經初始化的值預設就會取得​

​undefined​

​值。

一般而言,不存在需要顯式地把一個變量設定為​

​undefined​

​​值的情況。字面值​

​undefined​

​的主要目的是用于比較,而ECMA-262第3版之前的版本中并沒有規定這個值。第3版引入這個值是為了正式區分空對象指針與未經初始化的變量。

不過,包含​

​undefined​

​​值的變量與尚未定義的變量還是不一樣的。看看下面這個例子:

03-09UndefinedExample03.htm

var message;
console.log(message); // "undefined"
console.log(age); //causes an error      

運作以上代碼,第一個警告框會顯示變量message的值,即​

​undefined​

​。而第二個警告框由于傳遞給alert()函數的是尚未聲明的變量age — 則會導緻一個錯誤。對于尚未聲明過的變量,隻能執行一項操作,即使用typeof操作符檢測其資料類型(對未經聲明的變量調用delete不會導緻銷誤,但這樣做沒什麼實際意義,而且在嚴格模式下确實會導緻錯誤)。

然而,令人困惑的是:對未初始化的變量執行typeof操作符會傳回undefined值,而對未聲明的變量執行typeof操作符同樣也會傳回undefined值。來看下面的例子:

03-09UndefinedExample04.htm

var message;
console.log(typeof message); // "undefined"
console.log(typeof age); // "undefined"      

繼續閱讀