Javascript 为什么在ES2015中Math.max(…[])等于-无穷大?
Javascript 为什么在ES2015中Math.max(…[])等于-无穷大?,javascript,ecmascript-6,Javascript,Ecmascript 6,Math.max([])将是0 而[..[]]是[] 但是为什么在ES2015中Math.max(…[])等于-无穷大?因为Math.max(…[])不是Math.max(…[])。在第一种情况下,您真正调用的是Math.max(),即-Infinity。请参阅函数调用中的扩展运算符-如果您看到文档,您可以知道当没有传递参数时,Math.max返回无穷大的原因 如果没有给出任何参数,则结果为-∞. 因此,当您在函数调用中扩展空数组时,这就像是在没有参数的情况下调用函数。如果您查看Math.max
Math.max([])
将是0
而[..[]]
是[]
但是为什么在ES2015中Math.max(…[])
等于-无穷大?因为Math.max(…[])
不是Math.max(…[])
。在第一种情况下,您真正调用的是Math.max()
,即-Infinity
。请参阅函数调用中的扩展运算符-如果您看到文档,您可以知道当没有传递参数时,Math.max
返回无穷大的原因
如果没有给出任何参数,则结果为-∞.
因此,当您在函数调用中扩展空数组时,这就像是在没有参数的情况下调用函数。如果您查看Math.max(…[])
的babel输出,您将得到Math.max.apply(Math,[])
。如果您在ES5中记录它,您会发现出于某种原因,它给您提供了-无穷大
,因为它与不带参数调用它是一样的
实际上,Math.max()
给出了-无穷大
如果您需要提醒:fn.apply(yourThis[a,b,c])
与fn(a,b,c)
使用Math.max([])
时,首先将[]
转换为字符串,然后再转换为数字。它实际上并不被视为一个参数数组
使用Math.max(…[])
将数组视为通过扩展运算符的参数集合。由于数组为空,这与不带参数调用相同。
根据这个公式产生无穷大
如果没有给出参数,结果是-无穷大
以下示例显示了使用数组调用的区别:
console.log(+[])//0 [] -> '' -> 0
console.log(+[3])//3 [] -> '3' -> 3
console.log(+[3,4])//楠
console.log(…[3])//3.
console.log(…[3,4])//3.4(数组用作参数)
console.log(Math.max([])//0[]已转换为0
console.log(Math.max());//-无穷大:没有参数的默认值
console.log(Math.max(…[]);//-无穷
log(Math.max([3,4])//楠
log(Math.max(…[3,4])//4
FTR解决此问题的方法是在spread运算符中使用最小值。比如:
Math.max(MIN_VALUE, ...arr)
Math.max(0, ...[]) --> 0
Math.max(0, ...[1]) --> 1
Math.max(0, ...[23,1]) --> 23
不是说我需要知道答案,而是我也想知道。你根本没有提出任何论点-Infinity
是Math.max()
的起点,因此没有参数就是答案。from:如果没有参数,结果是-Infinity。
请注意Math.max([])
是0
,因为数字([])
0
。如果适用(即您希望默认值为“0”),尝试Math.max(0,…[])
但结果是负无穷大,而不是正。@Pointy-Hmm。。有趣的是,即使我调用Math.max()
,它也给了我-无穷大。我想文档中一定有打字错误。让我看看最近的文档。在您链接的文档中,它清楚地显示-∞代码>。正无穷大是当您不传递任何参数时从Math.min()
返回的值。@Pointy Uff。。对不起,伙计。。我只是糊涂了。我链接了一个与min相关的文档。更正并更新了答案。谢谢你的指点,虽然很尖锐;)