提问人:Cato Johnston 提问时间:12/26/2011 更新时间:12/26/2011 访问量:966
如何在循环中使用 shift?
How do I use shift inside a loop?
问:
当我运行这段代码时:
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']
[]
但我得到这个输出:
[]
[]
[]
为什么?
我如何获得预期的输出?
答:
8赞
Guffa
12/26/2011
#1
这是 Chrome 中的已知问题。这是因为 不会复制您想要显示的内容,它只是存储引用。console.log
由于日志不会立即更新,但一旦函数结束并且浏览器更新用户界面,日志将显示变量的当前状态,而不是每次调用时的状态。b
console.log
为了获得所需的输出,您必须为每个调用制作变量状态的闪存副本:console.log
console.log(b.toString());
评论
0赞
techfoobar
12/26/2011
也许值得注意的是,Firebug 的控制台行为不同。我猜它会创建传递的任何内容的副本,然后打印出来。
0赞
Zirak
12/26/2011
要在控制台中保留阵列外观,可以通过调用array.slice()
0赞
Bergi
12/26/2011
注意:在Opera中也会发生同样的情况
0赞
henrijs
11/27/2014
注意:在Firefox开发者工具中也会发生同样的情况。
1赞
Jon Newmuis
12/26/2011
#2
这是在执行语句时不打印语句的副作用。请注意,如果将 your 替换为 ,则代码将按预期工作。console.log
console.log
alert
0赞
HBP
12/26/2011
#3
或者根据我对 Javascript Funky 数组事故的回答,将日志参数更改为表达式
console.log ('' + b);
评论