215 votes

Pourquoi ne typeof NaN retour "numéro"?

Juste de la curiosité.

Il ne me semble pas très logique qu' typeof NaN est nombre. Tout comme NaN === NaN ou NaN == NaN retourner false, par la manière. Est-ce une des particularités de javascript, ou y aurait-il une raison à cela?

Edit: merci pour vos réponses. Ce n'est pas une chose facile à obtenir ceux de la tête autour de. La lecture des réponses et le wiki j'ai compris de plus, mais encore, une phrase comme

Une comparaison avec un NaN retourne toujours une suite non ordonnée même si l'on compare avec lui-même. Les prédicats de comparaison sont soit de signalisation ou de la non-signalisation, signalisation versions signal invalide exception pour de telles comparaisons. L'égalité et de l'inégalité des prédicats sont non-signalisation donc x = x renvoyer false peut être utilisé pour tester si x est un endroit calme NaN.

continue juste ma tête qui tourne. Si quelqu'un peut traduire cela dans l'homme (par opposition à, disons, mathématicien) lisible de la langue, je serais reconnaissante.

130voto

paxdiablo Points 341644

Eh bien, NaN est encore un numérique type, malgré le fait qu'elle en fait ne représente Pas Un Nombre :-)

NaN signifie simplement la valeur spécifique ne peut pas être représenté dans les limites de la type numérique (même si cela pourrait être dit pour tous les nombres qui doivent être arrondies à la forme, mais NaN est un cas particulier).

Spécifique NaN n'est pas considérée comme l'égale d'une autre NaN parce qu'ils peuvent être des valeurs différentes. Toutefois, NaN est encore un type de numéro, tout comme 2718 ou 31415.


Quant à la mise à jour de votre question pour expliquer en termes simples:

Une comparaison avec un NaN retourne toujours une suite non ordonnée même si l'on compare avec lui-même. Les prédicats de comparaison sont soit de signalisation ou non-de la signalisation, de la signalisation versions signal invalide exception pour de telles comparaisons. L'égalité et de l'inégalité des prédicats sont non-signalisation donc x = x renvoyer false peut être utilisé pour tester si x est un endroit calme NaN.

Tout cela pour dire (décomposé en plusieurs parties):

Une comparaison avec un NaN retourne toujours une suite non ordonnée même si l'on compare avec lui-même.

Fondamentalement, un NaN n'est pas égal à tout autre nombre, y compris une autre NaN, et même y compris lui-même.

Les prédicats de comparaison sont soit de signalisation ou non-de la signalisation, de la signalisation versions signal invalide exception pour de telles comparaisons.

Tenter de faire la comparaison (inférieur, supérieur, et ainsi de suite) opérations entre un NaN , et un autre numéro peut génèrent une exception levée (de signalisation) ou tout simplement obtenir un autre NaN que le résultat (non-signalisation ou calme).

L'égalité et de l'inégalité des prédicats sont non-signalisation donc x = x renvoyer false peut être utilisé pour tester si x est un endroit calme NaN.

Tests pour l'égalité (l'égalité, non pas égal à) ne sont jamais de signalisation afin de les utiliser à ne pas provoquer une exception. Si vous avez régulièrement un certain nombre x, alors x == x sera toujours vrai. Si x est NaN, alors x == x sera toujours faux. C'est en vous donnant un moyen de détecter NaN facilement (tranquillement).

68voto

Charles Beattie Points 2637

Cela signifie Pas un Nombre. Ce n'est pas une particularité de javascript, mais commun informatique principe.

À partir de http://en.wikipedia.org/wiki/NaN:

Il existe trois types de fonctionnement de retour NaN:

Les opérations avec un NaN au moins un opérande

Croissance indéterminée

  • Les divisions 0/0, ∞/∞, ∞/−∞, −∞/∞, et −∞/−∞
  • Les multiplications 0×∞ et 0×−∞
  • La puissance de 1^∞
  • Les ajouts ∞ + (−∞), (−∞) + ∞ et l'équivalent de soustractions.

Opérations avec des résultats complexes:

  • La racine carrée d'un nombre négatif
  • Le logarithme d'un nombre négatif
  • La tangente d'un multiple impair de 90 degrés (ou π/2 radians)
  • La réciproque du sinus ou cosinus d'un nombre qui est inférieur à -1 ou de plus de +1.

Toutes ces valeurs ne peuvent pas être les mêmes. Un test simple pour un NaN est de tester value == value est faux.

6voto

Cine Points 1783

NaN != Nan parce qu'ils ne sont pas nécessaires, le MÊME nombre. Ainsi, il fait beaucoup de sens... Aussi pourquoi les flotteurs ont tous deux +0,00 et -0.00 qui ne sont pas les mêmes. L'arrondissement peut faire qu'ils ne sont pas réellement de zéro.

Comme pour typeof, qui dépend de la langue. Et la plupart des langues diront que NaN est un float, double ou numéro en fonction de la façon dont ils le classer... je ne connais pas les langues qui vont dire que c'est un type inconnu ou null.

5voto

Charles Ma Points 12330

NaN est valide valeur à virgule flottante (http://en.wikipedia.org/wiki/NaN)

et NaN === NaN est faux car ils ne sont pas nécessairement les mêmes non-nombre

3voto

user1494162 Points 50

Eh bien, même plus drôle est

a = NaN
a == a // false

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X