簡體   English   中英

為什么這會在javascript中發生?

[英]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: ... }表達式被計算一次以創建一個對象。

ab都是對該單個對象的引用

請參閱傳遞參考與傳遞值之間的區別是什么? 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM