一般狀況下, 當咱們試圖訪問某個不存在的或者沒有賦值的變量時,就會獲得一個undefined值。Javascript會自動將聲明是沒有進行初始化的變量設爲undifined。javascript
若是一個變量根本不存在會發生什麼事:html
>>> foo
ReferenceError: foo is not defined
咱們獲得了一個錯誤信息。咱們在該變量上用typeof操做符看看它是什麼類型:java
>>> typeof foo
"undefined"
咱們獲得的結果爲字符串「undefined」。spa
若是咱們聲明一個變量時沒有對其進行賦值,調用該變量時並不會出錯,但typeof操做符依然會返回字符串「undefined」。code
>>> var somevar;
>>> somevar;
undefined
>>> typeof somevar;
"undefined"
而null值就徹底是另一回事啦。 他不能經過javascript來自動賦值,也就是說必需要咱們本身手動來給某個變量賦值爲null:htm
>>> var somevar = null;
>>> somevar;
null
並且,typeof操做符返回的是一個對象!對象
>>> typeof somevar;
"object"
雖說,undefine與null之間的差異不是很大,可是他們在一些算數運算中表現得很是不同:ip
>>> var i = 1 + undefined; i;
NaN
>>> var i = 1 + null; i;
1
這是由於undefined和null在被轉換爲其餘基本類型時,方法存在必定的區別,下面咱們給出一些可能的轉換類型。rem
轉換爲數字(把undefined看作字符串,null看作0):字符串
>>> 1 * undefined;
NaN
>>> 1 * null;
0
轉換爲布爾值:
>>> !!undefined;
false
>>> !!null;
false
轉換爲字符串(都相應的轉換爲字符串):
>>> ''+undefined;
"undefined"
>>> ''+null;
"null"
以上就是undefined與null的區別,以及在運算是要注意的地方。