2015-05-28 31 views
3

這似乎是工作,字符串看起來像數字陣列上(他們是從csv-parse讀取一個CSV文件,這似乎一切都轉換爲字符串的數字):在字符串數組上使用JavaScript的Math.max是否安全?

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

返回5678

Math.max是否將字符串自動轉換爲數字?

或者我應該首先做一個+轉換,以保證安全?

回答

8

不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 
1

如果任何字符串不是數字,您將得到一個NaN,否則它應該工作正常。我會添加+只是爲了安全起見。

0

考慮這種情況:

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

你需要從數組轉換元素是額外的安全..

相關問題