之前一直對(duì)這個(gè)沒(méi)什么概念即硼,直到遇到一個(gè)詭異的 bug
周伦,然后慢慢追究傻唾,最終發(fā)現(xiàn)了 js 數(shù)組中的空位與undefined 的不同谷饿。
這道題是這樣的惶我,如何快速的生成一個(gè)長(zhǎng)度為10,并且元素與索引一樣的數(shù)組博投。
比如 [0, 1, 2, 3, 4, 5 ...]
下面是我的答案:
var arr = Array(10).fill(0).map((v, k) => k)
如果不加 fill
那一步操作就會(huì)得到一個(gè)空數(shù)組
當(dāng)時(shí)感覺(jué)以為數(shù)組的 map
方法是因?yàn)閿?shù)組元素是 undefined
才會(huì)被忽略的绸贡,看來(lái)我還是太天真。
然后我一臉懵逼, 緊接著到了下圖:
我開(kāi)始懷疑人生,這不都是 undefined
嗎听怕,只是寫法不一樣罷了捧挺。
然后分別在 safari, firefox 和 node 中試驗(yàn)了下:
safari:
firefox:
node:
這下通過(guò)對(duì)比終于明朗了
Array(10) 產(chǎn)生的是 10 個(gè)數(shù)組空位,并不是 undefined
, 是 chrome
瀏覽器誤導(dǎo)了我們尿瞭。
數(shù)組的 map filter forEach
等方法只對(duì)空位忽略不會(huì)忽略undefined
松忍,所以
Array(10).fill(undefined).map((v,k) => k)
也會(huì)得到正確的結(jié)果。
還有個(gè)不錯(cuò)的方法是:
Array.from({length: 10}, (v, k) => k)
關(guān)于 Array.from
請(qǐng)參考文檔Array.from