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
相关产品推荐
相关产品推荐

