打字稿:空数组的长度不为零

时间:2017-12-30 13:57:58

标签: javascript arrays typescript

我有一个数组有一个元素,我用以下代码删除:

delete array[0]

此时数组为空。因此,我很困惑为什么array.length的输出为1

当我使用console.log时,它会显示以下内容:

console.log

我做了一些根本错误的事情,或者我如何检查数组是否为空?也许对打字稿数组内存管理的解释会很有用。

1 个答案:

答案 0 :(得分:1)

TL; DR;

如果您希望它缩小,则不应使用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数组和删除的更多信息,请参阅链接的潜在重复问题以获取详细信息和说明:

相关问题