Согласно MDN Math.min принимает только числа, и если один из аргументов не является числом, он вернется NaN
. Это правда , что если мы передаем массив с несколькими номерами мы получаем NaN
, например: Math.min([1,2])
, но если мы используем массив только с одним номером, Math.min
возвращает число в массиве, как в этом примере: Math.min([5])
. У кого-нибудь есть идея, почему мы видим это недокументированное поведение?
javascript
math
someone235
источник
источник
Ответы:
Это не то, что он говорит ( жирный акцент мой):
Тип преобразования:
Math.min
используетToNumber
для преобразования своих аргументов.ToNumber
используетToPrimitive
для преобразованияObject
s (иArray
s являютсяObject
s).ToPrimitive
использованияtoString
[5].toString()
is'5'
, который возвращается вToPrimitive
, который возвращает егоToNumber
, который анализирует5
и возвращает егоMath.min
, для которого он является допустимым аргументом, потому что это не такNaN
.[1, 2].toString()
, OTOH, есть'1, 2'
, который возвращаетсяToPrimitive
, который возвращает егоToNumber
, который анализирует егоNaN
, потому что он не является допустимым числовым представлением.ToNumber
затем переходитNaN
кMath.min
, который затем возвращаетNaN
, потому что (как утверждает MDN) «один из его аргументов не может быть преобразован в число» или (как указано в спецификации) «Если какое-либо значение равно NaN, результатом является NaN».источник
Number([1,2]);
Результаты NaN , ноNumber([1])
результаты 1.