['1', '2', '3'].map(parseInt) what & why ?
1. parseInt()
parseInt(string, radix)
-
string: 必需。解析的字符串。
-
radix: 可选。
-
其值介于 2 ~ 36 之间。若不在此范围,则 parseInt() 将将返回 NaN。
-
若省略或其值为 0,则数字将以 10 为基础来解析。
-
若以 '0x' 或 '0X' 开头,将以 16 为基数。
-
console.log(parseInt('18')); // 18 (10 + 8)
console.log(parseInt('18', '0X22')); // 42 (0X22 === 32+2 === 34) (34 + 8)
console.log(parseInt('18', 1)); // NaN
console.log(parseInt(100, 2)); // 4 (1 * 2 的平方)
回到题目
['1', '2', '3'].map(parseInt)
对于每个迭代map, parseInt()传递两个参数: 字符串和基数。
所以实际执行的代码是:
['1', '2', '3'].map((item, index) => {
return parseInt(item, index)
})
// 结果:
console.log(parseInt('1', 0)); // 1
console.log(parseInt('2', 1)); // NaN (基数介于 2 - 36 之间)
console.log(parseInt('3', 2)); // NaN ('3' 不是二进制)
由于 map 返回一个数组,所以为 [1, NaN, NaN];