为什么删除操作符不会更改数组的长度?

时间:2015-03-10 18:15:13

标签: javascript

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

这证明:

var arr = ['one', 'two', 'three'];

delete arr[1];

if(1 in arr)
    alert("It didn't work!");

如果您要运行此块,您会发现文本"它没有用!"绝不会提醒用户。这是因为已删除属于Array上的索引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吗

Here is a JSFiddle to play around with.

1 个答案:

答案 0 :(得分:2)

当你调用删除其中一个键时,数组实际上会丢失键,所以如果你这样做了

Object.keys(arr)

你会看到密钥丢失并被undefined取代。

编辑: 提到的其他帖子有更好的答案,但这是我的看法。 delete不会调整大小,当你全部推送时,put会使用它知道的最后一个大小调用。某些浏览器只显示undefined而不是删除的值键。