我有一个数组,其中有一个元素,我使用以下代码删除该元素:
delete array[0]
此时数组为空。因此我很困惑为什么 array.length
输出为 1
。
当我使用console.log
时它显示以下内容:
我是否做了一些根本错误的事情,或者如何检查数组是否为空?也许对 typescript 数组内存管理的解释会很有用。
最佳答案
TL;DR;
如果您希望数组缩小,则不应使用delete
来删除数组元素。
基本上,它会删除第一个元素的引用,但不会缩小数组。
元素 [0] 为空 -> 数组显示为 [empty]
,因为数组中有一个空点!该大小仍然保留在内存中。并且length属性仍然是1。
所以,这不是一个空数组,而是一个带有一个空位的非空数组
其他示例:
var a = [3, 4];
delete a[0];
我的 JS 控制台中的 a
结果为 [empty, 4]
。
Am I doing something fundamentally wrong or how do I check that the array is empty?
如果您想检查这样的数组是否仅包含空
,您可以简单地过滤未定义的值:
var a = [3, 4];
delete a[0];
delete a[1];
if (a.filter(x => x !== undefined).length === 0) {
console.log('array looks empty!');
} else {
console.log('array doesn't look empty!');
}
(但当然,如果您有实际的 未定义
具有某种意义的值,这将不起作用,我希望情况并非如此)
Maybe an explanation of typescript array memory management would be useful.
这很简单:没有 TypeScript 内存管理。
正如评论中已经指出的,TypeScript 已转换为 Javascript,在运行时它仅运行 JavaScript,只是 Javascript 数组,仅此而已。
Typescript 在这里没有为您做任何特别的事情。这将被逐字转译为 JavaScript。
<小时/>有关 JS 数组和删除的更多信息,请参阅链接的潜在重复问题以获取详细信息和说明:
关于javascript - typescript :空数组的长度不为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48034600/