实现深拷贝要点:
1. 判断类型
2. 检查是否是对象自身属性,原型属性不做拷贝
3. 存在深层嵌套则递归调用
深拷贝的实现
function deepCopy(object) {
//判断被拷贝的对象是否为数组或对象,因为基本数据类型直接拷贝即可
if (!object || typeof object !== "object") return;
let newObject = object instanceof Array ? [] : {};
for (let key in object) {
// hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)
//只拷贝对象自身属性不拷贝原型上的属性
if (object.hasOwnProperty(key)) {
newObject[key] = deepCopy(object[key]) ;
}
}
return newObject;
}
hasOwnProperty() 方法使用参考链接
测试用例
const xiaoMing = {
name: 'xiaomei',
age: 34,
address: {
country: 'China',
province: 'Guangdong',
city: 'Cantoon'
},
car: ['BMW', 'GreatWall']
}
let xiaoBing = deepCopy(xiaoMing);
xiaoBing.name = 'xiaoBing';
xiaoBing.address = {
country: 'China',
province: 'Beijing',
city: 'Beijing'
};
xiaoBing.age = 22;
xiaoBing.car =['Audi','Bench'];
for (let key in xiaoMing) {
console.log(key, xiaoMing[key]);
}
for (let key in xiaoBing) {
console.log(key, xiaoBing[key]);
}