javascript 深拷贝写法

本文介绍了两种常见的JavaScript对象拷贝方法:一种利用JSON格式化进行简单拷贝,适用于基本对象;另一种通过递归实现深拷贝,能处理复杂对象结构,包括函数与循环引用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拷贝目标:target, 新对象:newObj

第一种写法:

JSON.parse(JSON.stringify(target))复制代码

这种写法比较简单轻便,但是拷贝目标必须遵从JSON的格式,当遇到层级较深,且序列化对象不完全符合JSON格式时,该方法就有些不妥。

let target = {
  a: '1',
  b: '2',
  c: function func() {
    console.log('copy test')
  }
}
let newObj = JSON.parse(JSON.stringify(target))
// newObj: {a: "1", b: "2"}复制代码

但是,目前在项目不少部分,我都有使用该方法。


第二种写法:

// 深拷贝函数
function deepCopy (target) {
  let result
  if (target !== null && typeof target === 'object') {
    try {
      if (Array.isArray(target)) {
        result = []
        for (let key = 0; key < target.length; key++) {
          result[key] = deepCopy(target[key])
        }
      } else {
        result = {}
        for (let key in target) {
          result[key] = deepCopy(target[key])
        }
      }
    } catch (e) {
      return result
    }
  } else {
    result = target
  }
  return result
}复制代码

这种写法能够避免第一种方法的一些问题。

请大家多多指教


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值