如何在循环中使用shift

How do I use shift inside a loop?

本文关键字:shift 循环      更新时间:2023-09-26

当我运行这段代码时:

var a = ['a','b','c'];
var b = ['a','b','c'];
for(i = 0; i <= a.length-1; i++){
    b.shift();
    console.log(b);
}

我期望这个输出:

['b','c']
['c']
[]

但是我得到这个输出:

[]
[]
[]

为什么?

我如何得到我期望的输出?

这是Chrome中已知的问题。这是因为console.log不会复制你想要显示的内容,它只是存储引用。

由于日志不会立即更新,但是一旦你的函数结束并且浏览器更新了用户界面,日志将显示b变量的当前状态,而不是每次console.log调用时的状态。

要获得所需的输出,您必须为每个console.log调用创建变量状态的flash副本:

console.log(b.toString());

这是console.log语句在执行时不打印的副作用。注意,如果将console.log替换为alert,代码将按预期工作。

或者将log参数更改为表达式,如我对Javascript Funky array mishap的回答

console.log ('' + b);