xiaokeqi / i-learned

1 stars 0 forks source link

['10','10','10','10','10'].map(parseInt); // [10, NaN, 2, 3, 4]一道有意思的题 #15

Open xiaokeqi opened 5 years ago

xiaokeqi commented 5 years ago

详解如下: https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/236#issue-477204687

xiaokeqi commented 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
xiaokeqi commented 5 years ago

还需注意的是,第二个参数,必须是2-36之间的数,否则也会为NaN。0除外,0默认为10进制数