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

问题描述 投票:2回答:2

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

var a=['hello', 4]

a.push(a)

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

我期待这个结果

['hello, 4, ['hello',4]]

但是结果不一样,这是chrome控制台的屏幕截图problem screenshot, infinite inner arrays using push method in JavaScript

javascript arrays google-chrome-console
2个回答
2
投票

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

[“通过引用”分配对象的结果是,即使您对碰巧引用同一对象的另一个变量所做的更改,即使对该对象进行的任何更改,都会在您检查原始变量时“显示”。] >

所以,这里开始

var a=['hello', 4]

然后做

a.push(a)

然后更改了a指向的对象(数组)。现在,它的末尾还有一个附加元素-a,与我们正在讨论的数组相同。

因此它递归扩展:

a = ['hello', 4, a]
  = ['hello', 4, ['hello', 4, a]]
  = ['hello', 4, ['hello', 4, ['hello', 4, a]]]
   ...

依此类推,无限。这不需要无限的内存,因为数组的第三个元素只是对保存数组的内存位置的引用。


0
投票

我认为罗宾完全描述了这种情况的原因。我想补充一点,您可以在javascript中使用rest参数将数组的元素添加到另一个元素。在下面,我带来了此类参数的示例:

© www.soinside.com 2019 - 2024. All rights reserved.