JSオブジェクト

36888 ワード

JavaScriptオブジェクト


JavaScriptのオブジェクトとは?


オブジェクトベースのスクリプト言語
  • オブジェクト
  • 元のタイプ(Primitives)以外のすべての値(関数、配列、正規表現など)には、オブジェクト=さまざまな値が含まれます.

    JavaScriptオブジェクト

  • キー(キー)と値(値)として構成するプロパティのセット
  • 、JavaScriptに提供されるすべての値
  • JavaScript関数は1レベルのオブジェクトであり、値として
  • を処理することができる.
    関数は、
  • のパーセント値を使用できます.
  • のパーセンテージ値が関数である場合、「メソッド」
  • と呼ばれ、一般的な関数を区別します.
    オブジェクト向けの継承を実現するために、JavaScriptオブジェクトは、プロトタイプ(prototype)と呼ばれるオブジェクトのプロトタイプとメソッドを継承することができる.

    保証する


    設定キー:空の文字列を含むすべての文字列またはシンボル(元のデータ型)の値.
    Property値:すべての値

    ※ルール※

  • Propertyキーに文字列またはシンボル値以外の値が含まれている場合、デフォルトのタイプは「文字列」
  • に変換されます.
  • 既存のPropertyに鍵を繰り返し宣言すると、新しい宣言されたPropertyは既存のProperty
  • を上書きします.
  • 配列とは異なり、オブジェクトはPropertyをリストするときに順序を保証しません.
  • 方法


    Property値が関数である場合、通常の関数を区別する方法と呼ばれます.
    すなわち,メソッドはオブジェクトに制限された関数を意味する.

    オブジェクトの作成

    
    //객체 리터럴 문법 = 객체 선언 시 주로 객체 리터럴 사용
    
    var user = new Object();
    
        // {} 내에 아무것도 기술하지 않으면 빈 객체 생성
        var user = {};
    
        var person = {
            name : 'Choi',
            gneder : 'femail',
            sayHi : function() {
                console.log(`Hi!`);
            }
        };
    
        console.log(person);
        //{name: 'Choi', gneder: 'femail', sayHi: ƒ}
    
        person.sayHi();
        //Hi!

    オブジェクトジェネレータ関数

  • の新しい演算子とオブジェクトジェネレータ関数を呼び出すことで、空のオブジェクト
  • を作成できます.
  • 空のオブジェクトを作成したら、Propertyまたはメソッド<完了オブジェクト>
  • を追加します.
  • コンストラクション関数は、新しいキーワードと、仮想オブジェクトの作成とスーパー仮想オブジェクトの作成に使用される関数です.
    作成者によって作成されたオブジェクトは、インスタンス
  • と呼ばれます.
  • JavaScriptは、Object関数に加えてString、Number、Boolean、Array、Date、RegExpなどの生成関数を提供します.
  • の一般関数と構造関数を区別するために、構造関数の名前にはパスカルcaseが使用されます.
    //빈 객체 생성
        var person2 = new Object();
    
        //프로퍼티 추가
        person2.name = 'Choi';
        person2.gender = 'female';
    
        person2.sayHi = function() {
            console.log('Hi! My name is ' + this.name);
        };
        
        console.log(typeof person2); //object
        console.log(person2);       //{name: 'Choi', gender: 'female', sayHi: ƒ}

    this

  • この内容
    https://nykim.work/71
  • バインドコンテンツ
    https://medium.com/sjk5766/javascript-this-binding-%EC%A0%95%EB%A6%AC-ae84e2499962
  • 知る常楽


    Objectジェネレータ関数を使用して空のオブジェクトを作成する必要はありません.
    テキストを使用してオブジェクトを作成することを推奨します.
    実際、オブジェクト文字で作成されたオブジェクト
    簡略化されたオブジェクト作成器関数のサムネイルは、最終的に構築された関数であることを示します.

    コンストラクタ

  • オブジェクトの文字とオブジェクト作成者関数でオブジェクトを作成すると、Property値のみを持つ複数のオブジェクトを作成する際に
  • が不便になります.
  • は、同じプロパティを有するオブジェクトであるにもかかわらず、毎回同じプロパティの不便さ
  • を記述する.
        var person3 = {
            name : 'Choi',
            gender : 'female',
            sayHi : function() {
                console.log('Hi! i am ' + this.name);
            }
        };
    
        var person4 = {
            name : 'Kim',
            gender : 'female',
            sayHi : function() {
                console.log('Hi! i am' + this.name);
            }
        };
    
        //생성자 함수를 사용하며 마치 객체를 생성하기 위한 템플릿(클래스)처럼 사용하여
        //프로퍼티가 동일한 객체 여러개를 간편하게 사용할 수 있다.
    
        //생성자 함수
        function Person(name, gender) {
            this.name = name;
            this.gender = gender;
            this.sayHi = function() {
                console.log('Hi i am ' + this.name);
            };
        }
    
        //인스턴스 생성
        var person1 = new Person('Kim', 'male');
        var person2 = new Person('Lee', 'feamle');
    
        console.log('person1 : ', typeof person1);
        console.log('person2 : ', typeof person2);
        console.log('person1 : ', person1);
        console.log('person2', typeof person2);
    
        person1.sayHi();
        person2.sayHi();
  • コンストラクタ名は通常大文字で始まる
    (コンストラクション関数であることを認識するのに役立ちます)
  • は、PropertyまたはMethod名の前に記載されている.これは、コンストラクション関数によって作成されたインスタンス
  • を指す.
  • this(バインド)に接続されているpropertyとmethodenは共通です(外部参照可能).
  • ジェネレータ関数で宣言される一般変数はprivate(外部参照不可)です.
    (すなわち、コンストラクション関数の内部では自由にアクセスできるが、外部ではアクセスできない)
  • .
  • new演算子とともに関数を呼び出すと、このバインドは異なる操作を実行します.詳細については、ジェネレータ呼び出しモード(Generator Call Mode)を参照してください.
    https://poiemaweb.com/js-this#3-%EC%83%9D%EC%84%B1%EC%9E%90-%ED%98%B8%EC%B6%9C-%ED%8C%A8%ED%84%B4constructor-invocation-pattern
  • オブジェクト構成アクセス


    ほごキー

  • Propertyキーは、通常、空の文字列を含む文字列を指定します.
  • Propertyキーで文字列またはシンボル値以外の値を指定すると、デフォルトでは「文字列」
  • に変換されます.
  • はまた、サブカラムタイプのない値として表すことができる.
    引用符
  • は、文字列であるため
  • JavaScriptの有効な名前の場合は、引用符
  • を省略できます.
  • 反対の場合は有効な名前は使用できませんが、引用符
  • は省略できません.

    property値は、すべての値と式であってもよく、property値が関数である場合、メソッドと呼ばれます。

        var person = {
            'first-name': 'Ung-mo',
            'last-name': 'Lee',
            gender: 'male',
            1: 10,
            function: 1 // OK. 하지만 예약어는 사용하지 말아야 한다.
            };
    
            console.log(person);
    
        //프로퍼티 키 first-name에는 반드시 따옴표를 사용해야 하지만 first_name에는 생략 가능
        // '-' 연산자가 있는 표현식이기 때문에
    
        var person = {
    
        first-name: 'Ung-mo', // SyntaxError: Unexpected token -
    
        };
    
        var person = {
    
            [first-name]: 'Ung-mo', // ReferenceError: first is not defined
    
            };
    
        //예약어를 프로퍼티 키로 사용하여도 에러가 발생하지 않는다. 하지만 예상치 못한 에러가 발생할 수 있으므로
        //예약어를 프로퍼티 키로 사용하면 안됨!
    
        /* 자바스크립트 예약어
            abstract  arguments boolean break byte
        case  catch char  class*  const
        continue  debugger  default delete  do
        double  else  enum* eval  export*
        extends*  false final finally float
        for function  goto  if  implements
        import* in  instanceof  int interface
        let long  native  new null
        package private protected public  return
        short static  super*  switch  synchronized
        this  throw throws  transient true
        try typeof  var void  volatile
        while with  yield
        // *는 ES6에서 추가된 예약어
        */

    プロパティ値の検索

  • オブジェクトへのアクセス方法のプロパティ値は、ピリオド(.)です.表記法と括弧([])表記法があります.
  •  var person = {
            'first-name': 'Ung-mo',
            'last-name': 'Lee',
            gender: 'male',
            1: 10
            };
    
            console.log(person);
    
            //유효하지 않은 이름이기 때문에 따옴표 쓰고 대괄호([])로 접근
            //대괄호로 접근시 문자열로!!!!
            console.log(person.first-name);    // NaN: undefined-undefined
            console.log(person[first-name]);   // ReferenceError: first is not defined
            console.log(person['first-name']); // 'Ung-mo'
    
            //유효한 이름이기 때문에 따옴표 생략하고 마침표(.)로 접근
            console.log(person.gender);    // 'male'
            console.log(person[gender]);   // ReferenceError: gender is not defined
            console.log(person['gender']); // 'male'
    
            //유효하지 않은 이름이기 때문에 따옴표 쓰고 대괄호([])로 접근
            //대괄호로 접근시 문자열로!!!!
            console.log(person['1']); // 10
            console.log(person[1]);   // 10 : person[1] -> person['1']
            console.log(person.1);    // SyntaxError
    
        //프로퍼티 이름이 유효한 자바스크립트 이름이 아니거나 예약어인 경우, 프로퍼티 값은 대괄호 표기법 사용
        //대괄호 표기법 사용시, 대괄호 내에 들어가는 프로퍼티 이름은 반드시 문자열이어야 한다.
    
        //객체에 존재하지 않는 프로퍼티를 참조하면 undefined
        
        var person = {
            'first-name': 'Ung-mo',
            'last-name': 'Lee',
            gender: 'male',
            };
    
            console.log(person.age); // undefined

    プロパティ値の更新


    オブジェクトが所有するプロパティに新しい値を割り当てると、がリフレッシュされます.
     var person = {
            'first-name': 'Ung-mo',
            'last-name': 'Lee',
            gender: 'male',
            };
    
            person['first-name'] = 'Kim';
            console.log(person['first-name'] ); // 'Kim'

    Property動的作成


    オブジェクトが所有していないPropertyキーに値を割り当てる場合は、指定したキーと値を使用してPropertyを作成し、オブジェクトにを追加できます.
        var person = {
            'first-name': 'Ung-mo',
            'last-name': 'Lee',
            gender: 'male',
            };
    
            person.age = 20;
            console.log(person.age); // 20

    プロパティの削除

  • delete演算子を使用してオブジェクト属性を削除できますが、被演算子は「属性キー」でなければなりません.
  •     var person = {
            'first-name': 'Ung-mo',
            'last-name': 'Lee',
            gender: 'male',
            };
    
            delete person.gender;
            console.log(person.gender); // undefined
    
            delete person;
            console.log(person); // Object {first-name: 'Ung-mo', last-name: 'Lee'}

    for in文


    for-in文は、オブジェクトを巡回する文字列キーの構文です.シナリオでは使用しないことをお勧めします.
  • オブジェクトのプロパティ順序X
  • why! 番組に順序がない.
  • 配列は順序付きデータ構造であるが、オブジェクトと同様に順序付きX
  • である.
  • 配列要素のみが巡回しません.
  •     var person = {
            'first-name': 'Ung-mo',
            'last-name': 'Lee',
            gender: 'male'
            };
    
        // prop에 객체의 프로퍼티 이름이 반환된다. 단, 순서는 보장되지 않음
        for (var prop in person) {
            console.log(prop + ': ' + person[prop]);
            }
    
        /*
        first-name: Ung-mo
        last-name: Lee
        gender: male
        */
    
        var array = ['one', 'two'];
    
        // index에 배열의 경우 인덱스가 반환됨
        for (var index in array) {
            console.log(index + ': ' + array[index]);
        }
    
        /*
        0: one
        1: two
        */

    を選択します。

    const array = [1, 2, 3];
            array.name = 'my array';
    
    
        for (const value of array) {
            console.log(value);
        }
    
        /*
        1
        2
        3
        */
    
        for (const [index, value] of array.entries()) {
            console.log(index, value);
        }
    
        /*
        0 1
        1 2
        2 3
        */
    
    for-in文は、オブジェクトのプロパティを巡回するために使用されます.
    for–of文は、配列内の要素を巡回するために使用されます.

    Pass-by-reference


  • オブジェクトタイプをオブジェクトタイプまたはリファレンスタイプと呼びます

  • 参照タイプ:オブジェクトのすべての演算を-実際の値ではなく参照値として処理します.

  • 元のタイプ:値が確定したら変更できません(可変)
  • オブジェクトは、変更、追加、または削除されるため、変更可能(可変)値であってもよい.
    したがって、オブジェクトタイプが動的に変化する可能性があるため、メモリ容量がどれだけ必要か予測できません.
    実行タイプにメモリ領域を保持し、メモリの「ヒープ領域」(Heap Segment)に格納します.
    これに対して、元のタイプは値(value)で渡され、すなわちコピーされて渡されます.
     // Pass-by-reference
        var a = [1, 2, 3];
        var b = a;
    
        a[0] = 10000
        console.log(b);
    
        //b의 결과는 [10000,2, 3]이 됨
        //이유 : 값을 복사하여 새로운 메모리에 저장한 것이 아닌 a의 주소 참조
        // >>> pass-by-reference
    

    Pass-by-value

  • 元のタイプが値として渡されます.すなわち、値がコピー転送(値転送)
  • .
  • 元のタイプは、値の決定後にXを変更します(可変).
    -
  • をメモリのスタック領域(ランタイム変数割り当てポイント)に格納する固定メモリ
         // Pass-by-value
         var a = 10;
         var b = a;
    
        //b에 10이라는 값 할당, 메모리에 새로운 공간에 10이라는 값 저장
        //만약 a에 다른 값을 재할당해도 b에 영향 X
        // >>> pass-by-value