Javascript 中的 undefined 與 未定義(not defined)

在 Javascript 中,有一種致命錯誤非常常見,即 ReferenceError:xxx is not defined. 但是,有時候當一個值從未被賦值的時候,並不會出錯,而是返回 undefined,有必要對這兩者進行梳理。

undefined

undefined 表達的含義有三種情況:

  1. 這個變量存在,但是並沒有給予任何值。
  2. 一種普通的數據類型和一種值。你可以手工將任何變量賦值為 undefined,此時其沒有特別含義。
  3. 一個存在的對象中的一個不存在(沒有聲明)的值,會被認為是 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 來區分這兩種情況。

当前页阅读量为: