new Array(3)
返回包含3個undefined
S的相當於[undefined, undefined, undefined]
長度3的陣列;的Javascript映射()
然而,
[undefined, undefined, undefined].map((val, i) => i)
產生的[0, 1, 2]
預期的結果。但new Array(3).map((val, i) => i)
產生[undefined, undefined, undefined]
,彷彿映射功能沒有任何影響。
誰能解釋一下爲什麼?
編輯 看起來我的理解存在缺陷new Array()
。它不會創建一個新的數組。它創建一個對象,其鍵值爲length
,等於傳入的參數。感謝您的答案和評論。
順便說一句,如果你確實需要像[undefined, undefined, undefined]
這樣的數組迭代/映射,或者任何事情,那麼[...new Array(m)]
應該做的伎倆。
*含有3個undefineds這相當於[未定義,未定義未定義]; *這是不對的。 – 2017-06-14 16:50:52
Javascript中的數組是具有數值屬性和'length'屬性的奇特對象。 在'新陣列的情況下(3)',則產生具有其'length'設置爲3,但沒有任何數值屬性的'Array'對象。你可以看到: > Object.keys(new Array(3)); Object.keys([undefined,undefined,undefined]); [「0」,「1」,「2」] 你可以用['Array.from']實現你想要的(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from?v = control): > Object.keys(Array.from({length:3})); [「0」,「1」,「2」] – error
Doh。鎖定之前,我可以發佈我的答案。 – error