亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js深克隆和淺克隆同時存在引發的問題?

js深克隆和淺克隆同時存在引發的問題?

繁花不似錦 2019-03-25 11:16:00
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);


查看完整回答
反對 回復 2019-03-25
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

因為 Object.assign{target, source} 第一個參數為目標對象,會改變對象中的值的。

因此第二次執行 Object.assign 其實是朝同一個 target 上拷貝。

不信你試試執行一下:

console.log(cloneObject === deepObject);

看一下是不是返回的 true。


查看完整回答
反對 回復 2019-03-25
  • 2 回答
  • 0 關注
  • 1132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號