JavaScript では、すべての変数が値によって渡されます。つまり、元の値のコピーが返されます。が作成され、関数に渡されます。ただし、値が配列やオブジェクト リテラルなどのオブジェクトである場合、コピーは元のオブジェクトへの参照になります。
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
上記の例では、 b オブジェクトと c オブジェクトへの変更は次のとおりです。元のオブジェクトに反映されますが、 a の再割り当ては効果がありません。
詳細な例:
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) }
最初の例では、 a が変更されても、 b は参照のコピーであるため、元の値を保持しています。
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) }
2 番目の例では、変更が行われています。 a[1].red への変更は、同じオブジェクト参照を共有するため、a と b の両方に影響します。
オブジェクトの完全に独立したコピーを作成するにはでは、JSON.parse() メソッドと JSON.stringify() メソッドを使用して、それぞれオブジェクトを逆シリアル化およびシリアル化できます。例:
const originalObject = { foo: "bar" }; const independentCopy = JSON.parse(JSON.stringify(originalObject));
以上がJavaScript はプリミティブ型とオブジェクトを使用した値渡しと参照渡しをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。