Heim >Web-Frontend >js-Tutorial >Warum zeigt „console.log()' unerwartetes Array-Verhalten in JavaScript?
Unerwartetes Verhalten von console.log() mit Arrays
In JavaScript verhält sich die Funktion console.log() beim Überprüfen von Arrays unerwartet. Dieses Verhalten ist auf die Tatsache zurückzuführen, dass console.log() eine Referenz auf das Array und keine Kopie des Werts übergeben wird.
Beispiel:
var A = [2, 1]; var C = A; console.log(C); // [1, 2] A.sort(); console.log(C); // [1, 2]
Wenn wir das Array A sortieren, erwarten wir, dass der Wert von C unverändert bleibt. Dies ist jedoch nicht der Fall. Der Wert von C ändert sich auch im sortierten Array [1, 2].
Warum passiert das?
Weil console.log() eine Referenz übergeben wird Am Array werden alle am ursprünglichen Array vorgenommenen Änderungen auch in der von C gehaltenen Referenz widergespiegelt. Wenn A sortiert wird, wird daher auch die Ausgabe von C angezeigt Änderungen.
So vermeiden Sie dieses Verhalten:
Um dieses unerwartete Verhalten zu vermeiden, können wir die folgende Problemumgehung verwenden:
console.log(JSON.parse(JSON.stringify(C)))
Dies konvertiert das Array C mit JSON.stringify() in einen String umwandeln und dann mit JSON.parse() wieder in ein Array umwandeln. Dadurch wird effektiv eine tiefe Kopie des Arrays erstellt und sichergestellt, dass alle am ursprünglichen Array vorgenommenen Änderungen nicht in der Kopie widergespiegelt werden.
Browserwarnung:
Es ist wichtig, dass Beachten Sie, dass das Mozilla Developer Network (MDN) vor diesem Verhalten in neueren Versionen von Chrome und Firefox warnt:
„Bitte seien Sie gewarnt, wenn Sie Objekte in den neuesten Versionen von protokollieren Bei Chrome und Firefox wird auf der Konsole ein Verweis auf das Objekt protokolliert. Dabei handelt es sich nicht unbedingt um den „Wert“ des Objekts zum Zeitpunkt des Aufrufs von console.log(), sondern um den Wert des Objekts sobald Sie die Konsole öffnen.“
Das obige ist der detaillierte Inhalt vonWarum zeigt „console.log()' unerwartetes Array-Verhalten in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!