首页 >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