为何此简单Math.max()示例返回NaN?按MDN文档我能否传入数组?
为什么直接给Math.max()传数组会返回NaN?
你碰到的这个问题其实是个常见误区——Math.max()本身并不支持直接传入数组作为参数,它的设计是接收零个或多个单独的数值参数。当你直接把数组传进去时,它无法识别数组里的数值,只会把整个数组当作非数值类型的参数处理,结果自然就是NaN了。
下面给你几种正确获取数组中最大值的方法:
ES6+扩展运算符(最简洁):
用...把数组展开成单独的参数传递给Math.max():var a = [875, 551]; console.log( Math.max(...a) ); // 输出 875ES6之前的apply方法:
利用Function.prototype.apply()把数组转换成参数列表:var a = [875, 551]; console.log( Math.max.apply(null, a) ); // 输出 875处理空数组的情况:
如果数组有可能是空的,要注意Math.max()在没有参数时会返回-Infinity,可以加个默认值处理:var a = []; console.log( Math.max(...a) || 0 ); // 输出 0,可根据需求修改默认值
顺便提一句,Math.max的文档里明确说明了它的参数形式,也给出了这些处理数组的方案,你可以再仔细看看文档里的示例部分。
内容的提问来源于stack exchange,提问作者somebodysomewhere
相关产品推荐
相关产品推荐

