Rumah >hujung hadapan web >tutorial js >Mengapa Adakah `Array.prototype.fill()` Mencipta Rujukan Objek Daripada Salinan?
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!