2015-05-09 101 views
0
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变量,但它不是与一个对象?

+1

没有新对象。您将* same *对象存储在第二个变量中。如果你想要一个新的对象,你需要明确这一点,并手动复制所有的属性。 – Bergi

+0

哦,我知道没有新的对象,但为什么没有改变的数据存储在tempdata中? tempdata中的数据没有改变? –

+2

您的变量tempdata只是对象RPGDATA的引用。 – chRyNaN

回答

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

有些文档:

JSON Object

Working with objects

+0

'JavaScript中的对象通过引用传递',这真让我伤心。 无论如何,我想我需要重新解析,并为克隆做所有事情......我会很快在这里标记你最好的。谢谢! –

+0

JavaScript中的对象被大量传递 - 我的意思是很多**。许多复杂的系统都依赖于它的功能。通过对象引用可以使语言具有很大的灵活性。我强烈建议您阅读[使用对象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects)文章。 – Oka

+0

哦,我同意@Oka,我也许只是想通过Javascript来做到这一点内部和JSON自动串行它,使其更容易。我可以学习的唯一方法是如果我试图找到不起作用或惹恼我的东西。这是一个令人讨厌的例子,但是一旦我找到了答案,我就可以利用它。当我想到将数据存储在变量中时,我只需考虑存储VALUES。如果这是有道理的大声笑。 –

1

输出应该是既 “NoLeg”。正如Oka提到的答案:JavaScript中的对象通过引用传递。

这图很简单,这将有助于理解价值是如何在JavaScript中传递:http://huaban.com/pins/169758716/