我是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] 删除。
我来说两句