为什么Math.max()返回正确最大值但数组求最小值时结果为0?
问题根因
你的代码问题出在最小值变量的初始值设置错误:
- 你将
min_val初始值固定设为0,本次传入的测试数组所有元素均大于0,每次执行Math.min(min_val, ar[i])比对时,0永远是更小的取值,所以最终返回结果始终为0。 Math.max()能返回正确结果只是巧合:本次测试数组所有元素都大于0,如果测试数组包含负数,用同样的初始值逻辑写的最大值计算代码也会出错。
修复方案
提供两种常用修复方式:
调整循环逻辑
将初始值设为数组第一个元素,循环从第二个元素开始遍历即可,同时补充空数组边界判断避免报错:
function values(ar) { if (!ar.length) return; var min_val = ar[0]; for (var i = 1; i < ar.length; i++) { min_val = Math.min(min_val, ar[i]); } document.write(min_val); } values([14,99, 10, 18,19, 11, 34]); // 输出正确结果10
直接使用内置方法语法糖
不需要手动写循环,用展开运算符将数组元素传入Math.min即可,代码更简洁:
function values(ar) { if (!ar.length) return; document.write(Math.min(...ar)); }
内容的提问来源于stack exchange,提问作者Debankan
相关产品推荐
相关产品推荐

