引发疑问:
小明希望利用map()把字符串变成整数,他写的代码很简洁:
‘use strict’;
var arr = [‘1’, ‘2’, ‘3’];
var r;
r = arr.map(parseInt);
console.log®;
结果竟然是1, NaN, NaN,小明百思不得其解,请帮他找到原因并修正代码。
提示:参考Array.prototype.map()的文档。
由于map()接收的回调函数可以有3个参数:callback(currentValue, index, array),通常我们仅需要第一个参数,而忽略了传入的后面两个参数。不幸的是,parseInt(string, radix)没有忽略第二个参数,导致实际执行的函数分别是:
parseInt(‘0’, 0); // 0, 按十进制转换
parseInt(‘1’, 1); // NaN, 没有一进制
parseInt(‘2’, 2); // NaN, 按二进制转换不允许出现2
可以改为r = arr.map(Number);,因为Number(value)函数仅接收一个参数。
原因
1、parseInt函数
定义:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt
语法:parseInt(string [ , radix])
参数:
string:要被解析的值。如果参数不是一个字符串,则将其转换为字符串。字符串开头的空白符将会被忽略。
radix:一个2到36之间的整数值,用于指定转换中采用的基数。
如果省略该参数或者为0,则数字将以 10 为基础来解析。
如果string以 “0x” 或 “0X” 开头,将以 16 为基数。
如果string以“0” 开头,在ECMA3中被认为是8进制;但是在ECMA5中已经强制规定此情况默认是10进制
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
2 . map方法的三个参数
callback(currentValue, index, array)
分别是item(当前每一项)、index(索引值)、arr(原数组)