console.log() zeigt den geänderten Wert an, bevor sich der Variablenwert tatsächlich ändert
P粉427877676
2023-08-27 22:37:24
<p>Ich verstehe diesen Code. Wir kopieren A und nennen es C. Wenn sich A ändert, bleibt C unverändert</p>
<pre class="brush:php;toolbar:false;">var A = 1;
var C = A;
console.log(C); // 1
A++;
console.log(C); // 1</pre>
<p>Aber wenn A ein Array ist, ist die Situation anders. C ändert sich nicht nur, sondern es ändert sich, bevor wir A</p> berühren.
<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>Kann jemand erklären, was im zweiten Beispiel passiert? </p>
console.log()
会传递对象的引用,因此控制台中的值会随着对象的更改而更改。为了避免这种情况,您可以:MDN 警告:
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):