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
. UtilisezisNaN
à la place.
Y a-t-il une référence qui répond à la question? Ce serait bienvenu.
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.
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?
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-