我试图从一个简单数组中获取最大数:
data = [4, 2, 6, 1, 3, 7, 5, 3];
alert(Math.max(data));
我读到即使数组中的一个值无法转换为数字,它也会返回 NaN
,但在我的例子中,我已经用 进行了双重检查typeof
以确保它们都是数字,那么我的问题是什么?
最佳答案
您的代码不起作用的原因是因为 Math.max
期望每个参数都是有效数字。这在 documentation 中指示如下:
If at least one of arguments cannot be converted to a number, the result is NaN.
在您的实例中,您只提供了 1 个参数,并且 1 个值是一个数组而不是一个数字(它不会检查数组中的内容,它只是知道它不是一个有效的数)。
一种可能的解决方案是通过传递参数数组来显式调用该函数。像这样:
Math.max.apply(Math, data);
这实际上与您手动指定没有数组的每个参数相同:
Math.max(4, 2, 6, 1, 3, 7, 5, 3);
正如您所见,每个参数现在都是一个有效数字,因此它将按预期工作。
展开数组
您也可以spread the array .这实质上将数组视为每个项目都作为其自己的参数传递。
Math.max(...data);
关于javascript - 为什么 math.max() 在整数数组上返回 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32647149/