1.在 JS 中 Number String Boolean Null Undefined 为 基本数据类型 (存储在栈内存中)
2. Object Array Funtion 引用数据类型
( 使用的是地址,储存在堆内存中 -> 指针 ,一次修改其他地方引用会被修改, 引出浅拷贝和深拷贝的问题 )
// 手写深拷贝
function deepClone(obj){
// 判断是否对象可抽象成为一个函数
if (obj == null || typeof obj !== 'object') {
return obj
}
let result
if(obj instanceof Array){
result = []
}else{
result = {}
}
for (const key in obj) {
// 保证 key 不是原型的属性
if(obj.hasOwnProperty(key)){
// 递归调用!!!
result[key] = deepClone(obj[key])
}
}
return result
}
// 这里是先把引用类型先转换成普通类型,最后在转成引用类型,注意转换 Symbol 和 Function ( 该方法可满足挺多场景)
JSON.parse(JSON.stringify(obj))