基本データタイプと引用タイプの違いは詳しく説明してください.
4590 ワード
先日、
js基本データタイプ:
js基本的なデータのタイプは、undefined、null、number、bollan、stringを含みます.基本的なデータのタイプは値によってアクセスします.つまり、変数に保存されている実際の値を操作できます.
1.基本データタイプの値は可変ではありません.
どの方法も基本タイプの値を変えることができません.たとえば、文字列:
コードを見て、次のような疑問を持つ人がいるかもしれません.
つまりここであなたが考えている変化は「指針の変化」です.
ここの基本的なタイプは「change」です.nameではなく、はっきり区別します.
2.基本データタイプは属性と方法を追加できません.
3.基本データタイプの割当値は、単純な割当値です.
変数から別の変数に基本型の値を割り当てると、変数オブジェクトに新しい値を作成し、その値を新しい変数に割り当てられた位置にコピーします.
4.基本データタイプの比較は値の比較です.
次のいくつかの基本的な変数がある場合:
スタック領域には、変数の識別子と変数の値が含まれています.
js引用タイプ:
jsには上の基本タイプ以外に引用タイプがあります.例えば、Object、Aray、Function、Dataなどが対象です.
1.参照の種類の値は変更可能です.
まず以下のコードを見てください.
彼らの関係は下の図のようです.
したがって、参照の種類の割り当ては、実際にはオブジェクトがスタックのアドレスポインタに保存されているため、2つの変数は同じオブジェクトを指し、いずれの操作も相互に影響を与えます.
4.引用の種類の比較は引用の比較である.
引用のタイプの比較は参照の比較であるので、言い換えれば、2つのオブジェクトがスタックに保存されている指し示しメモリのアドレスが同じかどうかを比較することになります.この時、p 1とp 2は同じように見えますが、彼らがスタックに保存している指し示すメモリのアドレスは違います.
5.引用の種類は、スタックエリアとヒープエリアに同時に保存されているものです.
参照タイプの記憶は、メモリのスタック領域とヒープ領域で共同で完了する必要があります.スタック領域には変数識別子とヒープメモリへのアドレスが保存されます.
以下のオブジェクトがある場合:
基本包装タイプ(包装対象):
まず以下のコードを見てください.
Js権威ガイド第3.6章と高級プログラム設計第5.6章を読むことによって、ECMAScriptはまた3つの特別な引用タイプのBoolean、String、Numberを提供していることが分かりました.この3つの特殊な引用タイプは基本包装タイプで、包装対象とも言います.
つまり、string、bollan、numberの3つの基本的なデータタイプを読み取ると、バックグラウンドは対応する基本的なパッケージタイプのオブジェクトを作成し、これらのデータを操作するためのいくつかの方法を呼び出すことができます.
したがって、第二行コードがs 1にアクセスすると、バックグラウンドは自動的に次の操作を完了します.は、Stringタイプの一例を作成する.var s 1=new String(「hellowworld」); は、例として指定方法を呼び出す./var s 2=s 1.substr(4) この例を破棄します./s 1=null 第三段階のこの廃棄動作があるからこそ、基本的なデータタイプは属性と方法を追加できない理由が分かります.これは基本的なパッケージタイプと参照タイプの違いです.対象の生存期間は、newオペレータを使って作成された参照タイプの例です.実行フローが現在のスコープから離れるまではずっとメモリに保存されています.自動的に作成された基本パッケージタイプのオブジェクトは、1行のコードの実行瞬間だけに存在し、すぐに廃棄されます.
参考資料:
https://segmentfault.com/a/11...
kraaas
大神さんの基本的なデータの種類と引用の種類の違いについての文章を見ましたが、素晴らしいと思いました.その上に自分が普段見ている知識点と理解を加えたいと思いました.js基本データタイプ:
js基本的なデータのタイプは、undefined、null、number、bollan、stringを含みます.基本的なデータのタイプは値によってアクセスします.つまり、変数に保存されている実際の値を操作できます.
1.基本データタイプの値は可変ではありません.
どの方法も基本タイプの値を変えることができません.たとえば、文字列:
var name = "change";
name.substr();//hang
console.log(name);//change
var s = "hello";
s.toUpperCase()//HELLO;
console.log(s)//hello
この2つの例を通して、従来定義されていた変数nameの値は常に変化していないことが分かります.substr()とtoUpperCase()を呼び出して戻ってきたのは新しい文字列です.元定義されていた変数nameとは関係がありません.コードを見て、次のような疑問を持つ人がいるかもしれません.
var name = "change";
name = "change1";
console.log(name)//change1
このようにnameの値が変わりました.var name=「change」です.ここの基本タイプはstringです.つまり「change」です.ここの「change」は変えてはいけません.nameは「change」の一つの指針を指しています.ポインタの方向は変えられます.だから、name=「change 1」ができます.この時、nameは「change 1」を指しました.同じように、ここの「change 1」は変えられません.つまりここであなたが考えている変化は「指針の変化」です.
ここの基本的なタイプは「change」です.nameではなく、はっきり区別します.
2.基本データタイプは属性と方法を追加できません.
var p = "change";
p.age = 29;
p.method = function(){console.log(name)};
console.log(p.age)//undefined
console.log(p.method)//undefined
上のコードを通して、基本タイプに属性と方法を追加できないことを知っています.また、基本タイプは可変ではないともう一度説明します.3.基本データタイプの割当値は、単純な割当値です.
変数から別の変数に基本型の値を割り当てると、変数オブジェクトに新しい値を作成し、その値を新しい変数に割り当てられた位置にコピーします.
var a = 10;
var b = a;
a++;
console.log(a)//11
console.log(b)//10
上記のコードでは、aに保存されている値は10です.aの値を使って初期化すると、bにも値10が保存されていますが、bにおける10とaにおける10は完全に独立しています.bにおける値知識aにおける値のコピーです.この2つの変数は、任意の動作に参加しても互いに影響を与えません.4.基本データタイプの比較は値の比較です.
var person1 = '{}';
var person2 = '{}';
console.log(person1 == person2); // true
5.基本データタイプはスタックに保存されています.次のいくつかの基本的な変数がある場合:
var name = "jozo";
var city = "guangzhou";
var age = 22;
その保存構造は次の図のようになります.スタック領域には、変数の識別子と変数の値が含まれています.
js引用タイプ:
jsには上の基本タイプ以外に引用タイプがあります.例えば、Object、Aray、Function、Dataなどが対象です.
1.参照の種類の値は変更可能です.
var o = {x:1};
o.x = 2;//
o.y = 3; ,
var a = [1,2,3];
a[0] = 0;//
a[3] = 4;//
2.参照の種類は属性と方法を追加できます.var person = {};
person.name = "change";
person.say = function(){alert("hello");}
console.log(person.name)//change
console.log(person.say)//function(){alert("hello");}
3.参照の種類の割り当ては、オブジェクト参照です.まず以下のコードを見てください.
var a = {};
var b= a;
a.name = "change";
console.log(a.name)//change;
console.log(b.name)//change
b.age = 29;
console.log(a.age)//29
console.log(b.age)//29
変数から他の変数への参照タイプの値も同じです.変数に格納されているオブジェクトの値をコピーして新しい変数に割り当てられた空間に入れます.参照タイプは変数の中に保存されています.参照タイプは、オブジェクトがヒープメモリにあるアドレスです.したがって、基本データタイプの単純な割当値とは異なり、この値のコピーは実際にはポインタです.このポインタはヒープメモリに格納されているオブジェクトを指します.値を割り当てて操作すると、二つの変数は同じオブジェクトアドレスを保存しています.この二つのアドレスは同じオブジェクトを指しています.したがって、どちらの変数を変更しても互いに影響します.彼らの関係は下の図のようです.
したがって、参照の種類の割り当ては、実際にはオブジェクトがスタックのアドレスポインタに保存されているため、2つの変数は同じオブジェクトを指し、いずれの操作も相互に影響を与えます.
4.引用の種類の比較は引用の比較である.
var person1 = {};
var person2 = {};
console.log(person1 == person2)//false
なぜ二人の相手は同じように見えますが、同じではないですか?引用のタイプの比較は参照の比較であるので、言い換えれば、2つのオブジェクトがスタックに保存されている指し示しメモリのアドレスが同じかどうかを比較することになります.この時、p 1とp 2は同じように見えますが、彼らがスタックに保存している指し示すメモリのアドレスは違います.
5.引用の種類は、スタックエリアとヒープエリアに同時に保存されているものです.
参照タイプの記憶は、メモリのスタック領域とヒープ領域で共同で完了する必要があります.スタック領域には変数識別子とヒープメモリへのアドレスが保存されます.
以下のオブジェクトがある場合:
var person1 = {name:"change1"};
var person2 = {name:"change2"};
var person3 = {name:"change3"};
この3つのオブジェクトがメモリに保存されている場合は、次の図のようになります.基本包装タイプ(包装対象):
まず以下のコードを見てください.
var s1 = "helloworld";
var s2 = s1.substr(4);
上記の文字列は基本的なデータの種類だと言っていますが、方法があるべきではないです.ここs 1はなぜsubstr()を呼び出すことができますか?Js権威ガイド第3.6章と高級プログラム設計第5.6章を読むことによって、ECMAScriptはまた3つの特別な引用タイプのBoolean、String、Numberを提供していることが分かりました.この3つの特殊な引用タイプは基本包装タイプで、包装対象とも言います.
つまり、string、bollan、numberの3つの基本的なデータタイプを読み取ると、バックグラウンドは対応する基本的なパッケージタイプのオブジェクトを作成し、これらのデータを操作するためのいくつかの方法を呼び出すことができます.
したがって、第二行コードがs 1にアクセスすると、バックグラウンドは自動的に次の操作を完了します.
参考資料:
https://segmentfault.com/a/11...