参考:廖雪峰老师的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) });