Skip to content

parseInt 基数问题

问题

如下代码打印出什么?

js
;['1', '2', '3'].map((element, index) => parseInt(element, index))

到这里其实我们就能看出迭代处理每一个元素,而 parseInt 就是具体处理这个元素的方法。Number.parseInt() 静态方法解析一个字符串参数并返回一个指定基数的整数。语法如下:

js
Number.parseInt(string)
Number.parseInt(string, radix)

radix 可选

  1. 2 到 36 之间的整数,表示 string 的基数(数学记数系统中的基)。

  2. 如果 radix 为 undefined 或 0,则 radix 将被默认设置为 10,除非该数字以码元对 0x 或 0X 开头,在这种情况下,radix 将被默认设置为 16。

  3. 如果 radix 小于 2 或大于 36,或第一个非空白字符不能转换为数字,则返回 NaN。

根据以上条件说明我们可以得出 [1, NaN, ?]

我们再看下面一个案例:

js
parseInt('546', 2) // NaN  除了“0、1”外,其他数字都不是有效二进制数字

因为二进制的值只能是"0"和“1“,显然“3”不符合要求,所以也是 NaN

所以最终结果就是: [1, NaN, NaN]