참고: 개체의 일부 속성은 동일한 방식으로 읽기 전용, 영구(삭제 불가능) 또는 열거 불가능으로 표시됩니다. 이러한 속성은 for/in 루프를 사용하여 열거할 수 없습니다. 모든 사용자 정의 속성은 열거 가능하지만 모든 내부 메서드를 포함한 많은 내부 속성은 열거 가능하지 않습니다. 또한 객체는 다른 객체로부터 속성을 상속할 수 있으며, 상속된 사용자 정의 속성은 for/in 루프를 사용하여 열거할 수 있습니다.
for(var i=0;i 예:
var a = ["a","b","c"];
for(var el in a){
경고(a[el]);
}
이는 a의 모든 요소를 열거하는 것입니다. 물론 위의 예를 사용할 수도 있습니다
for(var i=0,len=a.length;i
}
이 방법은 루프에 나열하는 데 사용되지만 때로는 이 방법이 작동하지 않을 수도 있습니다.
예:
var a = {"첫 번째":1,"두 번째":2,"세 번째":3};
현재로서는 for in을 사용하여 목록을 모두 소진할 수 있습니다.
in에 대해 객체를 철저하게 사용할 수 있는지 여부는 propertyIsEnumerable 속성으로 판단할 수 있습니다.
object.propertyIsEnumerable(propname)이 for/in 루프를 통해 속성을 볼 수 있는지 여부
propname은 객체 속성
의 이름을 포함하는 문자열입니다.
객체에 propname이라는 상속되지 않은 속성이 있고 해당 속성이 열거 가능한 경우(즉, for/in 루프를 사용하여 열거할 수 있음) true
설명:
for/in 문을 사용하여 객체의 "열거 가능한" 속성을 순회할 수 있지만, 객체의 모든 속성이 열거 가능한 것은 아닙니다. JavaScript 코드를 통해 객체에 추가된 속성은 열거 가능하며, 객체의 내부 사전 정의된 속성( 메서드 등)은 일반적으로 열거할 수 없습니다.
propertyIsEnumerable() 메서드는 프로토타입 체인을 확인하지 않습니다. 즉, 객체의 로컬 속성에만 적용되며 상속된 속성의 열거 가능성을 감지할 수 없습니다.