ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Object Method
    JavaScript 2022. 5. 24. 17:35

    Object Method

     

    Object.entries()

    • 객체를 순회하며 모든 프로퍼티를 [key, value] 쌍의 배열 형태로 반환한다.
    • 반환된 배열은 객체가 정의된 순서와 상관 없이 나오기 때문에 sort()로 정렬을 하는 것이 좋다.
      • ⇒ Object.entries(obj).sort((a, b) => b[0].localeCompare(a[0]))
    obj = { a: 1, b: 2, c: 3 }
    
    console.log(Object.entries(obj)) // [ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
    

     

    Object.keys()

    • 객체를 순회하며 해당 객체가 갖는 key 값으로 이루어진 배열을 반환한다.
    const score = {
     math: 100,
     english: 95,
     history: 99,
     korean: 98
    }
    
    console.log(Object.keys(score)) // [ 'math', 'english', 'history', 'korean' ]

     

    Object.values()

    • 객체를 순회하며 해당 객체가 갖는 value 값으로 이루어진 배열을 반환한다.
    const score = {
     math: 100,
     english: 95,
     history: 99,
     korean: 98
    }
    
    console.log(Object.keys(score)) // [ 100, 95, 99, 98 ]
    

     

    Object.hasOwnProperty()

    • 객체가 특정 프로퍼티를 가지고 있는지 Boolean 값으로 반환한다.
    • hasOwnProperty는 프로퍼티의 존재 유무를 판단하는 것이지, 프로퍼티의 값을 확인하는 것이 아니기 때문에 프로퍼티 값이 undefined나 null이어도 true를 반환한다.
    // 기본 예제 1
    const obj = { a: 1 }
    
    obj.hasOwnProperty("a") // true 
    obj.hasOwnProperty("b") // false
    
    // 기본 예제 2
    obj = new Object()
    obj.name = 'hizini'
    obj = {prop: 'hizini'}
    
    // 직접 소유한 obj 고유속성
    obj.hasOwnProperty('prop') // true
    
    // 프로토타입 상속받은 속성
    obj.hasOwnProperty('toString') // false
    obj.hasOwnProperty('hasOwnProperty') // false

     

    - 해당 객체에 특정 프로퍼티가 존재하면 true, 그렇지 않으면 false 를 반환한다.

    - 단, 프로토타입 체인은 확인하지 않고 해당 객체가 스스로 정의한 프로퍼티만을 판단한다.

    obj.b = 2
    Object.prototype.c = 3
    obj.b // 2
    obj.c // 3
    obj.hasOwnProperty("b") // true
    obj.hasOwnProperty("c") // false

     

    Object.assign()

    • 타겟을 지정한 객체로 다른 객체의 속성을 복사한다.
    // 구문
    Object.assign(target, ...sources)
    
    // 기본 예제 1 
    const target = { a: 1, b: 2 }
    const source = { b: 3, c: 4 }
    const returnedTarget = Object.assign(target, source)
    
    console.log(target) // { a: 1, b: 3, c: 4 }
    console.log(source) // { b: 3, c: 4 }
    console.log(returnedTarget) // { a: 1, b: 3, c: 4 }
    
    // 기본 예제 2
    const source1 = {a:1}
    const source2 = {b:2}
    const source3 = {c:3}
    const returnedTarget2 = Object.assign({}, source1, source2, source3)
    
    console.log(returnedTarget2) // {a: 1, b: 2, c: 3}
    • 기본 예제 1
      • target 값은 source 값이 병합되어 객체의 속성이 변경되거나 추가된다.
      • source 값은 변경 되지 않는다.
      • 리턴으로 받은 returnedTarget 객체는 target 객체와 같은 객체를 참조하고 있다.
    • 기본 예제 2
      • target 인자에 빈 객체를 주고, source 인자에 각 객체들을 넘겨주면, 빈 객체에 병합이 된다.
      • ⇒ Object.assign 의 결과가 새로운 객체를 반환해야 한다면, target 으로 빈 객체를 주면 된다.

     

    Object.create()

    • 지정된 프로토타입 객체 및 속성(property)을 갖는 새 객체를 만든다.
      • 쉽게 말해, 프로토타입의 객체 및 속성을 그대로 가져오는 메소드이다. (상속)
      • 상위클래스의 메소드를 하위클래스 메소드로 가져올 수 있다.
      • 다만 상위클래스의 constuctor가 복사되어 오기 때문에 하위클래스 constuctor를 따로 지정해 주어야 한다.
    • JavaScript 내부에서 생성자로 객체를 생성하면서 연결이 깨지는 것을 방지하기 위해 사용한다.
    // 구문
    Object.create(proto[, propertiesObject])
    
    • proto
      • 프로토타입으로 사용할 객체 (객체 또는 null)
    • propertiesObject (선택)
      • 새로운 객체의 추가할 프로퍼티 정보
        ✅ MDN 설명
        ..........😂

    // 기본 예제
    
    const obj = Object.create(null, { // null 프로토타입을 사용하여 새로운 객체를 만들고
    	x: { value: 100, enumerable: true }, // x좌표를 나타내는 열거할 수 있는 프로퍼티와
      y: { value: 200, enumerable: true }  // y좌표를 나타내는 열거할 수 있는 프로퍼티를 추가
    })
    
    obj.x // x좌표, 100
    obj.y // y좌표, 200
    Object.getPrototypeOf(obj) // 객체의 프로토타입을 반환, null
    
    console.log(obj, Object.getPrototypeOf(obj)) // { x: 100, y: 200 } null
    

     

    Object.is()

    • 두 값이 같은 값인지 판별하여 boolean 값을 반환한다.
    • 값과 타입이 일치해야만 true를 반환하기 때문에 판별하는 기본적인 동작은 === 이다.
    • NaN도 체크할 수 있다.
    console.log(Object.is(1, '1')) // false 
    console.log(Object.is(0, '')) // false 
    console.log(Object.is(true, 'true')) // false 
    console.log(Object.is(NaN, NaN)) // true
    

     

    Object.freeze()

    • 객체를 변경할 수 없는 (immutable) 값으로 동결한다.
    • 즉, 상수(const)처럼 변경할 수 없는 값이 되어 바꿀 수도, 삭제할 수도 없다.
      • const로 선언된 객체의 값이라도 내부 프로퍼티 및 메소드의 값을 변경할 수 있는데, freeze()를 사용할 경우 참조 값의 내부 프로퍼티, 메소드 값 변경이 불가능하다.
    // freeze 사용
    const freezeData = { a: 123 }
    Object.freeze(freezeData)
    freezeData.a = 456
    freezeData.b = 456
    
    console.log(freezeData) // { a: 123 }
    
    // const 사용
    const constData = { a: 123 }
    constData.a = 456
    constData.b = 456
    
    console.log(constData) // { a: 456, b: 456 }
    

     

    Object.isFrozen()

    • 객체가 동결됐는지 판별하여 boolean 값을 반환한다.
    const freezeData = { a: 123 }
    Object.freeze(freezeData)
    
    const constData = { a: 123 }
    
    console.log(Object.isFrozen(freezeData)) // true
    console.log(Object.isFrozen(constData)) // false
    

     

    Object.seal()

    • 객체를 봉인하여 속성을 추가하거나 제거할 수 없다.
    • 이미 존재하는 속성의 값은 수정할 수 있다. (Object.freeze() 와의 차이점)
    const sealData = { a: 123 }
    Object.seal(sealData)
    sealData.a = 33
    
    console.log(sealData.a) // 33
    
    delete sealData.a
    console.log(sealData.a) // 33
    

     

    Object.isSealed()

    • 객체가 봉인됐는지 판별하여 boolean 값을 반환한다.
    const sealData = { a: 123 }
    console.log(Object.isSealed(sealData)) // false
    
    Object.seal(sealData)
    console.log(Object.isSealed(sealData)) // true
    
    반응형

    'JavaScript' 카테고리의 다른 글

    배열 (Array)  (0) 2022.06.07
    JSON(JavaScript Object Notation)  (0) 2022.06.03
    Object (객체)  (0) 2022.05.24
    스택(Stack) 구현하기  (0) 2022.05.19
    String Method  (0) 2022.05.13

    댓글

Designed by Tistory.