黄舟2017-05-19 10:27:31
判斷目前obj是物件還是數組,如果是數組,則 result 也是數組,否則 result 是普通物件
你的理解錯了,這句話的意思是如果 obj 存在,并且是对象
如果不是引用類型(物件),則說明當前鍵的值是基礎類型,則直接將對應新的 result 對應的 key 也設為這個值就可以了
by the way. 因為深拷貝一個物件有可能會造成記憶體洩漏問題。因為 key 有可能引用一個類型,從而在內部引用自身造成記憶體洩漏,所以深拷貝在遇到引用類型的 key 時會僅把 heap 記憶體的位址進行複製。
而且題目中第一行透過判斷splice
來判斷是數組還是物件是不嚴謹的,萬一物件下有個叫splice 的屬性剛好是函數呢,Array.isArray 方法的支持度很好,可以換成這個。
ES6的話直接 Object.assign()
就好
漂亮男人2017-05-19 10:27:31
判斷obj是物件還是陣列,因為陣列才有splice方法,如果obj.splice
有回傳值說明obj是陣列,那麼result也是陣列,否則result就是物件。
if(obj存在,且obj是物件),因為null的typeof
也是object,多一步判斷可以去掉null。
如果是複製的值是一個private
值,那么就直接赋值就可以,如果是对象,那么就像上一步一样递归的复制对象,直到复制的值是private
值為止。
說到淺複製、深複製,不要臉的推薦給你看一篇自己寫的文章...
/a/11...