关键词

实例分析JS中的相等性判断===、 ==和Object.is()

当我们在JavaScript中需要判断两个值是否相等时,经常会用到的操作符有三个:全等比较符===,等于比较符==Object.is()方法,但它们之间存在某些细微而重要的区别。接下来,我们将逐一介绍它们的用法及特点。

全等比较符===

全等比较符比较两个值是否严格相等,它要求比较对象的类型和值都相等才会返回true,否则返回false。下面是一个简单的例子,展示了全等比较符的用法:

const a = 123;
const b = "123";
console.log(a === b);   // false
console.log(a === Number(b));   // true

在上面的例子中,尽管a和b的值看起来相同,但它们的类型不同。当我们使用全等比较符进行比较时,它会检查两个值的类型和值是否完全相等,因此返回了false。

等于比较符==

等于比较符用于判断两个值是否相等,但它不要求值的类型必须一致。如果两个值的类型不同时,它会进行类型转换再进行比较,因此可能会导致一些令人意外的结果。下面是一个例子,演示了等于比较符的用法:

const a = 123;
const b = "123";
console.log(a == b);   // true
console.log(true == 1);   // true
console.log(null == undefined);   // true

在上面的例子中,等于比较符会把字符串"123"转换成数字123,然后才进行比较,因此返回了true。类似地,布尔值true会被转换成数字1,null和undefined会被认为是相等的。

然而,由于等于比较符会自动进行类型转换,因此可能会导致一些奇怪的结果,例如:

console.log("0" == false);   // true
console.log("" == false);   // true
console.log(" " == false);   // true

在上面的例子中,等于比较符把字符串"0"转换成了数字0,把空字符串""和空格" "都判定为false,因此返回了true。如果没有了解这种类型转换的规则,可能会导致不必要的错误。

Object.is()方法

Object.is()方法是ES6添加的新特性,它可以用于比较两个值是否相等,与===比较符的行为类似。不同之处在于它对某些特殊的值进行了特殊处理。下面是一个例子:

console.log(Object.is(123, "123"));  // false
console.log(Object.is(NaN, NaN));  // true
console.log(Object.is(+0, -0));  // false

在上面的例子中,我们可以看到,Object.is()方法会把NaN自身和其他的NaN判断为相等;同时它会把+0和-0判断为不相等,这和全等比较符的行为是不一样的。

实例分析

看完以上的介绍,我们可以来看两个实例分析,分别使用全等比较符和Object.is()方法:

示例一:

console.log(3 === 3);    // true
console.log(3 === "3");  // false
console.log(Object.is(3, 3));    // true
console.log(Object.is(3, "3"));  // false

在上面的例子中,全等比较符和Object.is()方法都能准确地判断出两个数字是否相等。

示例二:

console.log([] === []);    // false
console.log(Object.is([], []));    // false
console.log(Object.is(NaN, NaN));    // true

在上面的例子中,我们可以看到,尽管两个空数组在一个环境中都是空的,但它们是不同的对象,因此全等比较符和Object.is()方法都返回了false。而在第三个例子中,由于NaN是不等于任何值(包括它本身),因此Object.is()方法会返回true。

总体来说,全等比较符和Object.is()方法都有各自的用处。全等比较符用于判断两个值是否严格相等,它不自动进行类型转换,能够确切地判断类型和值是否相等;而Object.is()方法则更加契合人类感知相等的概念,同时对于一些特殊的值也有了更加准确的处理。在应用时,我们应该根据具体的场景选择合适的判断方法。

本文链接:http://task.lmcjl.com/news/11022.html

展开阅读全文