Heim  >  Fragen und Antworten  >  Hauptteil

console.log() zeigt den Wert einer Variablen an, bevor er sich tatsächlich geändert hat

<p>Ich verstehe diesen Code. Machen wir eine Kopie von A und nennen sie C. Wenn sich A ändert, bleibt C gleich. </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 überhaupt berühren. </p> <pre class="brush:php;toolbar:false;">var A = [2, 1]; var C = A; console.log(C); // [2, 1] A.sort(); console.log(C); // [1, 2]</pre> <p>Kann jemand erklären, was im zweiten Beispiel passiert? </p>
P粉356361722P粉356361722424 Tage vor376

Antworte allen(2)Ich werde antworten

  • P粉578680675

    P粉5786806752023-08-23 15:48:53

    console.log()接收一个对对象的引用,所以当对象发生变化时,控制台中的值也会发生变化。为了避免这种情况,你可以使用以下方法:

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

    MDN警告

    Antwort
    0
  • P粉949848849

    P粉9498488492023-08-23 11:15:47

    Pointy的回答提供了很好的信息,但对于这个问题来说并不是正确的答案。

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

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

    来自Chromium开发人员的回应:

    随后发生了很多抱怨,最终导致了一个bug修复。

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

    Antwort
    0
  • StornierenAntwort