对象深拷贝的方法
1.for循环,有局限性
只能深拷贝一层。
<script>
var obj0 = {
name: '小明',
age: 20
};
var obj = {}
for (var key in obj0) {
console.log(obj0[key])
obj[key] = obj0[key];
}
console.log(obj)
console.log(obj0)
obj.age = 15;
console.log(obj)
console.log(obj0)
</script>
2.JSON暴力转换
有缺点,比如NaN数值会转换为null
<script>
var obj0 = {
name: '小明',
age: 20
};
var obj = {}
obj = JSON.parse(JSON.stringify(obj0))
obj.age = 1
console.log(obj)
console.log(obj0)
</script>
3.递归(自己调用自己)(如果对象中还有一个对象)
<script>
var obj0 = {
name: '小明',
age: 20,
per: {
sex: '男'
}
};
var obj = {}
function deepClone(oldObj, newObj) {
for (var key in oldObj) {
// console.log(obj0[key])
if (typeof oldObj[key] === 'object') {
newObj[key] = {}
deepClone(oldObj[key], newObj[key])
}
else {
newObj[key] = oldObj[key];
}
}
// console.log(newObj)
// console.log(oldObj)
}
deepClone(obj0, obj)
console.log(obj)
console.log(obj0)
obj.per.sex = '女'
console.log(obj)
console.log(obj0)
</script>
4.利用Object.assign(‘{}’,‘源对象’),(只能做一层深拷贝
将源对象的属性和属性值赋给目标对象,但是不会覆盖目标对象本身有的属性和属性值,注意在用此方法的时候目标对象必须是一个空对象