2015-05-09 106 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/