首先,從本質來看,他們是兩種不一樣的JavaScript數據類型。直接上《JavaScript高級程序設計》裏的解釋好了。
Undefined類型:Undefined類型只有一個值,即特殊的undefined。在使用var 聲明變量但未對其加以初始化時,這個變量的值就是undefined。
Null類型:Null類型也只有一個特殊的值——null。從邏輯角度來看,null值表示一個空對象指針。函數
alert
a:聲明但未定義(undefined)
b:聲明且定義爲null
c:未聲明測試
typeof
a:聲明但未定義(undefined)
b:聲明且定義爲null(表示定義的變量未來用於保存對象)
c:未聲明(對於還沒有聲明過的變量,只能執行一項操做,就是用typeof檢測其數據類型)spa
instanceof
a:定義爲undefined
b:定義爲null設計
用 !邏輯非運算符,undefined和null會自動轉換成布爾值false,可是直接用==則會失效。指針
== 運算符比較:在對比不一樣類型時先作數據類型轉換,轉換後比較兩個變量的值
===運算符比較:比較兩個數據的數據類型以及值對象
typeof:是運算符,不是函數,用於檢測變量的數據類型。返回的是一個字符串。
使用方法eg. Typeof(「string」) 其中括號可加可不加
typeof返回的值有:undefined, string, boolean, number, object, functionip
分析一下上圖的兩個結果:
typeof 1: 1就是一個數字類型的常量,故結果爲」number」;
new Number(1) 建立一個Number類型的對象,值爲1,故結果爲」object」字符串
instanceof用於判斷一個變量是不是某個對象(類)的實例。返回的是布爾類型。
在控制檯作了以下兩行代碼的測試,最早試的實際上是第二行代碼,輸出false的時候我還有有些驚訝的,a不是賦值1了嘛,怎麼是false呢?因而我又仔細讀了一下instanceof的定義,對象,類,1根本就是一個常量嘛,跟對象的實例根本不挨邊。(結合Java的OOP相關知識,理解不少)
instanceof返回的值有:true falsestring