奇怪的JavaScript行为何时:对象在数组内部在对象内部

时间:2018-06-21 23:32:30

标签: javascript google-chrome firefox browser safari

我遇到了一个有趣的情况。 如果您看到代码,则更容易理解,因此可以开始:

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]);

该代码有效。我想我没有正确复制对象...

0 个答案:

没有答案