Heim >Web-Frontend >js-Tutorial >Wie geht JavaScript mit Pass-by-Value und Pass-by-Reference bei primitiven Typen und Objekten um?
In JavaScript werden alle Variablen als Wert übergeben, was bedeutet, dass es sich um eine Kopie des Originalwerts handelt wird erstellt und an die Funktion übergeben. Wenn der Wert jedoch ein Objekt ist, beispielsweise ein Array oder ein Objektliteral, ist die Kopie ein Verweis auf das Originalobjekt.
function f(a, b, c) { a = 3; // Reassignment changes the local variable only. b.push("foo"); // Property change affects the original object. c.first = false; // Property change affects the original object. } const x = 4; let y = ["eeny", "miny", "mo"]; let z = { first: true }; f(x, y, z); console.log(x, y, z.first); // Output: 4, ["eeny", "miny", "mo", "foo"], false
Im obigen Beispiel spiegeln sich die Änderungen an den b- und c-Objekten in den Originalobjekten wider. während die Neuzuweisung von a keine Auswirkung hat.
Ausführliche Beispiele:
function f() { const a = ["1", "2", { foo: "bar" }]; const b = a[1]; // Copy the reference to the original array element a[1] = "4"; // Change the value in the original array console.log(b); // Output: "2" (Original value of the copied reference) }
Im ersten Beispiel gilt b immer noch, obwohl a geändert wurde der ursprüngliche Wert, da es sich um eine Kopie der Referenz handelt.
function f() { const a = [{ yellow: "blue" }, { red: "cyan" }, { green: "magenta" }]; const b = a[1]; // Copy the reference to the original object a[1].red = "tan"; // Change the property in the original object console.log(b.red); // Output: "tan" (Property change is reflected in both variables) b.red = "black"; // Change the property through the reference console.log(a[1].red); // Output: "black" (Property change is reflected in both variables) }
Im zweiten Beispiel wirkt sich die Änderung an a[1].red sowohl auf a als auch auf b aus, weil sie teilen Sie die gleiche Objektreferenz.
Um eine völlig unabhängige Kopie eines Objekts zu erstellen, können Sie JSON.parse() und JSON.stringify verwenden ()-Methoden zum Deserialisieren bzw. Serialisieren des Objekts. Zum Beispiel:
const originalObject = { foo: "bar" }; const independentCopy = JSON.parse(JSON.stringify(originalObject));
Das obige ist der detaillierte Inhalt vonWie geht JavaScript mit Pass-by-Value und Pass-by-Reference bei primitiven Typen und Objekten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!