「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JavaScript 値と参照

JavaScript 値と参照

2024 年 7 月 31 日に公開
ブラウズ:408

JavaScript values vs reference

JavaScript で変数がどのように保持されるかを理解します: 値または参照として

JavaScript またはプログラミングにおいて、変数とは、データを保存するために使用されるコンピューターのメモリ内の場所です。変数は宣言され (名前と識別子が与えられ)、言語に応じて、すぐにまたは後で値を割り当てることができます。この変数は、同じ値を明示的に再度指定するのではなく、プログラムの後半で参照できます。

JavaScript では、データは値の形式で渡されます。これらの値は、プリミティブ値またはオブジェクト値のいずれかになります。 JavaScript 開発者として、JavaScript がデータを処理する方法を理解することは、言語の強力な基礎を身に付けるために非常に重要です。

プリミティブ値には次のものが含まれます:

  • 文字列。
  • 数字。
  • ブール値。
  • BigInt.
  • シンボル。
  • 未定義。
一方、

オブジェクトの値は次のとおりです:

  • 配列。
  • 機能。
  • オブジェクト。

これらの値タイプは、渡されるときに異なる動作をします。以下のスニペットを考慮してください:

var myName = "フレッド";
var otherName = myName;
myName = "アシュリー";
console.log(私の名前); //アシュリー
console.log(otherName); //フレッド

myName の「コピー」のように見えますが、otherName は同じままであることに注意してください。実際には、otherName に myName が割り当てられたとき、文字列 "Fred" のコピーとして割り当てられるのではなく、新しい文字列 "Fred" が作成されました。したがって、myName と otherName の間には直接的なリンクはありません。これは、JavaScript がプリミティブ値を渡す方法です。

オブジェクト値は異なる方法で処理されます。以下のスニペットを見てください:

var myObj = {色: "赤"};
var otherObj = myObj;
myObj.color = "青";
console.log(myObj.color); //青
console.log(otherObj.color); //青

ここでは、オブジェクトが作成されて myObj に割り当てられ、それが otherObj に割り当てられています。myObj の color プロパティを変更するだけで、otherObj と myObj の両方のカラー プロパティがどのように変更されるかを見てください。これは、オブジェクトの値が参照として渡されるためです。 myObj はオブジェクトを直接参照せず、代わりにその参照を指します。otherObj には、実際のオブジェクトへの参照である myObj が割り当てられます。したがって、両方の変数は同じ参照を指しているため、同じオブジェクトにリンクされており、一方の変更は他方にも影響します。

これが、2 つのオブジェクトの比較 (===) が直接 false を返す理由であり、文字通り 2 つの異なる参照を比較していることになります。ここでは、同じ参照を比較しているため、myObj === otherObj は true を返します。

これにより、JavaScript が舞台裏でどのように動作するかについて、新たな視点が得られることを願っています。

それまではバグのない状態を保ってください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/js_cipher/javascript-values-vs-reference-1ao5?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3