为什么删除运算符不更改数组的长度

Why doesn't the delete operator change the length of an array?

本文关键字:数组 删除 运算符 为什么      更新时间:2023-09-26
例如

,在数组的索引上使用delete运算符时,索引将被删除,例如任何对象的任何属性。

这已通过以下方法证明:

var arr = ['one', 'two', 'three'];
delete arr[1];
if(1 in arr)
    alert("It didn't work!");

如果你要运行这个块,你会发现文本"它不起作用!"永远不会提醒用户。这是因为属于数组上索引1的属性已被删除。

现在,事情变得奇怪了...

尽管从数组中删除了索引,但数组长度应保持不变:

var arr = ['one', 'two', 'three'];
alert(arr.length); //will alert '3'
delete arr[2];
alert(arr.length); //will still alert '3'

在调试器中查看数组arr(至少在 Chrome 中),您会发现索引2甚至不存在,那么为什么长度仍然报告为 3?

这是一个JSFiddle来玩

当你

调用删除数组的一个键时,数组实际上会丢失密钥,所以如果你这样做

Object.keys(arr)

您将看到该键丢失并替换为未定义。

编辑:提到的其他帖子有更好的答案,但这是我的看法。删除不调整大小,当你们都推时,放置被调用它知道的最后一个大小。某些浏览器仅显示未定义而不是已删除的值键。