Javascript 分配问题

Javascript assignation issue

我试图更改 Javascript 对象的结构,但我不明白我从日志中收到的结果。

我有以下对象:a = {e: 1, f: 2}

我想把它移到 a.b

如果我这样做 a.b = a 那么我会收到这些结果:

console.log(a) // {e: 1, f: 2}
console.log(a.b) // {e: 1, f: 2}

虽然我期待这样的事情:

console.log(a) // {b: {e: 1, f: 2}}
console.log(a.b) // {e: 1, f: 2}

谁能解释一下为什么会这样?

在 JS 中赋值不会移动它,它会复制它。

您正在向现有对象添加 b 属性。

它没有显示在日志中,因为 console.log 通过不显示 属性 来防止无限递归。

a.b = a 简单地将 a.b 作为对 a 的引用赋值,这导致 a 成为递归对象:

var a = {e: 1, f: 2};
a.b = a;

console.log(a.e, a.f);  //1 2
console.log(a.b.e, a.b.f);  //1 2
console.log(a.b.b.e, a.b.b.f);  //1 2
console.log(a.b.b.b.e, a.b.b.b.f);  //1 2

要真正将 a 的属性移动到 a.b,您需要覆盖现有对象,为其现有值分配一个新的 属性 b :

var a = {e: 1, f: 2};

a = {b: a};

console.log(a);  //{b: {e: 1, f: 2}}