javascript对象深克隆的实现

209 阅读1分钟

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;
}