通常情況下, 當我們試圖訪問某個不存在的或者沒有賦值的變量時,就會得到一個undefined值。Javascript會自動將聲明是沒有進行初始化的變量設為undifined。
如果一個變量根本不存在會發生什么事:
>>> foo
ReferenceError: foo is not defined
我們得到了一個錯誤信息。我們在該變量上用typeof操作符看看它是什么類型:
>>> typeof foo
"undefined"
我們得到的結果為字符串“undefined”。
如果我們聲明一個變量時沒有對其進行賦值,調用該變量時並不會出錯,但typeof操作符依然會返回字符串“undefined”。
>>> var somevar;
>>> somevar;
undefined
>>> typeof somevar;
"undefined"
而null值就完全是另外一回事啦。 他不能通過javascript來自動賦值,也就是說必須要我們自己手動來給某個變量賦值為null:
>>> var somevar = null;
>>> somevar;
null
而且,typeof操作符返回的是一個對象!
>>> typeof somevar;
"object"
雖然說,undefine與null之間的差別不是很大,但是他們在一些算數運算中表現得非常不一樣:
>>> var i = 1 + undefined; i;
NaN
>>> var i = 1 + null; i;
1
這是因為undefined和null在被轉換為其他基本類型時,方法存在一定的區別,下面我們給出一些可能的轉換類型。
轉換為數字(把undefined看做字符串,null看做0):
>>> 1 * undefined;
NaN
>>> 1 * null;
0
轉換為布爾值:
>>> !!undefined;
false
>>> !!null;
false
轉換為字符串(都相應的轉換為字符串):
>>> ''+undefined;
"undefined"
>>> ''+null;
"null"
以上就是undefined與null的區別,以及在運算是要注意的地方。