參考:廖雪峯老師的javascript教程
小明希望利用map()把字符串變成整數,他寫的代碼很簡潔:
'use strict';
var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);
alert('[' + r[0] + ', ' + r[1] + ', ' + r[2] + ']');
結果竟然是[1, NaN, NaN],小明百思不得其解,請幫他找到原因並修正代碼。
arr.map會爲調用的函數傳入以下三個參數:
1、currentValue,數組中當前被傳遞的元素。
2、index,數組中當前被傳遞的元素的索引。
3、array,調用 map 方法的數組。
而parseInt可以接受兩個參數:
1、string:必需。要被解析的字符串。
2、radix:可選。表示要解析的數字的基數。該值介於 2 ~ 36 之間。
如果省略該參數或其值爲 0,則數字將以 10 爲基礎來解析。如果它以 “0x” 或 “0X” 開頭,將以 16 爲基數。
如果該參數小於 2 或者大於 36,則 parseInt() 將返回 NaN。
所以實際上是執行了:
parseInt(‘1’,0,[‘1’,’2’,’3’]);//1
parseInt(‘2’,1,[‘1’,’2’,’3’]);//NaN
parseInt(‘3’,2,[‘1’,’2’,’3’]);//NaN
所以修正的代碼應爲:
r = arr.map(function(x) { return parseInt(x,10) });
或者
r = arr.map(function(x) { return parseInt(x) });