You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript数组长度为3,forEach却不执行3次?

JavaScript数组使用delete删除元素后length不变但forEach不遍历空槽的原因

先看你给出的代码:

let temp = ["a", "b", "c"]
console.log(temp.length)
temp.forEach((e, i)=>console.log(e, i))
delete temp[0]
console.log(temp)
console.log(temp.length)
temp.forEach((e,i)=>console.log(e, i))

核心原因拆解:

  • delete操作的本质:用delete删除数组元素时,并不会移除这个索引位置,只是把该位置的值清空,变成了空槽(empty slot)。数组的length属性由最大索引值+1决定,此时数组最大索引还是2,所以length依然保持3。
  • forEach的遍历规则:forEach在遍历数组时,会自动跳过空槽,只处理那些有实际赋值的索引位置。所以删除temp[0]后,forEach只会遍历索引1和2对应的"b"和"c",不会执行3次。

如果想要真正移除数组元素并同步更新length,可以使用splice方法,比如temp.splice(0, 1),这样数组会直接删除索引0的元素,length也会变为2,forEach遍历次数也会对应减少。

内容的提问来源于stack exchange,提问作者Pratik Mohite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:18:09