第JS-6日(object)


Object

  • one of the JS's data types
  • a collection of related data and/or functionality
  • Nearly all objects in JS are instances of Object
  • object = {key: value};
  • Literals and properties


    object生成方法はliteralとconstructorの2種類あります
    const obj1 = {}; // object literal syntax
    const obj2 = new Object(); // object constructor syntax
    
    function print(person) {
        console.log(person.name);
        console.log(person.age);
    
    }
    const comet = { name: 'comet', age: 20 }; //class 없어도 obj 생성 가능!
    print(comet);
    
    comet.hasJob = true; //이처럼 이후에 추가도 가능
    //but 지양!
    delete comet.hasJob; //이처럼 이후에 삭제도 가능!
    オブジェクトから新しいkey:valueを追加または削除できますが、読みやすさが低下し、デバッグが困難になり、複雑になるので避けてください.

    Computed properties


    オブジェクトをロードするには、次の2つの方法があります.
    comet.nameではなくcomet['name']方式の使用目的があまり理解できず、学習グループのメンバーの一人がうまく説明してくれたので理解しました!
    // comet.name === comet['name']
    //대신 []안에는 String 타입으로 넣어야 한다
    console.log(comet.name); //이 방법은 사용하는 그 순간 받아올 때 사용(일반적인 방법)
    console.log(comet['name']); // 이 방법은 지금 당장 어떤 key를 불러올지 모르고 runtime에서 결정될 때 사용
    
    function printValue(obj, key) {
        console.log(obj.key); //요따구로 쓰면 당연히 obj에는 key라는 property가 읎기에 undefined 뜹니다!
        //이 때가 바로 ['']를 써야 하는 적기인 것이지요 우리가 여기에 뭐가 들어갈지 아직 모르니까요~
        console.log(obj[key]); //요렇게 말이지요ㅎ
    }
    
    printvalue(comet, 'name')
    printvalue(comet, 'age')

    Property value shorthand

    const person1 = { name: 'bob', age: 7 };
    const person2 = { name: 'james', age: 14 };
    const person3 = { name: 'steve', age: 81 };
    const person4 = new Person('comet', 21);
    //person 4를 추가하고 싶을 때 또 이 노가다를 하라고?
    //어림도 없지~ constructor function 만들어버리기~
    console.log(person4);  //출력 잘되죠?
    次のコード接続

    Constructor function

    function Person(name, age) {
        //this = {};
        this.name = name;
        this.age = age;
        // return this;
        //주석으로 달아놓은 요 두 코드가 생략된 거에요!!
    }

    in operator: property existence check (key in obj)

    // 해당하는 key가 object 안에 있는지
    console.log('name' in comet);
    console.log('age' in comet);
    console.log('riot' in comet); //false겠죠? 정의되지 않은 property거든요
    console.log(comet.riot); // undefined나올 거에요

    for..in vs for..of

    // for(key in obj)
    console.clear(); //요건 그냥 콘솔창의 이전 출력들 다 지우는 코드
    for (key in comet) {
        console.log(key);
    }
    
    // for (value of iterable)
    // 배열과 같이 순차적인 거에서 사용
    const array = [1, 2, 4, 5];
    for (value of array) {
        console.log(value);
    }

    Fun cloning

    // Object.assign(dest, [obj1, obj2, obj3...])
    const user = { name: 'comet', age: 21 };
    
    const user2 = user;
    //user은 name, age를 가르키는 ref를 가르킨다
    //user2에 user가 할당됐으니 user2에도 같은 name, age를 가르키는 ref가 할당된다
    user2.name = 'coder';
    //따라서 이처럼 user2.name을 변경하면 user의 ref이 가르키는 name과 동일한 변수의 값이 바뀌므로
    console.log(user);
    //user.name도  'coder'로 바뀌게 된다
    
    // old way
    
    // new way