필터링되지 않은 for-in 루프를 보고합니다.

이 구문을 사용하면 객체의 자체 프로퍼티뿐만 아니라 해당 프로토타입의 프로퍼티까지 처리됩니다. 특정 경우에 이를 예상할 수 없을 수 있습니다(예: 모든 프로퍼티를 복사 또는 변경하는 유틸리티 메서드 내 또는 Object의 프로토타입이 잘못 변경되는 경우). 예를 들어, 다음 코드는 42myMethod를 출력합니다:


Object.prototype.myMethod = function myMethod() {};
let a = { foo: 42 };
for (let i in a) {
  console.log(a[i]);
}

루프 전체를 Object.keys()로 바꾸거나 hasOwnProperty() 체크를 추가할 것을 권장합니다. 빠른 수정이 적용된 후 코드는 다음과 같습니다:


for (let i in a) {
  if (a.hasOwnProperty(i)) {
    console.log(a[i]);
  }
}