Is there any value for what x === x
returns false
without NaN?
For example:
> 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
I see that the only value where x === x
returns false
is when isNaN(x) === true
.
Is there another value of x
for what x === x
returns false
? An official reference would be welcome!
The spec lists the exact rules for strict equality.
There are no other such cases, unless you count
+0
and-0
.The SameValue algorithm (used for validating changes to read-only defined properties) has no such exceptions.
The strict comparison between two equal non-
NaN
values will always be true (SLaks's answer correctly quotes the spec). However, it's possible for the expressionx
to change its value during the evaluation of the the equality. This can happen with property access when using accessor property descriptors (i.e., property getters):If you do this for the global object
window
(orglobal
in Node), then you can see thex === x
comparison fail for a global-scope variable: