[JavaScript]基本タイプと参照タイプの違い


JavaScriptデータ型


JavaScriptのデータ型は比較的柔軟です.状況に応じて変化するデータ型の特徴があります.
データ型には基本型と参照型があり、次のタイプがあります.


基本型と参考型の違いを理解してみましょう。


変数を宣言して割り当てます.2つのタイプの代表的な違いは次のとおりです.

👀 価格が同じように分配されるとは何ですか。


実際のメモリストレージ領域は、2つのテーブルのように個別のストレージ領域を持たない.実際には、値がメモリにどのように格納されているかを理解するために、アドレスとデータからなる次の表を使用して抽象化し、ストリームを理解しました.

Step1


変数aが宣言されると、実際のメモリは、データを格納するスペースが予め確保される.下図のように、201個のスペースをランダムに取得します.

Step2


変数aに値10を指定すると、変数aを検索し、変数aに一致するアドレス値@201の記憶領域を読み出し、201のアドレスデータ空間に10を入れる.

基本型はそのまま値を割り当てていることがわかる.


変数の宣言と割り当ての過程で、基本的な特徴を熟知し、使用しましょう.
変数を宣言すると、まず空間を学報し、変数名をアドレスと一致させ、変数が指すアドレスの空間にデータを格納する割当てプロセスです.

Step3


今回は変数cを宣言し、文字列「こんにちは」を割り当てます.
まず、202空間にデータが含まれていることを確認し、下図に示す.

下図に示すように、確保された空間アドレス値を有し、変数名cとアドレス@202とが一致する.

次に、下図に示すように、再一致アドレス202に移動し、文字列「さようなら」を保存する.

Step4


その後、文章で再びcにfalseを割り当てます.
varというキーワードがないのでfalseを保存した場合、現在持っている変数名にcがあるかどうかを検索します.
(cが見つからない場合はStep 3のように宣言します.)
cは現在メモリに存在するため、cが指すアドレス@202を読み出し、対応するアドレス位置に移動し、202ビットでfalseを上書きして下図に示す.

Step5


そして次の文でvare=c;varキーワードが実行されている場合は、まず宣言プロセスが行われます.
空間が200であることを確認し、そのアドレスを変数eと一致させる.次に202に移動し、c値falseを読み出す.
次に取得した値falseでeを検索し、eが指す200空間にfalseを入れる.

ここで重要なのは,これらの格納された基本型データ自体が比較可能であることである.


cが指すメモリ空間に格納されるfalseと、eが指すメモリ空間に格納されるfalseは全く同じ値である.
falseという名前自体が世界で唯一のキーワードであり,唯一の単語を比較すればcとeは全く同じと考えられる.

Step6


さらにeに20を割り当てると、20で記憶eのメモリ領域を検索し、元のfalseの代わりに20を使用する.
この操作はfalse値が20になるのではなく、メモリ領域のfalse値を20ではなく上書きします.
現在、cが指す値falseとeが指す空間値20は全く異なる値となっている.
従って、下図のようにeとcが等しくない条件が成立する.

コードで次のように整理します.
var a; 
a = 10; 

var c = '안녕'; 

c = false; 

var e = c; 
// e === c 

e = 20;
// e !== c

👀 ストレージ値を割り当てるアドレス値とは?


参照データ値の割り当て方法について説明します.
参照データ・オブジェクトを表示します.
基本タイプと同様に、メモリ領域を確保し、アドレスを変数名に一致させる手順は同じです.

Step1


宣言変数objは、メモリ領域を確保することもできます.下図のように、200個のスペースをランダムに空けます.

今は配分の番ですが、配分する値は今回は参照型です.
参照型データはpropertyとdataで構成されています.

まず、各property名とvalueのアドレスを一致させるために、新しいスペースが確保されます.新しい1010のスペースを確保します.

Step2


次に、1011においてa propertyの値を含む空間が確保され、確保されたアドレスがa propertyと一致する.
同様に、1012において、bpropertyを含むvalueの空間が確保され、確保されたアドレスがbpropertyと一致する.

アドレス値ごとにデフォルトのデータ値が割り当てられます.
1011ストレージ11012は、以下に示すように「Hello」を格納する.

以前にある場所に記憶されていたゲスト記憶情報のアドレス1010が200に一致する.

データ空間に基本データが含まれるまで、これらの手順を繰り返します。


参照型データは、基本型データの集合と見なすことができる。


Step3


このような場合にobjをobj 2に割り当てると、どうなるのでしょうか.
201個の空間が得られ、obj 2と一致し、objが指すデータ1010アドレスがobj 2に割り当てられる.

これが参照形成の形式である.


オブジェクトは、ある場所に個別に格納され、そのオブジェクトのアドレス値のみがコピーされます。つまり、値は格納されたアドレス値を割り当てます。


以下に示すように、obj 2のa propertyに10を割り当てると、obj 2に一致する201アドレスに移動して1010に移動し、1010でa propertyを検索し、1ではなくaに一致する1011アドレスに移動して10を入れる.

コードで次のように整理します.
var obj = { 
  a : 1, 
  b : 'Hello', 
}; 

var obj2 = obj; 

obj2.a = 10; 

console.log(obj2.a); // 10 
console.log(obj.a); // 10
console.log obj 2でaとobjaいくらですか.
もちろんa値は10のはずです.
オリジナルobj.a値は出力10を決定することもできる.

obj 2オブジェクトはobjオブジェクトとは異なる新しいオブジェクトを作成するのではなく,元のobjが見たオブジェクトとともに観察する.


obj==obj 2は同一のオブジェクトを完全に参照しているといえる.


これまで,基本型データと参照型データの最大の違いを理解し,この原理を理解してきた.
出典:クラスリファレンス
https://www.inflearn.com/course/%ED%95%B5%EC%8B%AC%EA%B0%9C%EB%85%90-javascript-flow/lecture/9444?tab=curriculum