今天我在javascript中遇到了這個問題,不知道它爲什麼會發生。爲什麼在JavaScript中發生這種情況?
var a = {
prop: {
bool: true
}
};
console.log(a.prop.bool); // logs true
var b = a;
b.prop.bool = false;
console.log(a.prop.bool); // logs false ¿?
今天我在javascript中遇到了這個問題,不知道它爲什麼會發生。爲什麼在JavaScript中發生這種情況?
var a = {
prop: {
bool: true
}
};
console.log(a.prop.bool); // logs true
var b = a;
b.prop.bool = false;
console.log(a.prop.bool); // logs false ¿?
表達式{ prop: ... }
表達式被評估一次以創建一個對象。
a
和b
都是參考到那個單一的對象。
參見What's the difference between passing by reference vs. passing by value?和http://en.wikipedia.org/wiki/Reference_(computer_science)
參考文獻廣泛用於編程,特別是能夠有效地傳遞大的或可變的數據作爲參數的程序,或各種用途之間共享這些數據。
編輯
clone
從下劃線不淺拷貝。
創建對象的淺拷貝克隆。任何嵌套對象或數組將被引用複製,而不是重複。
要創建深層副本,最簡單的方法可能是序列化和反序列化。這會做奇怪的事情,如果a
有參考週期雖然。
var b = JSON.parse(JSON.stringify(a));
。
您已創建對同一對象的引用。當你這樣做時,變量b的任何變化都會影響存儲在變量a中的對象。
您需要對該對象執行「克隆」以更改它,以便您有兩個對象,而不是一個帶有兩個引用的對象。
請注意,沒有「對象b」和「對象a」,只有一個對象(並且它沒有姓名) –
@ŠimeVidas很好,我已經解決了這個問題。 – FreeSnow
-1:你將它標記爲「參考」,所以你至少清楚地知道它的一些內容。在網上搜索「javascript變量參考」提供了很多解釋......所以這個問題並沒有顯示研究工作。 –
對不起,我真的找了答案,但沒有找到像我一樣準確的答案。 – Datamosh