javascript chrome 控制台中使用 push() 方法的无限内部数组
infinite inner arrays with push() method in javascript chrome console
最近我在 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 中的一个变量时(实际上在大多数类似的语言中),该变量保存该对象的所谓 "reference" 。请注意,JS中的数组是对象,但字符串和数字等原始值不是。
对象赋值 "by reference" 的一个后果是您对该对象所做的任何更改 - 即使它对恰好引用同一对象的另一个变量所做的更改 - 将 "show up" 当您检查时原始变量。
所以在这里,你从
开始
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]]]
...
以此类推,无穷无尽。这不需要无限量的内存,因为数组的第三个元素只是对保存数组的内存位置的引用。
最近我在 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 中的一个变量时(实际上在大多数类似的语言中),该变量保存该对象的所谓 "reference" 。请注意,JS中的数组是对象,但字符串和数字等原始值不是。
对象赋值 "by reference" 的一个后果是您对该对象所做的任何更改 - 即使它对恰好引用同一对象的另一个变量所做的更改 - 将 "show up" 当您检查时原始变量。
所以在这里,你从
开始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]]]
...
以此类推,无穷无尽。这不需要无限量的内存,因为数组的第三个元素只是对保存数组的内存位置的引用。