for の後ろに if をつける書き方

こんな書き方ができるのを知った

for (var i = 0; i < 10; i++) if (i % 2 == 0) {
  print(i);
}

これは以下と同じ

for (var i = 0; i < 10; i++) {
  if (i % 2 == 0) print(i);
}


例をもう1つ。
これは

for (var k in attr) if (attr.hasOwnProperty(k)) {

これと同じ。

for (k in attr) {
  if (!attr.hasOwnProperty(k)) continue;


for 文を if で修飾するというんだろうか。
ん? Ruby だと if 修飾子っていうけど JavaScript でもいうのかな?
慣れたら修飾する書き方のほうが読みやすそう。

追記

修飾子というのは僕の勘違いだった。
コメントやトラックバックで突っこんでくれた方々、どうもありがとうございました!


最初の例のこのコードを

for (var i = 0; i < 10; i++) if (i % 2 == 0) {
  print(i);
}


省略せずに書くとこうなる。

for (var i = 0; i < 10; i++) {
  if (i % 2 == 0) {
    print(i);
  }
}


ここで「for は中身が一つの文のみの場合は、中括弧を省略できる」
という規則を使って、中括弧を省略するとこうなる。

for (var i = 0; i < 10; i++)
  if (i % 2 == 0) {
    print(i);
  }


さらに、ここからスペースを取り除いて少し形を変えると、最初の例と同じ形になる。

for (var i = 0; i < 10; i++) if (i % 2 == 0) {
  print(i);
}


なので、if は for を修飾しているわけではない。
僕は for の後ろに if があるのを見て
これは if が for を修飾するときに使える特別な書き方なのかなぁ
と適当なことを思っていたのだけど、それは間違いだった。


ちなみに、if も for 同様に中括弧を省略できるので
上記のコードをさらに短縮することもできる。

for (var i = 0; i < 10; i++) if (i % 2 == 0) print(i);

でもこれはあまりいい書き方ではないと思う。