JavaScript的一個parseInt易錯點

參考:廖雪峯老師的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) });
發佈了39 篇原創文章 · 獲贊 15 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章