黄舟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...