Open xiaokeqi opened 5 years ago
['1', '2', '3'].map(parseInt) // 1 NaN NaN
这道题的解析,其实还有个点,需要关注
['10','10','10','10','10'].map(parseInt); // [10, NaN, 2, 3, 4]
他们之间的差异点在,为什么parseInt('3', 2) =>NaN 而parseInt('10',2 ) => 2
这主要涉及进制转换方面的知识 2进制,对任意10进制数的写法,均是 01序列 8进制,对任意10进制数的写法,均是0-7序列 16进制,对任意10进制数的写法,均是0-15(a-f)序列
parseInt的参数意思是,将二进制’3‘转换为10进制数 而3 并不是标准的2进制写法,故返回NaN
例子如下:
parseInt('101', 2) // 5
// 忽略2,等价于 parseInt('11', 2)
parseInt('1121', 2) // 3
parseInt('5', 4) //NaN
parseInt('3', 4) // 3
还需注意的是,第二个参数,必须是2-36之间的数,否则也会为NaN。0除外,0默认为10进制数
详解如下: https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/236#issue-477204687