我最近在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);
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",
"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"
}
}
我理解到,因为
d.e
是一个“对象”,且可变,所以它的值会一直变化,这是可以接受的。但是,当我尝试使用 ...
扩展语法时,对象的第一个值(a.a
)发生了改变,但第二个值(b.b
)没有发生改变。我有遗漏什么吗?
额外信息:
在以下浏览器中进行了测试:
- macOS 上的 Chrome,版本 71.0.3578.98(官方版本)(64 位)
- Windows 上的 Chrome,版本 70.0.3538.110(官方版本)(32 位)
:)
- Praveen Kumar Purushothamana
,而不是复制a
。 - dandavisd = Object.assign(a, ...)
这行代码后,你感到困惑是因为此时d === a
。 - Bergi