Javascript分配问题

Javascript分配问题,javascript,variable-assignment,Javascript,Variable Assignment,我试图更改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} 有人能解释为什么会发生这种情

我试图更改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
通过不显示属性来保护自己不受无限递归的影响。

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

您正在将
b
属性添加到现有对象


它没有显示在日志中,因为
console.log
通过不显示属性来保护自己不受无限递归的影响。

a.b=a
只是将
a.b
指定为对
a
的引用,这会导致
a
成为递归对象:

vara={e:1,f:2};
a、 b=a;
控制台日志(a.e,a.f)//1 2
控制台日志(a.b.e,a.b.f)//1 2
控制台日志(a.b.b.e,a.b.b.f)//1 2

控制台日志(a.b.b.e、a.b.b.f)//1 2
a.b=a
仅将
a.b
指定为对
a
的引用,从而使
a
成为递归对象:

vara={e:1,f:2};
a、 b=a;
控制台日志(a.e,a.f)//1 2
控制台日志(a.b.e,a.b.f)//1 2
控制台日志(a.b.b.e,a.b.b.f)//1 2

控制台日志(a.b.b.e、a.b.b.f)//1 2
哪个浏览器?在Firefox的
控制台中,log
会显示
b
@scimonester-无论OP使用的是什么浏览器。哪个浏览器?在Firefox
控制台中,log
确实显示了
b
@scimonester-无论OP使用的是什么浏览器。在您的示例中,
JSON.parse
JSON.stringify
组合不是必需的,因为您已经为
a
分配了一个新对象
a={b:a}
应该具有smae效果。谢谢,@t.niese,我不知道为什么我认为需要JSON方法。在您的示例中,
JSON.parse
JSON.stringify
组合不是必需的,因为您已经为
a
分配了一个新对象
a={b:a}
应该具有smae效果。谢谢,@t.niese,我不知道为什么我认为需要JSON方法。