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

JavaScript中shift()方法运行异常,仅执行2-3次后不再移位,求解决方案

问题原因

你的代码问题出在循环判断条件直接读取了正在被修改的数组长度:

  • 数组b初始长度为7,每次执行shift()都会让数组长度减少1
  • 同时循环变量temp每次循环后加1,当temp的数值等于不断缩小的b.length时,循环就会终止
    你贴出的运行输出共4次,对应循环执行过程:temp从0增长到3时,b.length已经从7缩小到3,此时temp < b.length的条件不再成立,循环直接停止,并非shift()方法异常。

解决方案

根据你的使用场景可以选择以下任意一种方案:

方案1:使用while循环清空数组

如果你的需求是逐次移除数组首位元素并输出过程,直接用数组长度作为循环判断条件即可,无需额外计数变量:

var b = [167,244,377,56,235,269,23];

while(b.length > 0) {
    console.log(b);
    b.shift();
}

方案2:预先存储数组初始长度

如果需要保留for循环的计数写法,提前把数组初始长度存为固定变量,避免每次循环读取动态变化的长度:

var b = [167,244,377,56,235,269,23];
// 存储初始长度,不受数组修改影响
const initialLen = b.length;
for(var temp=0;temp < initialLen;temp++){
    console.log(b)
    b.shift();
}

方案3:不修改原数组实现同等输出效果

如果不需要改动原数组,用slice()方法截取对应片段输出即可,避免修改原数组带来的副作用:

var b = [167,244,377,56,235,269,23];
for(var temp=0;temp < b.length;temp++){
    console.log(b.slice(temp))
}

内容的提问来源于stack exchange,提问作者Markus nuan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:09:02