【问题标题】:Why doesn't the delete operator change the length of an array? [duplicate]为什么删除操作符不改变数组的长度? [复制]
【发布时间】:2015-05-12 07:52:56
【问题描述】:

例如,当在数组的索引上使用delete 运算符时,索引会被删除,就像任何对象的任何属性一样。

这证明了:

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

delete arr[1];

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

如果你要运行这个块,你会发现文本“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?强>

Here is a JSFiddle to play around with.

【问题讨论】:

  • 我事先没有看到这些帖子,因为它们没有在我的搜索过程中出现。我同意我的问题可能是重复的。我很抱歉。

标签: javascript


【解决方案1】:

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

Object.keys(arr)

您会看到密钥丢失并被未定义替换。

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

【讨论】:

  • 哇!这真的很酷!谢谢@Abraham Adam!
猜你喜欢
  • 2010-10-04
  • 2018-05-28
  • 2011-04-16
  • 2014-10-07
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2015-06-30
  • 2021-12-20
相关资源
最近更新 更多