這似乎是工作,字符串看起來像數字陣列上(他們是從csv-parse
讀取一個CSV文件,這似乎一切都轉換爲字符串的數字):在字符串數組上使用JavaScript的Math.max是否安全?
var a = ['123.1', '1234.0', '97.43', '5678'];
Math.max.apply(Math, a);
返回5678
。
Math.max
是否將字符串自動轉換爲數字?
或者我應該首先做一個+
轉換,以保證安全?
這似乎是工作,字符串看起來像數字陣列上(他們是從csv-parse
讀取一個CSV文件,這似乎一切都轉換爲字符串的數字):在字符串數組上使用JavaScript的Math.max是否安全?
var a = ['123.1', '1234.0', '97.43', '5678'];
Math.max.apply(Math, a);
返回5678
。
Math.max
是否將字符串自動轉換爲數字?
或者我應該首先做一個+
轉換,以保證安全?
不Math.max自動將字符串轉換爲數字?
引述ECMA腳本5.1規範Math.max
,
鑑於零個或多個參數,調用每個參數
ToNumber
並返回最大結果值的。
因此,內部所有值都會在查找最大值之前嘗試轉換爲數字,而且您不必將字符串顯式轉換爲數字。
但如果字符串不是有效數字,請留意NaN
結果。例如,如果陣列有一個這樣的無效字符串
var a = ['123.1', '1234.0', '97.43', '5678', 'thefourtheye'];
console.log(Math.max.apply(Math, a));
// NaN
如果任何字符串不是數字,您將得到一個NaN
,否則它應該工作正常。我會添加+
只是爲了安全起見。
考慮這種情況:
<script>
var a=['123.1', '1234.0', '97.43', '5678','0 11111111'];
console.log(Math.max.apply(Math, a));
</script>
你需要從數組轉換元素是額外的安全..