【问题标题】:console.log(array) shows different array contents than iterating the array and displaying the individual elementsconsole.log(array) 显示不同于迭代数组并显示单个元素的数组内容
【发布时间】:2013-05-05 06:58:02
【问题描述】:

我有以下代码:

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 会在输出整个数组时打印它。为什么? (

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

我使用的是 Firefox 20.0

【问题讨论】:

标签: javascript firefox


【解决方案1】:

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

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 值。

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 2020-05-07
    • 2011-12-16
    • 2021-01-01
    • 1970-01-01
    • 2020-04-15
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多