Perché Math.min funziona con un array di un elemento

17

Secondo MDN Math.min accetta solo numeri e se uno degli argomenti non è un numero, restituirà NaN . È vero che se passiamo un array con più numeri otteniamo NaN , come questo: Math.min([1,2]) , ma se usiamo un array con un solo numero, Math.min restituirà il numero nell'array, come in questo esempio: Math.min([5]) . Qualcuno ha un'idea del perché vediamo questo comportamento non documentato?

    
posta someone235 05.11.2015 - 12:15
fonte

1 risposta

47

According to MDN Math.min accepts only numbers, and if one of the arguments is not a number, it'll return NaN.

Questo non è quello che dice ( bold enfasi mia):

If at least one of arguments cannot be converted to a number, the result is NaN.

Conversione tipo:

  • Math.min utilizza ToNumber per convertire i suoi argomenti.
  • ToNumber utilizza ToPrimitive per convertire Object s (e Array s sono Object s).
  • ToPrimitive utilizza toString
  • [5].toString() è '5' , che viene restituito a ToPrimitive , che lo restituisce a ToNumber , che lo analizza a 5 e lo restituisce a Math.min , per il quale è un argomento valido, perché non è NaN .
  • [1, 2].toString() , OTOH, è '1, 2' , che viene restituito a ToPrimitive , che lo restituisce a ToNumber , che lo analizza a NaN , perché non è una rappresentazione numerica valida. ToNumber quindi passa NaN a Math.min , che restituirà quindi NaN , perché (come afferma MDN) "uno dei suoi argomenti non può essere convertito in un numero" o (come indicato dalla specifica) "Se qualsiasi valore è NaN, il risultato è NaN. ".
risposta data 05.11.2015 - 13:03
fonte

Leggi altre domande sui tag