簡體   English   中英

給它賦值時 javascript 對象的奇怪行為

[英]weird behavior of javascript objects when assigning a value to it

我想理解這個讓我困惑的概念。

假設我有以下邏輯:

function test(){
    var jsonObj_1 = {};
    var jsonObj_2 = {};
    
    jsonObj_2 = jsonObj_1;
    jsonObj_2.myKey = 3;

    console.log(jsonObj_2) // result => {myKey:3}
    console.log(jsonObj_1) // result => {myKey:3}

}

我的問題是為什么jsonObj_1永遠不會被分配時等於{myKey:3} ?!

您正在 jsonObj_2 中分配 jsonObj_1 的引用。 簡單來說就是第一個變量的地址。 我建議您通過引用和按值調用來閱讀一些隨叫隨到的文檔。

你需要的是Object.assign

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }

這里的例子: https : //googlechrome.github.io/samples/object-assign-es6/

當使用“=”分配非原始變量時,引用也將被復制。 這可能會導致分配給特定對象的所有變量發生突變。

請嘗試以下操作。

您可以使用 JSON.stringify 將其轉換為字符串,然后解析為 JSON.parse。

jsonObj_2= JSON.parse(JSON.stringify(jsonObj_1));

您可以使用擴展運算符。

jsonObj_2 = {...jsonObj_1}

JavaScript 對象是可變的。 它們是通過引用而不是值來尋址的。

如果 jsonObj_1 是一個對象,以下語句不會創建 jsonObj_1 的副本:

 var jsonObj_2 = jsonObj_1 ; // This will not create a copy of jsonObj_1.

對象 jsonObj_2 不是 jsonObj_1 的副本。 它是 jsonObj_1。 jsonObj_2 和 jsonObj_1 都是同一個對象。

對 jsonObj_2 的任何更改也會更改 jsonObj_1,因為 jsonObj_2 和 jsonObj_1 是同一個對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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