我有一个如下的循环:
for (var i = 0; i < arr.length; i++) {
console.log(arr);
// rest of the code does not touch 'arr'
...
}
然而,在浏览器控制台(Chrome)中,我不断得到这个:
Array[0]
length: 0
__proto__: Array[0]
作为console.log(arr)
的输出,表明arr
中没有任何内容。但那么如何执行日志语句呢?!
答案 0 :(得分:1)
可能在脚本结束时数组是空的,因为chrome控制台会显示对象的当前状态(在对象本身更改时会发生更改)在脚本执行后打开时。 (我认为这是一个问题)
重现这一点:
var arr = [1];
for (var i = 0; i < arr.length; i++) {
console.log(arr);
}
arr.pop(); // empty the array
http://jsfiddle.net/47nrc/(仅适用于Chrome)
在控制台关闭的情况下执行它,然后在打开它时可以看到Array[0]
一种解决方案可能是记录数组的字符串表示形式:
console.log(arr.join());
另请参阅:https://code.google.com/p/chromium/issues/detail?id=50316
答案 1 :(得分:0)
看到这个小提琴:http://jsfiddle.net/r9exf/
var arr = [];
for (var i = 0; i < arr.length; i++) {
console.log("arr = " + arr);
// rest of the code does not touch 'arr'
}
与之相比:
var arr2 = [1,2,3];
for (var i = 0; i < arr2.length; i++) {
console.log("arr2 = " + arr2);
// rest of the code does not touch 'arr'
}
您的代码(假设您提供的是您所拥有的),工作正常。它不会进入循环(参见第一种情况并与小提琴中的第二种情况进行比较)。
因此,它必须在您的代码中的其他位置记录此数组。