2011年6月に発行されたECMAScript 標準規格 ECMA-262 第5版の改訂版、『 ECMA-262 第5.1版』訳:webzoit.net(2012年4月)。
訳の正確性は保証の限りではありませんので必要に応じて原文をご参照ください。
標準化団体:Ecma International
Index of Ecma Standards内リンクECMA-262 Edition 5.1 (June 2011)にあるpdfファイル[ ECMA-262.pdf ]。
この仕様は、仕様書を記述する為の合理化が極めて洗練されており、その結果、実は、仕様書を書く為の略記としての式などの記述方法と実際にコーディングに利用可能なメソッド含むプロパティが混在しており、所々でその説明はありますが、ぱっと見では、全てが実際に利用可能なプロパティであったり、新たに定義された環境や用語のように思えてしまうような部分が多々ある為、留意すべき点をざっくり書き出してみます。
尚、以前のECMA仕様(第1/2/3版及び第5版)を読んだことがないのでなんですが、少なくとも、このECMA-262 5.1版の仕様は、以前の版、おそらくそれ以前に元のJavaScript仕様(Netscape社/Mozilla)、または、JScript仕様(Microsoft社)だと思いますが、何れにしてもJavaScriptの前提知識がないと、この仕様書を読んだだけでは理解できないだろうと思われる部分が多々あります。
また、機能を詳細に説明してあるような仕様部分においては、ソースコードから仕様書を起こした感のある記述となっており、任意の変数名が唐突に現れることがある為、その前提でコードを想定して読解しない限り、理解できない(、もしくは、それでも理解に苦しむ)部分も多々あるかと思います。
値の型 | |
---|---|
ECMAScript言語の型 | 仕様説明上の型 |
Undefined |
Null |
Boolean |
String |
Number |
Object |
Reference |
List |
Completion |
Property Descriptor |
Property Identifier |
Lexical Environment |
Environment Record |
NativeErrorオブジェクトとは、"NativeError"という名称のオブジェクトが存在するわけではなく、ErrorオブジェクトのEvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIErrorの計6個のエラーオブジェクトで仕様内容が重複することに伴う単なる代用表記です。
また、関数・メソッドにおいてECMAScript言語の関数・メソッドは、先頭が小文字、または全て小文字、その型とすることを示す仕様説明上の関数「っぽい」式は、先頭が大文字となっています。
実際のメソッド | 仕様説明上の説明式 |
---|---|
toString ( ) | ToString ( ) |
- | ToObject ( ) |
- | Type ( ) |
eval ( ) | Eval ( ) |
...etc. |
二重角ブラケット [[ ]] で括られたものは、処理系・実装への仕様または、仕様説明上の概念的、内部的なプロパティであり、プログラマがコード上からアクセスできるプロパティではありません。
仕様説明上の概念/コードからのアクセス不可 | |
---|---|
[[Prototype]] | |
[[Class]] | |
[[Extensible]] | |
[[Get]] | |
[[GetOwnProperty]] | |
[[GetProperty]] | |
[[Put]] | |
[[CanPut]] | |
[[HasProperty]] | |
[[Delete]] | |
[[DefaultValue]] | |
[[DefineOwnProperty]] | |
...etc. |
但し、一部、似通った名称の実在するプロパティ、または、プログラマがアクセス可能なプロパティがある場合もありますが、その場合、(NaN,POSITIVE_INFINITY,NEGATIVE_INFINITY,MAX_VALUE,MIN_VALUEといった値プロパティを除き、)プロパティ名が大文字で始まることはありません。
スペースを入れずに英単語が連なった連語の文字列は、誤記ではなく、意味はそのまま仕様説明上の「代替記号」となっています。
仕様説明上の代替記号 | 意味 |
---|---|
RegularExpressionLiteral | 正規表現リテラル |
DivPunctuator | 区分句読文字 |
ReservedWord | 予約語 |
IdentifierName | 識別子名 |
UnicodeEscapeSequence | Unicodeのエスケープシーケンス |
// SingleLineCommentCharsopt | 末尾にoptがつくケース // (スラッシュ2つ)に続けてオプションとしての(あってもなくてもよい)単一行コメント文字列 |
...etc. |
また、これら代替記号と共に1つ~3つのコロンを伴って左辺式、右辺式の形で記述されます(が、もちろんこれらのコロンも説明上のものです)。
ちなみにプロパティのキーと値のセットを表すコロン
var obj { "value" : "A" }
は、プログラムコードとして有効なものです。