Według MDN Math.min akceptuje tylko liczby, a jeśli jeden z argumentów nie jest liczbą, zostanie zwrócony NaN
. To prawda, że jeśli mijamy tablicę z wielu numerów otrzymujemy NaN
coś takiego: Math.min([1,2])
, ale jeśli używamy tablicę z jednym numerem, Math.min
zwróci liczbę w tablicy, jak w poniższym przykładzie: Math.min([5])
. Czy ktoś ma pojęcie, dlaczego widzimy to nieudokumentowane zachowanie?
javascript
math
someone235
źródło
źródło
Odpowiedzi:
To nie tak mówi ( moje śmiałe podkreślenie):
Konwersja typu:
Math.min
służyToNumber
do konwersji jego argumentów.ToNumber
używaToPrimitive
do konwersjiObject
s (iArray
s sąObject
s).ToPrimitive
wykorzystujetoString
[5].toString()
jest'5'
, do którego zwracany jestToPrimitive
, który zwraca go, doToNumber
którego analizuje5
i zwraca goMath.min
, dla którego jest poprawnym argumentem, ponieważ tak nie jestNaN
.[1, 2].toString()
, OTOH, to'1, 2'
, do którego zwracany jestToPrimitive
, który zwraca go, doToNumber
którego analizujeNaN
, ponieważ nie jest to poprawna reprezentacja liczb.ToNumber
następnie przechodziNaN
doMath.min
, który następnie zwróciNaN
, ponieważ (jak stwierdza MDN) „jeden z argumentów nie może zostać przekonwertowany na liczbę” lub (jak podaje specyfikacja) „Jeśli jakakolwiek wartość to NaN, wynikiem jest NaN.”.źródło
Number([1,2]);
Wyniki NaN aleNumber([1])
wyniki 1.