let arr = [1,2,,3];
arr2 = arr.map(parseInt) // 请写下arr2的内容;
这道题大家认为答案是啥呢?
应该是[1,NaN, ,NaN]这道题考察的是函数的掌握程度
根据MDN的文档,Array.prototype.map和parseInt的用法,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。