Object.assign

发布于 2022-09-07 20:49:53 字数 201 浏览 19 评论 0

handleCancel (val) {
      Object.assign(this.modalFormData, val)
      // this.modalFormData = val
    }

请问下vue里面这两种赋值有区别吗?
下面那么写就有问题,也有可能是其他地方影响了,但是上面那样写就对了,是为什么勒?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

南城追梦 2022-09-14 20:49:53

Object.assign的目的是将 val中的所有属性复制给 this.modalFormData, 不等同于将val整个赋值给this.modalFormData。
举例,请自行对比

var modalFormData = {x:1};
var val = {y:2};
var newModal = Object.assign(modalFormData, val);
console.log(newModal);   // {x:1, y:2}
var modalFormData = {x:1};
var val = {y:2};
modalFormData = val;
console.log(modalFormData);   // {y:2}
夢归不見 2022-09-14 20:49:53

浅复制zsbd

┾廆蒐ゝ 2022-09-14 20:49:53

看 MDN

  1. 针对深拷贝,需要使用其他方法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。
  2. 如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。

所以 它可以做三件事

  1. 浅一层的深拷贝
  2. 合并对象
  3. 合并具有相同属性的值
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文