答案:
[1, NaN, NaN]
因为:
parseInt
需要两个参数(val, radix)
,其中radix
表示解析时用的基数。map
传了3
个(element, index, array)
,对应的radix
不合法导致解析失败。
解析:
- 首先来看看完整的表达式
["1", "2", "3"].map(function (item,index,arr){
return parseInt(item,index);
/**
这里相当于return了
parseInt(1,0)
parseInt(2,1)
parseInt(3,2)
*/
})
- 再来看看parseInt的用法
- parseInt() 函数可解析一个字符串,并返回一个整数。
- 当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
- 当忽略参数 radix , JavaScript 默认数字的基数如下:
- 如果 string 以 “0x” 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
- 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
- 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
以上不难看出,除了第一次
index
为0
会将1
按照十进制转成1
,后面两次是不会按照十进制转换的,所以为NaN