例如,在数组的索引上使用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吗
答案 0 :(得分:2)
当你调用删除其中一个键时,数组实际上会丢失键,所以如果你这样做了
Object.keys(arr)
你会看到密钥丢失并被undefined取代。
编辑: 提到的其他帖子有更好的答案,但这是我的看法。 delete不会调整大小,当你全部推送时,put会使用它知道的最后一个大小调用。某些浏览器只显示undefined而不是删除的值键。