深拷贝
<script>
const obj1={
age:20,
name:22,
address:{
city:'guangzhou'
},
arr:['a','b','c']
}
const obj2=deepClone(obj1)
obj2.address='shanghai'
obj2.arr[0]='d'
console.log(obj2);
console.log(obj1);
function deepClone(obj){
if(typeof obj !=='object'||obj==null){
//obj是null或不是数组和对象,直接返回
return obj
}
let result
if(obj instanceof Array){
result = []
}else{
result = {}
}
for(let key in obj){
//保证key不是原型的属性
if(obj.hasOwnProperty(key)){
//递归调用
result[key]=deepClone(obj[key])
}
}
return result
}
</script>
==与===
除了==null外其他地方一律用===
const obj = {x:100}
if(obj.a == null){}
//相当于if(obj.a === null || obj.a === undefined){}
typeof能识别哪些类型
- undefined string number boolean symbol
- object(typeof null===object)
- function
引用类型:{},[],fn(){},null (引用类型是浅拷贝,值类型是深拷贝)