在字符串数组上使用JavaScript的Math.max是否安全?

时间:2015-05-28 10:22:39

标签: javascript

这似乎有效,在一个看起来像数字的字符串数组中(它们是用csv-parse读入的CSV文件中的数字,它似乎将所有内容转换为字符串):

 var a = ['123.1', '1234.0', '97.43', '5678'];
 Math.max.apply(Math, a);

返回5678

Math.max会自动将字符串转换为数字吗?

或者,我应该先自己进行+转换以确保安全吗?

3 个答案:

答案 0 :(得分:11)

  

Math.max会自动将字符串转换为数字吗?

引用Math.max

的ECMA脚本5.1规范
  

给定零个或多个参数,在每个参数上调用ToNumber并返回最大的结果值。

因此,内部所有值都会在找到最大值之前尝试转换为数字,并且您不必将字符串显式转换为数字。

但如果字符串不是有效数字,请注意NaN结果。例如,如果数组有一个像这样的无效字符串

var a = ['123.1', '1234.0', '97.43', '5678', 'thefourtheye'];
console.log(Math.max.apply(Math, a));
// NaN

答案 1 :(得分:2)

如果任何字符串不是数字,您将获得NaN,否则它应该可以正常工作。我只是为了安全而添加+

答案 2 :(得分:2)

考虑这种情况:

<script>
    var a=['123.1', '1234.0', '97.43', '5678','0               11111111'];
    console.log(Math.max.apply(Math, a));
</script>

你需要从数组中转换元素才能更安全..