Rumah >hujung hadapan web >tutorial js >Mengapa Adakah `Array.prototype.fill()` Mencipta Rujukan Objek Daripada Salinan?

Mengapa Adakah `Array.prototype.fill()` Mencipta Rujukan Objek Daripada Salinan?

Patricia Arquette
Patricia Arquetteasal
2024-12-13 07:55:12979semak imbas

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

Rujukan Objek dalam Array.prototype.fill()

Apabila menggunakan Array.prototype.fill() untuk memulakan tatasusunan dengan objek, adalah penting untuk ambil perhatian bahawa kaedah itu memberikan rujukan kepada objek yang sama dan bukannya mencipta kejadian baharu untuk setiap elemen. Ini boleh membawa kepada gelagat yang tidak dijangka apabila mengubah suai sifat objek selepas pemulaan.

Pertimbangkan contoh berikut:

var arr = new Array(2).fill({});
arr[0] === arr[1]; // true
arr[0].test = 'string';
arr[1].test === 'string'; // also true

Dalam contoh ini, dua elemen tatasusunan dimulakan dengan rujukan objek yang sama. Akibatnya, kedua-dua arr[0] dan arr[1] merujuk objek yang sama. Apabila sifat ujian ditetapkan pada arr[0], ia juga ditetapkan secara automatik pada arr[1] disebabkan rujukan yang dikongsi.

Untuk mengelakkan isu ini, seseorang boleh mengisi tatasusunan dengan sebarang nilai arbitrari dan kemudian gunakan map() untuk mencipta objek baharu bagi setiap elemen:

var arr = new Array(2).fill(undefined).map(u => ({}));
var arr = new Array(2).fill().map(Object);

Dalam contoh ini, nilai yang tidak ditentukan atau null pada mulanya digunakan untuk mengisi tatasusunan. Selepas itu, map() digunakan untuk mencipta objek baharu bagi setiap elemen, dengan berkesan mengisi tatasusunan dengan objek yang berbeza.

Atas ialah kandungan terperinci Mengapa Adakah `Array.prototype.fill()` Mencipta Rujukan Objek Daripada Salinan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn