在JS中 兩等的比較方式,不比較類型外臂。會強制進行類型轉換后進行比較湿硝,記錄各種類型比較的轉換過程。
/*
* 數(shù)字 == 字符串
* 先將字符串轉換為數(shù)字
* 驗證
*/
console.log(121 == '121') // true
console.log(Number('121') == 121) // true
/**
* 字符串 == 對象
* 對象會先調用toString轉換為字符串
* 對象統(tǒng)一轉換為'[object Object]' 與字符串進行比較
*/
console.log(Object.prototype.toString.call({})) // '[object Object]'
console.log(Number('[object Object]') == 'NaN') // false NaN != NaN
console.log('[object Object]' == {
a: 1,
b: 1,
c: 1
}) // true
console.log('[object Object]' == {}) // true
/**
* null == undefined / undefined == null // true
*/
/**
* 對象 == 對象
* 比較引用地址是否相同
*/
let obja = {}
objb = obja
console.log({} == {}) // false
console.log(obja == objb) // true
/**
* 對象 == boolean值
* 兩邊都會轉換為數(shù)值進行比較
* 導致永遠不會相等
* 因為對象會先轉換為字符串變成'[object Object]'然后在轉變?yōu)閿?shù)值則是NaN
* 那么布爾值 只有 0 和 1 所以不可能相等
*/
console.log({} == true) // false
/**
* 數(shù)字 == boolean值
* 轉為數(shù)字進行比較
*/
console.log(1 == true) // true
console.log(0 == false) // true
console.log(NaN == false) // false
/**
* 最奇怪的要數(shù) NaN 自身和自身比較不相等
*/
console.log(NaN == NaN) // false
console.log(NaN != NaN) // true
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者