1

Here is my Javascript code:

var subRow = [];
var rowarr = [];
subRow.push({ v: "Jay" });
subRow.push({ v: "Ram" });
rowarr.push({ c: subRow });
subRow.length = 0;
subRow.push({ v: "Jay1" });
subRow.push({ v: "Ram1" });
rowarr.push({ c: subRow });
console.log(JSON.stringify(rowarr));

The output is:

    [{
    "c": [{
        "v": "Jay1"
    }, {
        "v": "Ram1"
    }]
}, {
    "c": [{
        "v": "Jay1"
    }, {
        "v": "Ram1"
    }]
}]

The expected output is:

    [{
    "c": [{
        "v": "Jay"
    }, {
        "v": "Ram"
    }]
}, {
    "c": [{
        "v": "Jay1"
    }, {
        "v": "Ram1"
    }]
}]

Can anyone explain why it so?

4

2 回答 2

4

数组通过引用处理。

subRow.length = 0;擦除数组的内容。

rowarr然后包含两个指向同一个数组的指针(其中只有你在清空它后放在那里的内容)

更改subRow.length = 0;subRow = []在新阵列上工作,而不是修改现有阵列。

于 2013-07-04T06:47:59.277 回答
2

subRow指向一个对象。当您使用push它时,rowArr您会创建对该对象的引用。你推它两次,这是对一个对象的两次引用。当您编辑subRow对对象的两个引用时,会看到更改,因此您已经践踏了对象的所有旧内容 - 它们没有存储在其他任何地方,因此它们完全丢失了。您需要创建一个全新的对象,而不是编辑旧对象。

于 2013-07-04T06:47:32.103 回答