javascript:参照とコピー

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
javascript:参照とコピー [2022/12/20 02:52] babajavascript:参照とコピー [2022/12/20 09:16] (現在) – [参照とコピー] baba
行 1: 行 1:
 ====== 参照とコピー ====== ====== 参照とコピー ======
-インターネットで調べると、jsにおいて参照渡しとコピーがあると言されているものが多いですが、実際にはすべて参照渡しです。参照渡しとコピーで話をしたほうが理解が容易(振る舞いを覚えやすい)ということがありますが、このページでは正しい認識(参照のみで説明)をもつことを目指します。+インターネットで調べると、jsにおいて参照渡しとコピーがあると言されているものが多いですが、実際にはすべて参照渡しです。参照渡しとコピーで話をしたほうが理解が容易(振る舞いを覚えやすい)ということがありますが、このページでは正しい認識(参照のみで説明)をもつことを目指します。
  
 ===== 根本の理解 ===== ===== 根本の理解 =====
行 63: 行 63:
 ===== 練習 ===== ===== 練習 =====
 では理解ができたところで、少し練習してみましょう。 では理解ができたところで、少し練習してみましょう。
 +<code .js>
 +var inputs = {x:1,y:2}
 +var a = inputs;
 +inputs.x = 10;
 +inputs.y = 11;
 +var b = inputs;
 +console.log(a, b);
 +</code>
 +上記のコードを修正して、a = {x:1,y:2}, b = {x:10, y:11}となる結果に変更してください。ただしa,bへの代入には必ずinputs変数を用いてください。b = {x:10, y:11}等として直接代入してはいけません。
  
 +【正解】
 +<code .js>
 +var inputs = {x:1,y:2}
 +var a = Object.assign({}, JSON.parse(JSON.stringify(inputs)));
 +inputs.x = 10;
 +inputs.y = 11;
 +var b = inputs;
 +// 後の処理を考えて、bもaと同様にObjectをコピーするようにしておくとよいでしょう。
 +// var b = Object.assign({}, JSON.parse(JSON.stringify(inputs)));
 +console.log(a, b);
 +</code>
  
  • /home/users/2/lolipop.jp-4404d470cd64c603/web/ws/data/attic/javascript/参照とコピー.1671472360.txt.gz
  • 最終更新: 2022/12/20 02:52
  • by baba