요약: for-in 순회 메서드의 루프 카운터는 문자열 형식입니다. 객체를 순회할 때는 개체 속성/메서드 이름입니다. 배열을 순회할 때는 일반적인 for 루프와 달리 배열 요소 첨자 인덱스입니다. for-in은 속성을 상속합니다. / 메소드가 나열되어 있으므로 이를 사용할 때 특별한 주의가 필요합니다.
JavaScript는 전통적인 for 루프 외에도 순회 작업을 위한 for-in 메서드를 정의합니다. 데이터 소스에 따라 사용법이 다릅니다.
(1) 객체 탐색:
var fish = {
head : 1,
tail : 1,
}
for(var prop in fish) {
console.log(fish[prop])
}
디버깅 중 관찰: props는 'head', 'tail' 순서로, 즉 개체 속성을 순회할 때 문자열 형식으로 존재하며 루프 카운터는 속성 이름입니다. 물체.
(2) 배열 순회
var arr = [ '1', '2', '3'];
for(var prop in arr) {
console.log(prop)
}
디버깅하는 동안 관찰하십시오. prop은 순서대로 '0', '1'입니다. 즉, 배열을 순회할 때 여전히 문자열 유형으로 존재합니다. 차이점은 루프 카운터가 배열 요소의 첨자라는 것입니다. (이때 for 루프를 사용해 출력해 보면 결과는 for-in과 일치합니다)
코드에 추가하면
if(Object.prototype.clone === 'undefine')
Object.prototype.clone = function () {};
출력 결과는 0,1,clone
for 루프를 사용하여 출력하는 경우에도 여전히 0,1입니다. for-in 루프는 현재 동작하고 있는 데이터 소스의 타입의 속성을 사용하게 됩니다. -in to traverse: 객체 자체 속성에 대해서만 작업하는 경우 상속된 속성을 사용해야 합니다. hasOwnProperty() 메서드를 사용하는 등 해당 속성을 제거합니다.