console.log 中的值错误 [重复]

Posted

技术标签:

【中文标题】console.log 中的值错误 [重复]【英文标题】:Wrong value in console.log [duplicate] 【发布时间】:2012-06-28 04:33:21 【问题描述】:

可能重复:Is Chrome's javascript console lazy about evaluating arrays?

我在 javascript 中有以下 sn-ps,其输出让我觉得出了点问题。

1.

a=2;
console.log(a);
a+=2;
console.log(a);

输出:2 4 ;正如预期的那样

2.

t=[0,2];
console.log(t);
t[0]+=2;
console.log(t);

输出:[2,2] [2,2]

输出不应该是 [0,2] [2,2] 以上两种情况有什么不同导致两种情况的答案不同?

【问题讨论】:

我在最新版本的 Chrome 中得到了您预期的输出。 我在 Firefox 中得到了预期的输出。 是的,在最新版本的 chrome 中 这是***.com/questions/4057440/…的副本 我也在最新的 Chrome 中。获得预期价值。猜猜他们自 2012 年以来提高了业绩。 【参考方案1】:

这是因为日志会延迟到 Chrome 有时间执行(即您的脚本释放 CPU)。

试试这个以了解会发生什么:

var t=[0,2];
console.log(t);
setTimeout(function() 
     t[0]+=2;
   console.log(t);
, 1000);

它输出你所期望的。

这是 Chrome 的错误吗?也许是优化的副作用。至少这是一个危险的设计......

为什么会有区别?我想 Chrome 会临时存储它必须记录的内容,在第一种情况下作为主要(不可变)值,在最后一种情况下作为指向数组的指针。

【讨论】:

是的,他们经常玩火 是的,chrome 这些天似乎做了很多改变......谢谢顺便说一句:)【参考方案2】:

Chrome 的日志记录在较新的版本中有所延迟,这对您来说没有问题。复制变量或使用setTimeout

【讨论】:

【参考方案3】:

chrome/ff 中的console.log 是异步的,记录的对象在扩展时被解释。 .如果您想查看当时的值(对于数组),请制作对象的副本:

t=[0,2];
console.log(t.slice(0));
t[0]+=2;
console.log(t);

对于数组,调用 .slice 将复制数组而不创建引用。 我不建议使用超时:这确实不能解决问题,只是暂时规避它。

【讨论】:

【参考方案4】:

您所做的一切都是正确的,但 chrome 的日志记录是扭曲/延迟的。尝试复制变量并将其添加到其中,您会发现您的代码是正确的。

【讨论】:

以上是关于console.log 中的值错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

查找数组重复的值

检查变量中的值是整数还是小数[重复]

对象扩展语法永远不会抛出错误吗?

传递给子组件的道具未定义,但 console.log 显示道具的值

Javascript调用错误的函数[重复]

javascript新增加的数据结构: Set Map WeakSet WeakMap