我遇到了一个有趣的情况。 如果您看到代码,则更容易理解,因此可以开始:
class test {
constructor() {
this.nested;
this.nested = [{test:'helloWorld'}];
this.meth();
}
meth() {
console.log(this.nested);
this.nested[0].test = 'foo';
console.log(this.nested);
}
}
new test();
奇怪的行为是当我在Firefox,Safari或Chrome中运行此代码时。控制台显示:
0: Object { test: "foo" }
0: Object { test: "foo" }
代替:
0: Object { test: "helloWorld" }
0: Object { test: "foo" }
我在CodePen上做了一个示例:here 在CodePen中,它输出预期的“ helloWorld”,然后输出“ foo”。
有人可以解释吗?我遇到了这个问题,对此感到非常困惑。我只想知道为什么浏览器不按CodePen中的预期方式运行。
编辑: 假设代码是这样的:
meth() {
console.log(this.nested);
var bar = this.nested.slice();
this.nested[0].test = 'foo';
console.log(bar);
console.log(this.nested);
}
所有三个仍然记录为“ foo”。 bar变量是否应该不记录“ helloWorld”?
编辑: 如果我放:
var bar = Object.assign({}, this.nested[0]);
该代码有效。我想我没有正确复制对象...