參考:廖雪峰老師的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) });新聞熱點
疑難解答