JavaScript原始VRS参照値の理解


こんにちは世界、すべてのプログラミング言語には、ビルトインデータ型があります.JavaScriptでは、7つのよく知られたデータ型があります.
これらdata 型をグループ化できますprimitive and reference 値.
このポストでは、我々はprimitive and reference JavaScriptの値.

データ型の理解


In computer programming, a data type tells the compiler or interpreter what type of value a variable has.


JavaScriptプログラミング言語には7つのデータ型があります.
  • undefined
  • null
  • string
  • numbers
  • symbol
  • boolean
  • object
  • これらのデータ型はprimitive and reference 値(値はvaraibleに格納されるいくつかの種類のデータとして見ることができます).

    原始データ型


    つのプリミティブデータ型があります
  • undefined
  • null
  • string
  • numbers
  • symbol
  • boolean
  • 非原始データ型

    Object 考えられるreference or non-primitive 値.心に留めておきなさいarrays and functions に分類されるObjects

    データ型または値の格納


    JavaScriptエンジンにはデータや値を格納する2つの場所がありますstack and heap .
    プリミティブデータ型には複雑な値がありません.stack .
    しかし、Aのサイズreference 値は動的または複雑です.例えば、
  • Object 新しいプロパティを追加することができます.
  • array を追加することができます要素を追加または削除します.
  • 関数は多くの行のコードとより多くの文を追加することができます.
    これらの複雑さのために、我々は店reference における値heap .
  • 値の設定


    Aを割り当てるときvaluevariable , JavaScriptエンジンは、値がprimitive or reference 値.
    これは、変数を格納する場所を決定するのに役立ちますstack or heap .

    原始値へのアクセス


    変数を宣言し、primitive 変数への値、例let a = 40 . JavaScriptエンジン
  • はいくつかのメモリまたはスペースをstack
  • それが必要なときに値を見つけるのを助けるアドレスまたは場所であるユニークな識別子を与えてください
  • 変数を初期化し、値を代入します.
  • 例を見ましょう
    var x = 10;
    
    上のコードで
  • JavaScriptエンジンは、ブラウザのメモリと代入演算子の中にユニークな識別子= 現在値を割り当てるか、保存するでしょう10 その特定の場所で、我々はそれ(すなわちA 001)を割り当てました.
  • 値ですから10 は、variable , この変数に格納された**実際の値を使用または操作します.
  • つまり、プリミティブ値を格納する変数は
  • プリミティブ値のコピー


    プリミティブ値を別の変数に格納する変数を割り当てるときに何が起こるかを見てみましょう.

    When you assign any variable that contains a primitive value to a new variable, the value stored in the initial variable is created and copied to the new variable.


    以下の例を見てみましょう
    let a = 40;
    let b = a; //assign value stored in`a` to `b`.
    
  • まず変数を宣言するa そして、40 .
  • 次に、別の変数を宣言しますb に保存し、a それに.
    両方の変数の出力をチェックしましょう
  • console.log(`a =${a} and b = ${b}`)
    
    
    出力は
    a =40 and b = 40
    
    変数が宣言されると、メモリ内の場所を割り当て、そこに値を格納します.
  • 上記でlet a = 40 , 私たちは場所を割り当てました*メモリで、割り当てられた場所*を呼び出してください.我々がAX 001に行くとき、我々は価値にアクセスすることができます40 .
  • 宣言するときb 変数は、メモリ内の場所を作成するので、値を格納します.この場所を呼び出しましょう
  • AX 001とBX 001は、我々が値を格納しているメモリの2つの場所の場所です.
  • 今、私たちはa to b
  • let a = 40;
    let b = a; //copies value stored in `a` to `b`
    
  • 内部では、JavaScriptエンジンはa bの位置にある.場所bx 001の意味で我々は現在値40 .
  • 初期値の変更


    次に、変数に格納した値を変更することを決定しますa , 変数の値b チェンジも?
    a = 50; //change value stored in a
    console.log(`a =${a} and b=${b})
    
    出力は
    a =50 and b =40
    
    に格納された値を変更するab . ただし、a に割り当てられたb なぜ?
    これが起こっている
  • The values 変数のa and b はメモリ内の異なる場所に格納される.
  • 40 変数の位置ax001に格納されるa 変数**に格納されますb 場所に保存されます.
  • Evenは、後にa to b , 彼らは2つの別々の場所に格納されている.
  • 変数の値を変更するとa , 変数の値は変更されませんb .
  • 変数A *と* * *は関係を持ちません(これはメモリの異なる場所が原因です).
  • 要約する


    プリミティブ値の概要では、a 変数b 変数は変わりません.だってa and b メモリ内の位置は異なる.

    非原始値へのアクセス


    非原始値はheap これは非原始値が複雑なデータ構造を持っているため、膨大なメモリを格納する必要があるためです.
    変数を定義し、それに非プリミティブデータ型を割り当てるとき.これは次のようなことです.
  • JSエンジンはユニークな識別子またはアドレスを作成しますheap そして、そのアドレスに* *実際の値を格納します
  • スクリプトが実行を開始し、それがnon primitive 値g.
  • user = {
    firstName: "Emmanuel",
    lastName: "Kumah"
    }
    
  • user 変数の格納はポインタであり、値*が格納され、実際の値ではない** address **を指します.
  • それはデータ値そのものではありませんが、値を見つけるためにどこで変数を指示します.
  • If you looked at the in-memory value of a reference type, you’d see a memory address (or a “reference” to a spot in memory).

  • 実際の値はヒープに格納されており、アクセスを必要とするので、変数*、または変数の上にいくつかの形式のポインタを作成します.user そして、前方へのヒープに格納された値への場所user 変数
  • 今すぐ呼び出しstack 私たちがアクセスしているのは、* Reference *または*へのポインタですheap **
  • Maining、オブジェクトまたは任意の非プリミティブデータ型を使用する場合は、実際のオブジェクトではなく、そのオブジェクトの参照で動作します.
  • When we access a reference value, we manipulate it through reference, not through its actual value that is stored. Thus, variables that are reference values are accessed by reference


    コピー参照値


    他の変数に参照値を格納する変数を割り当てるとき、初期変数に格納された値も新しい変数の場所にコピーされます.
    let user = {
      firstName: "emmanuel",
      location: "Ghana"
    }
    let admin = user; //assign variable to new variable
    
    console.log(`admin is ${admin.firstName} and user is ${user.firstName}`);
    
    出力は
    admin is emmanuel and user is emmanuel
    
    違いは、両方の変数に格納された値は、ヒープに格納された実際のオブジェクトのアドレスです

    値の変更


    両方の変数は同じオブジェクトを参照しています.意味は、両方の変数から元のオブジェクトを操作することができます
    試してみましょうfirstName プロパティuser オブジェクトを参照してくださいadmin オブジェクト.
    下記のコードを見てください
    let user = {
      firstName: "emmanuel",
      location: "Ghana"
    }
    let admin = user; // assign user to admin
    
    console.log(`admin is ${admin.firstName} and user is ${user.firstName}`);
    
    admin.firstName = "Stephen"; //change the firstName property 
    
    console.log(`admin is ${admin.firstName} and user is ${user.firstName}`);
    
    
    出力は
    admin is emmanuel and user is emmanuel
    admin is Stephen and user is Stephen
    
    上から、user また、admin オブジェクト.
    したがって、両方の変数からOrdinalオブジェクトを操作し、1つの変数に1つのプロパティを変更すると、他の変数のプロパティが変更されます.

    要約する


    この記事では、Varaibleは2つの値型のいずれかを呼び出すことができます.primitivereference 値.
  • プリミティブ値はスタックに格納されるデータです.
  • プリミティブ値は、変数が持つ位置に直接格納されます.
  • 参照値はヒープに格納されるオブジェクトです
  • 変数位置に格納される参照値は、オブジェクトが記憶されるメモリーの位置へのポインタである.
  • あなたがこのポストで価値を見つけたならば、親切にあなたの社会的ネットワークにそれを共有してください.それは他の誰かに価値があります.このポストにあなたのコメントを読むのも好きです.
    ガーナから愛を込めて書かれています