javascript中数据类型分为基本数据类型和引用数据类型两种,基础数据类型值存在栈内存,引用数据类型在栈内存中存的是地址的引用,真正的数据存储在堆内存。
基础数据类型变量数据是独立存储在栈内存的,修改值互不影响。
引用数据类型中指向的是同一个内存地址,改变值互相影响。
所以,可以通过深拷贝来区分,单独在对内存开辟一块新的内存空间。
深拷贝的实现:
简单版(只限JSON格式数据):
JSON.parse(JSON.stringify(obj));
通用版(递归实现):
function deepCLone(obj) {
let result;
if(typeof obj === 'object') {
if(Array.isArray(obj)) {
result = [];
for(let i in obj) {
result.push(deepClone(obj[i]))
}
} else if (obj === null){
result = null
} else if (obj.constructor === RegExp){
result = obj
} else {
result = {};
for(let i in obj) {
result[i] = deepClone(obj[i])
}
}
} else {
result = obj;
}
return result;
}