在 ES9 中,新增了 Object.is()
方法,这个方法主要用于判断两个值是否相等,相对于传统的 ===
运算符来说,Object.is()
方法对于 NaN、0 和 -0 的判断会有不同,下面我们来详细深入地了解一下。
传统的 === 运算符
先来看看传统的 ===
运算符判断相等的规则:
- 如果两个值类型不同,直接返回 false;
- 如果两个值都是数字,并且值相同,返回 true;
- 如果两个值都是字符串,并且字符长度相同,并且字符顺序和内容都相同,返回 true;
- 如果两个值都是布尔值,并且相等,返回 true;
- 如果两个值都指向同一个对象或者函数,返回 true;
- 如果两个值都是 null 或者 undefined,返回 true;
- 如果两个值都是 NaN,返回 false;
- 如果两个值都是 +0 或者 -0,返回 true;
- 其他情况都返回 false。
可以看到,对于 NaN、+0 和 -0 的判断规则与我们的直觉不太相符。
新增的 Object.is() 方法
在 ES9 中,新增了 Object.is()
方法来判断两个值是否相等,它与 ===
运算符的不同点在于:
- 对于 NaN,两个 NaN 相等;
- 对于 +0 和 -0,它们不相等。
语法格式如下:
Object.is(value1, value2)
value1
和 value2
表示要比较的两个值,如果相等,则返回 true,否则返回 false。
下面是一些示例代码:
Object.is(NaN, NaN) // true Object.is(0, -0) // false Object.is(undefined, null) // false Object.is([], []) // false Object.is({}, {}) // false Object.is('foo', 'foo') // true Object.is(true, true) // true Object.is(42, 42) // true
总结
ES9 中新增的 Object.is()
方法可以更加准确地判断两个值是否相等,尤其是对于 NaN、0 和 -0 的判断可以更加符合我们的直觉,使用时需要注意判断的两个值是否符合我们的需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ef0565f6b2d6eab39050c2