没有 NaN 的 x === x 返回 false 是否有任何值

Is there any value for what x === x returns false without NaN?

本文关键字:是否 false 任何值 返回 没有 NaN      更新时间:2023-09-26

没有 NaN false x === x返回的内容有什么价值吗?

例如:

> x = 1
1
> x === x
true
> x = {}
{}
> x === x
true
> x = new Date()
Wed Nov 13 2013 15:44:22 GMT+0200 (EET)
> x === x
true
> x = NaN
NaN
> x === x
false

我看到x === x返回false的唯一值是当isNaN(x) === true.

对于x === x返回false的内容,是否有另一个x值?欢迎官方参考!

两个相等的非NaN之间的严格比较将永远是正确的(SLaks的答案正确地引用了规范)。但是,表达式 x 可以在计算相等性期间更改其。使用访问器属性描述符(即属性获取器)时,属性访问可能会发生这种情况:

foo = {};
Object.defineProperty(foo, "bar", {
    get: function() {
        return Math.random();
    }
})
foo.bar === foo.bar; // false

如果对全局对象window(或 Node 中的global)执行此操作,则可以看到全局范围变量的x === x比较失败:

Object.defineProperty(window, "bar", {
    get: function() {
        return Math.random();
    }
})
bar === bar; // false

该规范列出了严格相等的确切规则。
没有其他此类情况,除非您算+0-0.

SameValue 算法(用于验证对只读定义的属性的更改)没有此类异常。