Javascriptの中でfor循環語句のいくつかの書き方は対比を総括します。


前言
forサイクルは、私たちはjsがオブジェクトや配列を遍歴する時に役に立ちます。今日はforループに関するいくつかの使用例を見に来ました。具体的な操作の詳細は以下のように紹介します。
一般的な書き方は以下の通りです。

for(var i = 0;i< arr.length;i++) {
 var a = arr[i];
 //...
 }
これはよく見られます。正の順序で循環するforサイクルです。このように書いた欠点はみんなが分かります。毎回arrからlengthとiを取って比較して、性能を浪費します。このサイクルを改善する方法は、変数でarr.lengthを保存することである。

for(var i = 0, al = arr.length;i< al;i++) {
 var a = arr[i];
 //...
 }
これは最初のタイプより少し性能を上げることができます。組長を数えると、より多くの向上ができます。
このように書くと変数が多くなりますし、この変数はiとの比較だけに使う時に役に立ちます。
サイクルの順序があなたにとって重要でないなら、順序を変えてみてもいいです。

for(var i = arr.length-1;i > -1;i--) {
 var a = arr[i];
 //...
 }
これは変数が少なく、arr長さもキャッシュされていますので、性能も良いです。でも、ここのコードはちょっと下手です。まずi = arr.length-1です。それから循環して実行する条件i>-1です。潔癖症の人は耐えられません。
以下は私がよく使う逆順for循環の書き方です。

for(var i = arr.length;i--;) {
 var a = arr[i];
 //...
 }
これはもう非常に簡素化されている。原理を理解する必要があります。forサイクルを継続して実行する条件は。この判断は本当であるべきです。ここのiCは初めて循環して入る時にi=arr.length、iCの値は変わらないです。for循環体の中にいるから、iが変わったことが分かります。i=1の場合、i--はまだ1ですが、循環体に入ると0になりますので、最後のサイクルは正常に実行できます。i=0の時、iCはまだ0で、0はもう本物ではないので、サイクルは続けられません。
上のすべてのコードのfor循環体には、現在循環している配列項目を取り出すためのvar a = arr[i] があることに注目してください。これは実際には浪費です。jsLintなどは循環で変数を宣言しないように教えてくれます。
倒順のforはここまで簡単にできますが、私は正順を要します。しかも効率が高く、変数が少ないです。どうすればいいですか?
以下のとおりです

for(var i = 0, a;a = arr[i++];) {
 //...
 }
この書き方の利点は、ほとんど避けられないarr.lengthがなくなりました。前に述べたように、現在循環している配列の項目を取り出すという言葉がなくなりました。
原理:a = arr[i++] は、ここで循環可能な条件として、ここでは1つの=号しかないので、これは判断文ではなく、割当文であり、arr[i++]をaに割り当てて、aが本物かどうか判断する。i+++とiCの原理タイプは言いません。i++が配列の長さを超えた時、循環は必ず停止します。ここは本当に停止します。なぜですか?a=arr[i++] のため、配列自体の長さを超える項目を取ったらundefinedだけが得られます。undefinedは偽の値です。循環条件は失敗と判断します。
もちろん、このように書く欠点も明らかです。
     1,arrの長さがダイナミックに変化すると、依然として死のサイクルが発生します。――arr.lengthをキャッシュしたことがないからです。
     2サイクルが1つの数字配列であれば、取り出したエントリ(つまり、aの値)が0である場合、ループは中止される(0は偽の値であるため)。
     3、配列の中のいずれかが偽の値である場合(空の文字列、0、null、undefinedを含む)、同様にループを中止します。
ですから、皆さんはこのような書き方をする時、上の状況を排除してから使うべきです。
この原理は倒順サイクルにも適用できる。
最後にみんなに忠告します。
  • コードの簡素化は効率が高いとは限らない。
  • コードを故意に簡略化するために性能を失わないでください。
    ちなみに、for循環性能を向上させるポイントはいくつかあります。
         1,タイムリーなbreakすべてを巡回する必要はないです。条件を追加してください。
         2、for循環体で変数を宣言しないでください。
         2、配列長キャッシュ、できるだけ変数を少なくします。
    締め括りをつける
    以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてほしいです。もし疑問があれば、皆さんはメッセージを残して交流してもいいです。