Ответ 1
Строгое сравнение двух равных значений не NaN
всегда будет истинным (ответ SLaks правильно цитирует спецификация). Тем не менее, выражение x
позволяет изменить его значение при оценке равенства. Это может произойти при доступе к свойствам при использовании дескрипторов свойств доступа (т.е. Свойств getters):
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