質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

745閲覧

シャローコピー、ディープコピーとは

fbygqw

総合スコア37

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/10/01 19:00

シャローこぴー、ディープコピーという言葉が使われていたので調べていたのですが、この記事を読みました。
シャローコピーとはつまり、参照の値私のことで、ディープコピーは完全な複製を作ることをいうという理解であっていますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

いえ、そのブログの下の方にも

shallow_copyではなく参照の値渡しです 両者の挙動は違います

と明記してあります。


シャローコピーは、1段だけコピーすることです。「配列そのもの」はコピーされるので別オブジェクトとなりますが、「配列の要素」はそのまま同じオブジェクトが使われます。

javascript

1var a = [{foo: 3}]; 2 3// JavaScriptでは、オブジェクトの===での比較は、 4// 「同じオブジェクト」の場合だけtrueとなることに注意 5 6// 単なる変数のコピー 7var simple_copied = a; 8console.log(simple_copied === a); // true 9 10// シャローコピー 11var shallow_copied = a.slice(); 12console.log(shallow_copied === a); // false 13console.log(shallow_copied[0] === a[0]); // true 14 15// ディープコピー 16var deep_copied = JSON.parse(JSON.stringify(a)); 17console.log(deep_copied === a); // false 18console.log(deep_copied[0] === a[0]); // false 19

投稿2017/10/01 22:38

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fbygqw

2017/10/02 10:22

ご回答ありがとうございます。 「シャローコピーは、1段だけコピーすること」とのことですが、つまり「配列の要素の参照が値渡しされている」ということでしょうか?シャローコピーと参照の値渡しについて混乱しているのでおかしなことをいっているかもしれませんがお許しください...
maisumakun

2017/10/03 13:27

「値渡し」や「参照渡し」という語は、引数として「渡す」ときにしか使いません。
fbygqw

2017/10/03 13:46

そもそも、このような場合には値渡し, 参照渡しという用語を使うべきではないのですね。 大変勉強になりました。ありがとうございます。
fbygqw

2017/10/04 07:35 編集

この質問への回答で新たな疑問が生じたのですが、情報の視認性のために別質問として投稿させていただきました。もしよろしければご協力お願いします。 新たに投稿した質問: シャローコピーについて( https://teratail.com/questions/94942 )
guest

0

シャローコピーとは参照を複製すること。
ディープコピーとはデータそのものを複製すること。です。

投稿2017/10/02 12:27

編集2017/10/02 12:51
deigo

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deigo

2017/10/02 12:59

シャローコピーは参照の参照渡し
fbygqw

2017/10/03 13:49

質問文での表現にあわせてわかりやすく教えていただきありがとうございます。maisumakunさんのコメントより「このような場合には値渡し, 参照渡しという用語を使うべきではない」ということがわかり、無事シャローコピー、ディープコピーとは何かについて理解できたと感じています。
fbygqw

2017/10/04 07:06

この質問への回答で新しい疑問が湧いたのですが、あまりコメント欄が長くなってしまうと後から見るときに読みづらくなってしまうと思い新たに質問をさせていただきました。もしよろしければご回答よろしくお願いします。 新たに投稿した質問: シャローコピーについて( https://teratail.com/questions/94942 )
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問