ホームページ > ウェブフロントエンド > jsチュートリアル > `Array.prototype.fill()` がコピーではなくオブジェクト参照を作成するのはなぜですか?

`Array.prototype.fill()` がコピーではなくオブジェクト参照を作成するのはなぜですか?

Patricia Arquette
リリース: 2024-12-13 07:55:12
オリジナル
985 人が閲覧しました

Why Does `Array.prototype.fill()` Create Object References Instead of Copies?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート