以下のコードを実行すると
sample にも test2 の値が追加され書き変わってしまいます。
追加されないようにするにはどうすると良いのでしょうか?
JavaScript
1let sample = { 2 test: '123' 3}; 4 5let sample2 = sample; 6sample2.test2 = '456'; 7 8console.log(sample);
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
「なぜそうなるか」は過去質問にあったと思います。
大目的がわかりませんが、オブジェクトじゃなくプロパティだけ代入するとか。
js
1let sample = {}; 2sample2.test = sample.test; 3sample2.test2 = '456'; 4 5console.log(sample); 6
投稿2021/05/20 03:55
総合スコア80875
0
参照渡し?というワードに辿り着く事ができました。
投稿2021/05/20 04:13
総合スコア9
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
「参照渡し」関連の話にいくと、
かなり深いプログラミングの仕組みの部分まで遡ってしまうので、
今は、オブジェクトはそういう挙動なんだ、程度に留めた方がいいと思います。
ちなみに、JavaScriptには参照渡しという仕組みは存在しません。
そう言ったほうがわかりやすいということからか、そう呼称している方はかなり多いですが、
JavaScriptの参照の仕組みと、
参照渡しというものの仕組みは別物です。
(挙動は似ているようには見えるが)
2021/05/20 06:13
なるほどですね。ありがとうございます。
2021/05/20 06:13
意識したほうがいいですね。
https://qiita.com/yuta0801/items/f8690a6e129c594de5fb
2021/05/20 06:17
記事もそうですが、
コメントのやり取りがめちゃくちゃ参考になりますね。
「参照呼び出し」
これは的を射てそうな言い方な気が。
2021/05/20 06:47 編集
https://qiita.com/raccy/items/d4c5e7995a8fc90109ee#crystal
参考程度にですがJavaScriptに限らずですけど「call by reference」以外を「参照渡し」と呼称している記事
なんかをまとめてる記事もあります。
つまり、これぐらい勘違いを起こしやすい問題なので
理解が及ばない内は「そういうもの」と捉えておいた方がいいかと。
((2021/05/20 15:36)のZuishinさんの指摘を受けて表現を修正しました。)
2021/05/20 06:48 編集
JSが一番記事数が多いのが笑えないですね。
一番初学者が触れそうな言語だからか・・・。
> 理解が及ばない内は「そういうもの」と捉えておいた方がいいかと。
これに賛成です。
質問者さんの理解レベルが高まったら、深く勉強してみる、がベストだと思います。
2021/05/20 06:36
そこに挙げられている記事は初心者の書いた記事ばかりなので、解釈が分かれるというのは疑問があります。
2021/05/20 06:50 編集
>Zuishinさん
全部を確認した訳じゃなかったのですが、今さらっと見た感じどちらかというと、
初心者が誤解したまま備忘録として残してるのが多いですね・・・それだと「解釈」という
表現はおかしいですね、少し修正します。
(2021/05/20 15:47)のコメントに対して
>miyabi_takatsukさん
すいません、お手数お掛けします。
2021/05/20 06:47
> 初心者の書いた記事ばかり
確かに、「あ、こんな風に動くんだ、記事にしたろ!」感が漂うもの多いですね。
解釈どうこうより、「あくまでそういう仕様」の話ですしね・・・。
K_3578さん >
合わせて、こちらのコメントも修正します!
2021/05/20 07:36 編集
結局は「気に病まなくても、考えなくてもいいようなコードを組む」でいい気がします。
本件で言うと、オブジェクトまるごとコピーする必要があるのかどうかあたりから検討するとか。。
用途が別なら別途取得したほうが間違いがないようにも思います。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。