■概要
javascriptのfor文に関していくつかのパターンがあるが、data内のすべてのプロパティに対して処理を行う時、最も効率のよい方法を調べてみたのでまとめる。
■for文の引数
for文には3つの引数が設定可能です。
for('引数1','引数2','引数3'){
//〜処理内容〜
}
引数1: for文の開始前に実行されます。下記の様に省略可能です。
for(;i<l;i++){}
引数2: for文内部処理の実行前に評価されます。引数2がtrueであれば、内部処理が実行されます。
引数3: for文内部処理実行後に実行されます。下記の様に省略可能です。
for(var i=0;i<l;){ i++ }
■パターン別の比較
前提①: dataは配列とする
前提②: 対象は data 内のすべてのプロパティとする
1. 初心者向けの本によく紹介されているパターン
for(var i=0;i<data.length;i++){
//対象データへのアクセスは data[i] の様な形式
}
上記が定石として知られると思いますが、上記の場合、for文内部の処理が呼ばれるたびにl.length(data.length)の参照・取得が行われるので効率が良くないです。
2.上級者向けによく紹介されているパターン
for(var i=0,l=data.length;i<l;i++){
//対象データへのアクセスは data[i] の様な形式
}
上記の場合、for文をスタートする前に l に対して data.length を格納するので、効率がよい。
for(var i=0,d;d=data[i];i++){
//対象データへのアクセスは d のみで行える
}
上記の利点は data[i] の様な面倒な表記をせずに済む。ただ注意点としては、data[i]
が true
であるかを評価するので、判定が false
になる値がプロパティに含まれる場合には使わない方がよい。
判定が false になる値に関しては下記を参照してください。
■参考文献
http://www.w3schools.com/js/js_loop_for.asp
https://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml