在javascript的世界里,無論是函數,還是數組,還是對象,亦或是字符串,數字,布爾類型,在這些數據類型中,總有這么幾個特立獨行,然后造成一些可有可無的討厭bug。
而這些討厭bug出現的原因就是由於比較時產生的錯誤,而且最不易查出錯誤。
在這里我們整理了這幾個特殊數據類型的比較。直接上代碼。
上代碼前,普及一個知識:
==內容比較,數據類型不比較。
===內容比較,數據類型也比較。
上代碼:
==比較代碼:
// "" null undefined NaN 0 console.log("\"\"==\"\":"); console.log(""==""); //false console.log("\"\"==null:"); console.log(""==null);//false console.log("\"\"==undefined:"); console.log(""==undefined);//false console.log("\"\"==NaN:"); console.log(""==NaN);//false console.log("\"\"==Number.NaN:"); console.log(""==Number.NaN);//false console.log("\"\"==0:"); console.log(" "==0);//true console.log("null==\"\":"); console.log(null==""); console.log("null==null:"); console.log(null==null); console.log("null==undefined:"); console.log(null==undefined); console.log("null==NaN:"); console.log(null==NaN); console.log("null==Number.NaN:"); console.log(null==Number.NaN); console.log("null==0:"); console.log(null==0); console.log("undefined==\"\":"); console.log(undefined==""); console.log("undefined==null:"); console.log(undefined==null); console.log("undefined==undefined:"); console.log(undefined==undefined); console.log("undefined==NaN:"); console.log(undefined==NaN); console.log("undefined==Number.NaN:"); console.log(undefined==Number.NaN); console.log("undefined==0:"); console.log(undefined==0); console.log("NaN==\"\":"); console.log(NaN==""); console.log("NaN==null:"); console.log(NaN==null); console.log("NaN==undefined:"); console.log(NaN==undefined); console.log("NaN==NaN:"); console.log(NaN==NaN); console.log("NaN==Number.NaN:"); console.log(NaN==Number.NaN); console.log("NaN==0:"); console.log(NaN==0); console.log("0==\"\":"); console.log(0==""); console.log("0==null:"); console.log(0==null); console.log("0==undefined:"); console.log(0==undefined); console.log("0==NaN:"); console.log(0==NaN) console.log("0==Number.NaN:"); console.log(0==Number.NaN); console.log("0==0:"); console.log(0==0);
==比較結果:
===比較代碼:
// ==內容比較,數據類型不比較。 // ===內容比較,數據類型也比較。 // "" null undefined NaN 0 console.log("\"\"===\"\":"); console.log(""===""); //false console.log("\"\"===null:"); console.log(""===null);//false console.log("\"\"===undefined:"); console.log(""===undefined);//false console.log("\"\"===NaN:"); console.log(""===NaN);//false console.log("\"\"===Number.NaN:"); console.log(""===Number.NaN);//false console.log("\"\"===0:"); console.log(" "===0);//true console.log("null===\"\":"); console.log(null===""); console.log("null===null:"); console.log(null===null); console.log("null===undefined:"); console.log(null===undefined); console.log("null===NaN:"); console.log(null===NaN); console.log("null===Number.NaN:"); console.log(null===Number.NaN); console.log("null===0:"); console.log(null===0); console.log("undefined===\"\":"); console.log(undefined===""); console.log("undefined===null:"); console.log(undefined===null); console.log("undefined===undefined:"); console.log(undefined===undefined); console.log("undefined===NaN:"); console.log(undefined===NaN); console.log("undefined===Number.NaN:"); console.log(undefined===Number.NaN); console.log("undefined===0:"); console.log(undefined===0); console.log("NaN===\"\":"); console.log(NaN===""); console.log("NaN===null:"); console.log(NaN===null); console.log("NaN===undefined:"); console.log(NaN===undefined); console.log("NaN===NaN:"); console.log(NaN===NaN); console.log("NaN===Number.NaN:"); console.log(NaN===Number.NaN); console.log("NaN===0:"); console.log(NaN===0); console.log("0===\"\":"); console.log(0===""); console.log("0===null:"); console.log(0===null); console.log("0===undefined:"); console.log(0===undefined); console.log("0===NaN:"); console.log(0===NaN) console.log("0===Number.NaN:"); console.log(0===Number.NaN); console.log("0===0:"); console.log(0===0);
===比較結果:
typeof()和isNaN()代碼:
console.log(typeof ""); console.log(typeof null); console.log(typeof undefined); console.log(typeof NaN); console.log(typeof 0); // "" null undefined NaN 0 console.log("isNaN(\"\")"); console.log(isNaN("")); console.log("isNaN(null)"); console.log(isNaN(null)); console.log("isNaN(undefined)"); console.log(isNaN(undefined)); console.log("isNaN(NaN)"); console.log(isNaN(NaN)); console.log("isNaN(0)"); console.log(isNaN(0));
typeof()和isNaN()結果:
結論:
雙等於 0==""為true , null==undefined為true 其他除了NaN之外等於自己都是true,剩下來的都是false
三等於 除了NaN之外等於自己都是true,剩下來的都是false
""是string類型
null是Object類型
undefined是undefined類型
0和NaN都是number類型
以上純手打,若有不足之處,還望指出,在下感激不盡。