javascript-Object.assign的怪异行为

前端之家收集整理的这篇文章主要介绍了javascript-Object.assign的怪异行为 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我最近在JavaScript中使用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);

a.a = "s";
b.b = "t";
d.d.e = "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","d": {
    "e": "e"
  }
}
After Variable Change
{
  "a": "s","d": {
    "e": "f"
  }
}
{
  "a": "a","d": {
    "e": "f"
  }
}

我可以理解d.e的价值会因为其“对象”的性质而总是变化,并且它们是可变的,因此被接受.但是,当我尝试使用…扩展语法时,对象的第一个值被更改(a.a),但第二个值没有更改(b.b).我在这里想念什么吗?

额外信息:

通过浏览器检查:

> macOS上的Chrome,版本71.0.3578.98(正式版)(64位)
> Windows上的Chrome,版本70.0.3538.110(正式版本)(32位)

最佳答案
object.assign()函数更改第一个对象参数a的内容.这也是返回值,因此在第一个设置d值的object.assign()调用之后,d === a是正确的.

因此,将“ s”分配给a.a也将更改d.a,因为d和引用相同的对象.

只需以简单的方式加上我的两分钱:

换句话说,价差运算符执行以下操作:

d = Object.assign({},a,...d };

现在以上两个都相同.

原文链接:https://www.f2er.com/js/531107.html

猜你在找的JavaScript相关文章