javascript - typescript :空数组的长度不为零

标签 javascript arrays typescript

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

delete array[0]

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

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

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/

相关文章:

c# - 查找数组的最低空闲位置

javascript - 根据下拉值显示内容的 knockout 问题

typescript - 为什么 TypeScript 编译器找不到时 Webpack 找不到模块?

javascript - 将 linq 查询转换为 linqjs

javascript - 将 Meteor 与 FileReader 一起使用,读取文件时出错

javascript - 准确计算鼠标速度

javascript - 向循环 firebase 云功能中的所有电子邮件发送电子邮件

javascript - 如何将批处理代码与vbscript代码合并

python - 根据应用于另一个数组的 bool 表达式选择一个数组的值

java - 返回字符串数组