提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
深浅拷贝
1.浅拷贝
代码如下(示例):
//浅拷贝:拷贝就是复制,就相当于把一个对象中的所有的内容,复制一份给另一个对象,
//直接复制,或者说,就是把一个对象的地址给了另一个对象,他们指向相同,两个对象之间有共同的属性或者方法,都可以使用
// 第一种:
var obj1 = {
age: 10,
sex: "男",
car: ["奔驰", "宝马", "特斯拉", "奥拓"]
};
//另一个对象
var obj2 = {};
//写一个函数,作用:把一个对象的属性复制到另一个对象中,浅拷贝
//把a对象中的所有的属性复制到对象b中
function shallowCopy(obj,targetObj){
for (let key in obj){
targetObj[key] = obj[key];
}
}
shallowCopy(obj1, obj2);
console.dir(obj2);//开始的时候这个对象是空对象
console.dir(obj1);//有属性
//change car attribute
obj1.car.push("奥迪");
//the car of obj2 change,too.for the point of the car in obj2 is same as the obj1
console.log(obj2.car);
// 第二种
var obj3 = obj1;
console.dir(obj3);
2.深拷贝
//深拷贝:拷贝还是复制,深:把一个对象中所有的属性或者方法,一个一个的找到.并且在另一个对象中开辟相应的空间,一个一个的存储到另一个对象中
var obj1 = {
age: 10,
sex: "男",
car: ["奔驰", "宝马", "特斯拉", "奥拓"],
dog: {
name: "大黄",
age: 5,
color: "黑白色"
}
};
var obj2 = {};//空对象
//通过函数实现,把对象a中的所有的数据深拷贝到对象b中
// use recursion
function deepCopy(obj,targetObj){
for (let key in obj){
let item = obj[key];
if (item instanceof Array){//if array
targetObj[key] = [];
deepCopy(item,targetObj[key]);
}else if (item instanceof Object){//if object
targetObj[key] = {};
deepCopy(item,targetObj[key]);
}else {//normal attribute
targetObj[key] = obj[key];
}
}
}
deepCopy(obj1,obj2);
console.dir(obj1);
console.dir(obj2);
总结
以上就是深浅拷贝。