【问题标题】:Where is an array stored in memory in Javascript? [closed]Javascript 中的数组存储在内存中的什么位置? [关闭]
【发布时间】:2019-08-13 17:49:42
【问题描述】:

我们知道对象存储在堆区域中。

假设我们在声明的功能块内:

var a=[1,2] 

还有

var b=new Array(1,2)

这两个数组对象是存储在堆上还是a 在堆栈区有空间而b 会在堆上?

【问题讨论】:

  • 我很好奇:你为什么想知道?
  • 这取决于浏览器,对于 JS 开发者来说并没有太大的兴趣。我也很好奇你为什么想知道。

标签: javascript arrays heap-memory stack-memory


【解决方案1】:

无论您是使用数组初始值设定项(又名“数组文字”,[1, 2])还是使用Array 构造函数(new Array(1, 2))创建数组,它的存储位置都没有区别。

重新存储数组的位置:

这取决于 JavaScript 引擎的实现,因此可能因实现而异。

一些高级引擎使用转义分析来确定分配对象的位置,包括数组,这意味着它们可能分配在堆栈上,也可能分配在堆上,具体取决于引擎是否看到它们是函数的局部变量,或者它们对函数进行转义(例如,通过返回或分配给函数关闭的变量等)。


旁注:几乎没有任何理由使用new Array

【讨论】:

  • 我对您关于“..几乎从来没有任何理由使用新阵列”的说法有其他想法。昨天我尝试构建一个二维数组,其中二维不均匀。如果不使用 Array 构造函数和 .push() 使其不均匀,我将无法做到这一点。我已经看到太多的语言带走了太多的功能,考虑让它变得更简单,但它们最终反而削弱了整个语言。恕我直言
  • @xam T.J.可能是在告诉 new 关键字的使用?
  • @xam - 使用 new Array 构建 n 维数组并不比使用数组初始值设定项更容易。示例:jsfiddle.net/tjcrowder/pjqgusc8(旁注:JavaScript 没有多维数组。它有数组数组。)HTH!
  • 我花了一些时间研究您的示例,发现它与需要 Array 构造的 .push() 工作方式不同。 .push() 允许我以有序的方式盲目添加项目。虽然 [] 需要索引并跟踪添加项目的位置,以避免空槽或覆盖槽。但是谢谢你的好例子,@T.J.Crowder
  • @xam - push 不需要Array 构造函数:jsfiddle.net/tjcrowder/jnv1r5dh 无论您使用[] 还是new Array() 创建数组,它都完全相同。
猜你喜欢
  • 2021-01-17
  • 2021-10-17
  • 2010-11-20
  • 2013-04-24
  • 1970-01-01
  • 2011-02-21
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多