题目描述:写出下面执行结果,并解释原因
console.log(['1','2','3'].map(parseInt));
答案:
[1,NaN,NaN]
知识点:
- Array.prototype.map,arry.map(function callback(currentValue[, index[, array]]),callback 函数执行规则传入三个参数:currentValue (当前被传递的元素), index (当前被传递的元素的索引), array(调用 map 方法的数组)
- parseInt(string, radix) 将一个字符串 string 转换为 radix 进制的整数, radix 为介于2-36 之间的数,例如说指定
10
就等于指定十进位。请注意,通常预设值不是10
进位! - 返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回
NaN
。 - 注意:
radix
参数为n 将会把第一个参数看作是一个数的n进制表示,而返回的值则是十进制的。例如:
parseInt('123', 5) // 将'123'看作5进制数,返回十进制数38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
解析:
- 等同于:['1','2','3'].map((item,index)=>parseInt(item,index)) ===> parseInt('1',0) ,parseInt('2',1),parseInt('3',2)
- parseInt 的第二个参数 radix 为 0 时,ECMAScript5 将 string 作为十进制数字的字符串解析
- parseInt 的第二个参数为 1 时,解析结果为 NaN
- parseInt 的第二个参数 radix 在 2—36 之间时,如果 string 参数的第一个字符(除空白以外),不属于 radix 指定进制下的字符,解析结果为 NaN 。
- parseInt("3", 2) 执行时,由于 "3" 不属于二进制字符,解析结果为 NaN。
练习:
['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','22','33','44'].map(parseInt)
//[0, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 10, 12, 14, 16, 18, 20, 22, 36, 57, 80]