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 中的值错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章