Math.min为什么要使用一个元素数组


17

根据MDN, Math.min仅接受数字,并且如果参数之一不是数字,则将返回NaN。的确,如果我们传递一个包含多个数字的数组,则会得到NaN如下所示:Math.min([1,2])但是,如果我们使用一个仅包含一个数字的数组,Math.min则会返回该数组中的数字,如本例所示:Math.min([5])。有谁知道为什么我们会看到这种未记录的行为?


Answers:


47

根据MDN Math.min,它仅接受数字,并且如果参数之一不是数字,则将返回NaN

那不是它所说的(我的粗体强调):

如果至少一个参数不能转换为数字,则结果为NaN

类型转换:

  • Math.min用于ToNumber转换其参数。
  • ToNumber用于ToPrimitive转换Objects(和Arrays为Objects)。
  • ToPrimitive 用途 toString
  • [5].toString()is '5',它被返回到ToPrimitive,然后将其返回到,然后将ToNumber其解析为,5然后返回给Math.min,因为它不是有效参数,因此它是有效参数NaN
  • [1, 2].toString(),OTOH,是'1, 2',将返回ToPrimitive,将其返回到,然后将ToNumber其解析为NaN,因为它不是有效的数字表示形式。ToNumber然后传递NaNMath.min,然后返回NaN,因为(如MDN所言)“其参数之一不能转换为数字”或(如规范所言)“如果值为NaN,则结果为NaN”。

25
我刚刚发现,ECMAScript规范实际上具有惊人的可读性。
约尔格W¯¯米塔格

3
是。该Number([1,2]);结果为NaN,但Number([1])结果1
Bhojendra Rauniyar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.