对象浅拷贝的5种方式

参考原文:浅拷贝的五种实现方式 - 掘金 (juejin.cn)

哈喽 大家好啊

最近发现自己对对象都不是很熟练,特别是涉及到一些复制,深浅拷贝的东西

1.Object.assign

 首先 我们创建一个空对象obj1  然后创建一个对象obj2 用object.assign(目标对象,源对象)

进行拷贝复制,打印出来obj1 发现完美复制obj2

然后我们修改obj2.info.age = 30 

 

 然后同时打印obj1  发现age属性值也变成了30

注意: Object.assgin为浅拷贝

  1. 它不会拷贝对象的继承属性
  2. 它不会拷贝对象的不可枚举属性
  3. 可以拷贝Symbol类型的属性 

2.扩展运算符也可以完成浅拷贝

const obj1 = {... obj2}

3.原生实现浅拷贝

const clone = (target) => {
  // 如果是引用类型
  if (typeof target === "object" && target !== null) {
    // 判断是数据还是对象,为其初始化一个数据
    const cloneTarget = Array.isArray(target) ? [] : {};
    
    // for in 可以遍历数组 对象
    for (let prop in target) {
      if (target.hasOwnProperty(prop)) {
        cloneTarget[prop] = target[prop];
      }
    }

    return cloneTarget;
  } else {
    // 基础类型 直接返回
    return target;
  }
};

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值