数据类型:
基本数据类型: Number/String/Boolean/null/undefined/Symbol
复合数据类型:Object
值传递:基本数据类型的值属于值传递,传递的是栈空间中的值
引用传递:复合数据类型属于引用传递,传递的是栈空间中的地址(堆地址)
复合数据类型才涉及到浅拷贝与深拷贝的问题。
浅拷贝的特点:
1. 拷贝的是对象的引用地址
2. 当我修改一个对象中的属性时,两个对象中的属性会同时改变。
<body>
<!-- 深浅拷贝(面试题) -->
<script>
//数据类型:
//基本数据类型: Number/String/Boolean/null/undefined/Symbol
//复合数据类型:Object
//值传递:基本数据类型的值属于值传递,传递的是栈空间中的值
//引用传递:复合数据类型属于引用传递,传递的是栈空间中的地址(堆地址)
//复合数据类型才涉及到浅拷贝与深拷贝的问题。
//浅拷贝的特点:
//1. 拷贝的是对象的引用地址
//2. 当我修改一个对象中的属性时,两个对象中的属性会同时改变。
let obj = {
a:1,
b:{
c:2,
d:{
e:3
}
}
}
//1. 浅拷贝
let obj1 = obj;
let obj2 = {...obj};
let obj3 = {};
for(let key in obj){
obj3[key] = obj[key];
}
//2. 深拷贝
function deepCopy(obj){
let object = {};
//遍历-递归
for(let key in obj){
//检测属性值是否为对象,且不能是null
if(typeof obj[key] === 'object' && obj[key] !== null){
//if(obj[key] instanceof Object)
object[key] = deepCopy(obj[key]);
}else{
object[key] = obj[key];
}
}
return obj;
}
let obj4 = deepCopy(obj);
</script>
</body>