Почему NaN === NaN ложный?
Почему NaN === NaN
возвращает false
в Javascript?
> undefined === undefined
true
> NaN === NaN
false
> a = NaN
NaN
> a === a
false
На странице документации я вижу следующее:
Тестирование против NaN
Оператор равенства (==
и ===
) не может использоваться для проверки значения против NaN
. Вместо этого используйте isNaN
.
Есть ли какая-либо ссылка, которая отвечает на вопрос? Было бы желательно.
Ответы
Ответ 1
Строгий ответ: поскольку спецификация JS говорит так:
- Если Type (x) - Number, то
- Если x является NaN, верните false.
- Если y является NaN, верните false.
Полезный ответ. Спецификация IEEE 754 для чисел с плавающей запятой (которая используется всеми языками для плавающей запятой) говорит, что NaN никогда не равны.
Ответ 2
Это поведение задается стандартом IEEE-754 (который в этом отношении соответствует спецификации JavaScript).
Для расширенного обсуждения см. В чем смысл всех сравнений, возвращающих false для значений NaN IEEE754?
Ответ 3
Хотя обе стороны NaN===NaN
содержат одно и то же значение, а их тип Number
, но они не совпадают. Согласно ECMA-262, каждая из сторон ==
или ===
содержит NaN
, тогда это приведет к ложному значению.
вы можете найти здесь подробные правила -
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3