new Array(3)
は、[undefined, undefined, undefined]
に相当する3つのundefined
を含む長さ3の配列を返します。しかしながら新しい配列()のJavascriptマッピング
、
[undefined, undefined, undefined].map((val, i) => i)
は[0, 1, 2]
の期待される結果を生成します。しかし、new Array(3).map((val, i) => i)
は、マップ機能がまったく影響を及ぼさなかったかのように、[undefined, undefined, undefined]
を生成します。
誰でも理由を説明できますか?
EDIT new Array()
の私の理解に欠陥があるように見えます。新しい配列は作成されません。それは渡された引数と等しいキーlength
でオブジェクトを作成します。答えとコメントありがとう。
Btw [undefined, undefined, undefined]
のような配列が必要な場合は、繰り返し/マップするか、何かの場合は[...new Array(m)]
がすべきです。
*と同等である3 undefinedsを含む[未定義、未定義、未定義]; *それは間違っているのです。 –
Javascriptの配列は、数値プロパティと 'length'プロパティを持つエキゾチックなオブジェクトです。 'new Array(3)'の場合、 'length'オブジェクトを3に設定し、数値プロパティを持たない 'Array'オブジェクトを生成します。これは次のとおりです。 > Object.keys(new Array(3)); [] > Object.keys([未定義、未定義、未定義]); ["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