답변
뾰족한 부분은 그의 대답에서 문제의 가능한 원인을 간략히 언급했으며 this.units[i]
은 null 일 수 있습니다. null 값에서 속성에 액세스하려고하면 "null이거나 객체가 아닙니다"오류가 발생합니다. 귀하의 예에서 이것은 if 문에서 this.units[i].x
에 액세스하려는 시도에 의해 발생합니다.
for(var i in this.units)
{
if (this.units[i] === null)
continue;
if(this.units[i].x==att.x && this.units[i].y==att.y){}
//... some more code
}
당신은 또한 가장 중요한 for...in
루프 배열에 적합하지 않은 것을, 그의 대답의 다른 점을 확인해야 할 가장 안전한 것은 확인하고 null 값이 처음입니다 있는지 확인하는 것입니다.
for(var i = 0; i < this.units.length; i++){
if(this.units[i].x==att.x && this.units[i].y==att.y){}
}
당신은 this.units
에서 요소를 사용하여 인덱스 this.units
에 노력하고 있습니다. 대신 for 루프를 사용하십시오 (위 그림 참조).
for (var i in this.units)
루프 표기법은 당신에게 "단위"개체에 정의 된 속성을 제공합니다. 어딘가에 무엇인가가 완료 한 경우 그 중 일부는 예를 들어, 값이 없을 수 있습니다 : 당신이 정말이 객체에 무슨 일이 일어나고 있는지 알지 못한다면
this.units.balloon = null;
루프 "의"와 개체 속성을 통해 반복하는 것은 매우 위험합니다. 객체가 실제로 배열 인 경우에는 확실히하지 않으려합니다. 숫자 인덱스와 숫자 변수가있는 일반 루프를 사용해야합니다. (그럼에도 불구하고 null 항목이있을 수 있습니다!)
MY 불량 :이 질문이 파이썬에 있다고 생각했습니다! 코드에서 어딘가에
del this.units[i]
또는 어떤 방법으로 컬렉션을 변경 :
당신은 아마 뭔가를하고 있습니다. 반복 중에는 No-No입니다.
델 (Del)이 아니라 삭제 된 것입니다. 그러나 나는 당신이 옳을 수도 있다고 생각합니다. 여전히 나는 현재 요소 만 삭제하면 문제를 일으키는 이유는 모르겠다. – naugtur
@naugtur :'delete ... '루프가 문제가된다고 의심 스럽습니다.'for ... in' 루프 전에 속성을'삭제'하면 속성이 사라지고 반복되지 않습니다. for 문 다음과 if 문 앞에는 코드의 해당 부분에 오류가 발생하도록 삭제해야합니다. –
당신은 오해했습니다. 때로는 루프 내부의 코드 부분에서 if 문 다음에 현재 요소 인 this.units [i]를 삭제합니다. 루프 동작에서 무엇이 변경되는지 궁금합니다. – naugtur
우선, 반복이 객체 위에있는 경우 "i"를 반복 변수로 사용하지 말고 prop 또는 key를 사용하여 색인이 아닌 반복 속성임을 분명히하십시오.
두 번째로 간단히 디버그하여 개체의 어떤 요소가 비어 있는지 확인할 수 있습니다. 전체 코드가 없으면 당신을 도울 수 없습니다. 문제가 당신이 수행하여 삭제라고 생각합니다
obj.myProp = null;
즉, for 루프는 해당 속성을 계속 반복한다는 의미입니다. 그러나 사용하는 경우
delete obj.myProp;
myProp은 for 루프에서 반복되지 않습니다.
나는'delete obj.myProp;'를 의미한다고 생각한다. 'del'은 JavaScript에서 키워드가 아닙니다. –
삭제를 사용합니다. – naugtur
@naugtur가 더 많은 컨텍스트를 게시 하시겠습니까? –
- 1. 반복에 반복
- 2. 는 바인딩, 요소 주문
- 3. 는 div 요소
- 4. 대해 HTMLEncode는()는
- 5. 반복에 가장 적합한 이름 집합입니까?
- 6. 할당은 "그것은"(당연) 각각의 반복에
- 7. 서브에 대해 & @는 무엇을 의미합니까?
- 8. 는 깊이 우선 검색에 대해
- 9. jQuery의 각 함수 반복에 대한 문제
- 10. 하위 함수에서 루프 반복에 액세스 하시겠습니까?
- 11. 배열을 통한 반복에 대한 질문 C++에서
- 12. 명명 된 배열에 요소 표시에 대해
- 13. 다른 JSF 구성 요소 라이브러리에 대해 설명해주십시오
- 14. GlassFish가 JSF 구성 요소 ID에 대해 불평합니다
- 15. 는 ColdFusion 구성 요소 또는 인터페이스 fuseboxWriter
- 16. 는 구성 요소 찾을 수 없습니다
- 17. 는 iframe을 요소 오버 플로우를 만들
- 18. XML + DOM +는 다음과 같은 XML 요소
- 19. 는 다차원 어레이마다 3 개 요소
- 20. 는 XSD 요소 또는 OtherElement 또는 텍스트
- 21. 는 이미 이것에 대해 질문을 한 8060
- 22. GetEvent()는 연결된 이벤트에 대해 null을 반환합니다.
- 23. 는 (잠시 프로토 타입에 대해 잊지)
- 24. 루프의 모든 3 번째 반복에 CSS 코드 추가 - WordPress
- 25. 는
- 26. 목록을 반복하고 funciton 결과를 다음 반복에 전달하는 방법
- 27. 는
- 28. 는
- 29. 는
- 30. 는
모든 답변 주셔서 감사합니다. if 문에 'this.units [i] &&'를 덧붙이고 null을 찾으러 내려 간다고 생각합니다. – naugtur