18

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

例如:

> 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是 when isNaN(x) === true

返回的还有另一个值x吗?欢迎官方参考!x === xfalse

4

2 回答 2

20

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

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

foo.bar === foo.bar; // false

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

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

bar === bar; // false
于 2013-11-13T13:53:48.680 回答
11

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

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

于 2013-11-13T13:51:27.857 回答