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
Lepaskan: 2024-12-13 07:55:12
asal
1023 orang telah melayarinya

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
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan