Js浅拷贝与深拷贝

258 阅读1分钟

浅拷贝

浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。

浅拷贝的实现方式

1.Object.assign()

2.函数库lodash的_.clone方法

3.展开运算符...

4.Array.prototype.concat()

5.Array.prototype.slice()

深拷贝

深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。

深拷贝的实现方式

1.JSON.parse(JSON.stringify())

2.函数库lodash的_.cloneDeep方法

3.jQuery.extend()方法

4.手写递归方法

深拷贝的问题

1.循环引用(对象成环)

2.键不是字符串而是 Symbol

3.拷贝原型上的属性

4.拷贝不可枚举的属性

5.拷贝函数

回答问题:

赋值、浅拷贝、深拷贝的区别

参考:

ES6时代,你真的会克隆对象吗(二)

浅拷贝与深拷贝

Javascript经典面试之深拷贝VS浅拷贝

【进阶4-1期】详细解析赋值、浅拷贝和深拷贝的区别

【进阶4-2期】Object.assign 原理及其实现

【进阶4-3期】面试题之如何实现一个深拷贝

【进阶4-4期】Lodash是如何实现深拷贝的

深入深入再深入 js 深拷贝对象

如何写出一个惊艳面试官的深拷贝?

面试官:请你实现一个深克隆