console.log(array)显示与迭代数组和显示单个元素不同的数组内容

时间:2013-05-10 14:40:58

标签: javascript firefox

我有以下代码:

console.log("start");
for(var i = 0; i < array.length; i++){
    console.log(i + " = " + array[i]);
}
console.log(array);
console.log("end");

这给了我以下输出:

[16:34:41.171] start
[16:34:41.171] 0 = 0
[16:34:41.172] 1 = 168
[16:34:41.172] 2 = 171
[16:34:41.172] [0, 168, 171, 139]
[16:34:41.172] end

也就是说,在迭代数组时它没有显示139元素,但是console.log在输出整个数组时会打印它。为什么? (&lt; - 问题)

我稍后会修改数组,是不是以某种方式延迟了console.log,直到我更改了数组?请注意,更改语句的顺序,并将consoel.log(array)直接放在开头不会改变结果(仍然是不同的输出)。

我正在使用firefox 20.0

1 个答案:

答案 0 :(得分:14)

更新:如果要查看此行为,请将代码复制并粘贴到控制台中并执行。然后关闭开发人员工具并再次打开,显然指针只在代码在后台执行时发生(当你重新打开控制台时会发生这种情况)。

Console.log输出的对象,是一个指针,没有实际值。这意味着如果对象稍后更改,则将更新console.log对象。尝试:

console.log("start");
var array = [1];
for(var i = 0; i < array.length; i++){
    console.log(i + " = " + array[i]);
}
console.log(array);
console.log("end");
array.push(9999);// you will see the 9999 in the console no matter it was added after the output.

要防止指针问题,请尝试以下操作: 的console.log(array.join());因为稍后在您的应用程序的某个时刻,您将添加139值。