let pppp = {
name: "duanxiao",
age: 1,
job: {
title: "~~~"
}
};
let ppppCopy = {};
({
name: ppppCopy.name,
age: ppppCopy.age,
job: ppppCopy.job
} = pppp);
pppp.job.title = "Hacker";
console.log(pppp);
console.log(ppppCopy);
輸出值是一樣的。
為什么修改一個物件的值,另一個物件也會被修改?
每當我修改一個物件的值時,另一個物件的值也會被修改。
uj5u.com熱心網友回復:
在 JS 和許多其他語言中,您有按值存盤的資料型別,如 Number 和其他基本型別。一些資料型別通過參考存盤,如陣列、物件。
通過析構pppp,你只是傳遞對內部job物件的參考,而不是復制它,所以從技術上講,它是和中的同一個job物件。ppppppppCopy
這里我對一個原語添加了一個操作,你可以看到有區別。
let pppp = {
name: "duanxiao",
age: 1,
job: {
title: "~~~"
}
};
let ppppCopy = {};
({
name: ppppCopy.name,
age: ppppCopy.age,
job: ppppCopy.job
} = pppp);
pppp.job.title = "Hacker";
pppp.age = 123;
console.log(pppp);
console.log(ppppCopy);
這是另一個相關的好答案
uj5u.com熱心網友回復:
因為你pppp和ppppCopy持有相同的參考job財產。改變位置會影響另一個。您可以使用 ES6 擴展運算子通過以下代碼實作預期結果,
let pppp = {
name: "duanxiao",
age: 1,
job: {
title: "~~~"
}
};
const ppppCopy = {
...pppp,
job: { ...pppp.job },
};
有了這個,更新pppp.job.title不會影響ppppCopy.job.title。
您也可以使用像 之類的傳統方法JSON.parse(JSON.stringify(pppp)),但是在使用這種方法時需要更加謹慎,因為它會剝離函式屬性
uj5u.com熱心網友回復:
唯一的方法是使用 JSON.parse(JSON.stringify(pppp));
name: "duanxiao",
age: 1,
job: {
title: "~~~"
}
};
let ppppCopy = JSON.parse(JSON.stringify(pppp));
pppp.job.title = "Hacker";
console.log(pppp);
console.log(ppppCopy);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534791.html
標籤:javascript
