比較不同類型的數(shù)據(jù)時,相等運算符會先將數(shù)據(jù)進行類型轉(zhuǎn)換,然后再用嚴(yán)格相等運算符比較。
"" == 0 //題目1
" " == 0 //題目2
"" == true //題目3
"" == false //題目4
" " == true //題目5
(1)原始類型的值
原始類型的數(shù)據(jù)(數(shù)字、字符串、布爾)會轉(zhuǎn)換成數(shù)值類型再進行比較。
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
// 因為字符串轉(zhuǎn)為數(shù)字時,省略前置和后置的空格
上面代碼將字符串和布爾值都轉(zhuǎn)為數(shù)值,然后再進行比較。
(2)對象與原始類型值比較
對象(這里指廣義的對象,包括數(shù)組和函數(shù))與原始類型的值比較時,對象轉(zhuǎn)化成原始類型的值,再進行比較。
[1] == 1 // true
// 等同于 Number([1]) == 1
[1] == '1' // true
// 等同于 Number([1]) == Number('1')
[1] == true // true
// 等同于 Number([1]) == Number(true)
{} == true //false
// Number({}) 空對象會轉(zhuǎn)換為NaN
[] == true //false
// Number([]) 空數(shù)組對象為0
(3)undefined 和 null
undefined和null與其他類型的值比較時,結(jié)果都為false,它們互相比較時結(jié)果為true。
false == null // false
false == undefined // false
0 == null // false
0 == undefined // false
undefined == null // true
絕大多數(shù)情況下,對象與undefined和null比較,都返回false。只有在對象轉(zhuǎn)為原始值得到undefined時,才會返回true,這種情況是非常罕見的。