[英]Memory allocation of a Javascript array?
如果我向Javascript数组的第1000个元素添加一个值,那么假设这些位置是开放的,那么将该值添加到第0个元素有什么区别吗?
我说的是内存消耗。
例:
arr[1000] = 'asdf';
与
arr[0] = 'asdf';
由于JavaScript数组实际上是对象,因此内存不是连续的。 因此,以您的示例为例,访问array[1000]
而不存储任何其他内容将占用与您存储的内容相同的内存量(而不是1000 *值的大小)。
实际上,执行var arr = new Array(1000);
每个Danny的答案不会创建1000个空插槽的数组。 它创建一个length
值为1000
的数组。
这样考虑:如果JavaScript不知道要存储的内容的类型和大小,那么它如何知道要留出多少内存呢?
例如:
var arr = [];
arr[1000] = 'String value';
怎么说我不能在另一个索引中存储整数?
arr[0] = 2;
本身,JavaScript对象实际上并没有排序 。 无论它们是数组还是对象,键的顺序都不重要。 一个实现可以将它们按所需的顺序放置。 当然,你必须将它们存储在某种秩序,所以大多数的实现让他们在你插入他们的顺序但这仅仅是一个巧合:规格没有要求它,所以你不能指望它总是真实的。
因此, arr[1000]
不一定是数组的第1000个元素:它只是一个成员,其键恰好是1000
。 如果您在其之前插入了999个元素, 并且运行时将其按插入顺序排列,则可能确实是第1000个元素。 但这就像42元素一样容易。 根据运行时的实现和您自己的代码,它甚至可能是第一个元素。
而且由于数组没有顺序,因此假设没有设置其他内容, 分配给arr [1000]不会比分配给arr [0]占用更多的内存 。 如果您已经设置了999个元素,那么显然设置arr [1000]将导致该数组比以前占用更多的空间,因为您必须将该元素存储在某个地方。 但是它并不会因为其密钥为1000而占用任何额外的空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.