• Javascriptでオブジェクトのディープコピー

    参照型

    Javascriptでオブジェクトをコピーということは基本的にできないみたい。Javascriptにおけるオブジェクトというのは、DOM要素と配列({} と [])などはオブジェクトとして扱われ、 1 とか “1” は 数値と文字列として扱われる。

    <span class="synIdentifier">var</span> a = <span class="synIdentifier">[</span>1, 2, 3 <span class="synIdentifier">]</span>;
    <span class="synIdentifier">var</span> b = a;
    b<span class="synIdentifier">[</span>0<span class="synIdentifier">]</span> = 100;
    <span class="synStatement">alert</span>(a);
    Code language: JavaScript (javascript)

    こうすると、bの変数の配列を一番目を変更したのにも関わらずaの配列の値が変わってる。これは変数aと変数bに格納されているデータを「参照」しているアドレスが同じ場所になってしまっているからなんだそうです。これを参照渡しと言って、Javascriptではどうあがいてもオブジェクトは参照渡しになってしまう。

    ただ、DOM要素や関数が配列内に含まれていなければある方法でオブジェクトをディープコピーできる。

    JSON

    <span class="synIdentifier">var</span> a = <span class="synIdentifier">[</span>1, 2, 3 <span class="synIdentifier">]</span>;
    <span class="synIdentifier">var</span> b = JSON.parse(JSON.stringify(a));
    b<span class="synIdentifier">[</span>0<span class="synIdentifier">]</span> = 100;
    <span class="synStatement">alert</span>(a);
    Code language: JavaScript (javascript)
  • Javascriptでオブジェクトのディープコピー

    参照型

    Javascriptでオブジェクトをコピーということは基本的にできないみたい。Javascriptにおけるオブジェクトというのは、DOM要素と配列({} と [])などはオブジェクトとして扱われ、 1 とか “1” は 数値と文字列として扱われる。

    <span class="synIdentifier">var</span> a = <span class="synIdentifier">[</span>1, 2, 3 <span class="synIdentifier">]</span>;
    <span class="synIdentifier">var</span> b = a;
    b<span class="synIdentifier">[</span>0<span class="synIdentifier">]</span> = 100;
    <span class="synStatement">alert</span>(a);
    Code language: JavaScript (javascript)

    こうすると、bの変数の配列を一番目を変更したのにも関わらずaの配列の値が変わってる。これは変数aと変数bに格納されているデータを「参照」しているアドレスが同じ場所になってしまっているからなんだそうです。これを参照渡しと言って、Javascriptではどうあがいてもオブジェクトは参照渡しになってしまう。

    ただ、DOM要素や関数が配列内に含まれていなければある方法でオブジェクトをディープコピーできる。

    JSON

    <span class="synIdentifier">var</span> a = <span class="synIdentifier">[</span>1, 2, 3 <span class="synIdentifier">]</span>;
    <span class="synIdentifier">var</span> b = JSON.parse(JSON.stringify(a));
    b<span class="synIdentifier">[</span>0<span class="synIdentifier">]</span> = 100;
    <span class="synStatement">alert</span>(a);
    Code language: JavaScript (javascript)