最近我在javascript中尝试数组push()
方法。 我创建了一个数组,并使用 push 方法推送了相同的数组。
var a=['hello', 4]
a.push(a)
结果令人惊讶,当我在Chrome控制台中浏览数组项目时,产生了无限数组。 我想知道为什么会这样。由于push()
方法最后添加元素。
我期待这个结果
['hello, 4, ['hello',4]]
但结果是别的,这里是Chrome控制台的截图 问题截图,JavaScript 中使用 push 方法的无限内部数组
当你在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]]]
...
等等,无限。这不需要无限量的内存,因为数组的第三个元素只是对保存数组的内存位置的引用。