美文网首页
arr.map(parseInt)陷阱

arr.map(parseInt)陷阱

作者: chiugi | 来源:发表于2021-01-20 10:08 被阅读0次
let arr = [1,2,,3];
arr2 = arr.map(parseInt) // 请写下arr2的内容;

这道题大家认为答案是啥呢?

应该是[1,NaN, ,NaN]

这道题考察的是函数的掌握程度
根据MDN的文档,Array.prototype.mapparseInt的用法,map函数会提供三个参数,value、index、arr,而parseInt提供了两个参数parseInt(string [, radix])
因此arr.map(parseInt)实际上是arr.map((val, index, arr)=> parseInt(val, index))的一个缩写,数组的第一个数parseInt(1, 0) => 1,从v8源码看parseInt函数判断,如果传入radix是0,则以10进行处理,因此第一个值是1。
那么第二个值,即是parseInt(2, 1) => NaN,这是因为稳定上就说明了,当radix小于2或大于36时(除了上面0的情况),就会返回NaN。

同理,第四位实际上是
parseInt(3, 3) => NaN,由于3进制中是不能出现对应进制的数值的,因此也直接返回NaN 。

而在map中callback 函数只会在有值的索引上被调用,第三位没有直接的索引值,所以返回empty。

相关文章

网友评论

      本文标题:arr.map(parseInt)陷阱

      本文链接:https://www.haomeiwen.com/subject/lawhzktx.html