浅拷贝
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- <script src="jquery.min.js"></script> -->
</head>
<body>
<script>
var obj = {
id : 1,
name: 'andy',
msg: {
age: 18
}
};
var o = {}
// for(var k in obj){
// o[k] = obj[k]
// }
// o.msg.age = 20
// console.log(o);
// console.log(obj);
// 浅拷贝是指拷贝地址 拷贝更深层次是当拷贝的对象发生变化 被拷贝的对象也会发生变化
Object.assign(o,obj);
o.msg.age = 20
console.log(o);
console.log(obj);
</script>
</body>
</html>
深拷贝
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var obj = {
id: 1,
name: 'andy',
msg: {
age: 18
},
color: ['pink', 'red']
};
var o = {
}
// 封装函数
function deepCopy(newobj, oldobj) {
for (var k in oldobj) {
// 判断我们的属性值属于那种数据类型
//获取属性值 oldobj[k]
var item = oldobj[k];
// 2.判断这个值是否是数组
if (item instanceof Array) {
newobj[k] = [];
deepCopy(newobj[k], item)
} else if (item instanceof Object) {
// 3.判断这个组是否是对象
newobj[k] = {};
deepCopy(newobj[k], item)
} else {
// 4.简单数据类型
newobj[k] = item;
}
}
}
deepCopy(o,obj);
console.log(o);
var arr = [];
console.log(arr instanceof Object);
o.msg.age = 20;
console.log((obj));
</script>
</body>
</html>