訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
Unicode形式の制御文字が、処理する前にECMAScriptのソーステキストから取り除かれることは、もはや、なくなりました。 第5版では、そのような文字が、 StringLiteral や RegularExpressionLiteral 内に現れる場合、その文字が、リテラルに組み込まれないであろう第3版の文字の中にあるリテラルに組み込まれることはないでしょう。
Unicode文字 <BOM> は、識別子となって現れる途中にあるその存在は、第3版では(実際には)発生しなかったと思われる構文エラーの中で結果として現れる可能性がありましたが、現在は、ホワイトスペースとして扱われるようになっています。
エスケープシーケンスが先行する行終端文字は、現在、文字列リテラルトークン(文字どおりの字句)内にあることも許容されるようになっています。 (ちなみに)第3版では、(この場合、)構文エラーが、出されていたことでしょう。
正規表現リテラルは、現在、当該リテラルが評価される都度、一意のオブジェクトを返すようになっています。 この変更により、そのようなリテラル値の当該オブジェクトの素性をテストしたり、共有した副作用に敏感な任意のプログラムによって検出されます。
第5版は、RegExp オブジェクト を RegularExpressionLiteral に変換する際に生成されるであろう利用可能なRegExpコンストラクタのエラーについて初期に報告することを要求します。 第5版より以前の実装は、実際のオブジェクトの生成実行時までそのようなエラーを報告することを遅延させていました。
第5版では、復号・復号化(アンエスケープ)した "/" (スラッシュ)文字が、正規表現リテラル内で任意の CharacterClass として現れる場合があります。 第3版では、そのような文字は、リテラルの末尾の文字として解釈されていたことでしょう。
第5版では、 eval コードにおける環境変数と語彙的な環境両方であるものとしてグローバル環境を使用する eval 関数を間接的に呼びます。 第3版では、間接的な eval における caller の変数と語彙的な環境は、 eval コード(自体)における環境として使用されていました。
第5版では、 Array.prototype の全てのメソッドは、汎用的であることが意図されます。 第3版では、 toString と toLocaleString は、汎用的ではありませんでしたから、Arrayのインスタンスではないオブジェクトに適用した場合、TypeError例外を投げる(スローする)でしょう。
第5版では、引数オブジェクトのプロパティをインデックスした配列は、列挙される実際の正規パラメータと一致します。 第3版では、そのようなプロパティは、列挙されませんでした。
第5版では、引数オブジェクトの内部プロパティ[[Class]]の値は、"Arguments"です。 第3版では、それは、"Object"でした。 これにより toString が、引数オブジェクトのメソッドとして呼ばれる際には、観測可能となっています。
for-in 文は、もはや null や undefined を評価する式では、TypeErrorを投げ(スローし)ないようになっています。 代わりにその文は、式の値が、何も列挙されないプロパティを伴うオブジェクトであった場合のように動作します。
第5版内では、次の新しいプロパティは、第3版に存在する組み込みオブジェクトについて定義されます。
Object.getPrototypeOf , Object.getOwnPropertyDescriptor , Object.getOwnPropertyNames , Object.create , Object.defineProperty , Object.defineProperties , Object.seal , Object.freeze , Object.preventExtensions , Object.isSealed , Object.isFrozen , Object.isExtensible , Object.keys , Function.prototype.bind , Array.prototype.indexOf , Array.prototype.lastIndexOf , Array.prototype.every , Array.prototype.some , Array.prototype.forEach , Array.prototype.map , Array.prototype.filter , Array.prototype.reduce , Array.prototype.reduceRight , String.prototype.trim , Date.now , Date.prototype.toISOString , Date.prototype.toJSON
実装は、現在、明示的に指定されない限り、標準組み込みメソッドについて外部の引数を無視することが要求されることになっています。 第3版では、外部引数の操作については指定されておらず、実装は、明示的にTypeError例外を投げる(スローする)ことが許容されていました。
Globalオブジェクトの値プロパティ NaN、∞、undefinedは、読み取り専用プロパティとするように変更されています。
実装は、もはや直接呼ばれない方法において eval の使用を制限することを許容されなくなりました。 追記すると任意の eval の呼び出しは、 caller の変数環境ではなく、その( eval の)変数環境としてグローバル環境を使用する直接呼び出しではなくなっています。
関数 parseInt の仕様は、もはや8進数値としての0を伴って始まる文字列を扱うことを実装に許容しなくなりました。
第3版では、2つめの引数が、配列オブジェクトや引数オブジェクトの何れでもない Function.prototype.apply に渡される場合、TypeErrorが、投げられ(スローされ)ます。 第5版では、2つめの引数は、有効な length プロパティを持つ任意の一般的な配列風のオブジェクトの種類となる場合があります。
第3版では、 Function.prototype.apply や Function.prototype.call の何れかに1つめの引数として undefined や null を渡すとGlobalオブジェクトが、 this 値として間接的に呼び出した対象となる関数に渡される要因になります。 1つめの引数が、プリミティブ(原始的な)値である場合、 this 値として渡されるプリミティブ(原始的な)値上で ToObject を呼んだ結果とします。 第5版では、これらの変換は、実行されず、実際の1つめの引数は、 this 値として渡されます。 この違いは、対象となる関数を実行する変換と一致する為、通常は、既存のECMAScript第3版には見られることではないでしょう。 しかしながら、実装によっては、この違いが、 apply や call を使って呼んだホストオブジェクト関数に見られる場合があります。 追記すると this 値として渡した null や undefined を伴うこの方法で標準組み込み関数を呼び出すと、多くの場合、第3版の動作とは異なる第5版での実装における動作をするでしょう。 特に第5版の組み込み関数は、 this 値として null や undefined を渡した場合、一般にTypeError例外を投げる(スローする)任意のオブジェクトとして、渡した this 値を実際に使用する為に指定されます。
第5版では、Functionインスタンスのプロトタイププロパティは、列挙されません。 第3版では、このプロパティは、列挙されました。
第5版では、Stringオブジェクトの[[PrimitiveValue]の個々の文字は、Stringオブジェクトのプロパティをインデックスした配列としてアクセスされる場合があります。 これらのプロパティは、書き込み不可、かつ、設定不可であり、同名の継承したプロパティを覆い(シャドウし)ます。 第3版では、これらのプロパティは、存在せず、ECMAScriptのコードは、そのような名称を持つ書き込み可能なプロパティを動的に追加または削除可能であり、そのような名称を持つ継承したプロパティにアクセスすることが可能でした。
Date.parse は、現在、最初に ISO フォーマット文字としてその引数を解析する試行を要求するようになっています。 このフォーマットを使用する一方、(失敗(failure)を含む)実装仕様固有の動作に依存しないプログラムは、異なる動作をする場合があります。
第5版では、 \s は、併せて <BOM> ともマッチするようになっています。
第3版では、オブジェクトのソースプロパティのString値の書式は、実装定義であるRegExpコンストラクタによって正確に生成しました。 第5版では、Stringは、特定の指定した必要条件と一致しなければならず、その為、第3版の実装によって生成した書式とは異なる場合があります。
第3版では、 RegExp.prototype.toString の結果は、RegExpオブジェクトのソースプロパティから伝送される必要はありませんでした。 第5版では、その結果は、特定の方法でソースプロパティから伝送されなければならず、その為、第3版の実装によって生成した結果から伝送される場合があります。
第5版では、Errorオブジェクトのmessageプロパティにおける初期値が、Errorコンストラクタ経由で指定されない場合、プロパティの初期値は、カラの文字列となります。 第3版では、このような初期値は、実装定義とされていました。
第3版では、 Error.prototype.toString の結果は、実装定義です。 第5版では、その結果は、完全に特定され、その為、一部の第3版の実装とは異なる場合があります。
第5版では、名称 JSON は、グローバル環境で定義されます。 第3版では、名称の存在についてのテストを行うとプログラムや実装で定義されない限りは、undefined (未定義)であることが示されるでしょう。