객체 프로퍼티에선 해당 속성을 알려주는 설명자(descriptor)라는 것이 존재합니다. 설명자는 프로퍼티가 데이터 프로퍼티
인가 접근자 프로퍼티
인가에 따라 구성에 차이가 있기에 두 경우로 나눠서 게시글을 작성하도록 하겠습니다. 해당 게시글에선 데이터 프로퍼티
의 설명자에 대한 게시글입니다.
데이터 프로퍼티
의 설명자를 데이터 설명자(data descriptor)
라고 하며 해당 설명자에는 4가지의 attributes
가 존재합니다. 해당 attributes
의 값은 Object.getOwnPropertyDescriptor(obj, prop)
을 통해 확인 가능하며 Object.defineProperty(obj, prop, descriptor)
을 사용하여 변경 가능합니다.
해당 프로퍼티의 값을 할당합니다. 기본값은 undefined
입니다.
configurable(구성 가능성)
이 false
인 경우, configurable
, enumerable
의 속성 변경이 불가하며 delete
도 불가합니다. 기본값은 false
입니다.
enumerable(열거 가능성)
이 false
인 경우, 객체 속성을 열거할 수 없습니다. 즉, for...in
, Object.keys()
등과 같은 반복문 사용이 불가합니다. 기본값은 false
입니다.
writable(작성 가능성)
이 false
인 경우, 해당 값을 수정할 수 없습니다. 다만 참조값을 변경하는 것은 가능합니다. 기본값은 false
입니다.
var x = 1;
y = 1;
Object.getOwnPropertyDescriptor(window, 'x');
// {
// configurable: false,
// enumerable: true,
// value: 1,
// writable: true
// }
Object.getOwnPropertyDescriptor(window, 'y');
// {
// configurable: true,
// enumerable: true,
// value: 1,
// writable: true
// }
+) 위 코드를 확인해보면 암묵적 전역으로 생성된 변수의 경우 configurable
의 값이 true
인 것을 확인할 수 있습니다. 그래서 delete
가 가능합니다.
참고 자료