parseInt
今天看到公司内部平台推送了一道关于parseInt的问题,发现结果出乎一聊,根本原因是对于parseInt执行理解不清晰,这里Mark下。
问题
1 | parseInt('0xf',16) |
解释
- parseInt第一个参数,会从首个非空格字符开始,对于非字符串会做ToString转换,因此parseInt(15,16)本质就是parseInt(‘15’,16)。
- parseInt(‘0xf’,16),JS识别字符串是16进制数字,radix也是16进制,因此直接解析为15。parseInt(‘0xf’)虽然没有传radix,但是根据字符串0x前缀还是识别为16进制因此还是15。
面试题
了解了处理逻辑,这里分析下代码
1 | ['1', '2', '3'].map(parseInt) |
上述程序的每次回调逻辑如下。
1 | parseInt(1,0); // 1 |
radix为0等价于10进制。radix为1,因此为NaN。2进制下不会有3,因此为NaN。
个人觉得记住这些处理逻辑并没有多大价值。真正的价值点是
- 注意自动类型转换,JS下这种问题很多。
- map(parseInt)之类回调写法注意,避免将index误传入造成最终结果不符合预期。