여기서 키, 밸로, 엔트리, 블리벌디스의 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 = {};
// 한 프로퍼티씩 각각 설정
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
댓글 영역