예기치 않은 JavaScript 가능한 반복
다음 코드가 있습니다.
for (i in awards) {
if (awards[i] instanceof Array === false) {
console.log(awards[i]);
httpFactory.patch(awards[i], {"read": true}, false);
}
}
내 IDE는 위 코드와 관련된이 오류를 표시합니다.
예상치 못한 (사용자 지정 / 상속 된) 멤버에 대해 가능한 반복, 아마도 hasOwnProperty 검사 누락
JavaScript에서 필터링되지 않은 for-in 루프의 인스턴스를 확인합니다. 이 구성을 사용하면 상속되거나 예기치 않은 속성이 처리됩니다. hasOwnProperty () 메서드를 사용하여 자체 속성을 필터링해야합니다. 유효성 검사는 JavaScript, html 또는 jsp 파일에서 작동합니다.
이 진술이 의미하는 바를 더 자세히 설명해 주시겠습니까?
IDE는 테스트를 추가 할 것을 권장합니다.
if (awards.hasOwnProperty(i)) {
...
}
for
루프 내부 .
개인적으로이 작업을 수행하지 않고 가능하면 경고를 비활성화하는 것이 좋습니다. 대부분의 코드에는 단순히 필요하지 않으며 다음을 사용하여 객체에 열거 할 수없는 속성을 안전하게 추가 할 수있는 ES5 코드의 필요성이 훨씬 적습니다.Object.defineProperty
이 hasOwnProperty
검사는에 새 (열거 가능) 속성을 안전하지 않게 추가 한 경우에만 필요 Object.prototype
하므로 가장 간단한 수정은 그렇게하지 않는 것입니다 .
jQuery는이 테스트를 수행하지 않습니다. jQuery 가 안전하지 않게 수정 되면 중단 될 것이라고 명시 적으로 문서화 합니다 Object.prototype
.
자바 스크립트의 모든 객체는 자체 속성 (네이티브 / 상속 메소드 / 속성)을 가진 프로토 타입과 객체 자체에 직접 연결된 속성을 가지고 있습니다.
객체를 반복하면 객체 자체의 속성과 객체 프로토 타입의 속성이 반복됩니다.
따라서 프로토 타입에 대한 반복을 피하기 위해 객체가 언급 된 속성을 직접 가질 때만 true를 반환 하는 hasOwnProperty 메서드 를 사용하는 것이 좋습니다 . 즉, 프로토 타입 내부가 아님
예
for (var k in object) {
if (object.hasOwnProperty(k)) {
// do your computation here.
}
}
루프를 다음과 같이 리팩터링 할 수도 있습니다.
const keys = Object.keys(object);
for (const key of keys){
// do something with object[key];
}
이 루프의 시작 부분에 조건을 하나 더 추가해야합니다.
if (awards.hasOwnProperty(i))
참고 URL : https://stackoverflow.com/questions/25723674/javascript-possible-iteration-over-unexpected
'program tip' 카테고리의 다른 글
Angular, 콘텐츠 유형이 $ http로 전송되지 않음 (0) | 2020.12.11 |
---|---|
MySQL LEFT JOIN 3 테이블 (0) | 2020.12.11 |
다른 기능에 영향을주지 않고 Firebase 용 Cloud Functions에 일부 기능을 배포하는 방법은 무엇입니까? (0) | 2020.12.10 |
Linux (라이브러리 또는 실행 파일)에서 바이너리 파일의 대상 ISA 확장을 결정합니다. (0) | 2020.12.10 |
분기 된 터미널에서 xcodebuild 실행 (0) | 2020.12.10 |