<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
var obj1 = {
name: "mumu",
age: 18,
friend: [
"小红", "小丽", "小明", {
name: "10086",
say() {
alert("您的话费余额不足")
}
}
]
}
// 浅拷贝只能拷贝值类型(简单数据类型)
// 1.浅拷贝 for in
var obj2={};
for(var k in obj1){
obj2[k]=obj1[k]
}
// 2.Object.assign()
var obj=Object.assign(obj1)
// 3.扩展拷贝
var obj4={...obj1}
// 深拷贝,拷贝引用类型(相互不影响)
// 1转字符串
var str=JSON.stringify(obj1)//先转字符串
var obj5=JSON.parse(str)//字符串转对象
// 只能是string number null undefined {} []
// dom节点,方法函数会丢失
// 2.递归
function deepCopy(obj){
if(typeof obj !='object'||typeof obj == null){
return obj;
}else{
// 如果是数组
if(obj instanceOf Array){
temp=[]
for(var i=0;i<obj.length;i++){
temp[i]=deepCopy(obj[i])
}
}else{
temp={}
for(var k in obj){
temp[k]=deepCopy(obj[k])
}
}
return temp;
// 如果是对象
}
}
var obj6=deepCopy(obj1)
// 检测obj不等于引用类型或者等于空就返回
// 否则检测为数组就拷贝遍历出来当碰到是引用类型
// 是基本数据类型的值直接返回
// 不是就在往下走是对象就走下面for in ,进行会一层一层复制
//这段话是自己总结的自己对这段代码的翻译仅供参考
</script>
</html>