[解決済み] JavaScript で配列を変更すると、なぜ配列のコピーに影響を与えるのですか?
質問
以下のようなJavaScriptを書きました。
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;
copyOfMyArray.splice(0, 1);
alert(myArray); // alerts ['b','c']
alert(copyOfMyArray); // alerts ['b','c']
var myNumber = 5;
var copyOfMyNumber = myNumber;
copyOfMyNumber = copyOfMyNumber - 1;
alert(myNumber); // alerts 5
alert(copyOfMyNumber); // alerts 4
このコードでは、変数
myArray
を宣言し、配列の値をセットしています。 次に、2番目の変数
copyOfMyArray
を宣言し、それを
myArray
.
に対して操作を行います。
copyOfMyArray
に対して操作を行ない、次に両方の
myArray
と
copyOfMyArray
. どういうわけか、私が
copyOfMyArray
に対して操作を行なうと、同じ操作が
myArray
.
このコードでは、同じことを数値の値で行っています。 変数
myNumber
を宣言し、それに数値の値を設定します。 次に、2番目の変数
copyOfMyNumber
を宣言し、それを
myNumber
. に対して操作を行います。
copyOfMyNumber
に対して操作を行ない、次に両方の
myNumber
と
copyOfMyNumber
. ここで、期待された動作が得られます。
myNumber
と
copyOfMyNumber
.
JavaScriptで配列を変更すると配列のコピーの値が変わり、数値を変更すると数値のコピーの値は変わらないようですが、配列と数値の違いは何でしょうか?
何らかの理由で、配列は参照で、数値は値で参照されていると推測していますが、なぜでしょうか? 他のオブジェクトでどのような動作を期待すればよいのか、どうすればわかるのでしょうか。
どのように解決すればよいのでしょうか?
JavaScriptにおける配列は オブジェクトです。 を保持し、変数には 参照 を保持するだけで、オブジェクトそのものを保持するわけではありません。したがって、両方の変数が持つ参照は 同じ オブジェクトへの参照を持ちます。
数字の例との比較は正しくありません。新しい値を
copyOfMyNumber
. に新しい値を代入すると
copyOfMyArray
に新しい値を代入しても
myArray
も変わりません。
配列のコピーを作成するには
slice
[ドキュメント] (docs)
:
var copyOfMyArray = myArray.slice(0);
しかし、これは 浅い コピー、つまり配列の中のオブジェクトは複製されないことに注意してください。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] ECMAScriptとは?
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法