2012年6月20日水曜日

見慣れないfor文

『JavaScriptパターン』を読んでたら、見慣れないfor文が出てきた。
for(var i = length; i--;){
  //hogehoge
}

なんだこれ?ちゃんと動くのか?と思ってfirebugのコンソール上で
叩いてみると問題なく動いた。
何が引っかかったかというと、条件のところi--だよね。
これって何が評価されるの?
で、いろいろ試したり調べてたらわかってきた。
i--;
のような後置デクリメントはまず値が評価され、その後デクリメントが行われる。
インクリメントも一緒。
というか、ずっと勘違いしていたことに気づいた。
if(i = 5) {
  //hogehoge
}

みたいな処理を書くとif文の中が実行されるのって代入が成功してtrueが返ってるんだと
思ってたんだけどホントはiに5が代入されてその値5が評価されてそれでifがtrueになってるんだね。
どういうことかというと、
if(i = 0){
  //fugafuga
}

っていうのでも実行されると思ってたけど、これはif文の中は実行されない。
結局、最初のi--;っていうのはまず値が評価されるわけだから、
for(i = 3; i--;){
  console.log(i);
}

みたいに書くと、
210と出力されるわけだ。

んー、でも、これって実はかなり基礎的なことだよなぁ。
色々な意味で勉強になった。

0 件のコメント:

コメントを投稿