likes
comments
collection
share

Object.is() 、比较操作符 ===、== 的区别

作者站长头像
站长
· 阅读数 14

在JavaScript中,Object.is()和比较操作符===、==都可以用来比较两个值是否相等。然而,它们之间存在一些微妙的区别。

Object.is()

Object.is()是ECMAScript 6中的一个新方法,它用于比较两个值是否相等。它的语法如下:

Object.is(value1, value2)

当value1和value2具有相同的值时,Object.is()返回true。具体来说:

  • 对于基本数据类型,如果它们的值相等,则返回true。例如,Object.is(5, 5)返回true。
  • 对于对象,仅当它们引用同一个对象时,才返回true。例如,Object.is({}, {})返回false,而Object.is(window, window)返回true。

MDN中介绍:

Object.is() 方法判断两个值是否为同一个值,如果满足以下任意条件则两个值相等:

  • 都是 undefined

  • 都是 null

  • 都是 true 或都是 false

  • 都是相同长度、相同字符、按相同顺序排列的字符串

  • 都是相同对象(意味着都是同一个对象的值引用)

  • 都是数字且

    • 都是 +0
    • 都是 0
    • 都是 NaN
    • 都是同一个值,非零且都不是 NaN

比较操作符 ===

比较操作符===也用于比较两个值是否相等。它的语法如下:

x === y

严格相等运算符(===)会检查它的两个操作数是否相等,并且返回一个布尔值结果。与相等运算符(==)不同,严格相等运算符总是认为不同类型的操作数是不同的。

使用举例:

"3" === 3; // false
true === 1; // false
null === undefined; // false

比较操作符 ==

比较操作符==也用于比较两个值是否相等。它的语法如下:

x == y

相等运算符(==)检查其两个操作数是否相等,返回一个布尔值结果。与严格相等运算符(===)不同,它会比较不同类型的操作数,并尝试强制类型转换。

使用举例:

console.log(5 == "5"); // true
console.log(5 == "hello"); // false
console.log(true == 1); // true
console.log(false == 0); // true
console.log(null == undefined); // true
console.log({} == {}); // false
console.log([] == []); // false
console.log("hello" == true); // false

由于==会进行类型转换,因此可能会出现一些奇怪的行为。例如,"" == false会被判断为 true,因为空字符串会被转换为0,而false会被转换为0,因此它们在使用==进行比较时会被判断为相等。

区别

Object.is()===之间的主要区别在于它们如何处理NaN-0

  • 对于NaNObject.is(NaN, NaN)返回true,而NaN === NaN返回false
  • 对于-0+0Object.is(-0, 0)返回false,而-0 === 0返回true

Object.is()==之间的主要区别在于:

  • == 运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换(这种行为将 "" == false 判断为 true
  • Object.is 不会强制转换两边的值。

因此,在比较两个值时,需要根据具体情况来选择使用 ===== 还是Object.is()

参考文献