JavaScript 中 ==、=== 與 Object.is() 的區別
== 鬆散比較(loose equality)
在比較兩個值之前,會先強制轉換型別與值
-
console.log(1 == "1");
// true -
console.log(0 == false);
// true -
console.log(undefined == null);
// true
=== 嚴格比較(strict equality)
不會強制轉換型別與值,但有兩個例外情況:
-
console.log(+0 === -0);
// true -
console.log(NaN === NaN);
// false
Object.is() 同值比較(same-value equality)
顧名思義是在比較兩個值是不是相等(雖然是 Object 開頭,但比較的可以是任意的兩個值)。上面提到的兩種在 === 時遇到的問題,可以透過 Object.is 有效分辨:
-
console.log(Object.is(+0, -0));
// false -
console.log(Object.is(NaN, NaN));
// true