Javascript分配问题
我试图更改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} 有人能解释为什么会发生这种情
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方法。