ホームページ  >  記事  >  ウェブフロントエンド  >  jsの基本データ型と参照データ型の違いについて

jsの基本データ型と参照データ型の違いについて

一个新手
一个新手オリジナル
2017-10-24 09:20:081564ブラウズ

スタックとヒープ
スタックは自動的に割り当てられるメモリ空間であり、システムによって自動的に解放されます。一方、ヒープは動的に割り当てられるメモリであり、サイズは可変であり、自動的には解放されません。

基本型と参照型

基本型: スタックメモリに格納される単純なデータセグメント。データサイズが決定され、メモリ空間サイズを割り当てることができます。

基本的なデータ型には、未定義、Null、ブール、数値、文字列が含まれ、それらの値はスタックに直接保存されます。

参照型: ヒープ メモリに保存されるオブジェクトの値であり、アドレス ポインタとスタックには、実際の値がヒープに保存され、ヒープ内の各領域は異なるサイズを持ち、状況に応じて特別に割り当てられます。参照型 (オブジェクト、配列、関数など) の値にアクセスする必要がある場合、まずスタックからオブジェクトのアドレス ポインターを取得し、次にヒープ メモリから必要なデータを取得します。


 var s='str',t= 0,floatNum=1.1;
    var obj={
        a:10,
        b:'Joel',
        c:function(){
            console.log('function');
        }
    }

js 基本数据类型引用数据类型内存分配

上に示すように:

基本データ型の値はスタックに保存され、参照型のオブジェクト参照はスタックに保存され、値はヒープに保存されます。

変数宣言時のさまざまなメモリ割り当て:

基本タイプ: スタックに格納される単純なデータ セグメント。その値は、変数によってアクセスされる場所に直接格納されます。これは、基本型が占めるスペースが固定されているため、基本型をより小さなメモリ領域 (スタック) に格納できるため、変数の値を迅速にクエリできるためです。

参照型: ヒープに格納されるオブジェクト。スタックに格納される値は、格納されるオブジェクトのメモリアドレスを指すために使用されるポインター (ポイント) です。これは、参照型の値のサイズが変化するためです。スタックに置かれます。そうしないと、変数の検索速度が低下します。逆に、スタックに格納される値はオブジェクトのアドレスであり、アドレスのサイズは固定されているため、スタックに格納しても変数のパフォーマンスには影響しません。

メモリ割り当てメカニズムが異なると、アクセスメカニズムも異なります

JavaScript では、ヒープ メモリに格納されているオブジェクトへの直接アクセスは許可されていないため、オブジェクトにアクセスするときは、まずメモリ スタックにアクセスしてメモリ内のオブジェクトを取得します ヒープ内のアドレス、このアドレスを使用してオブジェクト内の値を取得します。これは伝説的な参照によるアクセスですが、基本型の値はメモリ スタックに直接格納されます。

変数のコピーの違い

基本的なタイプ: 元の値を保持する変数が別の変数にコピーされると、元の値のコピーが新しい変数に代入されます。その後、2 つの変数は完全に独立したものになります。同じ値を持っています。

参照型: オブジェクトのメモリ アドレスを保持する変数が別の変数にコピーされると、メモリ アドレスが新しい変数に割り当てられます。これは、両方の変数がヒープ メモリ内の同じオブジェクトを指すことを意味します。どちらかがもう一方に反映されます。 (ここで理解すべきことの 1 つは、オブジェクトをコピーするときに、同一のオブジェクトがヒープ メモリに作成されるのではなく、オブジェクトへのポインターを保持する変数が 1 つだけ存在するということです。) ポインターがもう 1 つあります。

パラメータの受け渡し(実パラメータを仮パラメータにコピーする処理)の違い

ECMAScriptの関数パラメータはすべて値渡しですが、プリミティブ型と参照型の値に違いがあるのはなぜですか?メモリ割り当ての違いだけが原因ではありません。

基本的なデータ型: 変数の値のコピーを作成してパラメーターに渡すだけです。その後、パラメーターと変数は相互に影響を与えません。

参照型: 渡される値はメモリアドレスであるため、すべて同じオブジェクトを指します。

以上がjsの基本データ型と参照データ型の違いについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。