0

如果我有一个包含 1000 个元素的数组,并且我将数组长度设置为 10,那么另一个元素会去哪里?这会导致内存泄漏吗?

4

4 回答 4

2

另一个元素会去哪里?

当您分配 时,属性10to999将被删除.length = 10

设置是清空数组.length = 0的众所周知的解决方案。

这会导致内存泄漏吗?

不,它们会被正常收集。

于 2021-08-01T12:24:35.037 回答
1

ECMAScript 规范说这些元素是deleted

减小“length”属性的值具有删除其数组索引在新旧长度值之间的自己的数组元素的副作用。

此外,ArraySetLength指定Delete执行awhose numeric value is greater than or equal to newLen, in descending numeric index order

所以不 - 如果你减少数组的长度,就不会有内存泄漏。

于 2021-08-01T12:30:27.420 回答
0

如果数组长度设置为较小的值,则其他值将从数组中删除/删除。

让我们说

let arr = [1,2,3];

那么如果你设置

arr.length = 1;

然后arr将只有[1], 其他元素从数组中删除。

于 2021-08-01T12:24:57.217 回答
0

使用[]ornew Array(10000)将创建具有完全相同内存占用的数组。只是长度有不同的初始值。

JavaScript 与其他语言不同,其中一个大小为 n 的数组将为元素保留 n 个存储空间。

于 2021-08-01T12:18:53.940 回答