0%

JS 的 parseInt 方法

问题

1
['1', '2', '3'].map(parseInt);

求上面的返回值

翻车

控制台一敲结果是 [1, NaN, NaN]

这车翻的太丢人了?Mark 一下

竟然还有人问为啥

熟读文档:

补充一下:

实际上这是对 map 方法回调函数的第二个参数和 parseInt 的第二个参数是进制

1
['1', '2', '3'].map(parseInt);

的执行过程是

1
2
3
parseInt('1', 0); // 1
parseInt('2', 1); // NaN
parseInt('3', 2); // NaN

还问

  • 为什么 parseInt 第二个参数为 0 返回1
  • 解释一下下面的现象
1
2
parseInt('19', 7); // 1
parseInt('91', 7); // NaN

第一个问题有人回答是0进制,我直接???

答案其实文档中有,我已经分别加粗了

对于 parseInt(string, radix)

如果 radix 是 undefined、0或未指定的,JavaScript会假定以下情况

  1. 如果输入的 string以 “0x”或 “0x”(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被当做十六进制数去解析。
  2. 如果输入的 string以 “0”(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix。
  3. 如果输入的 string 以任何其他值开头, radix 是 10 (十进制)。

如果第一个字符不能转换为数字,parseInt会返回 NaN。

群友疑惑

parseInt(4,4) 为啥是 NaN
parseInt(10, 9) 为啥是9 10的9进制是9?

第一个问题,看文档:parseInt函数将其第一个参数转换为一个字符串,对该字符串进行解析,然后返回一个整数或 NaN。

第二个问题是进制基础

顺便贴一下群友发的B站大学教程:关于进制的全部

1
2
3
4
5
6
7
8
parseInt(10, 9) // 9 + 0 = 9
parseInt(12,4) // 4 + 2 = 6
parseInt(0,4) // 0
parseInt(3,4) // 3
parseInt(4,4) // NaN
parseInt(11,4) // 4 + 1 = 5
parseInt(13,4) // 4 + 3 = 7
parseInt(23,4) // 4 * 2 + 3 = 11

大佬表演

群里有个德国巨佬可爱的kiochan(他说不贴他github就要打我)冒泡贴了一段代码,叹为观止,果然是群除我佬。

1
console.table(new Array(20).fill(0).map((v, i) => new Array(20).fill(i).map((_v, _i) => _i >= 2 && _v.toString(_i))))

输出结果