嚴格相等:除了比對值以外,還會比對型別。不會自動轉型。
console.log(1 === '1'); //false
console.log(1 === 1); //true
console.log(1 !== '1'); //true
//特殊案例
console.log(NaN === NaN); //false
console.log(+0 === -0); //true
寬鬆相等:會自動轉型。
特殊例子
console.log(17 == '0X11'); //true
//16進位制 16+1
布林與字串
兩者皆會被轉為數值
console.log(true == 'true'); //false
// 1 == NaN
//字串無法被轉為數值
布林與數值
console.log(Number(true));
console.log(true == '1');
//true
特殊例子 2
console.log('1' == !0); //true
'1'會自動轉型為數值 得到 1
0 為 false, !0 為 true , 轉成數值 true = 1
因此得到比對結果為 true
特殊例子 3null
undefined
console.log(null == 0);
// false // null: 空
console.log(null == undefined);
//true // 都是 falsy
物件與非物件
使用包裹物件轉換
console.log(Number([10])); //10
console.log(10 == [10]); //true
console.log(String(['A'])); //A
console.log('A' == ['A']); //true
console.log( String({A: 'A'}) ); //[object object]
物件與物件
console.log({} == {}); //false
物件具有傳參考性質
每個物件都是獨立的
就算物件內容相同,也不相等
var a = [];
var b = a;
console.log(a == b); //true
console.log(a === b); //true
//物件有傳參考性質,b 參考的是 a 的內容,故相等