1

我有一个如下循环:

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。但是,日志语句怎么可能被执行呢?!

4

2 回答 2

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

于 2013-10-18T14:00:51.643 回答
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'

}

您的代码(假设您提供的就是您所拥有的)工作正常。它不会进入循环(参见第一种情况并与小提琴中的第二种情况进行比较)。

因此,它必须在您的代码中记录此数组的其他位置。

于 2013-10-18T13:58:35.143 回答