javascript中用apply求数组最大值是因为math.max不接受数组参数而只接受多个独立数值参数,apply能将数组展开为参数列表,如math.max.apply(null, [1,5,3])等价于math.max(1,5,3);现代推荐使用扩展运算符math.max(...arr),但超长数组需回退apply或循环。

JavaScript 中用 apply 求数组最大值,核心是把数组“展开”传给 Math.max,因为 Math.max 本身不接受数组,只接受多个独立参数。
为什么不能直接 Math.max(arr)?
Math.max 设计为接收若干个数值参数,比如 Math.max(1, 2, 3)。如果传入数组 Math.max([1,2,3]),它会把整个数组当作第一个参数,其余为 undefined,结果返回 NaN。
apply 的作用:把数组转成参数列表
apply 方法允许你指定函数的 this 值,并把一个数组(或类数组)作为参数列表传入。对 Math.max 来说,this 不重要(它是静态方法),所以通常传 null 或 Math:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
Math.max.apply(null, [1, 5, 3])等价于Math.max(1, 5, 3) - 返回
5
实际使用时要注意的细节
空数组会出错:Math.max.apply(null, []) 返回 -Infinity,不是报错但逻辑上不合理,建议加判断:
- 检查数组长度:
arr.length ? Math.max.apply(null, arr) : undefined - 处理非数字项:若数组含非数字(如
['1', '5', '3']),Math.max会隐式转换,但[1, 'a', 3]会导致NaN,必要时先过滤或映射
现代替代方案:扩展运算符 ...
ES6 起更推荐用扩展运算符,语义清晰、写法简洁:
Math.max(...arr)- 同样支持空数组判断:
arr.length ? Math.max(...arr) : undefined - 注意:过长的数组(数万项以上)可能触发栈溢出,此时
apply或循环更稳妥
不复杂但容易忽略:apply 是早期兼容方案,现在优先用 ...,但理解 apply 的原理对掌握 JS 函数调用机制很有帮助。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










