繁体   English   中英

谁能解释以下Javascript代码行为?

[英]Can anyone explain the following Javascript code behaviour?

这是我的Javascript代码:

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));

输出为:

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

预期的输出是:

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

谁能解释为什么呢?

数组由引用处理。

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

然后, rowarr包含指向同一数组的两个指针(清空数组后,数组中只包含其中的内容)

更改subRow.length = 0; subRow = []可在新数组上工作,而无需修改现有数组。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM