首页 > 解决方案 > Firefox console.table 显示错误数据

问题描述

让我们试试下面的 javascript 代码:

 var Matrix = [
  [1,2,3],
  [4,5,6]
 ];

  console.table(Matrix);   // print initial data
  Matrix[1][1] = 9;        // change one value
  console.table(Matrix);   // print updated data

这是结果:

结果矩阵

我已经用Firefox 64.0对此进行了测试。为什么两个console.table调用都产生相同的输出?

标签: javascriptfirefoxmultidimensional-arrayconsole.log

解决方案


console.log 不是标准化的,所以行为是相当不确定的,

控制台需要将记录的值存储在某处,并将它们显示在屏幕上。渲染肯定会异步发生(被限制为速率限制更新),未来与控制台中记录的对象的交互也会发生(如扩展对象属性)。

因此,控制台可能会克隆(序列化)您记录的可变对象,或者它将存储对它们的引用。第一个不适用于深层物体。此外,至少控制台中的初始渲染可能会显示对象的“当前”状态,即登录时的状态 - 在您的示例中,您会看到 Object {}。 提醒多维数组也是对象

但是,当您展开对象以进一步检查其属性时,控制台可能只存储了对您的对象及其属性的引用,现在显示它们将显示它们当前(已经变异)的状态。

这个答案受到Bergis这个问题的回答的影响。


推荐阅读