比較不同類(lèi)型的數(shù)據(jù)時(shí),相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類(lèi)型轉(zhuǎn)換月幌,然后再用嚴(yán)格相等運(yùn)算符比較雪隧。
"" == 0 //題目1
" " == 0 //題目2
"" == true //題目3
"" == false //題目4
" " == true //題目5
(1)原始類(lèi)型的值
原始類(lèi)型的數(shù)據(jù)(數(shù)字西轩、字符串、布爾)會(huì)轉(zhuǎn)換成數(shù)值類(lèi)型再進(jìn)行比較脑沿。
1 == true // true
// 等同于 1 === Number(true)
0 == false // true
// 等同于 0 === Number(false)
2 == true // false
// 等同于 2 === Number(true)
2 == false // false
// 等同于 2 === Number(false)
'true' == true // false
// 等同于 Number('true') === Number(true)
// 等同于 NaN === 1
'' == 0 // true
// 等同于 Number('') === 0
// 等同于 0 === 0
'' == false // true
// 等同于 Number('') === Number(false)
// 等同于 0 === 0
'1' == true // true
// 等同于 Number('1') === Number(true)
// 等同于 1 === 1
'\n 123 \t' == 123 // true
// 因?yàn)樽址D(zhuǎn)為數(shù)字時(shí)藕畔,省略前置和后置的空格
上面代碼將字符串和布爾值都轉(zhuǎn)為數(shù)值,然后再進(jìn)行比較庄拇。
(2)對(duì)象與原始類(lèi)型值比較
對(duì)象(這里指廣義的對(duì)象注服,包括數(shù)組和函數(shù))與原始類(lèi)型的值比較時(shí),對(duì)象轉(zhuǎn)化成原始類(lèi)型的值措近,再進(jìn)行比較溶弟。
[1] == 1 // true
// 等同于 Number([1]) == 1
[1] == '1' // true
// 等同于 Number([1]) == Number('1')
[1] == true // true
// 等同于 Number([1]) == Number(true)
{} == true //false
// Number({}) 空對(duì)象會(huì)轉(zhuǎn)換為NaN
[] == true //false
// Number([]) 空數(shù)組對(duì)象為0
(3)undefined 和 null
undefined和null與其他類(lèi)型的值比較時(shí),結(jié)果都為false瞭郑,它們互相比較時(shí)結(jié)果為true辜御。
false == null // false
false == undefined // false
0 == null // false
0 == undefined // false
undefined == null // true
絕大多數(shù)情況下,對(duì)象與undefined和null比較屈张,都返回false擒权。只有在對(duì)象轉(zhuǎn)為原始值得到undefined時(shí)袱巨,才會(huì)返回true,這種情況是非常罕見(jiàn)的碳抄。