因为math.max()接收多个独立参数而非数组,直接传入数组会将其当作单个参数导致nan;apply可将数组展开为参数列表,现代推荐使用扩展运算符...。

JavaScript 中可以用 apply 把数组“展开”传给 Math.max,从而求出数组里的最大值。
为什么不能直接用 Math.max(arr)?
Math.max() 接收的是**多个独立参数**,比如 Math.max(1, 5, 3),而不是一个数组。如果直接写 Math.max([1, 5, 3]),它会把整个数组当做一个参数,结果是 NaN(因为数组无法转为有效数字)。
apply 的作用:把数组变成参数列表
apply 是函数的方法,语法是 func.apply(thisArg, [arg1, arg2, ...]),它会把第二个参数(必须是数组或类数组)的每一项,当作单独参数传给 func。
所以可以这样写:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
const arr = [4, 9, 2, 15, 7]; const max = Math.max.apply(null, arr); console.log(max); // 15
这里 null 表示不关心 this 值(Math.max 是纯函数,不需要绑定上下文);arr 会被拆成 Math.max(4, 9, 2, 15, 7)。
现代替代方案:扩展运算符(推荐)
ES6 起更简洁的写法是用扩展运算符 ...:
const max = Math.max(...arr); // 效果等同于 apply
它语义更清晰、代码更短,且性能和可读性都更好。只有在需要兼容非常老的浏览器(如 IE)时,才考虑用 apply。
注意边界情况
- 空数组:
Math.max.apply(null, [])返回-Infinity,使用前建议判断数组长度 - 含非数字项:
Math.max.apply(null, [1, 'a', 3])返回NaN,需确保数组元素可转为数字 - 超大数组(数万项以上):某些引擎可能因参数过多报错,这时应改用循环或
reduce
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










