我试图更改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}
有人可以解释一下为什么会这样吗?
答案 0 :(得分:3)
在JS中分配值不会移动它,它会复制它。
您正在向现有对象添加b
属性。
它没有显示在日志中,因为console.log
通过不显示属性来保护自己免受无限递归。
答案 1 :(得分:2)
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}}