Laut MDN akzeptiert Math.min nur Zahlen, und wenn eines der Argumente keine Zahl ist, wird es zurückgegeben NaN
. Es ist wahr , dass , wenn wir ein Array mit mehreren Nummern passieren wir bekommen NaN
, wie folgt aus : Math.min([1,2])
, aber wenn wir ein Array mit nur einer Nummer verwenden, Math.min
die die Nummer in der Reihe, wie in diesem Beispiel zurück: Math.min([5])
. Hat jemand eine Idee, warum wir dieses undokumentierte Verhalten sehen?
javascript
math
Jemand235
quelle
quelle
Antworten:
Das ist nicht das, was es sagt ( Fettdruck von mir):
Typkonvertierung:
Math.min
verwendetToNumber
, um seine Argumente zu konvertieren.ToNumber
verwendetToPrimitive
, umObject
s zu konvertieren (undArray
s sindObject
s).ToPrimitive
VerwendettoString
[5].toString()
is'5'
, das zurückgegeben wirdToPrimitive
, das es zurückgibtToNumber
, das es analysiert5
und das es zurückgibtMath.min
, für das es ein gültiges Argument ist, weil es es nicht istNaN
.[1, 2].toString()
, OTOH, ist'1, 2'
, das zurückgegeben wirdToPrimitive
, das es zurückgibtToNumber
, das es analysiertNaN
, weil es keine gültige Zahlendarstellung ist.ToNumber
Übergibt dannNaN
anMath.min
, das dann zurückgibtNaN
, weil (wie MDN es angibt) "eines seiner Argumente nicht in eine Zahl konvertiert werden kann" oder (wie die Spezifikation es angibt) "Wenn ein Wert NaN ist, ist das Ergebnis NaN."quelle
Number([1,2]);
Ergebnisse NaN aberNumber([1])
Ergebnisse 1.