深拷贝和浅拷贝是指在复制对象时,是复制了对象的引用还是复制了对象本身。浅拷贝只复制对象的引用,而深拷贝则是复制对象本身。以下是JS中常见的深浅拷贝方法:

  1. 浅拷贝

浅拷贝可以使用Object.assign()或展开运算符(...)实现。

// 使用Object.assign()
const obj = { a: 1, b: { c: 2 } };
const copyObj = Object.assign({}, obj);

// 使用展开运算符
const obj = { a: 1, b: { c: 2 } };
const copyObj = { ...obj };
  1. 深拷贝

深拷贝可以使用JSON.parse(JSON.stringify())、递归等方法实现。但是需要注意,这些方法都有一些限制和注意事项。

// 使用JSON.parse(JSON.stringify())
const obj = { a: 1, b: { c: 2 } };
const copyObj = JSON.parse(JSON.stringify(obj));

// 使用递归
function deepClone(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }
  const copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepClone(obj[key]);
    }
  }
  return copy;
}

const obj = { a: 1, b: { c: 2 } };
const copyObj = deepClone(obj);

需要注意的是,使用JSON.parse(JSON.stringify())方法深拷贝时,无法复制函数、正则表达式等特殊对象;而使用递归方法深拷贝时,可能会出现循环引用的情况,需要处理循环引用的情况。

JS深浅拷贝的方法

原文地址: https://www.cveoy.top/t/topic/AMw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录