RPGDATA = {
turkey: 'Leg',
chicken: 'Muffin'
}
var tempdata = RPGDATA;
RPGDATA.turkey = 'NoLeg';
console.log(tempdata); // Why is this showing NoLeg? It should be 'Leg'?
console.log(RPGDATA);
关于jsfiddle:http://jsfiddle.net/njxd7eLy/1/
当控制台记录tempdata时,它是否显示了应用了更改的新对象的属性?
编辑:在这里查看一个示例:http://jsfiddle.net/zLeufxfm/旧数据存储在该tempdata变量中,但它不包含对象?
答案 0 :(得分:3)
JavaScript中的对象通过引用传递。如果要单独更改每个对象,则需要克隆该对象。
JSON
对象可以帮助简化这一点。
http://jsbin.com/sonapebawo/1/edit?js,console
var myObj = {
name: 'bob',
age: '42'
};
var copy = JSON.parse(JSON.stringify(myObj));
myObj.newProp = 'Hello';
copy.otherProp = 'Yo';
console.log(copy, myObj);
一些文档:
答案 1 :(得分:1)
输出应为“NoLeg”。正如Oka的回答所提到的:JavaScript中的对象通过引用传递。
此图表非常简单,有助于了解如何在JavaScript中传递值:http://huaban.com/pins/169758716/