IE10からサポートされるECMAScript(エクマスクリプト)とは、
なんでしょうか?
■ECMAScript(エクマスクリプト)
ECMAScript(エクマスクリプト)は、Ecma International によって
策定されたスクリプト言語である。
互換性の低い JavaScript と JScript を標準化すべく、両方の言語に
共通する部分を取り入れて作られた。
現在の最新バージョンは5 (5th edition)。
2009年12月に標準化。関連規格の一つである
ECMAScript for XML (E4X) では、ネイティブで XML が
サポートされている。
■ECMAScript 5、
ECMAScript 5では基本ライブラリの拡張、コーディングミスを
特定するための仕組みが追加されている。
●基本ライブラリに拡張された機能
・DateがISO8601形式の日付を生成できるようになり、パースもできる
例)20091209T12:34:56Z
・Stringにtrim()メソッドが組み込まれる。
・新しいJSONオブジェクトは、JSON形式のデータを
効率的に生成するためにparseとstringifyをサポートする。
evalと似ているが、セキュリティを考慮した実装がないので
コードを少なくできる。
また、JSONObjectやJSONArrayだけでなく、どのような
JSONValueも使える。
(JSON-Textを定義しているが、これはオブジェクトか配列に
制限されている。)
・Prototypeのbind()と同じ構文でbindが追加。
・Arrayが標準的なファンクションをサポート。
例)indexOf()やmap()、filter()そして reduce()など。
・オブジェクトはseal()
(新しい属性の追加と既存の属性の削除ができなくなる)と
freeze()
(すべての属性が読み取り専用になり、属性の追加と削除も
できなくなる)が利用できる。
・Object.keys()を使うとそのオブジェクトのすべての
enumerableな属性を一覧できる。
・Object.getOwnPropertyNames()を使うとすべてのenumerableと
非enumerable属性を一覧できる。
・Object.getPrototypeof()を使うとそのオブジェクトのprototypeを返す
●一般的でありがちなコーディングミスを特定し、
除去するためにより厳格なランタイムモードが導入
・Strict mode
strict modeを導入する目的は、ECMAScriptアプリケーションを
開発するときに発生するコーディング上の一般的な問題を
避けることです。
ひとつのユニット(スクリプトまたはファンクション)の中に、
次のような文字列リテラルを書くことでこの制約を有効にできる。
"use strict;"
このリテラルを宣言することにより、は従来のランタイム上では
何の影響もないが、バージョン5がターゲットとする
新しいランタイム上ではstrict modeに切り替わります。
サンプルソース
"use strict"; (function () { |
では、strictモードにすることによってどうなるか?
・変数は利用する前に宣言しなくてはならない。
言い換えれば、i=3という書き方はランタイムエラーになる。
var i=3としなければならない。
(iがこのスコープ内にはないという前提)
・Evalは予約語になる。また、eval内で新しい変数を導入できなくなる。
したがって、eval("var i=3"); print(i);と書くと例外が発生する。
・8進数のリテラルは使えない。したがって010は10であり、8ではない。
・configurableフラグがfalseに設定されている引数や関数、変数や
その他の属性に対して、delete演算子が使えない。
・エラーの原因になりやすいwithステートメントは使えない。
構文エラーと見なされる。
・同じ名前で引数が重複しているファンクションは定義できない。
・オブジェクトは同じ名前の属性を持てない。
・argumentsとcaller変数は不変になる。
・グローバルオブジェクトへのアクセスはランタイムエラーになる。