Object



Objectとは?

  • Javascriptデータ型の1つ
  • 関連データのセット
  • classなしでオブジェクト
  • を作成
    const obj1 = {};  // object literal
    const obj2 = new Object();  // object constructor
    
    function print(person) {
      console.log(person.name);
      console.log(person.age);
    }
    
    const ellie = { name: 'ellie', age: 4 };
    print(ellie);
    
    ellie.hasJob = true;  // 선언 후 속성을 추가할 수 있음(javascript는 runtime시 type이 결정되는 언어)
    console.log(ellie.hasJob);  // true
    
    delete ellie.hasJob;
    console.log(ellie.hasJob);  // undefined

    Computed properties


  • Instanceのfieldをインポートする場合、instance['field']をインポートできます.

  • キーが不確定で実行時に決定された場合、objectのキーを動的に取得する必要がある場合はcomputed propertyを使用します.

  • 配列されたキーはstringであるべきです.
  • console.log(ellie.name);  // ellie
    console.log(ellie.['name']); // ellie(computed properties)
                
    ellie['hasJob'] = true;
    console.log(ellie.name); // true
    
    function printValueDot(obj, key) {
      console.log(obj.key);
    }
    
    function printValueComputed(obj, key) {
      console.log(obj[key]);  // computed key
    }
    
    printValueDot(ellie, 'name'); // undefined
    printValueComputed(ellie, 'name'); // ellie

    Property value shorthand


    同じ構造のオブジェクトがある場合はfunctionを使用してobjectを作成し、戻ります.
    keyはパラメータ名と同時に、name(key): name(argument),name,と簡単に表すことができる.
    classが存在しない場合にオブジェクトを作成するツールとして使用
    const person1 = { name: 'bob', age: 2 };
    const person2 = { name: 'steve', age: 3 };
    const person3 = makePerson('ellie', 30);
    
    function makePerson(name, age) {
      return {
        name,
        age,
      };
    }

    Constructor Function

    const person4 = new Person('jason', 26);
    
    function Person(name, age) {
      this.name = name,
      this.age = age,
    }

    In operator


    オブジェクトに鍵が含まれていることを確認します
    console.log('name' in ellie);  // true
    console.log('random' in ellie);  // false
    

    For..in vs For..of


    for key in obj

    for (key in ellie) {
      console.log(key); // name, age, hasJob
    }

    for value of iterable

    const array = [1, 2, 4, 5];
    for(let i = 0; i < array.length; i++) {
      console.log(array[i]);  // 1, 2, 4, 5
    }
    
    for (value of array) {
      console.log(value);  // 1, 2, 4, 5
    }

    Object api


    Object.keys


    objectのすべてのキー値を配列で返します.
    let obj = { name: "SingCo", age: 26 };
    let keys = Object.keys(obj);
    console.log(keys);  // [ 'name', 'age' ]

    Object.values


    objectのすべての値を配列形式で返します.
    let obj = { name: "SingCo", age: 26 };
    let values = Object.values(obj);
    console.log(values);  // [ 'SingCo', 26 ]

    Object.entries


    objectのすべてのkeyとvalueを2 D配列形式に戻します.
    let obj = { name: "SingCo", age: 26 };
    let entries = Object.entries(obj);
    console.log(entries);  // [ [ 'name', 'SingCo' ], [ 'age', 26 ] ]

    Object.assign


    arrayをobjectに変換します.
    let arr = ['하', '이', '루'];
    let obj = Object.assign({}, arr);
    console.log(obj)
    // {'0': '하', '1':'이', '2':'루'}
    

    Cloning


    objectはreferenceをメモリに格納し、referenceはフィールドを指します.
    通常のレプリケーションではなく、同じフィールドを参照する変数のみが作成されます.objectTemp = objectにおいて、objectTempは、同じフィールドを指すobjectと同じ参照を有する.
    const user = { name: 'ellie', age: 20 };
    const user2 = user;
    user2.name = 'coder';
    console.log(user.name);  // coder

    ダイレクトコピー


    フィールド単位で直接コピーします.
    const user3 = {};
    for (key in user) {
      user3[key] = user[key];
    }

    浅い複製(Shallow Clone)

    const user4 = {};
    Object.assign(user4, user);
    
    const user5 = Object.assign({}, user);