搜尋

首頁  >  問答  >  主體

javascript - 關於遞歸複製物件程式碼的疑問

雷雷
淡淡烟草味淡淡烟草味2751 天前519

全部回覆(2)我來回復

  • 黄舟

    黄舟2017-05-19 10:27:31

    1. 判斷目前obj是物件還是數組,如果是數組,則 result 也是數組,否則 result 是普通物件

    2. 你的理解錯了,這句話的意思是如果 obj 存在,并且是对象

    3. 如果不是引用類型(物件),則說明當前鍵的值是基礎類型,則直接將對應新的 result 對應的 key 也設為這個值就可以了

    by the way. 因為深拷貝一個物件有可能會造成記憶體洩漏問題。因為 key 有可能引用一個類型,從而在內部引用自身造成記憶體洩漏,所以深拷貝在遇到引用類型的 key 時會僅把 heap 記憶體的位址進行複製。

    而且題目中第一行透過判斷splice 來判斷是數組還是物件是不嚴謹的,萬一物件下有個叫splice 的屬性剛好是函數呢,Array.isArray 方法的支持度很好,可以換成這個。

    ES6的話直接 Object.assign() 就好

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:27:31

    1. 判斷obj是物件還是陣列,因為陣列才有splice方法,如果obj.splice有回傳值說明obj是陣列,那麼result也是陣列,否則result就是物件。

    2. if(obj存在,且obj是物件),因為null的typeof也是object,多一步判斷可以去掉null。

    3. 如果是複製的值是一個private值,那么就直接赋值就可以,如果是对象,那么就像上一步一样递归的复制对象,直到复制的值是private值為止。

    說到淺複製、深複製,不要臉的推薦給你看一篇自己寫的文章...
    /a/11...

    回覆
    0
  • 取消回覆