为什么 ['1', '7', '11'].map(parseInt) 返回 [1, NaN, 3]

2019-06-201734次阅读javascript

ParseInt有两个参数:string和radix(进制)。如果提供的radix(进制)为空或者为假值,进制(基数)默认设置为10

parseInt('11');                => 11
parseInt('11', 2);             => 3
parseInt('11', 16);            => 17
parseInt('11', undefined);     => 11 (radix(进制) 为假)
parseInt('11', 0);             => 11 (radix(进制) 为假)

现在让我们一步一步地运行我们的示例。

['1', '7', '11'].map(parseInt);       => [1, NaN, 3]
// 第一次迭代: val = '1', index = 0, array = ['1', '7', '11']
parseInt('1', 0, ['1', '7', '11']);   => 1

由于0是假的,因此进制(基数)设置为默认值10。 parseInt()只接受两个参数,因此['1', '7', '11']会被 忽略。字符串'1'在10进制(基数)中的字符串表示数字1。

// 第二次迭代: val = '7', index = 1, array = ['1', '7', '11']
parseInt('7', 1, ['1', '7', '11']);   => NaN

在进制(基数)为1系统中,符号'7'不存在。与第一次迭代一样,忽略最后一个参数。所以,parseInt()返回了NaN。

// 第三次迭代: val = '11', index = 2, array = ['1', '7', '11']
parseInt('11', 2, ['1', '7', '11']);   => 3

在进制(基数)为2(二进制)系统中,符号'11'表示数字3,最后一个参数被忽略。

上一篇: 模拟实现apply、call、bind方法  下一篇: HTTP1.0与HTTP1.1的区别  

为什么 ['1', '7', '11'].map(parseInt) 返回 [1, NaN, 3]相关文章