【问题标题】:Weird console.logbehavior in chromechrome中奇怪的console.logbehavior
【发布时间】:2011-12-01 22:10:01
【问题描述】:

我无法用另一个脚本重现这个问题,所以请运行这个脚本: http://jsfiddle.net/kz4k7/

正如你在第 154-157 行看到的那样:

for (myKey in v){ console.log("v["+myKey +"] = "+v[myKey]); } 控制台.log(v);

您会期望前三行的输出与最后一行相同。 但是我在 chrome 中得到了这个结果:

如果我在第 158 行删除 solveTriangle(v),console.log(v); 工作得很好。如果我将对象 v 的克隆版本打印到控制台,它也可以工作。

注意:这根本没有完成,我只是想知道chrome为什么会这样。我也不想解释“你为什么要那样做?”以及与此错误无关的其他问题。

编辑:

这也是 Safari 中的行为。

火狐+萤火虫截图:

【问题讨论】:

    标签: javascript google-chrome safari


    【解决方案1】:

    这是一个相当简单的问题。 Chrome 存储对对象的引用。如果您在脚本完成后查看该对象,您会得到这种观察到的行为,因为该对象已更改并且与 console.log 触发时不同。

    如果您在包含console.log(v); 的行设置断点并检查该值,结果将是您所期望的。

    【讨论】:

      【解决方案2】:

      console.log 显示对象包含的内容在您打开它时(通过单击箭头),而不是在它被记录时。坦率地说,您的代码非常冗长,并且带有很多注释掉的代码有点混乱,但看起来您确实在记录后修改了对象。

      您可以通过以下简化测试来确认此日志行为:http://jsfiddle.net/e7Gvn/

      var o = {
          a: 1,
          b: 2
      };
      
      console.log( JSON.stringify(o) ); // force string logging, which doesn't change
      
      console.log(o); // open the object and you'll see that `c = 3`...
      o.c = 3;        // ... even though it was only set here
      

      【讨论】:

      • 为什么“v”的值会变??
      • @Tyilo:因为你在登录后修改它。
      猜你喜欢
      • 2018-04-14
      • 2010-12-30
      • 2012-06-28
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 2015-05-08
      相关资源
      最近更新 更多