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

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

Patricia Arquette
發布: 2024-12-13 07:55:12
原創
981 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板