상세 컨텐츠

본문 제목

[자바스크립트] 오브젝트

카테고리 없음

by esoesmio 2023. 5. 11. 09:50

본문

여기서 키, 밸로, 엔트리, 블리벌디스의 sort를 해봐라.

const obj = {
    x: 1,
    y: 2,
    z: 3
};

console.log(
    Object.keys(obj),
);

console.log(
    Object.values(obj),
);

console.log(
    Object.entries(obj),
);

console.log(
    Object
        .keys(globalThis)
        .sort()
);

 

이게 나오게 해봐라

 

const person = {

    // ⭐️ 1. 데이터 프로퍼티들
    fullName: '홍길동',
    ageInNumber: 25,

    // ⭐️ 2. 접근자 프로퍼티들
    get name () {
        return this.fullName
            .split('')
            .map((letter, idx) => idx === 0 ? letter : '*')
            .join('');
    },
    get age () { return this.ageInNumber + '세'; },
    set age (age) {
        this.ageInNumber = Number(age);
    }
}

console.log(
    person.name, person.age
);

 

 

객체 안의 프로퍼티를 넣어봐라.

const person = {}
여기 안에 프로퍼티를 넣어라
 
넣고 반환해봐라
 
const person = {};

// 한 프로퍼티씩 각각 설정
Object.defineProperty(person, 'fullName', {
    value: '홍길동',
    writable: true,
    enumerable:true
    // 💡 누락한 어트리뷰트는 기본값으로 자동생성
});

Object.defineProperty(person, 'name', {
    enumerable:true
,
    get () {
        return this.fullName
            .split('')
            .map((letter, idx) => idx === 0 ? letter : '*')
            .join('');
    }
});

console.log(person, person.name);
console.log( // ⚠️ 누락된 어트리뷰트들 확인해볼 것
    Object.getOwnPropertyDescriptors(person)
);

 

 

객체 안에 프로퍼티를 동시에 넣어봐라.

 

 

const person={};

// 여러 프로퍼티를 객체 형식으로 한꺼번에 설정
Object.defineProperties(person, {
    ageInNumber: {
        value: 25,
        writable: true,
        enumerable : true
    },
    age: {

    enumerable : true,
        get () { return this.ageInNumber + '세'; },
        set (age) {
            this.ageInNumber = Number(age);
        }
    }
});

person.age = 30;

console.log(person, person.age);
console.log(
    Object.getOwnPropertyDescriptors(person)
);


console.log(person);

깊은 freeze하기

function getDeepFrozen(obj) {
    console.log(obj);

    const result = {};
    const propNames = Object.getOwnPropertyNames(obj);

    for (const name of propNames) {
        const value = obj[name];

        result[name] =
            (value && typeof value === 'object') ?
                getDeepFrozen(value) : value;
    }
    return Object.freeze(result);
}

let myObj = {
    a: 1,
    b: {
        c: 2,
        d: {
            e: 3,
            f: {
                g: 4
            }
        }
    }
}

// 여러 번 실행해 볼 것
myObj.a++;
myObj.b.c++;
myObj.b.d.e++;
myObj.b.d.f.g++;

console.log(myObj);

또는

function deepFreeze(obj) {
  // 모든 속성을 동결
  Object.freeze(obj);

  // 객체의 모든 속성에 대해 재귀적으로 동결 수행
  for (let key in obj) {
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      deepFreeze(obj[key]);
    }
  }

  return obj;
}


const obj = {
  nestedObj: {
    a: 5
  }
};

deepFreeze(obj);

obj.nestedObj.a = 10; // 수정 시도, 무시됨
console.log(obj.nestedObj.a); // 5

댓글 영역