我正在运行此代码并检查firebug中的日志:
var a = new Array();
var b = new Array();
for (i=0; i<2 ; i++){
a.push(1);
b.push(a);
console.log("a", a);
console.log("b", b);
};
日志显示以下值:
a [1]
b [[1]]
a [1,1]
b [[1,1],[1,1]]
据我所知,价值应该是:
a [1]
b [[1]]
a [1,1]
b [[1],[1,1]]
我做错了什么,我怎么能得到我想要的价值?
答案 0 :(得分:8)
当您使用.push
将a
附加到b
的末尾时,您将传递引用而不是 ByVal 作为数组是对象。这意味着a
的未来更改会反映在a
中的b
中。
在a
.push
b
时,您需要.slice
var a = new Array(), b = new Array();
for (i=0; i<2 ; i++) {
a.push(1);
b.push(a.slice());
console.log("a", a);
console.log("b", b);
};
/*
a [1]
b [[1]]
a [1, 1]
b [[1], [1, 1]]
*/
。
{{1}}