首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Array.fill对所有索引都使用相同的对象。

Array.fill对所有索引都使用相同的对象。
EN

Stack Overflow用户
提问于 2016-06-13 21:14:56
回答 2查看 78关注 0票数 2

我使用Array.fill将数组预先填充到其他数组中。修改一个索引的数组也会修改另一个索引的数组。意思是同一个对象。

代码语言:javascript
代码运行次数:0
运行
复制
const arr = Array(2).fill([]);

arr[0].push('a');
arr[1].push('b');

// [['a', 'b'], ['a', 'b']]

我一直在阅读一些文档,但我没有看到任何地方提到过这种行为。同样的事情也发生在一个对象文字上。

这有什么道理吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-13 21:20:33

是的,确实如此。

您正在传递对已创建对象实例的引用。如果您首先声明数组(例如。var c = []),然后使用它填充arr,您将得到相同的行为。

代码语言:javascript
代码运行次数:0
运行
复制
const c = [];
const arr = Array(2).fill(c);

c.push("a");    
c.push("b");

// c ["a", "b"]
// arr [reference to c, reference to c] => [["a","b"], ["a", "b"]]
票数 3
EN

Stack Overflow用户

发布于 2016-06-13 21:23:04

是的,这是合理的。

fill期望在所有索引中都包含一个值,而不是为每个索引生成一个新值的函数。而且它也不会隐式地克隆您传递的值(没有标准函数这样做)。这只是通常的赋值行为,其中对象(引用值)保持不变。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37799249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档