변수에서 값을 변경하지 않고도 색인에서 1 (또는 임의의 수)를 감소시키지 않고 어떻게 줄일 수 있습니까?JavaScript의 이전 색인 번호에서 1을 빼는 방법
여기 내 코드의 조각이다 :
if (i > 0 & areaImages[i].id == areaImages[i-1].id)
그리고 나는 방화범이 오류 메시지가 :
TypeError: areaImages[i - 1] is undefined
변수에서 값을 변경하지 않고도 색인에서 1 (또는 임의의 수)를 감소시키지 않고 어떻게 줄일 수 있습니까?JavaScript의 이전 색인 번호에서 1을 빼는 방법
여기 내 코드의 조각이다 :
if (i > 0 & areaImages[i].id == areaImages[i-1].id)
그리고 나는 방화범이 오류 메시지가 :
TypeError: areaImages[i - 1] is undefined
아무것도가 감소되지 않습니다. 실제 이유는 잘못된 연산자를 사용했기 때문입니다.
부울 들어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가 발생합니다.
그래,'&&'의 왼쪽이 거짓 일 때'&&'는 합선됩니다. 그것은 유용한 정보였습니다. 하지만 어떻게''[i-1]'을 유효한 색인으로 만들 수 있습니까? 난 단지 이전 색인을'var i'를 감소시키지 않고 사용하고 싶습니다. – Chakotay
위에서 중단했던 곳에서 계속 ^. 'areaImages [-1]'은 이전 색인에 접근하는 잘못된 방법입니까, 아니면 프로그램에서 그 색인이 정의되지 않았기 때문에 정의되지 않은 오류 메시지가 나옵니까? – Chakotay
@Alexander :'areaImages [-1]'은 무엇을 기대합니까? – kennytm
http://jshint.com을 사용하여 일반적인 실수에 대해 경고하십시오. –