객체 순회 for ...in

agnusdei·2023년 7월 11일
0

for...in 문은 JavaScript에서 객체의 속성을 열거하기 위해 사용되는 반복문입니다. for...in 문을 사용하여 객체를 순회하면 객체의 모든 열거 가능한 속성을 반복하여 접근할 수 있습니다.

for...in 문의 구문은 다음과 같습니다:

for (variable in object) {
  // 실행될 코드
}

여기서 variable은 반복 중 현재 속성의 이름이 할당되는 변수입니다. object는 반복할 객체입니다.

다음은 for...in 문을 사용하여 객체를 순회하는 예시입니다:

const person = {
  name: 'John',
  age: 25,
  gender: 'male'
};

for (let key in person) {
  console.log(key + ': ' + person[key]);
}

위의 예시에서 person 객체는 name, age, gender라는 세 개의 속성을 가지고 있습니다. for...in 문을 사용하여 객체를 순회하면 각 속성의 이름이 key 변수에 할당되고, 해당 속성의 값을 person[key]를 통해 접근할 수 있습니다.

for...in 문은 반복 과정에서 객체의 모든 열거 가능한 속성을 순회하며, 각 속성에 대해 반복적으로 실행될 코드 블록을 실행합니다. 위의 예시에서는 각 속성의 이름과 값을 출력하는 코드가 실행됩니다.

실행 결과는 다음과 같습니다:

name: John
age: 25
gender: male

for...in 문을 사용하여 객체를 순회할 때 주의해야 할 점은 다음과 같습니다:

  1. for...in 문은 객체의 프로토타입 체인을 통해 상속받은 속성도 순회합니다. 따라서 원하는 객체의 속성만 순회하고 싶을 경우, hasOwnProperty 메소드를 사용하여 속성의 소유 여부를 확인하는 것이 좋습니다.
  2. for...in 문은 객체의 속성을 열거할 때 순서를 보장하지 않습니다. 따라서 순서가 중요한 경우에는 Object.keys 등을 사용하여 속성을 배열로 변환한 후 순회하는 것이 좋습니다.

for...in 문은 객체를 순회하면서 각 속성에 대해 반복적으로 작업을 수행하는데 유용한 구문입니다.

[[Enumerable]]은 JavaScript 객체의 내부 속성 중 하나로, 해당 속성이 for...in 문을 통해 열거 가능한지를 나타냅니다. 모든 객체의 속성은 [[Enumerable]] 속성을 가지고 있으며, 이 속성 값에 따라 for...in 문에서 열거되는지 여부가 결정됩니다.

[[Enumerable]] 속성은 속성 기술자(Object Property Descriptor) 객체의 enumerable 플래그를 통해 제어할 수 있습니다. enumerable 값이 true이면 해당 속성은 열거 가능하며, false이면 열거되지 않습니다.

for...in 문은 객체의 속성을 열거하고, 각 속성에 대해 반복적으로 실행될 코드 블록을 실행합니다. 이 때 for...in 문은 객체의 프로토타입 체인을 따라 열거 가능한 속성을 순회합니다.

다음은 [[Enumerable]] 속성과 for...in 문의 관계를 설명하는 예시입니다:

const person = {
  name: 'John',
  age: 25
};

Object.defineProperty(person, 'gender', {
  value: 'male',
  enumerable: false
});

for (let key in person) {
  console.log(key + ': ' + person[key]);
}

위의 예시에서 person 객체는 name, age, gender라는 세 개의 속성을 가지고 있습니다. nameage 속성은 기본적으로 [[Enumerable]] 속성 값이 true이기 때문에 for...in 문을 통해 열거됩니다.

그러나 gender 속성은 Object.defineProperty를 사용하여 enumerable 플래그 값을 false로 설정했습니다. 따라서 gender 속성은 for...in 문에서 열거되지 않습니다.

실행 결과는 다음과 같습니다:

name: John
age: 25

위의 예시에서는 for...in 문을 사용하여 person 객체를 순회하면서 각 속성의 이름과 값을 출력합니다. 그러나 gender 속성은 enumerable 값이 false로 설정되어 있으므로 for...in 문에서 순회되지 않습니다.

이를 통해 [[Enumerable]] 속성과 for...in 문은 객체의 속성이 열거 가능한지 여부를 제어하고, 열거 가능한 속성만을 for...in 문을 통해 순회할 수 있도록 합니다.

[[Enumerable]] 속성 값인 enumerable를 확인하기 위해서는 객체의 속성 기술자(Object Property Descriptor)를 검사해야 합니다.

객체의 속성 기술자에는 Object.getOwnPropertyDescriptor() 메소드를 사용하여 접근할 수 있습니다. 이 메소드는 주어진 객체와 속성의 이름을 기반으로 속성 기술자 객체를 반환합니다. 반환된 속성 기술자 객체에는 enumerable 속성이 포함되어 있습니다.

다음은 enumerable 속성을 확인하는 예시입니다:

const person = {
  name: 'John',
  age: 25
};

const propertyDescriptor = Object.getOwnPropertyDescriptor(person, 'name');
console.log(propertyDescriptor.enumerable); // true

위의 예시에서 Object.getOwnPropertyDescriptor(person, 'name')를 호출하여 person 객체의 name 속성에 대한 속성 기술자 객체를 가져옵니다. 그런 다음 propertyDescriptor.enumerable을 통해 enumerable 속성 값을 확인합니다.

실행 결과는 다음과 같습니다:

true

propertyDescriptor.enumerable 값이 true이면 해당 속성은 열거 가능한 속성이며, false이면 열거되지 않는 속성입니다.

Object.getOwnPropertyDescriptor() 메소드는 주어진 객체와 속성에 대한 속성 기술자를 반환하므로, enumerable 속성 뿐만 아니라 다른 속성 기술자의 정보도 확인할 수 있습니다. 이를 통해 객체의 속성에 대한 세부적인 속성 정보를 조사하고 제어할 수 있습니다.

0개의 댓글