值类型
Number,String,Boolean,Symbol,undefined
通过栈存储
从上往下存储
栈
key | value |
---|---|
a | 100 |
引用类型
Array,Object,Null,Function
通过堆存储,在栈中存储的值是堆中的地址
栈
key | value |
---|---|
a | 内存地址 |
b | 内存地址 |
堆
内存地址 | {key:value} |
key | value |
堆从下往上存储,有可能和栈重合
typeof
能够识别所有的值类型,函数,识别引用类型的null、对象和数组时返回的是’Object’,不能更具体的识别,深拷贝时需要用instanceof来识别。
深拷贝
深拷贝要点,typeof和instanceof判断数据类型,递归遍历数组和对象
const obj = {
age: 20,
name: 'lkk',
address: {
city: 'zhengzhou'
},
arr: ['apple', 'banana']
}
//深拷贝
function deepClone(obj = {}) {
if (typeof obj !== 'object' || obj === null) {
//是空或者不是对象和数组的时候直接返回
return obj
}
let result
if (obj instanceof Array) {
result = []
} else {
result = {}
}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
//不是原型上的属性
result[key] = deepClone(obj[key])
}
}
return result
}
const copyObj = deepClone(obj)
copyObj.address.city = 'henan'
console.log(obj)
console.log(copyObj)
/*
控制台输出
{
age: 20,
name: 'lkk',
address: { city: 'zhengzhou' },
arr: [ 'apple', 'banana' ]
}
{
age: 20,
name: 'lkk',
address: { city: 'henan' },
arr: [ 'apple', 'banana' ]
}
*/