var obj = {
name: 'zhangsan',
age: '18',
msg: {
sex: '男'
},
hobbies: ['唱歌', '跳舞']
}
// 函数实现深拷贝
var o = {}
function deepCopy(newobj, oldobj) {
for (var k in oldobj) {
//获取属性值 判断属性值属于什么数据类型
var item = oldobj[k]
if (item instanceof Array) {
newobj[k] = []
deepCopy(newobj[k], item)
} else if (item instanceof Object) {
newobj[k] = {}
deepCopy(newobj[k], item)
} else {
newobj[k] = item
}
}
}
deepCopy(o, obj)
// 循环实现浅拷贝
for (var k in obj) {
// k是属性名 obj[k]是属性值
o[k] = obj[k]
}
浅拷贝:对于复杂数据类型,因为共用一个地址,改变拷贝后的数据对源数据也会做修改,如:改变sex后,源数据也会跟着改变。
深拷贝:对于复杂数据类型,改变拷贝后的数据对源数据不会有影响。
ES6新增assign()方法实现浅拷贝 使用:Object.assign(拷贝给谁, 要拷贝的对象)
var obj = {
name: 'yyqx',
age: 20
}
var o = {}
// Object.assign(o, obj) ES6实现浅拷贝
// console.log(o)