Javascript 의 for in 순환 과 hasOwnProperty 를 결합 하여 사용 합 니 다.

in 연산 자 에 비해 for in 은 순환 대상 의 속성 에 도 원형 체인 을 옮 겨 다 닙 니 다.for in 은 배열 의 length 속성 과 같은 셀 수 없 는 속성 을 읽 지 않 습 니 다.소결 은 대상 이 어떤 속성 을 가지 고 있 는 지 검사 할 때 hasOwnProperty 는 이 작업 을 수행 할 수 있 는 유일한 방법 입 니 다.for in 순환 시 hasOwnProperty 를 추가 하여 판단 하 는 것 을 권장 합 니 다.로 컬 원형 확장 으로 인 한 오 류 를 효과적으로 피 할 수 있 습 니 다.in 연산 자 에 비해 for in 은 순환 대상 의 속성 에 도 원형 체인 을 옮 겨 다 닙 니 다.for in 은 배열 의 length 속성 과 같은 셀 수 없 는 속성 을 읽 지 않 습 니 다.
 
// Object.prototype
Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
console.log(i); // bar moo
}
우 리 는 for in 순환 의 행 위 를 바 꿀 수 없습니다.순환 체 내의 일부 속성 을 여과 해 야 할 때 Object.prototype 의 hasOwnProperty 방법 으로 완성 할 수 있 습 니 다.알림:for in 순환 은 항상 전체 원형 체인 을 옮 겨 다 니 기 때문에 다 중 계승 대상 을 옮 겨 다 닐 때 효율 이 낮 습 니 다.hasOwnProperty 를 사용 하여 여과
 
// foo
for (var i in foo) {
if (foo.hasOwnProperty(i)) {
console.log(i);
}
}
예 에서 hasOwnProperty 를 사 용 했 기 때문에 최종 적 으로 moo 를 출력 합 니 다.hasOwnProperty 를 무시 하면 코드 는 예상 치 못 한 결 과 를 출력 합 니 다.로 컬 프로 토 타 입(예 를 들 어 Object.prototype)이 확장 되 었 기 때 문 입 니 다.Prototype 프레임 워 크 는 자 바스 크 립 트 의 원시 대상 을 확장 하 는 라 이브 러 리 로 광범 위 하 게 사용 되 고 있 으 며,그 단점 도 뚜렷 하 다.프레임 워 크 가 도 입 된 후에 hasOwnProperty 를 사용 하지 않 고 필터 판단 을 하면 출력 결 과 는 당신 이 원 하 는 것 이 아니 라 는 것 을 보증 합 니 다.가장 좋 은 실천 은 for in 에서 항상 hasOwnProperty 를 사용 하여 판단 하 는 것 을 추천 합 니 다.실행 중인 코드 환경 이 오염 되 었 는 지 아 닌 지 를 보장 할 수 있 는 사람 이 없습니다.hasOwnProperty 는 대상 이 프로 토 타 입 체인 에 없 는 사용자 정의 속성 을 가지 고 있 는 지 확인 하기 위해 hasOwnProperty 방법 을 사용 할 필요 가 있 습 니 다.모든 대상 이 이 방법 을 가지 고 있 습 니 다.Object.prototype 에서 계승 합 니 다.알림:속성 이 존재 할 수 있 지만 값 은 undefined 입 니 다.hasOwnProperty 는 자 바스 크 립 트 에서 원형 체인 을 옮 겨 다 니 지 않 고 대상 속성 을 처리 할 수 있 는 유일한 방법 입 니 다.
 
// Object.prototype
Object.prototype.bar = 1;
var foo = {goo: undefined};

foo.bar; // 1
'bar' in foo; // true

foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true
hasOwnProperty 만 정확 한 예상 결 과 를 내 놓 았 습 니 다.대상 의 속성 을 옮 겨 다 닐 때 필요 합 니 다.대상 의 원형 체인 에 정 의 된 속성 을 제외 할 다른 방법 이 없습니다.hasOwnProperty 는 속성 자바 script 으로 hasOwnProperty 를 키워드 로 보호 하거나 보존 하지 않 았 기 때문에 대상 이 같은 이름 의 속성 을 가지 고 있다 면 확 장 된 hasOwnProperty 를 이용 하여 정확 한 결 과 를 얻 을 필요 가 있 습 니 다.
 
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
foo.hasOwnProperty('bar'); // false
// hasOwnProperty this foo
{}.hasOwnProperty.call(foo, 'bar'); // true
소결 은 대상 이 어떤 속성 을 가지 고 있 는 지 검사 할 때 hasOwnProperty 는 이 작업 을 수행 할 수 있 는 유일한 방법 입 니 다.for in 순환 시 hasOwnProperty 를 추가 하여 판단 하 는 것 을 권장 합 니 다.로 컬 원형 확장 으로 인 한 오 류 를 효과적으로 피 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기