js深克隆和淺克隆同時存在引發的問題?學習object.assign寫的demo, 下面現象一直不得其解相關代碼const target = {
a: 1,
b: 2};const source = {
c: {
deep: false
},
d: [1,2,3]
};let cloneObject = Object.assign(target, source); // or {...source}// deep clone methodlet deepObject = Object.assign(target, JSON.parse(JSON.stringify(source)));
source.c.deep = true;
source.d[0] = 4;console.log(cloneObject);console.log(deepObject);淺克隆和深克隆單獨執行,結果都正常,一起執行的話,輸出如下:期待淺克隆輸出true, 深克隆輸出false, 期待給出你的答案
2 回答

手掌心
TA貢獻1942條經驗 獲得超3個贊
const target = {
a: 1, b: 2 }; const source = { c: { deep: false }, d: [1,2,3] }; let cloneObject = Object.assign({},target, source); // or {...source} // deep clone method let deepObject = Object.assign({},target, JSON.parse(JSON.stringify(source))); source.c.deep = true; source.d[0] = 4; console.log(cloneObject); console.log(deepObject);

慕少森
TA貢獻2019條經驗 獲得超9個贊
因為 Object.assign{target, source} 第一個參數為目標對象,會改變對象中的值的。
因此第二次執行 Object.assign 其實是朝同一個 target 上拷貝。
不信你試試執行一下:
console.log(cloneObject === deepObject);
看一下是不是返回的 true。
添加回答
舉報
0/150
提交
取消