我有一个数组有一个元素,我用以下代码删除:
delete array[0]
此时数组为空。因此,我很困惑为什么array.length
的输出为1
。
当我使用console.log
时,它会显示以下内容:
我做了一些根本错误的事情,或者我如何检查数组是否为空?也许对打字稿数组内存管理的解释会很有用。
答案 0 :(得分:1)
如果您希望它缩小,则不应使用delete
删除数组元素。
基本上它会删除第一个元素的引用,但不会缩小数组。
元素[0]为空 - >数组显示为[empty]
,因为数组中有一个空点!大小仍保留在内存中。长度属性仍为1.
所以,这不是空数组,它是一个非空数组,其中一个空点
其他例子:
var a = [3, 4];
delete a[0];
我的JS控制台中的 a
结果为[empty, 4]
。
我做了一些根本错误的事情,或者我该怎么检查 数组是空的吗?
如果你想检查这样的数组是否只包含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!');
}
(但当然,如果您的实际undefined
值具有某些含义,那么这将无法奏效,我希望情况并非如此)
也许是打字稿数组内存管理的解释 是有用的。
非常简单:没有TypeScript内存管理。
正如评论中已经指出的那样,TypeScript转向Javascript,在运行时它只运行JavaScript,它是Javascript数组,仅此而已。
在这里,打字稿没有什么特别的。这将被 verbatim 转换为javascript。
有关JS数组和删除的更多信息,请参阅链接的潜在重复问题以获取详细信息和说明: