繁体   English   中英

Object.assign的奇怪行为

[英]Weird behaviour of Object.assign

我最近在JavaScript中尝试使用Spread Syntax,结果很奇怪,也很疯狂,可以发布这个问题。 我对Spread Syntax的假设是它类似于Object.assign() ,但是它会随着相同性质的变量而变化吗?

 a = {a: "a"}; b = {b: "b"}; c = {c: "c"}; d = {d: {e: "e"}}; d = Object.assign(a, b, c, d); e = { ...a, ...b, ...c, ...d }; console.log("Before Variable Change"); console.log(d); console.log(e); aa = "s"; bb = "t"; dde = "f"; console.log("After Variable Change"); console.log(d); console.log(e); 
 .as-console-wrapper {max-height: 100% !important; height: 100% !important;} 

我得到的结果是:

Before Variable Change
{
  "a": "a",
  "b": "b",
  "c": "c",
  "d": {
    "e": "e"
  }
}
{
  "a": "a",
  "b": "b",
  "c": "c",
  "d": {
    "e": "e"
  }
}
After Variable Change
{
  "a": "s",
  "b": "b",
  "c": "c",
  "d": {
    "e": "f"
  }
}
{
  "a": "a",
  "b": "b",
  "c": "c",
  "d": {
    "e": "f"
  }
}

我可以理解de的价值总会因其“对象”性质而改变,而且它们是可变的,所以被接受。 但是当我尝试使用... spread语法时, 对象的第一个值被改变( aa )而不是第二个( bb 我在这里错过了什么吗?


额外信息:

用浏览器检查:

  • Chrome on MacOS,版本71.0.3578.98(官方版)(64位)
  • Windows上的Chrome版本70.0.3538.110(官方版本)(32位)

Object.assign()函数更改第一个对象参数的内容,即a 那也是返回值,所以在第一个设置d值的Object.assign()调用之后, d === a就是真的。

因此,将“s”分配给aa也将改变da因为da引用相同的对象。

只需添加我的两分钱,简单一点:

换句话说,扩展运算符执行此操作:

d = Object.assign({}, a, b, c, d);
e = { ...a, ...b, ...c, ...d };

现在两者都是一样的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM