Javascript 中的 undefined 與 未定義(not defined)
在 Javascript 中,有一種致命錯誤非常常見,即 ReferenceError
:xxx is not defined. 但是,有時候當一個值從未被賦值的時候,並不會出錯,而是返回 undefined
,有必要對這兩者進行梳理。
undefined
undefined
表達的含義有三種情況:
- 這個變量存在,但是並沒有給予任何值。
- 一種普通的數據類型和一種值。你可以手工將任何變量賦值為 undefined,此時其沒有特別含義。
- 一個存在的對象中的一個不存在(沒有聲明)的值,會被認為是 undefined。
對這三種情況進行歸納,undefined 可以如下總結:
- 它是一種數據類型,也是一種值。
- 有這種值的時候,要麼它本身被賦值,要麼本身存在,要麼其所在對象存在。完全不存在的變量不會是 undefined(注意,此處還有坑,往後看)。 下面舉幾個例子。
一個聲明但沒有賦值的變量為 undefined
var p;
alert(p); // undefined
一個不存在的對象成員為 undefined
var p = { };
alert(p.a); // undefined
如果 p 還有一個成員 b
,其值被手工賦值為 undefined,如何區分不存在的成員 a 和存在的成員 b?可以使用 Object.prototype.HasOwnProperty() 方法。
一個手工賦值的 undefined
var p = 5;
p = undefined;
alert(p); // undefined
從上面的三個例子可以清楚看出 undefined
的一些情況。undefined 的優點在於正常使用有此值的變量不會拋出異常。
未定義(not defined)
一個 未定義
(not defined) 的變量是完全沒有任何聲明的變量。這樣的變量在使用時會直接拋出致命錯誤。但是,如果使用 typeof 來判斷這樣的變量,不但不會出錯,而且竟然會返回 undefined
,這使得無法使用 typeof 來區分這兩種情況。
© 轉載需附帶本文連結,依 CC BY-NC-SA 4.0 釋出。