刷题-3

156 阅读1分钟

['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];