Javascript:将数组推入数组与将值推入数组?

亚历山大·德雷格格

我是javascript新手,不太了解push()方法的工作方式。

我有两个空数组,row和newData。还有两段代码,它们的输出截然不同:

for (i = 1; i <= 10 ; i++) {
    row[0] = i;
    newData.push(row);
}

结果为newData == [10,10,10,...,10],我感到非常惊讶,并且

for (i = 1; i <= 10 ; i++) {
    newData.push(i);
}

结果为newData == [1,2,3,...,8,9,10],这是预期的结果。

但是我不明白,当第二个循环按预期工作时,为什么第一个循环的每次迭代似乎都将newData的每个元素替换为最后一个元素?

谢谢!

路易吉·格罗

您的第一个片段:

var row = new Array();
var newData = new Array();

for (i = 1; i <= 10 ; i++) {
    row[0] = i;
    newData.push(row);
}

将数组的引用推入10倍,同时将数组row的位置0中包含的值依次更改为值1,2,3 .. 10,最终结果是设置数组的最终内容row数组至:[10]

的实际最终值newData会更正确地显示为:

[[10],[10],[10],[10],[10],[10],[10],[10],[10],[10]]

而不是:

 [10,10,10,...,10]

在JavaScript中,将对象推入数组(在本例中为Array类的实例)实际上将对对象的引用推入数组。推送相同的变量row不会创建该变量的多个实例。

此行为在此处详细说明:JavaScript是引用传递还是值传递语言?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章