티스토리 뷰
이론/JS
[JS] 데이터 프로퍼티(data property) 플래그 - writable, enumerable, configurable
millfeel1298 2021. 1. 13. 00:45프로퍼티 플래그
객체 프로퍼티는 값(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
});
[공부 좌표]
[참고]
'이론 > JS' 카테고리의 다른 글
[JS] 접근자 프로퍼티(accessor property) - getter / setter (0) | 2021.01.14 |
---|---|
[JS] String.prototype.split() (0) | 2021.01.14 |
[JS] 프로퍼티 플래그를 (특별한 방식으로)추가 / 변경 / 얻는 방법 (0) | 2021.01.12 |
[JS] Element. Attribute() 메서드 (0) | 2021.01.05 |
[JS] Node.nodeType (0) | 2021.01.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 동치 연산자
- 부등 연산자
- clinetTop
- [[Prototype]]
- constructor
- javascript class
- clientHeight
- @font-face
- __proto__
- offsetTop
- property
- offsetHeight
- 대괄포 표기법
- 일치 연산자
- 프로퍼티
- 링크막기 #a링크막기
- scrollTop
- scrollHeight
- 객체의 프로퍼티
- prototype 프로퍼티
- 점 표기법
- outerHeight
- 동등 연산자
- 불일치 연산자
- innerHeight
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함