JavaScript中 == 與 === 的區別
阿新 • • 發佈:2021-10-09
JavaScript中提供了兩種方式用於比較值是否相等,其中:
== : 用於寬鬆比較。
=== : 用於嚴格比較。
下面用幾個例子來看看二者的異同之處,你也可以在瀏覽器環境下,點選 Ctrl+Shift+J 來開啟控制檯測試結果。
var foo = 42;
var js = 42;
var bar = "42";
console.log(foo == bar); //true
console.log(foo === bar); //false
console.log(foo == js); //true
console.log(foo === js); //true
可見 == 並不會對型別有嚴格的審查,而 === 則檢查出了 String 和 Number 型別的不同。
同樣,!= 和 !== 也具有著類似的特性:
var foo = 42; var bar = "42"; console.log(foo != bar); //false console.log(foo !== bar); //true
在日常開發中,我們應該儘可能使用 === 來比較值,以避免不必要的bug。 那麼,=== 是否是萬能的呢?來看下面的測試案例:
console.log(+0 == -0); //true
console.log(NaN === NaN); //false
+0、-0、NaN這樣的邊界值在使用 === 比較時,出現了我們不希望看到的結果。
為此,在ES6中,提出了 Object.is() 方法來解決這一問題:
console.log(Object.is(2, 2)); // true console.log(Object.is(2, "2")); // false console.log(Object.is(+0, -0)); // false console.log(Object.is(NaN, NaN));// true