浅、深拷贝
深拷贝和浅拷贝的区别
最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用。
深拷贝在计算机中开辟了一块内存地址用于存放复制的对象,而浅拷贝仅仅是指向被拷贝的内存地址,如果原地址中对象被改变了,那么浅拷贝出来的对象也会相应改变
实现浅拷贝(克隆、复制)
var dese = {
name: 'dese',
age: '18',
like: ['LOL', 'smoking', 'drinking']
girlFriend: {
gf1: {name: 'gf1'},
gf2: {name: 'gf2'}
}
}
var obj = {}
for(var key in dese){
if(dese.hasOwnProperty(key)){
obj[key] = dese[key]
}
}
实现深拷贝
利用递归去复制所有层级属性
var dese = {
name: 'dese',
age: '18',
like: ['LOL', 'smoking', 'drinking']
girlFriend: {
gf1: {name: 'gf1'},
gf2: {name: 'gf2'}
}
}
var obj = {}
function deepClone(origin, target){ //origin父级 target子级
var target = target || {}
for(var key in origin){
//过滤非对象
if(origin.hasOwnProperty(key)){
if(typeof(origin[key] === 'object')){
//如果是object类型
if(Object.prototype.toString.call(origin[key]) === '[object Array]'){
target[key] = []
}else{
target[key] = {}
}
deepClone(origin[key], target[key])
}else{
//非对象类型
target[key] = origin[key]
}
}
}
return target
}