深入浅出JavaScript中的Object.assign()方法

Object.assign()介绍

        Object.assign()方法用于将一个或多个源对象的可枚举属性复制到目标对象中,并返回目标对象。它基于浅复制原则,只复制对象自身的属性,不复制继承自原型链上的属性。如果目标对象已经存在相同属性,则源对象的属性将覆盖目标对象的属性。

语法

Object.assign(target, ...sources)

  • `target`:目标对象,要将属性复制到的对象。
  • `sources`:一个或多个源对象,从中复制属性的对象。

情况一:如果后面对象的属性,比如source中存在属性b,而目标对象(第一个参数)中也存在属性b,则source里的属性b值,会覆盖前面的属性b值

// 复制对象,存在相同key,则后面覆盖前面的
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const result = Object.assign(target, source);
console.log(result); // { a: 1, b: 4, c: 5 }

情况二:Object.assign() 会改变第一个对象的值,后面对象的值不会改变

// 会改变第一个对象的值,后面的对象值不会变,遇到相同key,后面的值会覆盖前面的
const target1 = { a: 1, b: 2 };
const source1 = { b: 4, c: 5, d: 6};
Object.assign(target1, source1);
console.log(target1); // { a: 1, b: 4, c: 5, d: 6 }
console.log(source1); // { b: 4, c: 5, d: 6 }

情况三:如果想合并几个对象生成新的对象,并对原来的对象内容无影响,可以将Object.assign()的第一个参数设为空对象

// 合并对象
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 4, c: 5 };
const obj3 = { d: 6 };
const merged = Object.assign({}, obj1, obj2, obj3);
console.log(merged); // { a: 1, b: 4, c: 5, d: 6 }

所有代码:

// 复制对象
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const result = Object.assign(target, source);
console.log(result); // { a: 1, b: 4, c: 5 }


// 会改变第一个对象的值,后面的对象值不会变,遇到相同key,后面的值会覆盖前面的
const target1 = { a: 1, b: 2 };
const source1 = { b: 4, c: 5, d: 6};
Object.assign(target1, source1);
console.log(target1); // { a: 1, b: 4, c: 5, d: 6 }
console.log(source1); // { b: 4, c: 5, d: 6 }

// 合并对象
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 4, c: 5 };
const obj3 = { d: 6 };
const merged = Object.assign({}, obj1, obj2, obj3);
console.log(merged); // { a: 1, b: 4, c: 5, d: 6 }

 注意事项

  • Object.assign()方法不会拷贝对象的不可枚举属性、原型链属性以及方法。
  • 当源对象含有getter时,会触发getter的执行。
  • Object.assign()是浅复制,所以在处理嵌套对象时需要小心。

 Object.assign()方法是一个非常有用的工具,可以用于对象属性的复制和合并。它可以帮助我们轻松地操作对象,处理属性赋值和合并等任务。

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿小野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值