let arr = [1,2,,3];
arr2 = arr.map(parseInt) // 請(qǐng)寫(xiě)下arr2的內(nèi)容;
這道題大家認(rèn)為答案是啥呢鲫凶?
應(yīng)該是[1,NaN, ,NaN]這道題考察的是函數(shù)的掌握程度
根據(jù)MDN的文檔,Array.prototype.map和parseInt的用法谈截,map函數(shù)會(huì)提供三個(gè)參數(shù),value、index挣磨、arr雇逞,而parseInt提供了兩個(gè)參數(shù)parseInt(string [, radix])
。
因此arr.map(parseInt)實(shí)際上是arr.map((val, index, arr)=> parseInt(val, index))
的一個(gè)縮寫(xiě)茁裙,數(shù)組的第一個(gè)數(shù)parseInt(1, 0) => 1
塘砸,從v8源碼看parseInt函數(shù)判斷,如果傳入radix是0晤锥,則以10進(jìn)行處理掉蔬,因此第一個(gè)值是1。
那么第二個(gè)值矾瘾,即是parseInt(2, 1) => NaN
女轿,這是因?yàn)榉€(wěn)定上就說(shuō)明了,當(dāng)radix小于2或大于36時(shí)(除了上面0的情況)壕翩,就會(huì)返回NaN蛉迹。
同理,第四位實(shí)際上是
parseInt(3, 3) => NaN
放妈,由于3進(jìn)制中是不能出現(xiàn)對(duì)應(yīng)進(jìn)制的數(shù)值的婿禽,因此也直接返回NaN 。
而在map中callback 函數(shù)只會(huì)在有值的索引上被調(diào)用大猛,第三位沒(méi)有直接的索引值扭倾,所以返回empty。