【发布时间】:2019-01-09 09:34:35
【问题描述】:
我经常给数组元素属性,这样我就不需要使用嵌套数组了。但是,当我使用array.push(array[0]) 甚至array[array.length] = array[0] 复制数组元素时,它们的新元素和复制的元素正在链接——当我更改其中一个的属性时,它会更改另一个的属性。
代码如下:
var array = [{num: 0}, {num: 1}, {num: 2}, {num: 3}];
var i;
var nums = "";
array.push(array[0]);
//What the array looks like before anything is changed
for (i = 0; i < array.length; i += 1) {
nums += array[i].num + " ";
}
console.log(nums);
array[0].num = 1;
//What the array looks like after changing only one element
nums = "";
for (i = 0; i < array.length; i += 1) {
nums += array[i].num + " ";
}
console.log(nums);
运行时,array 的第一个和最后一个元素都会更改,尽管只运行了array[0].num = 1。有谁知道发生了什么以及我该如何解决?
【问题讨论】:
-
对象值是引用。将对象引用从一个地方分配到另一个地方不会产生副本。
-
@JamesFaix 当你拒绝this edit 时,你有没有看一下 jsfiddle 链接?代码完全相同,并且编辑直接在帖子中内联了代码,并提供了一种直接从 SO 运行/执行 sn-p 的方法。你没有理由拒绝那里的编辑。
-
"属性以便我不需要使用嵌套数组" - 抱歉,什么?您能否详细说明为什么您认为需要对象数组(或数组数组)而不是简单地使用数字数组?
标签: javascript arrays oop properties