-
Object MethodJavaScript 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