为什么删除运算符不更改数组的长度
Why doesn't the delete operator change the length of an array?
例如
。,在数组的索引上使用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)
您将看到该键丢失并替换为未定义。
编辑:提到的其他帖子有更好的答案,但这是我的看法。删除不调整大小,当你们都推时,放置被调用它知道的最后一个大小。某些浏览器仅显示未定义而不是已删除的值键。
相关文章:
- 从组件状态的数组中删除元素
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 添加和删除隐藏字段数组中的值,而不提交表单
- 从数组中删除重复条目,并在javascript中按顺序排列
- 一些元素没有从数组中删除
- 删除JS数组中的最小数字
- 从数组中删除三元组项
- 删除重复的数组值,然后存储它们[反应]
- 在特定索引处剥离/删除数组中的值
- 数组删除重复结果Javascript
- 字符串替换或通过数组删除
- js中的对象数组:删除重复项
- KnockoutJS.Mapping.FromJS-可观察数组-删除不起作用
- 用于垃圾收集的Javascript数组删除
- 为什么”——数组.删除数组的最后一个元素
- PHP循环通过脚本数组&删除项目
- 谷歌地图API:试图使用数组删除多个标记
- 带有for循环+条件的Javascript数组删除不必要的元素
- 在JavaScript中管理像ArrayList这样的数组:删除一个元素并关闭创建的间隙