Ответ 1
Так как это определено как в Алгоритм сравнения абстрактного равенства, так и Строгий алгоритм сравнения равенства.
Если любой из операндов в ==
или ===
равен NaN
, он возвращает false
.
Абстрактный
- Если Type (x) - Number, то
- Если x является NaN, верните false.
- Если y является NaN, верните false.
- Если x - это то же значение числа, что и y, верните true.
- Если x равно +0 и y равно -0, верните true.
- Если x равно -0 и y равно +0, верните true.
- Возвращает false.
EDIT: Мотивация для неравного сравнения, отмеченная @CMS, соответствует стандарту IEEE 754.
Из ссылки в Википедии, приведенной в комментарии ниже:
... Однако обычные операции сравнения обрабатывают NaN как неупорядоченные и сравнивают -0 и +0 как равные. Предикат totalOrder будет упорядочивать эти случаи, а также различает различные представления NaN и между тем же десятичным числом с плавающей запятой, закодированным по-разному.