console.log()在变量值实际改变之前显示变化的值
P粉427877676
P粉427877676 2023-08-27 22:37:24
0
2
490
<p>这段代码我明白了。我们复制 A 并将其称为 C。当 A 更改时,C 保持不变</p> <pre class="brush:php;toolbar:false;">var A = 1; var C = A; console.log(C); // 1 A++; console.log(C); // 1</pre> <p>但是当 A 是一个数组时,情况就不同了。不仅 C 会改变,而且在我们接触 A 之前它就改变了</p> <pre class="brush:php;toolbar:false;">var A = [2, 1]; var C = A; console.log(C); // [1, 2] A.sort(); console.log(C); // [1, 2]</pre> <p>有人可以解释一下第二个例子中发生了什么吗?</p>
P粉427877676
P粉427877676

全部回复(2)
P粉023326773

console.log() 会传递对象的引用,因此控制台中的值会随着对象的更改而更改。为了避免这种情况,您可以:

console.log(JSON.parse(JSON.stringify(c)))

MDN 警告

P粉795311321

Pointy 的答案提供了很好的信息,但这不是这个问题的正确答案。

OP 描述的行为是 2010 年 3 月首次报告的错误的一部分,并于 2012 年 8 月针对 Webkit 进行了修补,但截至撰写本文时尚未集成到 Google Chrome 中。行为取决于将对象文字传递给 console.log() 时控制台调试窗口是打开还是关闭 .

原始错误报告摘录 (https://bugs.webkit.org/show_bug .cgi?id=35801):

Chromium 开发人员的回应:

随之而来的是很多抱怨,最终导致了错误修复。

2012 年 8 月实施的补丁的变更日志说明 (http://trac.webkit.org/changeset/ 125174):

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!