?um/p1-90`この節は ECMAScript 言語の非規範的な概要を含む。
ECMAScript は、ホスト環境内で計算を行い、計算オブジェクトを操作するためのオブジェクト指向プログラミング言語である。ここで定義される ECMAScript は、計算的に自己完結することを意図していない。実際、この仕様には外部データの入力や計算結果の出力に関する規定はない。代わりに、ECMAScript プログラムの計算環境は、この仕様に記述されたオブジェクトやその他の機能だけでなく、特定の環境固有のオブジェクトも提供することが想定されている。それらの説明および振る舞いは、この仕様の範囲外であるが、ECMAScript プログラムからアクセス可能な特定のプロパティや呼び出し可能な関数を提供してもよいことだけが示される。
ECMAScript は元来スクリプト言語として使用されるよう設計されたが、現在では汎用プログラミング言語として広く利用されている。スクリプト言語とは、既存システムの機能を操作、カスタマイズ、および自動化するために用いられるプログラミング言語である。そのようなシステムでは、有用な機能はすでにユーザーインターフェースを通じて利用可能であり、スクリプト言語はその機能をプログラム制御に公開する仕組みである。この意味で、既存システムはオブジェクトおよび機能からなるホスト環境を提供し、それがスクリプト言語の能力を補完する。スクリプト言語は、専門的プログラマと非専門的プログラマの双方による使用を意図している。
ECMAScript は当初、Web スクリプト言語として設計され、ブラウザ内で Web ページに動きを与え、さらに Web ベースのクライアント・サーバアーキテクチャの一部としてサーバ計算を行う仕組みを提供した。現在、ECMAScript は多様なホスト環境に対して中核的なスクリプト機能を提供するために用いられている。したがって、この文書では特定のホスト環境とは切り離して中核言語を規定する。
ECMAScript の利用は単純なスクリプティングを超え、今では多くの異なる環境と規模におけるプログラミング作業の全領域で使用されている。ECMAScript の利用が拡大するにつれて、それが提供する機能と設備も拡張されてきた。ECMAScript は現在、完全な機能を備えた汎用プログラミング言語である。
ウェブブラウザは ECMAScript のクライアント側計算のためのホスト環境を提供する。これには、たとえばウィンドウ、メニュー、ポップアップ、ダイアログボックス、テキストエリア、アンカー、フレーム、履歴、クッキー、および入出力を表すオブジェクトが含まれる。さらに、ホスト環境は、フォーカスの変更、ページや画像の読み込み、アンロード、エラーや中断、選択、フォーム送信、およびマウス操作といったイベントにスクリプトコードを関連付ける手段を提供する。スクリプトコードは HTML 内に現れ、表示されるページはユーザーインターフェース要素と固定または計算によるテキストおよび画像の組合せとなる。スクリプトコードはユーザー操作に反応し、メインプログラムは不要である。
ウェブサーバは、リクエスト、クライアント、およびファイルを表すオブジェクト、ならびにデータをロックし共有する仕組みを含む、サーバ側計算のための別のホスト環境を提供する。ブラウザ側とサーバ側のスクリプティングを組み合わせることで、Web ベースのアプリケーション向けにカスタマイズされたユーザーインターフェースを提供しつつ、計算をクライアントとサーバの間で分散することが可能になる。
ECMAScript をサポートする各ウェブブラウザおよびサーバは、それぞれ独自のホスト環境を提供し、ECMAScript 実行環境を完成させる。
ECMAScript をホスト環境へ統合することを助けるために、この仕様は、特定の機能(たとえば抽象操作)の定義を、この仕様の外部の情報源に、全体または一部について委ねている。編集上、この仕様では以下の種類の委譲を区別する。
implementation とは、付録
implementation-defined 機能とは、追加の限定なしにその定義を外部情報源に委ねる機能である。この仕様は特定の振る舞いを推奨せず、適合実装はこの仕様が課す制約の範囲内で自由に任意の振る舞いを選択できる。
implementation-approximated 機能とは、理想的な振る舞いを推奨しつつ、その定義を外部情報源に委ねる機能である。適合実装はこの仕様が課す制約の範囲内で任意の振る舞いを選択できるが、理想に近づくよう努めることが推奨される。Math.exp
host とは、付録
host hook とは、外部情報源によって全体または一部が定義される抽象操作である。すべての
host-defined 機能とは、追加の限定なしにその定義を外部情報源に委ね、かつ付録
host environment とは、すべての
この仕様は、常に最も具体的な用語を使うという編集上の慣例に従う。たとえば、ある機能が
以下は ECMAScript の非形式的な概要であり、言語のすべての部分が記述されているわけではない。この概要は標準本文の一部ではない。
ECMAScript はオブジェクトベースである。すなわち、基本言語機能およびホスト機能はオブジェクトによって提供され、ECMAScript プログラムは相互に通信するオブジェクト群から成る。ECMAScript において、object は 0 個以上の property の集合であり、各 property はその利用方法を決定する attribute を持つ。たとえば、ある property の Writable attribute が
ECMAScript は、ECMAScript 実体の定義を補完する built-in object の集合を定義する。これらの built-in object には、global object、Object、Function、Boolean、Symbol、およびさまざまな Error object を含む言語の実行時意味論に不可欠な object、Math、Number、および Date を含む数値を表現および操作する object、テキスト処理 object である String と RegExp、Array と、すべての要素が特定の数値データ表現を持つ 9 種類の Typed Array を含むインデックス付き値コレクションを表す object、Map および Set object を含むキー付きコレクション、JSON object、ArrayBuffer、SharedArrayBuffer、および DataView を含む構造化データを支援する object、generator function および Promise object を含む制御抽象を支援する object、ならびに Proxy と Reflect を含む reflection object がある。
ECMAScript はまた、組込み operator の集合も定義する。ECMAScript の operator には、さまざまな単項演算、乗法演算子、加法演算子、ビット単位シフト演算子、関係演算子、等値演算子、二項ビット演算子、二項論理演算子、代入演算子、およびコンマ演算子が含まれる。
大規模な ECMAScript プログラムは、プログラムを複数の文および宣言の列に分割できるようにする module によって支えられる。各 module は、他の module から提供される必要がある使用宣言と、自身の宣言のうち他の module から利用可能なものを明示的に識別する。
ECMAScript の構文は意図的に Java の構文に似せてある。ECMAScript の構文は、使いやすいスクリプト言語として機能できるように緩やかにされている。たとえば、変数には宣言は不要であり、型は property に関連付けられず、定義された function は、その呼出しより前にテキスト上で宣言が現れる必要もない。
ECMAScript にはクラス定義のための構文が含まれているが、ECMAScript の object は、C++、Smalltalk、Java におけるそれらのように、本質的にクラスベースではない。代わりに object は、リテラル記法や、object を生成した後で property に初期値を代入してその全部または一部を初期化するコードを実行する new Date(2009, 11) は新しい Date object を生成する。new を使わずに Date() は object ではなく現在の日付と時刻の文字列表現を生成する。
クラスベースのオブジェクト指向言語では、一般に状態はインスタンスが保持し、メソッドはクラスが保持し、継承されるのは構造と振る舞いのみである。ECMAScript では、状態とメソッドは object が保持し、構造、振る舞い、および状態のすべてが継承される。
自身の prototype が持つ特定の property を直接含まないすべての object は、その property とその値を共有する。図 1 はこれを示している。
CF は new 式を用いて 5 個の object が生成されている:cf1, cf2, cf3, cf4, および cf5。これらの各 object は
ほとんどのクラスベース object 言語とは異なり、property は値を代入することによって動的に object に追加できる。すなわち
ECMAScript の object は本質的にはクラスベースではないが、
ECMAScript 言語は、この言語の利用者の中に、言語で利用可能な機能の一部の使用を制限したいと望む者がいる可能性を認識している。彼らは、安全性の観点から、エラーを起こしやすいとみなす機能を避けるため、強化されたエラーチェックを得るため、あるいはその他自身が選ぶ理由のためにそうするかもしれない。この可能性を支援するために、ECMAScript は言語の strict 変種を定義する。言語の strict 変種は、通常の ECMAScript 言語における特定の構文的・意味論的機能の一部を除外し、一部の機能の詳細な意味論を変更する。また strict 変種は、言語の非 strict 形式ではエラーと規定されていない状況においても、エラー例外を投げることで報告しなければならない追加のエラー条件を規定する。
ECMAScript の strict 変種は、一般にこの言語の strict mode と呼ばれる。ECMAScript の strict mode の選択および strict mode の構文と意味論の使用は、
この仕様に適合するためには、ECMAScript 実装は、この仕様で定義される完全な無制限 ECMAScript 言語と、ECMAScript 言語の strict 変種の両方を実装しなければならない。さらに、実装は、無制限および strict mode のソーステキスト単位を単一の複合プログラムに組み合わせることをサポートしなければならない。
この文書の目的上、以下の用語及び定義を適用する。
編集上は、節
節
節
primitive value は、言語実装の最下位レベルで直接表現されるデータである。
object は property の集合であり、単一の prototype object を持つ。prototype は
object を生成し初期化する
他の object のために共有 property を提供する object
constructor.prototype によって参照でき、object の prototype に追加された property は、継承を通じて、その prototype を共有するすべての object によって共有される。あるいは、新しい object は、組込み関数 Object.create を用いて、明示的に指定された prototype を持つように生成してもよい。
すべての object がサポートしなければならない本質的内部メソッドについて、既定の振る舞いを持つ object
1 つ以上の本質的内部メソッドについて既定の振る舞いを持たない object
意味論がこの仕様によって定義される object
ECMAScript 実装によって規定され、提供される object
標準 built-in object はこの仕様で定義される。ECMAScript 実装は、追加の種類の built-in object を規定し提供してもよい。
変数に値が代入されていないときに使用される primitive value
唯一の値が
いかなる object 値も意図的に存在しないことを表す primitive value
唯一の値が
Boolean value は
primitive value
標準 built-in Boolean
Boolean object は new 式で Boolean
0 個以上の 16 ビット符号なし整数値からなる有限順序列である primitive value
String value は
可能なすべての String value の集合
標準 built-in String
String object は new 式で String
倍精度 64 ビット二進形式
Number value は
標準 built-in Number
Number object は new 式で Number
正の無限 Number value である Number value
任意精度整数値に対応する primitive value
可能なすべての BigInt value の集合
標準 built-in BigInt
一意で、String ではない Object
可能なすべての Symbol value の集合
標準 built-in Symbol
サブルーチンとして呼び出されうる
function は、その property に加えて、呼び出されたときの振る舞いを決定する実行可能コードおよび状態を含む。function のコードは ECMAScript で書かれていてもいなくてもよい。
function である built-in object
built-in function の例には parseInt や Math.exp がある。
built-in Object や Function がある。
key(String value または Symbol value のいずれか)と値を関連付ける object の一部
property の形式に応じて、値はデータ値(primitive value、object、または
property の値である function
function が object の method として呼び出されるとき、その object はその function に
built-in function である method
標準 built-in method はこの仕様で定義される。
property の何らかの特性を定義する内部値
その object に直接含まれる property
own property ではないが、その object の prototype の property(own または inherited のいずれか)である object の property
この仕様の残りは以下のように構成される。
節
節
節
節
節