案例:
var a = {
name: '小明',
age: 19,
hobby: ['唱', '跳', 'rap', '篮球'],
};
实现对象的深拷贝
案例分析:
1、创建deepCopy的方法实现传入一个对象,返回一个新的对象
2、新对象与就对象属性值完全相等,但是两个对象不共享同一块内存
3、可以通过 obj.constructor === Array 判断属性是否是数组
代码:
<script>
var a = {
name: '小明',
age: 19,
hobby: ['唱', '跳', 'rap', '篮球'],
};
function deepCopy(obj) {
var newobj = obj.constructor === Array ? [] : {};
if (typeof (obj) !== "object") { //若不是数组或对象直接返回
return obj;
} else {
for (var key in obj) {
if (typeof (obj[key]) === "object") { //判断是数组或对象
newobj[key] = deepCopy(obj[key]); //递归 ['唱','跳','rap','篮球']
} else {
newobj[key] = obj[key]
}
}
}
return newobj; //返回深拷贝数组或对象
}
var b = deepCopy(a);
a.name = "小华";//修改a的name值
console.log(a, b);
</script>