变量赋值 - Javascript 赋值问题

variable assignment - Javascript assignation issue

本文关键字:赋值 问题 Javascript 变量      更新时间:2023-09-26

我试图更改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}}