1

我正在运行此代码并检查 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]]

我做错了什么,我怎么能得到我想要的值?

4

1 回答 1

8

当您使用.push追加a到末尾时b,您传递的是引用而不是ByVal,因为ArrayObject。这意味着未来的更改a会反映在as 中b。您需要的是 to when ing to 。.slice a.pushb

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]]
*/
于 2013-01-30T13:19:00.810 回答