JavaScriptオブジェクトおよび操作

5979 ワード

概念
JSオブジェクトは比較的特殊なデータ構造であり、私たちの生活の中のある特定のものを記述するために使用できます.このような構造の内部には他の複雑なデータ構造も格納でき、強力なパッケージ性があります.
注意:JSの対象はしばらくこのように理解できます.以前は多くの基本的なデータの種類を勉強しました.その時私達は基本的なデータの種類以外にも引用タイプというものがありました.これまでこれらの引用タイプが作成した変数はすべて「対象」といいます.
内蔵する各種タイプ(引用タイプ)オブジェクト
  • windowウィンドウオブジェクト
  • document文書オブジェクト
  • Math数学タイプオブジェクト
  • String文字列タイプオブジェクト
  • Aray配列タイプオブジェクト
  • Date日付タイプオブジェクト
  • RegExp正規表現オブジェクト
  • これらは私たちが以前に学んださまざまな「対象」です.これらのオブジェクトには共通の特徴があり、それぞれのオブジェクトが様々な機能を提供しています.また、一定の階層構造があります.
    私たちはこの数日間の勉強に従って、これらの対象を振り返ってみます.自然にはっきりしています.
    オブジェクトをカスタマイズ
    作成方法
    コンストラクタの作成
    構造関数によって作成されます.
    //       new Object();        ,      obj              ,          
    var obj = new Object();
    
    new Aray()
    new RegExp()
    new Date()
    new String()
    …は構造関数形式で、異なる種類のオブジェクトを作成します.
    文面量文法の作成
    字面量文法はあるデータ構造を表す簡単な書き方です.この形式は多くのプログラミング言語で適用されます.
    str
    [10,20,30]
    //^abc$/
    …これは字面量の形で作成された異なるタイプのオブジェクトです.
    カスタムJSオブジェクトの文字数
    文法的規則
    1、対象の全体は大かっこで{}を表します.
    var obj = {};  //            ,             
    
    2、対象の内部は多くのグループの属性(キー)と値からなり、それぞれのグループの属性と値の間にコロンを使います.関連して、対象の字面量の内部で、属性値ごとにセミコロンを付けないでください.
    var obj = {
        name: '  '
    }
    
    3、複数のグループの属性と値がある場合は、各グループの属性値はカンマで区切られます.
    var obj = {
        name: '  ',
        age: 18,
        sex: ' '
    }
    
    4、属性(キー):一般的に、合法的な識別子を書いたら、ダブルクォーテーションの「」またはシングルクォーテーションの「」を追加する必要はありませんが、非合法的な識別子(数字と漢字を除く.)であれば、ダブルクォーテーションの「」またはシングルクォーテーションの「」を使用してくくる必要があります.
    値:JSのいずれかのタイプのデータとすることができます.(配列、関数、または別のオブジェクト構造であってもよい)
    var obj = {
      name: '  ',
      "{2": true,
      4: '  ',
       : 333
    }
    
    5、オブジェクトの属性は重複できません.値は任意に繰り返すことができます.属性が重複すると、後の属性に対応する値が前の属性に対応する値を上書きします.
    var obj = {
        name: 'liu',
        name: 'sheng'
    }
    
    オブジェクトの操作
    ここでの操作とは、学習配列のように、対象を増加、削除、検索、修正するための対応操作があります.
    調べます
    対象内での検索は、一般的にある属性を通じて、対応する値を取得することです.私たちはオブジェクトを定義する時の属性の順序と最後の表示は違っていますので、ここでは以前のようなインデックス、下付きのメカニズムで値を取得することはできません.ここでは属性名来を通じて値を取得します.
    点文法
    var obj = {
      name: 'liu',
      age: 18
    }
    
    //        name       (      name)
    console.log(obj.name);
    //   age
    console.log(obj.age);
    
    中かっこの文法
    var obj = {
      name: 'liu',
      age: 18
    }
    
    //   name
    console.log(obj['name']);
    //   age
    console.log(obj['age']);
    
    二つの文法の違い
    属性が合法的な識別子でない場合は、点・文法を使って対応する値を取得できません.この場合は、中かっこ[]文法でのみ取得できます.
    var obj = {
      'v-#': 'liu'
    }
    
    // console.log(obj.v-#);           
    // console.log(obj.'v-#');                     ,     
    
    //             
    console.log(obj['v-#']);
    
    取得する属性名が分からない場合は、点・文法を使用することはできません.中かっこ[]文法でのみ取得できます.
    var obj = {
      name: 'liu',
      age: 18
    }
    
    //                              
    var obj = {
      name: 'liu',
      age: 18
    }
    
    function objGetValueByProp (obj, prop) {
      //       ,         ,     ,        prop   ,  obj      ,     undefined。
      //   :      xxx is not defined,              
      // return obj.prop;
      //               。     prop       ,        prop         
      //   ,      prop           ,              
      // return obj['prop'];
      return obj[prop];
    }
    
    console.log(objGetValueByProp(obj, 'name'));
    
    増加する
    あるオブジェクトに属性と値を追加する操作を行うという意味です.
    注意:属性と値はペアで追加されます.でないと、文法が間違ってしまいます.
    点文法
    var obj = {
      
    }
    
    //           name   ,     'liu'
    obj.name = 'liu';
    console.log(obj);
    
    中かっこの文法
    var obj = {
      
    }
    
    //           name   ,     'liu'
    obj['name'] = 'liu';
    //                       
    obj['#-#'] = 'liu';
    var a = 'age';
    obj[a] = 18;
    console.log(obj);
    
    変更
    オブジェクトの属性に対して、対応する値を変更する操作を意味します.
    点文法
    var obj = {
      name: 'liu'
    }
    
    //               ,             ,           ,          
    obj.name = 'zhang';
    console.log(obj);
    
    中かっこの文法
    var obj = {
      name: 'zhang',
      '#-#': 'a'
    }
    
    //   name  
    obj['name'] = 'liu';
    //                       
    obj['#-#'] = 'b';
    var a = 'name';
    obj[a] = 'li';
    console.log(obj);
    
    削除
    ある属性から該当する属性と値を削除するという意味です.ここではdeleteキーが必要です.
    点文法
    var obj = {
      name: 'liu'
    }
    
    //        delete    
    delete obj.name;
    //             ,       
    delete obj.age;
    console.log(obj);
    
    中かっこの文法
    var obj = {
      name: 'liu'
    }
    
    delete obj['name'];
    console.log(obj);
    
    巡回する
    オブジェクトを巡回します.オブジェクトの属性に対応する値を循環的に求めることです.
    私達が習ったサイクルの中で、今までfor in循環を通してしか遍歴できませんでした.
    var obj = {
      name: 'liu',
      age: 18
    }
    
    for (var prop in obj) {
      console.log(prop + ": " + obj[prop]);
    }
    
    対象が深く研究される
    メモリを理解する
    私たちは普段パソコンを運転しています.私たちが使っているソフトは全部コードで作られています.メモリの中で実行されます.
    jsの変数は、元の値と参照値の2つに分類されます.元の値はundefined、null、number、string、boleanタイプが示す値のような元のデータタイプの値です.参照値は、複合データタイプの値、すなわちObject、Funct、Arayなどを意味する.
    元の値と参照値は、メモリ内に格納されている位置は、それぞれスタックとスタックである.元の値は、スタックに格納された簡単なデータセグメントであり、その値は直接変数のアクセス先に格納されている.参照値は、スタックに格納されているオブジェクトです.
    保存の違い
    私たちは基本的なデータのタイプがスタックに格納されていることを知っていました.引用データの種類はヒープに保存されています.普段使う時には大きな違いがあります.
    基本タイプの特徴
    1、みんなの「値」が同じなら、演算子==を使って比較する時は同じです.ここで単純に比較するのは具体的な値です.
    var a = 10;
    var c = 10;
    console.log(a === c); // true
    
    2、ある変数の値がある変数に与えられると、単純な値と同じです.一方の変数の値を変更すると、他の一方には影響がありません.
    var a = 10;
    var b = a;
    a = 20;
    console.log(a, b);
    
    引用の種類の特徴
    1、みんなが「同じ」なら、どう比較しても同じではない.ここで比較するのは引用住所ですから.
    var obj = {};
    var obj2 = {};
    console.log(obj === obj2);
    
    2、参照型の変数が他の変数に割り当てられている場合は、基本型とは全く違っています.ここでは、この2つの変数が指す参照アドレスは同じです.つまり、この2つの変数操作の対象は同じです.
    var obj = {
      name: 'liu'
    };
    var obj2 = obj;
    console.log(obj === obj2);
    
    //   obj  obj2,        ,           
    obj.name = 'zhang';