Javascript分配问题

时间:2016-07-14 09:14:38

标签: 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}

有人可以解释一下为什么会这样吗?

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}}