# 题目描述
['1', '2', '3'].map(parseInt)返回值是什么?
返回值为
[ 1, NaN, NaN ]
# 分析
map 是传入的函数是有 3 个参数的: value, index, arr
parseInt(string, radix)
两个参数解释如下:
string,要被解析的值。如果参数不是一个字符串,则将其转换为字符串,底层是使用toString抽象操作的。字符串开头的空白符将会被忽略。radix可选,从 2 到 36,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。请注意,10不是默认值!
所以我们执行['1', '2', '3'].map(parseInt)这行代码,其实是在执行下面这三行代码
parseInt('1', 0);
parseInt('2', 1);
parseInt('3', 2);
1
2
3
2
3
我们先来看实际执行的第二行代码,parseInt('2', 1),radix 的值只能接收 2-36,而此时是1,所以返回NaN
第三行代码,parseInt('3', 2), radix 的值为2,表示前边的字符串数字我们将会以二进制来识别,而二进制只能是0和1,此时是3,所以返回NaN
最后来看第一行代码,radix的值为0,当radix为0时,我们就要看string的值了
如果 radix 是 undefined、0或未指定的,JavaScript会假定以下情况:👇
TIP
- 如果输入的
string以"0x"或"0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被当做十六进制数去解析。 - 如果输入的
string以 "0"(0)开头,radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用parseInt时,一定要指定一个 radix - 如果输入的
string以任何其他值开头,radix是 10 (十进制)。
所以此时是十进制识别string,所以返回1
所以这行代码['1', '2', '3'].map(parseInt)的返回值就是[1, NaN, NaN]