2012-11-08 3 views
0

변수에서 값을 변경하지 않고도 색인에서 1 (또는 임의의 수)를 감소시키지 않고 어떻게 줄일 수 있습니까?JavaScript의 이전 색인 번호에서 1을 빼는 방법

여기 내 코드의 조각이다 :

if (i > 0 & areaImages[i].id == areaImages[i-1].id) 

그리고 나는 방화범이 오류 메시지가 :

TypeError: areaImages[i - 1] is undefined 
+1

http://jshint.com을 사용하여 일반적인 실수에 대해 경고하십시오. –

답변

8

아무것도가 감소되지 않습니다. 실제 이유는 잘못된 연산자를 사용했기 때문입니다.

부울 들어
if (i > 0 && areaImages[i].id == areaImages[i-1].id) 
//  ^^ 

모두 &&&과 동일 (최대 ==) 결과를 리턴한다. 하지만 중요한 차이점은 &&short-circuiting인데, 즉 &&의 왼쪽이 false 인 경우 오른쪽이 평가되지 않습니다.

원래 코드의 문제는 &하지 단락, 그래서 areaImages[i-1].id이 경우에도 i <= 0을 평가 될 것입니다. 그러나 i-1은 잘못된 인덱스이므로 areaImages[i-1]은 정의되어 있지 않으므로 undefined에서 속성을 가져올 수 없으므로 TypeError가 발생합니다.

+0

그래,'&&'의 왼쪽이 거짓 일 때'&&'는 합선됩니다. 그것은 유용한 정보였습니다. 하지만 어떻게''[i-1]'을 유효한 색인으로 만들 수 있습니까? 난 단지 이전 색인을'var i'를 감소시키지 않고 사용하고 싶습니다. – Chakotay

+0

위에서 중단했던 곳에서 계속 ^. 'areaImages [-1]'은 이전 색인에 접근하는 잘못된 방법입니까, 아니면 프로그램에서 그 색인이 정의되지 않았기 때문에 정의되지 않은 오류 메시지가 나옵니까? – Chakotay

+0

@Alexander :'areaImages [-1]'은 무엇을 기대합니까? – kennytm