为什么有值类型和引用类型?
考虑性能问题或者存储问题,因为值类型占用空间比较小,因为只有一个值,直接放没问题。引用类型太大直接放不好管理,直接复制值的话会非常慢。 计算机所有的程序,所有的语言,值类型和引用类型严格的分离出来,他们的存储机制,他们的赋值机制,他们的copy机制也是严格的分离出来,他是基于内存的空间,cup的计算耗时去做的区分。
typeof 运算符
识别所有值类型
- undefined
- string
- number
- boolean
- symbol
识别函数
- typeof console.log // function
- typeof function(){} //function
判断是否是引用类型(不可再细分)
- typeof null //object
- typeof ['a','b'] //object
- typeof {x:100} //object
解决引用类型赋值问题,深拷贝
const obj={
age:20,
name:'zhangsan',
address:{
city:'shenzheng'
},
arr:['a', 'b', 'c'],
wawa:[1,2,3,4,5]
}
const obj2=deepClone(obj)
obj2.name = '张三'
obj2.address.city = '深圳'
console.log('原数据--------', obj)
console.log('深拷贝--------', obj2)
//深拷贝
function deepClone(obj){
//obj是null,或者不是对象和数组,直接返回
//(object 是引用类型的对象、数组、null的typeof值)
if(typeof obj!=='object' || 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
}