Pourquoi Math.min fonctionne-t-il avec un tableau à un élément


17

Selon MDN Math.min n'accepte que des nombres, et si l'un des arguments n'est pas un nombre, il reviendra NaN. Il est vrai que si l' on passe un tableau avec plusieurs chiffres que nous obtenons NaN, comme ceci: Math.min([1,2]), mais si nous utilisons un tableau avec un seul numéro, Math.minrenverra le nombre dans le tableau, comme dans cet exemple: Math.min([5]). Quelqu'un at-il une idée pourquoi nous voyons ce comportement sans papiers?


Réponses:


47

Selon MDN Math.min n'accepte que des nombres, et si l'un des arguments n'est pas un nombre, il reviendra NaN.

Ce n'est pas ce qu'il dit ( gras souligné):

Si au moins un des arguments ne peut pas être converti en nombre, le résultat est NaN.

Conversion de type:

  • Math.minutilise ToNumberpour convertir ses arguments.
  • ToNumberutilise ToPrimitivepour convertir Objects (et Arrays sont Objects).
  • ToPrimitive les usages toString
  • [5].toString()is '5', qui est renvoyé vers ToPrimitive, qui le renvoie ToNumber, qui le analyse 5et le renvoie Math.min, pour lequel il s'agit d'un argument valide, car il ne l'est pas NaN.
  • [1, 2].toString(), OTOH, is '1, 2', qui est retourné à ToPrimitive, qui le renvoie à ToNumber, qui l'analyse NaN, car il ne s'agit pas d'une représentation numérique valide. ToNumberpasse ensuite NaNà Math.min, qui reviendra ensuite NaN, car (comme le dit MDN) "l'un de ses arguments ne peut pas être converti en nombre" ou (comme le spécifie le spécificateur) "Si une valeur est NaN, le résultat est NaN.".

25
La spécification ECMAScript est en fait étonnamment lisible, je viens de le découvrir.
Jörg W Mittag

3
Oui. Les Number([1,2]);résultats NaN mais les Number([1])résultats 1.
Bhojendra Rauniyar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.