Array.prototype.fill() のオブジェクト参照
Array.prototype.fill() を使用してオブジェクトで配列を初期化する場合、このメソッドは、要素ごとに新しいインスタンスを作成するのではなく、同じオブジェクトへの参照を渡すことに注意することが重要です。これにより、初期化後にオブジェクトのプロパティを変更するときに予期しない動作が発生する可能性があります。
次の例を考えてみましょう:
var arr = new Array(2).fill({}); arr[0] === arr[1]; // true arr[0].test = 'string'; arr[1].test === 'string'; // also true
この例では、2 つの配列要素が同じオブジェクト参照で初期化されます。結果として、arr[0] と arr[1] は両方とも同じオブジェクトを参照します。テスト プロパティが arr[0] に設定されると、共有参照により arr[1] にも自動的に設定されます。
この問題を回避するには、代わりに配列に任意の値を入力し、次に、map() を使用して各要素の新しいオブジェクトを作成します。
var arr = new Array(2).fill(undefined).map(u => ({})); var arr = new Array(2).fill().map(Object);
これらの例では、最初に未定義または null 値を使用して配列を埋めます。その後、map() を使用して要素ごとに新しいオブジェクトを作成し、配列を個別のオブジェクトで効果的に埋めます。
以上が`Array.prototype.fill()` がコピーではなくオブジェクト参照を作成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。