web-dev-qa-db-fra.com

Pourquoi NaN === NaN est-il faux?

Pourquoi NaN === NaN retourner false en Javascript?

> undefined === undefined
true
> NaN === NaN
false
> a = NaN
NaN
> a === a
false

Sur page de documentation je vois ceci:

Test contre NaN

Opérateur d'égalité (== et ===) ne peut pas être utilisé pour tester une valeur par rapport à NaN. Utilisez isNaN à la place.

Y a-t-il une référence qui répond à la question? Ce serait bienvenu.

52
Ionică Bizău

Réponse stricte : Parce que la spécification JS le dit :

  • Si Type (x) est Nombre, alors
    • Si x est NaN, retournez false.
    • Si y est NaN, retournez false.

Réponse utile : La spécification IEEE 754 pour les nombres à virgule flottante (qui est utilisée par toutes les langues pour les nombres à virgule flottante) dit que les NaN ne sont jamais égaux.

44
SLaks

Ce comportement est spécifié par le norme IEEE-754 (que la spécification JavaScript suit à cet égard).

Pour une discussion approfondie, voir Quelle est la justification de toutes les comparaisons renvoyant false pour les valeurs NaN IEEE754?

12
NPE

Bien que chaque côté de NaN===NaN contient la même valeur et leur type est Number mais ils ne sont pas identiques. Selon l'ECMA-262, chaque côté de == ou === contient NaN, il en résultera une fausse valeur.

vous pouvez trouver un détail des règles ici-

http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.

1
Mehedi Hasan