首頁 >web前端 >js教程 >為什麼 Array.prototype.fill() 建立物件參考而不是副本?

為什麼 Array.prototype.fill() 建立物件參考而不是副本?

Patricia Arquette
Patricia Arquette原創
2024-12-13 07:55:12979瀏覽

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

在此範例中,使用相同的物件參考初始化兩個陣列元素。結果,arr[0]和arr[1]都引用同一個物件。當在 arr[0] 上設定 test 屬性時,由於共用引用,它也會自動在 arr[1] 上設定。

為了避免此問題,可以用任意值填充數組,然後然後使用map()為每個元素建立新物件:

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

在這些範例中,未定義或空值最初用於填充數組。隨後,使用 map() 為每個元素建立新對象,從而有效地用不同的對象填入數組。

以上是為什麼 Array.prototype.fill() 建立物件參考而不是副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn