티스토리 뷰
JavaScript/이론
[JS] 데이터 프로퍼티(data property) 플래그 - writable, enumerable, configurable
millfeel1298 2022. 3. 4. 07:50프로퍼티 플래그
객체 프로퍼티는 값(value)과 함께 플래그(flag)라 불리는 특별한 속성 세 가지를 가지고 있다.
No | 속성 | 기준 | 값이 "true"인 경우 | 값이 "false"인 경우 |
1 | writable | 값(value) | 수정 가능 | 읽기만 가능 |
2 | enumerable | 반복문을 사용해서 나열 | 가능 | 불가능 |
3 | configurable | 프로퍼티 삭제나 플래그 수정 | 가능 | 불가능 |
"평범한 방식"으로 프로퍼티를 만들면 프로퍼티의 플래그는 모두 "true"가 된다.
writable 플래그
"평벙한 방식"으로 값을 변경하지 못하게 할 때 writable의 값을 "false"로 한다.
[예제]
"평범한 방식"은 값을 변경하지 못한다.
let user = {
name : 'mill'
};
Object.defineProperty(user, 'name', {
writable : false
})
user.name = '밀';
user['name'] = '밀';
defineProperty를 사용해서 value을 값을 수정하거나,
writable 플래그를 "true"로 변경하지 않으면 객체의 값은 변경할 수 없다.
Object.defineProperty(user, 'name', {
value : '밀'
})
//플래그 확인
Object.getOwnPropertyDescriptor(user, 'name')
enumerable 플래그
특정 프로퍼티의 enumerable 플래그 값을 false로 설정하면 "for...in"반복문에 나타나지 않게 할 수 있다.
[예제]
let user = {
name : 'mill',
toString(){
return this.name;
},
like : {
book : 'fantasy',
music : 'jazz'
}
};
for(let key in user){
console.log(key);
}
Object.defineProperty(user, 'toString', {
enumerable : false
})
for(let key in user){
console.log(key);
}
configurable 플래그
어떤 프로퍼티의 configurable 플래그가 false로 설정돼 있다면 해당 프로퍼티는 객체에서 지울 수 없다.
즉, configurable 플래그를 false로 설정하면 돌이킬 방법이 없다. (defineProperty를 써도 안됨)
[예제]
let user = {
name : 'mill',
age : 15
};
Object.defineProperty(user, 'name', {
configurable : false
});
delete user.name;
delete user.age;
//configurable 플래그를 수정할 수 없음
Object.defineProperty(user, 'name', {
configurable : true
});
configurable:false가 만들어내는 구체적인 제약사항은 아래와 같다.
- configurable 플래그를 수정할 수 없음
- enumerable 플래그를 수정할 수 없음.
- writable: false의 값을 true로 바꿀 수 없음(true를 false로 변경하는 것은 가능함).
- 접근자 프로퍼티 get/set을 변경할 수 없음(새롭게 만드는 것은 가능함).
[예제 (이전 예제를 이어서 작성할 것)]
//현재의 value와 플래그 확인
Object.getOwnPropertyDescriptor(user, 'name');
//enumerable 플래그를 수정할 수 없음.
Object.defineProperty(user, 'name', {
enumerable : false
});
//writable: true를 false로 변경하는 것은 가능함
Object.defineProperty(user, 'name', {
writable : false
});
// writable: false의 값을 true로 바꿀 수 없음
Object.defineProperty(user, 'name', {
writable : true
});
[공부 좌표]
[참고]
'JavaScript > 이론' 카테고리의 다른 글
[JS] window.matchMedia css의 미디어쿼리 같은 기능 (0) | 2022.12.05 |
---|---|
[JS] Window.matchMedia() (0) | 2022.05.26 |
[JS] Q. undefined와 null의 차이는? (0) | 2022.03.05 |
[JavaScript] Array.prototype.slice.call() (0) | 2021.12.30 |
[JavaScript] Element.getBoundingClientRect() (0) | 2021.12.22 |
댓글