2012-02-24 2 views
2

JavaScriptでは、私は最近、逆ループがより高速である方法を見つけました。私はこのフォームでそれらを見てきました逆のwhileループはJavaScriptでいつ停止するのかを知っていますか?

は:

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値の

例は:

false 
0 
undefined 
NaN 
null 
"" 

この場合iの値はループをするたびに減分され、それは0の値に達したとき、ループが停止します。これは後置減分演算子であるため、減算の前に式の値がチェックされます。つまり、内部ループは、someArray.length - 10(両端を含む)の値が、その配列のすべてのインデックスである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 (...)の式がfalseに評価されると、ループが停止します。
iは正の数(長さ)で減少しているため、ある時点でゼロになります。

ブール値のコンテキストでは、ゼロはfalseに変換され、ループがある時点で停止することを保証します。
i--は、前回の減算値を返しますので、ループが停止すると、実際にはi-1になります。

+2

「0は偽と等しい」と言うのは間違いですが、0は偽と評価する方が良いと言えます。 – vascowhite

+1

厳密に言うと、ゼロはブール値のコンテキストには存在しません。起こっているのは、[抽象的な '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で始めると、無限にループします。

関連する問題