Is There Any Value For What X === X Returns False Without Nan?
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:4
Solution 1:
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):
foo = {};
Object.defineProperty(foo, "bar", {
get: function() {
returnMath.random();
}
})
foo.bar === foo.bar; // false
If you do this for the global object window
(or global
in Node), then you can see the x === x
comparison fail for a global-scope variable:
Object.defineProperty(window, "bar", {
get: function() {
returnMath.random();
}
})
bar === bar; // false
Solution 2:
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.
Post a Comment for "Is There Any Value For What X === X Returns False Without Nan?"