Object.is() 快来打我* 2022-05-15 10:49 163阅读 0赞 `Object.is()`方法判断两个值是否是[相同的值][Link 1]。 语法:`Object.is()`方法判断两个值是否是[相同的值][Link 1]。 `Object.is()` 判断两个值是否[相同][Link 1]。如果下列任何一项成立,则两个值相同: * 两个值都是 [`undefined`][undefined] * 两个值都是 [`null`][null] * 两个值都是 `true` 或者都是 `false` * 两个值是由相同个数的字符按照相同的顺序组成的字符串 * 两个值指向同一个对象 * 两个值都是数字并且 * 都是正零 `+0` * 都是负零 `-0` * 都是 [`NaN`][NaN] * 都是除零和 [`NaN`][NaN] 外的其它同一个数字 这种相等性判断逻辑和传统的 [`==`][Link 2] 运算符所用的不同,[`==`][Link 2] 运算符会对它两边的操作数做隐式类型转换(如果它们类型不同),然后才进行相等性比较,(所以才会有类似 `"" == false` 为 `true` 的现象),但 `Object.is` 不会做这种类型转换。 这与[`===`][Link 3]运算符也不一样。[`===`][Link 3]运算符(和[`==`][Link 2]运算符)将数字值`-0`和`+0`视为相等,并认为[`Number.NaN`][Number.NaN]不等于[`NaN`][NaN]。 Object.is('foo', 'foo'); // true Object.is(window, window); // true Object.is('foo', 'bar'); // false Object.is([], []); // false var test = { a: 1 }; Object.is(test, test); // true Object.is(null, null); // true // 特例 Object.is(0, -0); // false Object.is(-0, -0); // true Object.is(NaN, 0/0); // true ![70][] ## Polyfill ## if (!Object.is) { Object.is = function(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } }; } 转自MDN [Link 1]: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness [undefined]: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/undefined [null]: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/null [NaN]: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/NaN [Link 2]: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Equality [Link 3]: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity [Number.NaN]: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN [70]: /images/20220515/0fa083b53ea74a8e999d948b29b8c6bb.png
还没有评论,来说两句吧...