【JS】for in和for of 中 i 值无法改变的问题

本文探讨了在JavaScript中使用for...in遍历数组时,变量i在循环体内的不可更改性问题,并通过实例展示了如何通过传统for循环解决此问题。作者建议避免直接对数组进行for...in,转而采用for(let i = 0)的方式进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

!!!在 for in 对数组的循环时 定义的 i 无法在循环体内 被更改!!
即 操作i 四则运算对下一次实际的 i 无效,依旧会按照 元素的下标依次顺序来

for in – for of 同理

案例一

for (i in [1,2,3]){
    console.log('实际i',i)
    i++
    let a = i
    console.log('下一次i',++a)
    console.log('============')
}
// 忽略前方 VMxxx:xx
VM1781:2 实际i 0
VM1781:5 下一次i 2
VM1781:6 ============
VM1781:2 实际i 1
VM1781:5 下一次i 3
VM1781:6 ============
VM1781:2 实际i 2
VM1781:5 下一次i 4
VM1781:6 ============

案例二

let arr = [1,2,2,3]
for (let i in arr){
    console.log('元素值:',arr[i])
    console.log('实际i值:',i)
        if(arr[i] == 2 ){
            arr.splice(i,1)
            // 此处i--,意味着下一次 i 依然和本次相同
            // 因为splice 删掉了当前位元素,下一位的元素会补上来
            i--
            console.log('if后i值:',i)
        }
    let a = i
    console.log('下一次i值应为:',++a)
    console.log('==============')
    }
console.log(arr)

 元素值: 1
 实际i值: 0
 下一次i值应为: 1
 ==============
 元素值: 2
 实际i值: 1
 if后i值: 0
 下一次i值应为: 1
 ==============
 元素值: 3
 实际i值: 2
 下一次i值应为: 3
 ==============
 [1, 2, 3]

拓展–解决办法

用 for(i=0;i<xxx;i++) 时不存在上诉问题

let arr = [1,2,2,3]
for (let i=0;i<arr.length;i++){
    console.log('元素值:',arr[i])
    console.log('实际i值:',i)
        if(arr[i] == 2 ){
            arr.splice(i,1)
            i--
            console.log('if后i值:',i)
        }
    let a = i
    console.log('下一次i值应为:',++a)
    console.log('==============')
    }
console.log(arr)

// 忽略前方 VMxxx:xx
VM1365:3 元素值: 1
VM1365:4 实际i值: 0
VM1365:11 下一次i值应为: 1
VM1365:12 ==============
VM1365:3 元素值: 2
VM1365:4 实际i值: 1
VM1365:8 if后i值: 0
VM1365:11 下一次i值应为: 1
VM1365:12 ==============
VM1365:3 元素值: 2
VM1365:4 实际i值: 1
VM1365:8 if后i值: 0
VM1365:11 下一次i值应为: 1
VM1365:12 ==============
VM1365:3 元素值: 3
VM1365:4 实际i值: 1
VM1365:11 下一次i值应为: 2
VM1365:12 ==============
VM1365:14 [1, 3]

建议 尽量不要对数组使用 for in 遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值