Javascript 使用Math.max调用Array.prototype.map将返回NaN的数组
为什么Javascript 使用Math.max调用Array.prototype.map将返回NaN的数组,javascript,arrays,Javascript,Arrays,为什么[1,2,3].map((x)=>Math.max(x))返回[1,2,3] 然而[1,2,3].map(Math.max)返回[NaN,NaN,NaN] 我会想,既然[1,2,3].map(Number)返回[1,2,3],以同样的方式使用Math.max也是如此 特别是因为Math.max(3)=Number(3)这是因为调用回调时使用了三个参数: 当前数组元素 当前元素的索引 调用了数组map 所以[1,2,3].map(Math.max)并不等同于[1,2,3].map((x)=>
[1,2,3].map((x)=>Math.max(x))
返回[1,2,3]
然而[1,2,3].map(Math.max)
返回[NaN,NaN,NaN]
我会想,既然[1,2,3].map(Number)
返回[1,2,3]
,以同样的方式使用Math.max也是如此
特别是因为Math.max(3)=Number(3)
这是因为调用回调时使用了三个参数:
当前数组元素
当前元素的索引
调用了数组map
所以[1,2,3].map(Math.max)
并不等同于[1,2,3].map((x)=>Math.max(x))
,而是[1,2,3].map((x,i,arr)=>Math.max(x,i,arr))
而Math.max(1,0,[1,2,3])
是NaN
,因为[1,2,3]
数组在字符串化时变成“1,2,3”
,在转换为数字时变成NaN
。您可以使用:Math.max(…[1,2,3])
这是因为数组作为回调参数Math.max
需要数字,而不是用点分隔的数字字符串。这将导致NaN
。编辑:点是逗号…这让我心碎。你可以,但1)它也不会返回[1,2,3]
,2)与问题无关。它与Math.max有关,他需要知道!