<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 浅拷贝只拷贝第一层,深一层的只拷贝拷贝地址
var b={
id:1,
name:"name",
msg:{
age:20
}
}
//老方法循环浅拷贝
var o={};
for (var k in b){
o[k]=b[k];
}
console.log(o);
// msg属于深一层,所以拷贝地址,一个改变了就都改变,o里面也会变
o.msg.age=2;
console.log(b);
// Object.assign是浅拷贝的方法,将后面的拷贝进第一个
Object.assign(o,b);
console.log(o);
console.log("---深拷贝deepCopy---");
var obj={
id:1,
name:"andy",
msg:{
age:18
}
}
var ob={}
//深拷贝全部拷贝,而且不会因为值改变而改变值.
function getDeep(newObject,oldObject){
for (var k in oldObject){
if (oldObject[k] instanceof Array){
newObject[k]=[];
getDeep(newObject[k],oldObject[k]);
}else if (oldObject[k] instanceof Object){
newObject[k]={};
getDeep(newObject[k],oldObject[k]);
}else{
newObject[k]=oldObject[k];
}
}
}
getDeep(ob,obj);
console.log(ob);
</script>
</body>
</html>
浅拷贝与深拷贝代码(javascript)
最新推荐文章于 2022-11-04 19:54:47 发布