浅拷贝:
深拷贝:
浅拷贝的实现(Object.assign):
let x = {
a: 1,
b: {f:{g:1}},
c: [1,2,3]
}
let y = Object.assign({},x)
console.log(y.b.f === x.b.f); //true
深拷贝的两种实现方式:
方式一:JSON.parse(JSON.stringify(copyObj))
「优点」:使用简单
「缺点」:
- 如果对象里的函数,正则,date无法被拷贝下来。
- 无法拷贝copyObj对象原型链上的属性和方法。
- 当数据的层次很深,会栈溢出。
方式二:手写拷贝
「优点」:可以考虑到各种情况
「缺点」:实现较为复杂
// 手写深拷贝函数
function deepClone(obj) {
if(typeof obj !== 'object' || obj == null) {
return obj;
}
let objClone;
if(obj instanceof Array) {
objClone = [];
}
else {
objClone = {};
}
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
// 如果还是对象,就递归
if(obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
return objClone
}
// 测试
let person = {
name: 'zhangsan',
friends: {
name: 'lisi'
}
}
let person2 = deepClone(person)
person2.friends.name = 'wangwu'
console.log(person);
console.log(person2);
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!