JavaScript中 == 与 === 的区别
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