Skip to content Skip to sidebar Skip to footer

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 expression x 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() {
        return Math.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() {
        return Math.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?"