[英]Why does this happen in 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
都是對該單個對象的引用 。
請參閱傳遞參考與傳遞值之間的區別是什么? 和http://en.wikipedia.org/wiki/Reference_(computer_science)
引用被廣泛用於編程,尤其是有效地將大型或可變數據作為參數傳遞給程序,或者在各種用途之間共享這些數據。
編輯
從下划線clone
做一個淺拷貝。
創建對象的淺復制克隆。 任何嵌套對象或數組都將通過引用復制,而不是重復 。
要創建深層副本,最簡單的方法可能是序列化和反序列化。 如果a
參考周期,這將做奇怪的事情。
var b = JSON.parse(JSON.stringify(a));
您已創建對同一對象的引用。 執行此操作時,變量b的任何更改都將影響存儲在變量a中的對象。
您將需要對對象進行“克隆”以更改它,因此您有兩個對象而不是一個具有兩個引用的對象。
當你通過引用將b分配給一個賦值時,b將引用內存中的相同位置作為a,這樣當b更新並且你觀察到它看起來像a也被更新了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.