2010-12-07 6 views
2

IE8에서 무의미한 오류 메시지가 표시됩니다. 상수 '2'가 null이거나 객체가 아닙니다. 코드의 라인은 다음IE8 Javascript : '2'가 null이거나 객체가 아닙니다.

if (localtree[idx][2] == 0) { 

그 위치에 배열 값은 항상 (지금) 제로 :

if (! localtree[idx][2]) { 

난이처럼 부호화 시도.

IE8은 숫자 2가 null이라고 어떻게 생각합니까? 나는 신비 해!

정확한 오류는 다음과 같습니다

Message: '2' is null or not an object 

는 사람이 본 적이 있습니까?

편집 : 이것은 매우 잘못된 오류 메시지입니다. 실제로 잘못 된 것에 대한 내 대답을보십시오.

+0

어떻게 localtree를 초기화 하시겠습니까? –

+1

Firefox는 어떤 오류가 있습니까? –

답변

5

이것은 매우 혼란스러운 오류 메시지입니다. 배열의 끝을 넘어 한 요소를 스테핑하는 것으로 밝혀졌습니다. 'idx'는 배열 참조 ([2] 포함)로 취급하려고 시도하지 않은 존재하지 않는 값을 참조했습니다.

'2'가 null이라고 말하는 것이 아니라 'localtree [idx]'가 null이라고 말해야합니다.

이 근본적인 원인은 내가 배열을 정의한 후행 쉼표가있어서 배열에 null 값이 추가된다는 것입니다. 파이어 폭스에서는 후행 쉼표가 (예 : perl에서) 무시되지만 IE에서는 중요합니다.

+0

아, 고전적인 후행 쉼표 문제. 'localtree [idx] [0]'과'... [1]'이 존재하기 때문에 (localtree [idx]는'null'이 아닙니다. (객체 자체는 항상'true'로 평가됩니다),'... [2]입니다. 즉, 오류 메시지가 명확해질 수 있다는 것에 동의합니다. BTW, [JSLint] (http://www.jslint.com)는 쉼표가있는 배열을 피드 할 때 경고 메시지를 표시합니다. –

2

상수는 '2'

if (! localtree[idx][2]) { 

JavaScript가 적어도 아직 상수가없는 널 아닌지 목적이다. 숫자가 아니라 배열의 멤버입니다. 즉, 인덱스 번호가 2이고 객체가 localtree[idx] 인 변수 (여기서 idx은 객체 속성을 참조하는 문자열 또는 배열을 나타내는 인덱스 번호가 있어야합니다) .

+0

예.하지만 오류 메시지가 특별히 '2'가 문제라고 말합니다. 또한 '2'는 상수입니다. – NXT

관련 문제