Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

i++はスペース挟んでi ++でもok

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください)

コメント頂いて雑に書きすぎたと思い書き直し。

本記事は「i++と書きがちだけど実はi ++って書いてもいいんだよ」と新しい視点を提供…というと大げさかもしれませんが、そう伝えるため書いた記事です。

セミコロンの自動挿入だとか「文」については詳しく書きません。

(宣伝ですが)演算子ノ全テも読むと理解が深まります。

演算子

上の「演算子ノ全テ」読んでいただいた人はここ飛ばしてOKです。

例えば1 + 2のように、演算子の前後にスペースを入れても問題ないです。スペースどころか改行もできます。ただし、

1
+2; // ok

とはできません。一応エラーにはなりませんが1+2と同じ動作はしません。 演算子の前ではなく、後ろになら改行を挟めます。

追記: コメント頂いて検証したところ上のコードでもエラー出ませんでした… 完全に勘違いでした。すいません。

1 +
2; // ok

理由はセミコロンの自動挿入です。JavaScriptではセミコロンは省略可能です。

なぜなら実行時にエンジン側でセミコロンを挿入して解釈してくれるからです。このセミコロンは改行周りで挟まれます。詳しくはググってください。

上の例で言うと前のものは 1 の直後にセミコロンが入るので+2が1とつながりません。しかし、1+とした場合、これはまだ「文」として完成していないのでセミコロンが挿入されません。

改行後に二項演算子があるのでセミコロンは入りません。記憶違いしていました…

本題

ここまで読んでいただいたら「演算子の前後にスペースや改行を入れてもOK」と理解していただけたと思います。

「演算子」の前後に、です。そして、++はインクリメント「演算子」です。そう、なんとスペースや改行を挟むことができます

var i = 0;
alert( i ++ ); // -> 0
alert( i ++ ); // -> 1
alert( ++ i ); // -> 3
alert( ++ i ); // -> 4

++
i; // 改行あってもインクリメントされる!!
alert(i); // -> 5

//i
//++; // これはさすがに無理らしい。
// 仕様書読んでないので正確なこと言えませんが
// iで既に1文とみなされていると思われます

i /*インクリメントするべ*/ ++; // できてしまいます
alert(i); // -> 6

動く実物↓ https://jsfiddle.net/yk0mro9v/1/ (リンク開くとすぐに6連アラートが開きます。ご注意ください)