javascript chrome控制台中带有push()方法的无限内部数组

Diw*_*kar 4 javascript arrays google-chrome-console

最近我push()在 javascript 中试验数组方法。我创建了一个数组,并使用 push 方法推送了相同的数组。

var a=['hello', 4]

a.push(a)

Run Code Online (Sandbox Code Playgroud)

结果令人惊讶,当我在 chrome 控制台中探索数组项时,产生了无限数组。我想知道为什么会这样。由于该push()方法在最后添加元素。

我期待这个结果

['hello, 4, ['hello',4]]
Run Code Online (Sandbox Code Playgroud)

但结果是别的东西,这是chrome控制台 问题截图的截图,在JavaScript中使用push方法的无限内部数组

Rob*_*ond 5

当您在 Javascript 中(实际上在大多数类似的语言中)将一个对象分配给一个变量时,该变量保存了对该对象的所谓“引用”。请注意,JS 中的数组是对象,但字符串和数字等原始值不是。

对象赋值是“通过引用”的一个结果是,您对该对象所做的任何更改——即使它对恰好引用同一对象的另一个变量所做的更改——将在您检查原始变量时“显示”。

所以在这里,你开始

var a=['hello', 4]
Run Code Online (Sandbox Code Playgroud)

然后做

a.push(a)
Run Code Online (Sandbox Code Playgroud)

然后a指向已更改的对象(数组)。现在它的末尾有一个额外的元素——也就是a我们正在谈论的数组。

所以它递归地扩展:

a = ['hello', 4, a]
  = ['hello', 4, ['hello', 4, a]]
  = ['hello', 4, ['hello', 4, ['hello', 4, a]]]
   ...
Run Code Online (Sandbox Code Playgroud)

等等,无穷无尽。这不需要无限量的内存,因为数组的第三个元素只是对保存数组的内存位置的引用。