본문 바로가기
Develop/JAVASCRIPT

자바스크립트 기초 - 객체(Spread, Object.assign, Property, hasOwnProperty, Object.keys, Object.values, Object.entries, Object.freeze, Object.isFrozen, Object.seal, Object.preventExtensions)

by 걸어다니는 종합병원 2023. 8. 10.
반응형
const obj = {
    id : 1,
    name : '아이곰',
    age : 3
}

const { id, name, age} = obj;

console.log(`id = ${id}`);
console.log(`name = ${name}`);
console.log(`age = ${age}`);

다양한 타입을 가진 객체

- 여려 가지 속성(Property)을 가질 수 있으며, 속성은 키와 값을 조합으로 이루어 짐

const person = {
    id : 1,
    name : '홍길동',
    age : 30
}
console.log(person);

 

속성(Property) - id : 1, name : '홍길동', age : 30

키(Key) - id, name, age

값(Value) - 1, '홍길동', 30

속성의 데이터 타입은 제한이 없다. 

숫자, 문자열, 배열, 객체, 함수를 모두 속성으로 사용 가능.


객체 선언, 수정, 확인

- 객체의 속성을 변경하고 싶을 때

const person = {
    id : 1,
    name : '홍길동',
    age : 30
}

const obj = {};

console.log(`person id = ${person.id}`);
console.log(`person name = ${person['name']}`);

person.id = 2;
person.name = '이순신';
person.age = 100;

console.log(person);

obj.id = 3;
obj.name = '객체';
console.log(obj);

console.log(obj.age);

존재하지 않는 속성을 불러오면  undefined를 반환

 

데이터 타입이 다양한 배열과 객체 를 다차원으로 저장할 수 있다.

 

const obj = {
    age: 100,
    result : true,
    list : [
        {id : 1, name : '사과'},
        {id : 2, name : '딸기'}
    ],
    fn : function(){
        return this.age;
    }
}

console.log(obj);

console.log(obj.fn());
obj.age = 200;
console.log(obj.fn());


객체 복사하기 -   Spread, Object.assign

- 데이터를 복사하고 싶을 때

구문 의미
[...복사대상객체] 대상 댇체의 각 요소를 분할 대입(복사)
메소드 의미 반환
Object.assign({}, 복사대상객체) 객체를 복사 객체
const obj = {
    age: 100,
    result : true,
    list : [
        {id : 1, name : '사과'},
        {id : 2, name : '딸기'}
    ],
    fn : function(){
        return this.age;
    }
}
console.log(obj);

const copyObj = Object.assign({}, obj);
console.log(copyObj);

const spreadcopyObj = {...obj};
console.log(spreadcopyObj);

※ Object.assign과 Spread(스프레드) 연산자를 사용하면 얕은 복사가 이루어 짐

얕은 복사 - 복사 전 데이터와 복사 후 데이터가 같은 곳을 참조하여 복사전 데이터가 변경되면 복사 후 데이터도 영향을 받는다.

 

const obj = {
    list : [
        {id : 1, name : '사과'},
        {id : 2, name : '딸기'}
    ]
}
console.log(obj);

const copyObj = Object.assign({}, obj);
const spreadcopyObj = {...obj};
obj.list[0] = {id : 3, name :'변경'};
console.log(copyObj);
console.log(spreadcopyObj);


객체 속성 -   Property

- 특정 데이터를 확인하고 싶을 때

- 데이터가 객체에 존재하는지 확인하고 싶을 때

메소드 의미 반환
객체.hasOwnProperty(키) 데이터 유무 확인 Boolean
구문 의미
키 in 객체 데이터의 유무 여부 반환
console.log();
const obj = {
    id : 1,
    name : '아이곰',
    age : 3
}

console.log(obj.hasOwnProperty('id'));
console.log(obj.hasOwnProperty('key'));
console.log('id' in obj);

undefined나 null을 이용하는 방법도 있다.

const obj = {
    id : 1,
    name : '아이곰',
    age : 3
}

console.log(obj.id != null);
console.log(obj.key != null);
console.log(obj['id'] != null);


객체  요소 값 확인-   Object.keys, Object.values, Object.entries

- 특정 데이터를 확인하고 싶을 때

- 데이터가 객체에 존재하는지 확인하고 싶을 때

구문 의미 반환
Object.keys(객체) 객체 각 키의 배열 배열
Object.values(객체) 객체 각 데이터의 배열 배열
Object.entries(객체) 객체 각 속성(key, value)의 배열 배열
const obj = {
    id : 1,
    name : '아이곰',
    age : 3
}

console.log(Object.keys(obj));
console.log(Object.values(obj));
console.log(Object.entries(obj));


객체  요소 분할 대입 

- 객체의 데이터를 정리하여 대입하고 싶을 때

- 객체의 일부 데이터를 추출하여 사용하고 싶을 때

구문 의미
{변수1, 변수2, ... } = 객체 객체의 데이터를 각 변수에 대입
const obj = {
    id : 1,
    name : '아이곰',
    age : 3
}

const { id, name, age, key, age : myAge } = obj;

console.log(`id = ${id}`);
console.log(`name = ${name}`);
console.log(`age = ${age}`);
console.log(`key = ${key}`);
console.log(`age = ${myAge}`);

정의 순서와 객체 키의 순서에 상관 없으며, 존재하지 않는 키는 undefined를 반환.


객체  수정 제한-  Object.freeze, Object.isFrozen

- 객체의 깊은 계층까지 수정을 제한하고 싶을 때

메소드 의미 반환
Object.freeze(객체) 객체의 수정을 제한 객체
Object.isFrozen(객체) 객체의 수정 제한 확인 Boolean

객체는 const도 속성의 추가, 삭제 변경이 가능

'use strict';

console.log();
const obj = {
    id : 1,
    name : '아이곰',
    age : 3
}

obj.id = 22;
obj.name = '아빠곰';
console.log(obj);

Object.freeze(obj);
obj.id = 33;
obj.name = '아빠곰';
console.log(obj);

속성의 추가, 삭제, 변경 제한은 Object.freeze() 사용하며

오류 검사 설정은 'use strict' 를 사용한다.

'use strict';

console.log();
const obj = {
    id : 1,
    name : '아이곰',
    age : 3
}
Object.freeze(obj);
console.log(`객체 수정 제한 확인 : ${Object.isFrozen(obj)}`);

객체 수정을 제한하는 다른 방법

Object.seal() - 속성의 추가와 삭제 제한. 변경은 가능

Object.preventExtensions() - 속성의 추가 제한. 삭제와 변경만 가능

반응형

댓글