x === x在没有NaN的情况下返回false是否有任何值?

Ion*_*zău 18 javascript

没有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
Run Code Online (Sandbox Code Playgroud)

我看到x === x返回的唯一值false是什么时候isNaN(x) === true.

x什么x === x回报的另一个价值false?欢迎官方参考!

aps*_*ers 20

两个相等的非NaN 之间的严格比较将始终为真(SLaks的答案正确引用了规范).但是,表达式 可能会在评估相等性时x更改其.使用访问器属性描述符(即属性getter)时,属性访问可能会发生这种情况:

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

foo.bar === foo.bar; // false
Run Code Online (Sandbox Code Playgroud)

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

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

bar === bar; // false
Run Code Online (Sandbox Code Playgroud)

  • 这也适用于全局`window`对象:http://jsfiddle.net/aZm2z/2/ (5认同)

SLa*_*aks 11

规范列出了严格相等的确切规则.
没有其他这样的情况,除非你数+0-0.

所述SameValue算法(用于验证变为只读定义的属性)没有这样的异常.

  • 仍然,`+ 0 === + 0`和`-0 === -0`,所以即使那些都出来了. (5认同)