1-基本タイプと参照タイプの挙動が異なる原因:研究


以上のコードには、卒業後1ヶ月以内に就職する会議があります.学習を行い、欲しい本を学び、出題内容を面接し、面接を模擬するシステム.
だから私たちが選んだ本はコアJavaScript-鄭在南です
JavaScriptを根本的に理解したいなら、この本で勉強することをお勧めします.😃 それでは🙌

データ型のタイプ


きほんがた


(元のタイプ:元のタイプ)
数値、文字列、ブール値、null、undefined、構成部品(ES 6に追加)

参照タイプ


(reference type)
オブジェクト、配列、関数、日付、正規表現など
基本型は割り当てや計算時にコピーされ、参照型はより深い面でコピーされます.
基本型は値を含む湧出値を直接コピーし,参照型は値を含む湧出値からなる組合せの湧出値を指す.

🤔 なぜ独自のメモリの切り上げを使用してデータを格納するのですか?


メモリは複数のビットで構成されており、メモリのプライマリ周波数値によってその位置がわかります.
△雑談語とは、コンピュータの言語が0,1で構成されており、ビット単位で位置決めされていると、非常に無効になります.
そのため、ビットを適切に組み合わせて、検索時間を減らす方法が考えられます.この単位は現在バイトです.)

データ割当てフロー

let a;		// 1️⃣ 변수 a 선언
a = 'abc';	// 2️⃣ 변수 a에 데이터 할당
let a = 'abc';	// 3️⃣ 1, 2를 한 문장을 표현
  • メモリの空き領域を解放し、その領域の識別子をaとして宣言します.
    「abc」データを
  • aと呼ばれる空間に入れ、
  • ドルの急騰を割り当てた.
    JavaScriptでは、デジタルデータは64ビットのスペースを保持していますが、文字列の場合、英語と韓国語だけを見ても占めるビット数は変わりませんので、容量も総字数も可変です.
    データ領域を事前に取得した場合は、データの変換時にそのサイズで拡張し続ける必要があります.
    また、変更されたデータが最後の場合は、データ量を増やすだけでよいが、中間のデータが変化した場合は、後に記憶されているデータをすべて後に移動し、すべてのアドレスを識別子に再接続する必要がある.
    値が変更されると、無条件に新しい独立した空間を作成して記憶することで、データ変換を自由に行うことができ、メモリをより効率的に管理するために、直接値を入れる必要がなく、単独でデータを記憶し、注入値に関連付けることができます.

    変数と定数は不変性ですか?


    この概念は本当に難しいが,変数と定数を不変性に分けることはできない.
    それはどのような出発点に分かれますか?

    変数/定数の区別


    まず,この2つの区別の重点は変更性にある.
    一度に、データ割り当ては、割り当てられた変数空間に他のデータを再割り当てできるかどうかに分割されます.
    定数は通常JSでconstとして用いられ,定数自体は不変値ではなく,データの基本形式に不変性があると誤解される可能性がある.

    非不変性の違いは何ですか?


    可変値不変値というものは見えないので、抽象的に考えると整理しにくいです
  • エントリーレベル:エントリーレベルデータのリフト値を変更するのではなく、値を変更してエントリーレベルデータのリフト値
  • に変換する.
  • 参照型:参照型の主切り上げとは、データセットの別の主切り上げを指すので、データセットが異なる主切り上げに変換される限り、識別子を持つ空間の主切り上げは、以前と同じ参照値の主切り上げとなり、変更可能な可変値といえる.
  • きほんデータわりあてりゅう

    let a = 'abc';	// 1️⃣ 
    a = a + 'def';	// 2️⃣
    
    let b = 5;	// 3️⃣ 
    let c = 5;	// 4️⃣
    b = 7;		// 5️⃣
    1」「abc」というデータの急上昇値を識別子aに与える空間は、急上昇値として与えられる
    2"""""""""
    3πυυυυυυυυυυυυυ\
    データ4」5があるため、株価の上昇をcに与えた.
    5υ⃣7υυυυυυυυυυυυυ

    リファレンスデータ割当てフロー

    let obj1 = {		// 1️⃣ 
      a: 1,
      b: 'bbb'
    }	
    obj1.a = 2;		// 2️⃣
    
    let nestingObj = {	// 3️⃣ 
      x: 3,
      arr: [ 3, 2 ],
    };
    nestingObj.arr = 'str';	// 4️⃣

  • 1️⃣, 2️⃣


  • 3️⃣ , 4️⃣

  • 基本変数と参照変数のレプリケーションの比較


    変数をコピーするプロセス基本型と参照型のデータは同じアドレスを持っていますが、データ割り当ての過程では異なり、変数をコピーした後の動作には大きな違いがあります.

    複数回後の再割り当ての違い


    オブジェクトのプロパティの変更

    let a = 10;
    let b = a;
    let obj1 = { c: 10, d: 'ddd' };
    let obj2 = obj1;
    
    b = 15;
    obj2.c = 20;
    property変更の際、前に書いたような基本型は、データの主湧値参照型がデータビームの主湧値をもたらし、基本型がデータ変更後、主湧値が変更され、参照型が内挿のみ変更され、表面的にはデータの主湧値は変更されないので、以下のようになります.
    console.log(a === b);		// false
    console.log(obj1 === obj2);	// ture

    オブジェクト自体を変更する場合

    b = 15;
    obj2 = { c: 20, d: 'ddd' };
    
    console.log(a === b);		// false
    console.log(obj1 === obj2);	// false
    さらに基本型はもちろん,参照型もデータ自体を変えて異なる値を得ることができる.
    別の値になるのは、可変値といえ、その内部のpropertyを変えるときだけ成立します.

    どうしてそれを変わらない対象にするのですか?


    不変オブジェクトは(immutableobject)三大フレームワークやライブラリだけでなく,関数式プログラミング,設計モードなどの面でも重要な基礎概念である.
    基本型と同様に、データを直接変更すると、参照型データでも既存のデータは変更されません.これは、内部プログラムを変更すると、既存のデータも変化することを意味します.
    多くの場合、渡された値が内部変数であっても、元のオブジェクトはそのままでなければなりません.この場合、不変のオブジェクトが必要です.
    let user = {
      name: 'hi',
      gender: 'female',
    }
    
    let changeName1 = function (user, newName) {
      let newUser = user;
      newUser.name = newName;
      return newUser;
    }
    
    let changeName2 = function (user, newName) {
      return {
        name: newName,
        gender: user.gender,
      }
    }
    
    let user2 = changeName1(user, 'bye');
    let user3 = changeName2(user, 'hello again');
    
    console.log(user.name, user2.name, user3.name);	// bye, bye, hello again
    console.log(user === user2, user2 === user3);	// true, false
    違いは次の点です.
  • changeName 1:内部propertyを直接変更し、既存のデータの内容を変更します.
  • changeName 2:内部プログラムを持って新しい{}に入れ、新しい対象を生み出し、異なる株価を見て別の要因となった.
  • 上のコードの残念な点は、changeName 2のnameと性別がハードコーディングされていることです.これを改善するために、すべてのpropertyをコピーする関数を作成することが望ましいです.
    本の中には浅いコピーと深いコピーの内容があり、他のブログの内容や頭の中で整理する必要があり、かなり長くなる可能性があり、次の編で書く必要があります.