Mat*_*der 32 javascript arrays math max nan
我试图通过一个简单的方法得到最高的数字NaN:
data = [4, 2, 6, 1, 3, 7, 5, 3];
alert(Math.max(data));
Run Code Online (Sandbox Code Playgroud)
我已经读过如果数组中的一个值无法转换为数字,它将返回typeof,但在我的情况下,我已经仔细检查NaN以确保它们都是数字,所以可能是我的问题?
mus*_*fan 57
您的代码无效的原因是因为Math.max期望每个参数都是有效数字.这在文档中表明如下:
如果至少有一个参数无法转换为数字,则结果为NaN.
在你的实例中,你只提供了1个参数,而且1个值是一个数组而不是一个数字(它不会检查数组中的内容,它只是在知道它不是有效数字时停止).
一种可能的解决方案是通过传递参数数组来显式调用该函数.像这样:
Math.max.apply(Math, data);
Run Code Online (Sandbox Code Playgroud)
这实际上做的就像手动指定每个没有数组的参数一样:
Math.max(4, 2, 6, 1, 3, 7, 5, 3);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,每个参数现在都是一个有效数字,因此它将按预期工作.
Gru*_*ndy 23
如果您看到Math.max的文档,您可以看到下一个描述
因为max()是Math的静态方法,所以始终将其用作Math.max(),而不是您创建的Math对象的方法(Math不是构造函数).
如果没有给出参数,则结果为-Infinity.
如果至少有一个参数无法转换为数字,则结果为NaN.
Math.max用数组参数调用时
Math.max([1,2,3])
Run Code Online (Sandbox Code Playgroud)
你用一个参数调用这个函数- [1,2,3]然后javascript尝试将它转换为数字并获得("1,2,3" - > NaN)失败.
结果如预期 - NaN
注意:如果只有一个数字的数组- 都正常工作
Math.max([23]) // return 23
Run Code Online (Sandbox Code Playgroud)
因为[23] -> "23" -> 23和隐藏到数字已完成.
如果你想从数组中获取max元素,你应该使用apply函数,比如
Math.max.apply(Math,[1,2,3])
Run Code Online (Sandbox Code Playgroud)
或者您可以使用新的传播运营商
Math.max(...[1,2,3])
Run Code Online (Sandbox Code Playgroud)
Bij*_*raj 10
它不起作用,因为您传递数组作为参数而不是逗号分隔数字.尝试像这样传播数组:
data = [4, 2, 6, 1, 3, 7, 5, 3];
alert(Math.max(...data));
Run Code Online (Sandbox Code Playgroud)