# 对象拷贝
应该有朋友面试时碰到过,深拷贝和浅拷贝的问题...
# 浅拷贝
把要拷贝对象的
属性
一个一个的复制,碰到值是基本类型
直接复制值,碰到值是对象类型
,直接复制指针。 问题:改变复制后的对象内,值的引用的数据,会影响原对象
Object.assign()
(opens new window) es6新增
将所有可枚举属性的值从
一个或多个源对象
分配到目标对象
。方法最后返回目标对象
var obj = {
num1: 1,
num2: 2
};
var newObj = Object.assign({}, obj); // 利用assign的特性,可以实现浅拷贝
// 浅拷贝存在的问题
var obj = {
num1: 1,
person: {
age: 18
}
};
var newObj = Object.assign({}, obj);
newObj.person.age = 20;
console.log(newObj.person.age); // 20
console.log(obj.person.age); // 20
# 深拷贝
把要拷贝对象的
属性
一个一个的复制,碰到值是基本类型
直接复制值,碰到值是对象类型
,递归
进行复制。 问题:有循环引用
的问题,但可以解决。
// 简单方法
var newObj = JSON.parse( JSON.stringify(obj) );
// 需要保证对象是JSON完全的,只适用于部分情况。
// 没有解决循环引用的问题
由于深拷贝设计的知识比较多,包括:值类型的判断
、使用map来解决循环引用
、使用weakMap来优化内存
等内容,这里就先简单介绍一下概念,感兴趣的朋友可以看看这篇文章。
如何写出一个惊艳面试官的深拷贝? (opens new window)
如果觉得内容对你有帮助,请点个赞和关注,你们的鼓励是我持续更新下去的动力,比心。
如需转载请注明出处,感恩。
更多内容可先关注GitHub (opens new window)