轉載:https://www.cnblogs.com/qiantuwuliang/archive/2010/01/12/1645302.htmljavascript
1.類型分析:html
js中的數據類型有undefined,boolean,number,string,object等5種,前4種爲原始類型,第5種爲引用類型。java
從上面的代碼中能夠看出未定義的值和定義未賦值的爲undefined,null是一種特殊的object,NaN是一種特殊的number。程序員
2.比較運算數組
從上面的代碼能夠得出結論:(1)undefined與null是相等;(2)NaN與任何值都不相等,與本身也不相等。函數
JavaScript undefined 屬性測試
undefined 屬性用於存放 JavaScript 的 undefined 值。spa
undefined
沒法使用 for/in 循環來枚舉 undefined 屬性,也不能用 delete 運算符來刪除它。code
undefined 不是常量,能夠把它設置爲其餘值。htm
當嘗試讀取不存在的對象屬性時也會返回 undefined。
< 值等價於 undefined 運算符認爲 運算來測試某個值是不是未定義的,由於="=" ="==">
< 表示無值,而>
在本例中,咱們將檢測兩個變量中未定義的一個:
輸出:
[補充]
Null 數據類型 在 Jscript 中數據類型 null 只有一個值:null。關鍵字 null 不能用做函數或變量的名稱。 包含 null 的變量包含「無值」或「無對象」。換句話說,該變量沒有保存有效的數、字符串、boolean、數組或對象。能夠經過給一個變量賦 null 值來清除變量的內容。 請注意,在 Jscript 中,null 與 0 不相等(與在 C 和 C++ 中不一樣)。同時應該指出的是,Jscript中 typeof 運算符將報告 null 值爲 Object 類型,而非類型 null。這點潛在的混淆是爲了向下兼容。 Undefined 數據類型 以下狀況使返回 undefined 值: 對象屬性不存在, 聲明瞭變量但從未賦值。 注意不能經過與 undefined 作比較來測試一個變量是否存在,雖然能夠檢查它的類型是否爲「undefined」。在如下的代碼範例中,假設程序員想測試是否已經聲明變量 x : // 這種方法不起做用 if (x == undefined) // 做某些操做 // 這個方法一樣不起做用- 必須檢查 // 字符串 "undefined" if (typeof(x) == undefined) // 做某些操做 // 這個方法有效 if (typeof(x) == "undefined") // 做某些操做 考慮將 undefined 值與null作比較。 someObject.prop == null; 以下狀況時,比較的結果爲 true, 若是屬性 someObject.prop 包含 null 值, 若是屬性 someObject.prop 不存在。 要檢查一個對象屬性是否存在,可使用新的 in 運算符: if ("prop" in someObject) // someObject 有屬性 ’prop’ 在JavaScript中,null與undefined一度令人迷惑。下面的分析,有利於你更清晰的認知它(或者讓你更迷惑): - null是關鍵字;undefined是Global對象的一個屬性 - null是對象(空對象, 沒有任何屬性和方法);undefined是undefined類型的值。試試下面的代碼: document.writeln(typeof null); //return object document.writeln(typeof undefined); //return undefined - 對象模型中,全部的對象都是Object或其子類的實例,但null對象例外: document.writeln(null instanceof Object); //return false - null「等值(==)」於undefined,但不「全等值(===)」於undefined: document.writeln(null == undefined); //return true document.writeln(null === undefined); //return false - 運算時null與undefined均可以被類型轉換爲false,但不等值於false: document.writeln(!null, !undefined); //return true,true document.writeln(null==false); //return false document.writeln(undefined==false); //return false