Javascript 分配问题
Javascript assignation issue
我试图更改 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}}
我试图更改 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}}