標籤:ref str 資料 布爾 rip 比較 strong asc pre
"==="叫做嚴格運算子,"=="叫做相等運算子。
嚴格運算子的運算規則如下,
(1)不同類型值
如果兩個值的類型不同,直接返回false。
(2)同一類的原始類型值
同一類型的原始類型的值(數值、字串、布爾值)比較時,值相同就返回true,值不同就返回false。
(3)同一類的複合類型值
兩個複合類型(對象、數組、函數)的資料比較時,不是比較它們的值是否相等,而是比較它們是否指向同一個對象。
(4)undefined和null
undefined 和 null 與自身嚴格相等。
null === null //trueundefined === undefined //true
相等運算子在比較相同類型的資料時,與嚴格相等運算子完全一樣。
在比較不同類型的資料時,相等運算子會先將資料進行類型轉換,然後再用嚴格相等運算子比較。類型轉換規則如下:
(1)原始類型的值
原始類型的資料會轉換成數實值型別再進行比較。
字串和布爾值都會轉換成數值。
(2)對象與原始類型值比較
對象(這裡指廣義的對象,包括數值和函數)與原始類型的值比較時,對象轉化成原始類型的值,再進行比較。
(3)undefined和null
undefined和null與其他類型的值比較時,結果都為false,它們互相比較時結果為true。
(4)相等運算子的缺點
相等運算子隱藏的類型轉換,會帶來一些違反直覺的結果。
‘‘ == ‘0‘ // false0 == ‘‘ // true0 == ‘0‘ // truefalse == ‘false‘ // falsefalse == ‘0‘ // truefalse == undefined // falsefalse == null // falsenull == undefined // true‘ \t\r\n ‘ == 0 // true
這就是為什麼建議盡量不要使用相等運算子。
至於使用相等運算子會不會對後續代碼造成意外影響,答案是有可能會。
var a = undefined;if(!a){ console.log("1"); //1}var a = undefined;if(a == null){ console.log("1"); //1}var a = undefined;if(a === null){ console.log("1"); //無輸出}
也就是說當a為undefined時,輸出的值會有變化,而在編程中對象變成undefined實在是太常見了。
原文連結 http://www.cnblogs.com/DanBrown/p/8960989.html
Javascript 中 == 和 === 的區別