Object.is vs ===
2022-08-30 02:39:41
我偶然发现了一个使用这种比较的代码示例:
var someVar = 0;
Object.is(false, someVar); //Returns false
我知道这将是这就是为什么我们有.false == 0
true
===
与 有何不同?Object.is
===
我偶然发现了一个使用这种比较的代码示例:
var someVar = 0;
Object.is(false, someVar); //Returns false
我知道这将是这就是为什么我们有.false == 0
true
===
与 有何不同?Object.is
===
===
在 JavaScript 中称为严格比较运算符。 和严格比较运算符的行为完全相同,但 和 除外。Object.is
NaN
+0/-0
来自 MDN:
Object.is()
根据运算符,方法与相等不同。运算符(以及运算符)将数字值 -0 和 +0 视为相等,并将 值视为不等于 。===
===
==
Number.NaN
NaN
下面的代码突出显示了 和 之间的区别。===
Object.is()
console.log(+0 === -0); //true
console.log(Object.is(+0, -0)); //false
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); //true
console.log(Number.NaN === Number.NaN); // false
console.log(Object.is(Number.NaN, Number.NaN)); // true
console.log(NaN === Number.NaN); // false
console.log(Object.is(NaN, Number.NaN)); // true
您可以在此处找到更多示例。
注意:是 ECMAScript 6 提案的一部分,尚未得到广泛支持(例如,任何版本的 Internet Explorer 或许多旧版本的其他浏览器都不支持它)。但是,您可以为非ES6浏览器使用polyfill,这可以在上面给出的链接中找到。Object.is
Object.is
使用规范的相同值算法,而使用严格相等算法。关于严格相等算法的注释指出了差异:===
此算法不同于同值算法...在处理有符号零和NaNs时。
请注意:
NaN === NaN
是假的,但又是真的Object.is(NaN, NaN)
+0 === -0
是真的,但又是假的Object.is(+0, -0)
-0 === +0
是真的,但又是假的Object.is(-0, +0)
JavaScript至少有四种“平等”:
==
"" == 0
true
"true" == true
false
===
NaN
Object.is
SameValue
+0
-0
Map
Array.prototype.includes
还有对象等效性,它不是由语言或运行时本身提供的,但通常表示为:对象具有相同的原型,相同的属性,并且它们的属性值是相同的(通过“相同”的一些合理定义)。
同值算法:
- 如果 Type(x) 与 Type(y) 不同,则返回 false。
- 如果 Type(x) 是 Number,则
- 如果 x 是 NaN,y 是 NaN,则返回 true。
- 如果 x 为 +0 且 y 为 -0,则返回 false。
- 如果 x 为 -0 且 y 为 +0,则返回 false。
- 如果 x 与 y 是相同的数字值,则返回 true。
- 返回 false。
- 返回 SameValueNonNumber(x, y)。
...其中 SameValueNonNumber 是:
- 断言:Type(x) 不是 Number。
- 断言:Type(x) 与 Type(y) 相同。
- 如果 Type(x) 未定义,则返回 true。
- 如果 Type(x) 为 Null,则返回 true。
- 如果 Type(x) 是 String,则
- 如果 x 和 y 是完全相同的代码单位序列(长度相同,相应索引处的代码单位相同),则返回 true;否则,返回 false。
- 如果 Type(x) 是布尔值,则
- 如果 x 和 y 都为真或均为假,则返回 true;否则,返回 false。
- 如果 Type(x) 是 Symbol,则
- 如果 x 和 y 都是相同的符号值,则返回 true;否则,返回 false。
- 如果 x 和 y 是相同的对象值,则返回 true。否则,返回 false。
- 如果 Type(x) 与 Type(y) 不同,则返回 false。
- 如果 Type(x) 是 Number,则
- 如果 x 是 NaN,则返回 false。
- 如果 y 是 NaN,则返回 false。
- 如果 x 与 y 是相同的数字值,则返回 true。
- 如果 x 为 +0 且 y 为 -0,则返回 true。
- 如果 x 为 -0 且 y 为 +0,则返回 true。
- 返回 false。
- 返回 SameValueNonNumber(x, y)。