📅  最后修改于: 2023-12-03 15:31:40.360000             🧑  作者: Mango
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() 方法。