📜  JavaScript 中的 Object.is()(1)

📅  最后修改于: 2023-12-03 15:31:40.360000             🧑  作者: Mango

JavaScript 中的 Object.is()

JavaScript 中的 Object.is() 是一种用于比较两个值是否相等的方法。和传统的比较运算符(如 == 或 ===)相比,Object.is() 比较更严格,可以减少类型转换带来的问题。

语法

Object.is(value1, value2)

参数

value1:第一个要比较的值。

value2:第二个要比较的值。

返回值

如果 value1 和 value2 相等,则返回 true;否则返回 false。

示例
Object.is('foo', 'foo');     // true
Object.is(window, window);   // true
Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false

可以看到,Object.is() 可以正确处理字符串、数值、NaN、布尔值、null、undefined、对象和函数等数据类型的比较。除非两个值类型相同且值相同,否则 Object.is() 会认为它们是不相等的。

注意事项

与传统的比较运算符(== 或 ===)相比,Object.is() 处理 NaN 与 NaN 的比较结果为 true,而 0 和 -0 的比较结果为 false,这是因为在 IEEE 754 浮点数规范中规定了这种行为。

如果要兼容所有浏览器,可以采用 polyfill 的方式来实现 Object.is() 方法,以下是代码样例:

if (!Object.is) {
  Object.is = function(x, y) {
    if (x === y) {
      // 处理 ±0 和 NaN 的情况
      return x !== 0 || 1 / x === 1 / y;
    } else {
      // 处理 NaN 的情况
      return x !== x && y !== y;
    }
  };
}
结论

Object.is() 是一种比传统的比较运算符更严格的比较方法,它可以减少因类型转换带来的问题,可以处理字符串、数值、NaN、布尔值、null、undefined、对象和函数等数据类型的比较,但需要注意处理 ±0 和 NaN 的情况。如果要兼容所有浏览器,可以采用 polyfill 的方式来实现 Object.is() 方法。