浅复制
- 只是复制了引用,复制前后都指向同一个对象,彼此之间会相互影响
let o ={a:1}
let o1 = o;
console.log(o1 === o); //true
o1.a=2;
console.log(o.a); //2
深复制
- 在堆中重新分配内存,复制前后指向不同对象,彼此之间不会影响
- 如果源对象存在对象或数组属性,需要递归进行复制
实现方式
- 利用
JSON
对象中的parse,stringify
- 可以克隆变量,数组与JSON对象
-
jQuery
中的$.extend({}, x)
进行浅复制,$.extend(true, {}, x)
进行深复制 - 可以克隆变量,函数,数组与JSON对象
-
lodash
库的_.clone
进行浅复制_.cloneDeep
进行深复制 - 可以克隆变量,函数,数组与JSON对象
总结
- 浅复制时,新对象和原对象的所有成员都相等
- 深复制时,新对象和原对象函数和字符串相等,对象和数组因为指向不同,所以不等
- demo地址
参考文章推荐:
深入剖析 JavaScript 的深复制