ECMAScript 5.1 の規格書を読んで発見したこと
ECMAScript 5.1、別の言い方では Ecma-262、通称 JavaScript の規格書を読んで、僕的にいくつか驚いたことをまとめておきます。
規格書は以下から参照できます。
日本語訳もあるのですが、僕は原典をあたることをお勧めします。
debugger という予約語が存在すること(将来のための予約語ではなく)
以下は Chrome で debugger 構文を使用した画面。わかりづらいですが、後ろの灰色部分は Chrome ブラウザです。
ブレークポイントのようにその場所で止められます。
デバッグしにくいと評判だった JavaScript に一筋の光が差し込みました。
setter/getter のための構文があること
以下はオブジェクトに setter/getter をつけて、プロパティにアクセスしている様子。
Java みたいなレガシーさはなく、C# のようなモダンな構文。
setter は引数を複数取れるようなので、例えばフルネームを設定して返す、というような感じに使えそうです。
プロパティと同じ名前は付けられないようです。たしかに、どちらなのか判断できなくなるので。
return の後に改行してはいけない
以下のスクリプトを見てください。
関数 foo は 0 を返しているのですが、結果を受け取った result は undefined です。return の後の式が省略された場合、undefined が返されるという仕様になっています。
規格書の 7.9 には以下のように記載されており:
Certain ECMAScript statements (empty statement, variable statement, expression statement, do-while statement, continue statement, break statement, return statement, and throw statement) must be terminated with semicolons.
要約すると「特定の文(空、... return 文、throw 文)はセミコロンで終わらなければならない」と記載されています。しかしその後に「しかしながら、利便性のためにこうしたケースではセミコロンは省略してもよい。省略した場合は自動的に補われる」とのことです。
なるほど。