js深克隆和淺克隆同時存在引發(fā)的問題?學(xué)習(xí)object.assign寫的demo, 下面現(xiàn)象一直不得其解相關(guān)代碼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);淺克隆和深克隆單獨執(zhí)行,結(jié)果都正常,一起執(zhí)行的話,輸出如下:期待淺克隆輸出true, 深克隆輸出false, 期待給出你的答案
2 回答

手掌心
TA貢獻1942條經(jīng)驗 獲得超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條經(jīng)驗 獲得超9個贊
因為 Object.assign{target, source} 第一個參數(shù)為目標(biāo)對象,會改變對象中的值的。
因此第二次執(zhí)行 Object.assign 其實是朝同一個 target 上拷貝。
不信你試試執(zhí)行一下:
console.log(cloneObject === deepObject);
看一下是不是返回的 true。
添加回答
舉報
0/150
提交
取消