열거 불가능한(Non-enumerable) 속성이란?
JavaScript 객체에는 Object.keys() 메서드나 for...in 반복문으로 객체를 순회할 때 나타나지 않는 속성이 존재할 수 있습니다. 이처럼 객체를 열거(순회)할 때 목록에 포함되지 않는 속성을 열거 불가능한(non-enumerable) 속성이라고 부릅니다.
열거 불가능한 속성을 만드는 방법
열거 불가능한 속성을 생성하려면 Object.defineProperty() 메서드를 사용해야 합니다. 이 메서드는 객체에 새로운 속성을 정의하거나 기존 속성의 동작 방식을 세밀하게 제어할 수 있는 특별한 메서드로, 이를 통해 열거 불가능한 속성을 쉽게 만들 수 있습니다.
다음 예제에서는 name, age, country라는 세 가지 속성을 일반적인 방식으로 생성하고, "salary"라는 속성은 Object.defineProperty() 메서드를 사용해 추가하면서 enumerable 옵션에 false를 할당했습니다. 그 후 Object.keys()로 "person" 객체를 순회하면 name, age, country 속성만 출력되고 "salary" 속성은 결과에 나타나지 않습니다. 이처럼 순회 과정에서 드러나지 않는 속성을 열거 불가능한 속성이라고 하며, 이것이 바로 열거 불가능한 속성을 만드는 핵심 방법입니다.
또한 Object.defineProperty()는 아래 예제에서 확인할 수 있듯이 읽기 전용(read-only) 속성을 만드는 기능도 제공합니다. writable 옵션이 기본값인 false로 설정되기 때문에 person 객체의 salary 값은 외부에서 수정할 수 없습니다. 만약 salary 속성을 열거 가능하게 만들고 싶다면 enumerable 옵션에 true를 할당하면 됩니다.
예제 코드
<html>
<body>
<script>
var person = {
name: 'gopal'
};
person.age = '21';
person['country'] = 'India';
Object.defineProperty(person, 'salary',{
value : '80,000$',
enumerable: false
})
document.write(Object.keys(person));
</script>
</body>
</html>실행 결과
name,age,country