【JS】for文で条件式の値を退避させる
JS逆引きレシピ本、088(P145)。
このページに書かれていたのはlengthプロパティによる配列のサイズの取得方法なのだが、小さく書かれていた「lengthプロパティの値を退避させる」という書き方がちょっと面白かったのでメモ。
サンプルとしては、以下のような単純なスクリプト。
for ( let i = 0; i < data.length; i++ ) { // 処理 }
まぁ、分かりやすいスクリプトである。
配列dataの中に格納されている値の分だけループを繰り返すという、シンプルなもの。
そこに、以下のような説明があった。
ただし、array_length.jsの例では、ループの都度、lengthプロパティにアクセスしているので、ブラウザの種類/バージョンによっては速度が低下します(検証環境ではEdge、IEで速度が低下しました)。
なるほど、たしかに、「i < data.length」の部分は、ループするたびに条件式と合っているのか検証を繰り返すことになるので、毎回、配列サイズを数えていることになる。
ループ数が小さいと気にする必要はないのだろうが、それこそ何万件もあるようなものをループ処理することになったら、塵も積もれば……となってくるのかもしれない。
for ( let i = 0, len = data.length; i < len; i++ ) { // 処理 }
このように書けば解決、ということなのだが、
ここで「なるほど!」と思ったのは、for文の初期化領域って、変数を一個しか書いちゃいけないような気がしていたのだ、なんとなく。
たしかに、繋げて複数の変数を指定できるよな……と、そこのところがワリと面白い気付きだったので、メモ。
毎回この書き方をしていると、読み返したときの可読性が落ちる気はするが、ちょっと回数の多い処理をぶん回すときには、このやり方で書いたほうがいいのかもしれないな~。