arr.map(parseInt)陷阱

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。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容