2012-02-24 6 views
2

JavaScript에서는 최근 while 루프가 더 빠를 때가 왔습니다. 나는이 양식을 본자바 스크립트에서 멈출 때 역 루프가 어떻게 알 수 있습니까?

는 :

var i = someArray.length; 

while (i--) { 
    console.log(someArray[i]); 
} 

나는 이것을 테스트하고 그것은 전체 배열을 통해 갔다 한 번 멈췄다.

배열을 완료 한 후 언제 중지해야하는지 어떻게 알 수 있습니까?

+0

"진실"이 무엇인지 알고 싶다면 [기사] (http://www.sitepoint.com/javascript-truthy-falsy/)를 참조하십시오. – OnesimusUnbound

+0

@OnesimusUnbound 그래, 그 기사가 도와 줘서 고마워! – Jacob

답변

11

while 루프는 매번 루프를 통해 괄호 안의 표현식을 평가합니다. 그 표현식이 거짓 값이되면 루프가 멈 춥니 다. falsey 값

예는 다음 i의 값이 루프를 통해마다 감소되며 그 0의 값에 도달 할 때, 루프가 중지 이때

false 
0 
undefined 
NaN 
null 
"" 

. 그것은 포스트 감소 연산자이기 때문에, 감소하기 전에 표현식의 값을 검사합니다. 즉, 내부 루프는 someArray.length - 1에서 0까지의 값인 i을 해당 배열의 모든 인덱스로 보게됩니다.

귀하의 코드 예제 :

var i = someArray.length; 

while (i--) { 
    console.log(someArray[i]); 
} 

이 같은 출력을 생성합니다

for (var i = someArray.length - 1; i >= 0; i--) { 
    console.log(someArray[i]); 
} 
+1

그 예는 모두 같습니다 :) – pimvdb

+1

큰 설명, 고마워요 – Jacob

5

i--이 0에 도달하면 루프가 중지됩니다.

while (...)의 표현식이 거짓으로 평가되면 루프가 중지됩니다.
i은 양수 (길이)이며 감소하므로 어느 지점에서 0에 도달합니다.

부울 컨텍스트에서 0은 false으로 변환되어 루프가 어느 지점에서 멈추는 지 확인합니다.
i--은 이전 감소 값을 반환하므로 루프가 중지 될 때 i은 실제로 -1입니다.

+2

'0은 거짓과 같음'이라고 말하는 것이 정확하지 않습니다. 0은 false로 평가됩니다. – vascowhite

+1

엄격히 말해서 부울 컨텍스트에는 0이 없습니다. 무슨 일이 일어나고 있는지 [추상'ToBoolean' 함수 (http://es5.github.com/#x9.2)는'0'을'false'로 변환합니다. – pimvdb

+0

그가 말한 것 : – vascowhite

1

루프가 실행될 때마다이 i--이 확인됩니다. --은 Javascript에 i을 1 씩 감소하도록 지시합니다. 결국 i은 0으로 내려갑니다. 이는 false과 같습니다. 이 시점에서 루프가 중지됩니다.

0

어둠 속에서 찌르는 것은 부울 식에서 0이 거짓으로 평가되기 때문입니다. 0 == true는 false를 반환합니다. 0 == false는 true를 반환합니다.

-1에서 시작하면 끝없이 반복됩니다.

관련 문제