new Operatorsuper Keyword? : ), )if Statementdo-while Statementwhile Statementfor Statementfor-in, for-of, and for-await-of Statementscontinue Statementbreak Statementreturn Statementwith Statementswitch Statementthrow Statementtry Statementdebugger Statement?um/p1-90`この節は、ECMAScript言語の非規範的な概要を含みます。
ECMAScriptは、
ECMAScriptはもともとスクリプト言語として使用されるよう設計されましたが、汎用プログラミング言語として広く使用されるようになりました。スクリプト言語とは、既存のシステムの機能を操作、カスタマイズ、および自動化するために使用されるプログラミング言語です。そのようなシステムでは、有用な機能がすでにユーザーインターフェイスを通じて利用可能であり、スクリプト言語はその機能をプログラム制御に公開するための仕組みです。このようにして、既存のシステムはオブジェクトと機能の
ECMAScriptはもともと、ブラウザー内のWebページを活性化し、Webベースのクライアントサーバーアーキテクチャの一部としてサーバー計算を実行する仕組みを提供する、Webスクリプト言語として設計されました。ECMAScriptは現在、さまざまな
ECMAScriptの使用は単純なスクリプティングを超え、現在では多くの異なる環境と規模におけるプログラミング作業の全範囲に使用されています。ECMAScriptの使用が拡大するにつれて、それが提供する特徴や機能も拡大してきました。ECMAScriptは現在、十分な機能を備えた汎用プログラミング言語です。
Webブラウザーは、クライアント側計算のためのECMAScript
Webサーバーは、サーバー側計算のための異なる
ECMAScriptをサポートする各Webブラウザーおよびサーバーは、それぞれ独自の
ECMAScriptを
実装とは、Annex
implementation-definedな機能とは、さらなる限定なしに、その定義を外部ソースに委ねるものです。この仕様は特定の振る舞いについていかなる推奨も行わず、適合実装はこの仕様によって課される制約の範囲内で任意の振る舞いを自由に選択できます。
implementation-approximatedな機能とは、理想的な振る舞いを推奨しつつ、その定義を外部ソースに委ねるものです。適合実装はこの仕様によって課される制約の範囲内で任意の振る舞いを自由に選択できますが、その理想に近づくよう努力することが推奨されます。Math.exp
ホストとは、Annex
ホストフックとは、全体または一部が外部ソースによって定義される抽象操作です。すべての
host-definedな機能とは、さらなる限定なしにその定義を外部ソースに委ね、Annex
ホスト環境とは、すべての
この仕様は、常に最も具体的な用語を使用するという編集上の慣例に従います。たとえば、ある機能が
以下はECMAScriptの非公式な概要です — 言語のすべての部分が記述されているわけではありません。この概要は、標準本体の一部ではありません。
ECMAScriptはオブジェクトベースです。基本的な言語機能および
ECMAScriptは、ECMAScriptエンティティの定義を補完する組み込みオブジェクトの集合を定義します。これらの組み込みオブジェクトには、グローバルオブジェクト、Object、Function、Boolean、Symbol、およびさまざまなErrorオブジェクトを含む、言語のMath、Number、Dateを含む数値を表し操作するオブジェクト、テキスト処理オブジェクトであるStringとRegExp、Arrayおよび要素がすべて特定の数値データ表現を持つ9種類のTyped Arraysを含む値のindexed collectionsであるオブジェクト、MapおよびSetオブジェクトを含むkeyed collections、JSONオブジェクト、ArrayBuffer、SharedArrayBuffer、DataViewを含む構造化データをサポートするオブジェクト、generator functionsおよびPromiseオブジェクトを含む制御抽象化をサポートするオブジェクト、ならびにProxyとReflectを含むreflectionオブジェクトが含まれます。
ECMAScriptはまた、一連の組み込み演算子を定義します。ECMAScript演算子には、さまざまな単項演算、乗法演算子、加法演算子、ビットシフト演算子、関係演算子、等価演算子、二項ビット演算子、二項論理演算子、代入演算子、およびカンマ演算子が含まれます。
大規模なECMAScriptプログラムはモジュールによってサポートされます。モジュールにより、プログラムを複数の文および宣言の列へ分割できます。各モジュールは、自身が使用する宣言のうち他のモジュールによって提供される必要があるもの、および自身の宣言のうち他のモジュールから使用可能なものを明示的に識別します。
ECMAScriptの構文は意図的にJava構文に似ています。ECMAScriptの構文は、使いやすいスクリプト言語として機能できるよう緩やかにされています。たとえば、変数はその型を宣言する必要がなく、プロパティにも型は関連付けられず、定義された関数はそれらへの呼び出しより前にテキスト上で宣言が現れる必要もありません。
ECMAScriptにはclass定義の構文が含まれているものの、ECMAScriptオブジェクトは、C++、Smalltalk、Javaにおけるもののように根本的にclassベースではありません。その代わり、オブジェクトは、リテラル記法やコンストラクターなど、さまざまな方法で作成できます。コンストラクターはオブジェクトを作成し、その後、それらのプロパティに初期値を代入することで、その全部または一部を初期化するコードを実行します。各コンストラクターは、new Date(2009, 11)は新しいDateオブジェクトを作成します。newを使用せずにコンストラクターを呼び出すと、コンストラクターに応じた結果になります。たとえば、Date()はオブジェクトではなく現在の日付と時刻の文字列表現を生成します。
コンストラクターによって作成されたすべてのオブジェクトは、そのコンストラクターの
classベースのオブジェクト指向言語では、一般に、状態はインスタンスによって担われ、メソッドはクラスによって担われ、継承は構造と振る舞いのみのものです。ECMAScriptでは、状態とメソッドはオブジェクトによって担われ、一方で構造、振る舞い、および状態はすべて継承されます。
自分自身では、プロトタイプが含む特定のプロパティを直接含まないすべてのオブジェクトは、そのプロパティとその値を共有します。図1はこれを示しています:
CFはコンストラクター(かつオブジェクト)です。new式を使用して5つのオブジェクトが作成されています:cf1、cf2、cf3、cf4、およびcf5です。これらの各オブジェクトは、
ほとんどのclassベースのオブジェクト言語とは異なり、プロパティは値を代入することによって動的にオブジェクトへ追加できます。つまり、コンストラクターは、構築されるオブジェクトのすべてまたはいずれかのプロパティを命名したり、それらに値を代入したりする必要はありません。上の図では、CFp内のプロパティに新しい値を代入することにより、cf1、cf2、cf3、cf4、およびcf5のための新しい共有プロパティを追加できます。
ECMAScriptオブジェクトは本質的にclassベースではありませんが、コンストラクター関数、プロトタイプオブジェクト、およびメソッドの共通パターンに基づくclass風の抽象化を定義することが便利な場合がよくあります。ECMAScriptの組み込みオブジェクト自体も、そのようなclass風のパターンに従います。ECMAScript 2015以降、ECMAScript言語には構文上のclass定義が含まれ、プログラマーは組み込みオブジェクトで使用される同じclass風抽象化パターンに適合するオブジェクトを簡潔に定義できます。
ECMAScript言語は、この言語の一部のユーザーが、言語で利用可能な一部の機能の使用を制限したいと望む可能性を認識しています。彼らは、セキュリティの利益のため、自分たちがエラーを起こしやすいと考える機能を避けるため、強化されたエラーチェックを得るため、またはその他の自ら選ぶ理由のために、そうするかもしれません。この可能性をサポートするため、ECMAScriptは言語のstrictバリアントを定義します。言語のstrictバリアントは、通常のECMAScript言語の特定の構文的および意味的機能を除外し、一部の機能の詳細な意味論を変更します。strictバリアントはまた、非strict形式の言語ではエラーとして指定されていない状況で、エラー例外をthrowすることによって報告されなければならない追加のエラー条件を指定します。
ECMAScriptのstrictバリアントは、一般に言語のstrict modeと呼ばれます。strict modeの選択、およびECMAScriptのstrict mode構文と意味論の使用は、
この仕様に適合するため、ECMAScript実装は、この仕様で定義される完全で無制限なECMAScript言語とECMAScript言語のstrictバリアントの双方を実装しなければなりません。さらに、実装は、無制限およびstrict modeのsource text unitを単一の複合プログラムへ組み合わせることをサポートしなければなりません。
この文書の目的のため、以下の用語および定義が適用されます。
編集上、節
節
節
primitive valueは、言語実装の最下位レベルで直接表現されるデータです。
オブジェクトはプロパティの集合であり、単一のプロトタイプオブジェクトを持ちます。プロトタイプは
オブジェクトを作成し初期化する
コンストラクターの
他のオブジェクトに共有プロパティを提供するオブジェクト
コンストラクターがオブジェクトを作成すると、そのオブジェクトはプロパティ参照を解決する目的で、コンストラクターのconstructor.prototypeによって参照でき、オブジェクトのプロトタイプに追加されたプロパティは、継承を通じて、そのプロトタイプを共有するすべてのオブジェクトによって共有されます。あるいは、Object.create組み込み関数を使用して、明示的に指定されたプロトタイプを持つ新しいオブジェクトを作成することもできます。
すべてのオブジェクトがサポートしなければならないessential internal methodsについて、デフォルトの振る舞いを持つオブジェクト
essential internal methodsの1つ以上について、デフォルトの振る舞いを持たないオブジェクト
その意味論がこの仕様によって定義されるオブジェクト
ECMAScript実装によって指定され提供されるオブジェクト
標準built-in objectsはこの仕様で定義されます。ECMAScript実装は、追加の種類のbuilt-in objectsを指定し提供しても構いません。
変数に値が代入されていないときに使用されるprimitive value
その唯一の値が
任意のオブジェクト値の意図的な不在を表すprimitive value
その唯一の値が
Boolean値は
primitive valuesである
標準組み込みBooleanコンストラクターのインスタンスである
Boolean objectは、new式でBooleanコンストラクターを使用し、引数としてBoolean値を供給することで作成されます。結果のオブジェクトは、その値がBoolean値であるinternal slotを持ちます。Boolean objectはBoolean値へ強制変換できます。
0個以上の16ビット符号なし整数値の有限順序列であるprimitive value
String valueは
すべての可能なString valuesの集合
標準組み込みStringコンストラクターのインスタンスである
String objectは、new式でStringコンストラクターを使用し、引数としてString値を供給することで作成されます。結果のオブジェクトは、その値がString値であるinternal slotを持ちます。String objectは、Stringコンストラクターを関数として呼び出すことでString値へ強制変換できます(
倍精度64ビットバイナリ形式の
Number valueは
標準組み込みNumberコンストラクターのインスタンスである
Number objectは、new式でNumberコンストラクターを使用し、引数としてNumber値を供給することで作成されます。結果のオブジェクトは、その値がNumber値であるinternal slotを持ちます。Number objectは、Numberコンストラクターを関数として呼び出すことでNumber値へ強制変換できます(
正の無限Number値であるNumber value
任意精度整数値に対応するprimitive value
すべての可能なBigInt valuesの集合
標準組み込みBigIntコンストラクターのインスタンスである
一意で非StringのObject
すべての可能なSymbol valuesの集合
標準組み込みSymbolコンストラクターのインスタンスである
サブルーチンとして呼び出され得る
そのプロパティに加えて、関数は呼び出されたときにどのように振る舞うかを決定する実行可能コードと状態を含みます。関数のコードはECMAScriptで書かれている場合も、そうでない場合もあります。
関数であるbuilt-in object
built-in functionsの例には、parseIntおよびMath.expが含まれます。
コンストラクターであるbuilt-in function
built-in ObjectおよびFunctionが含まれます。
key(String値またはSymbol値のいずれか)と値を関連付けるオブジェクトの一部
プロパティの形式によって、値はデータ値(primitive value、オブジェクト、または
プロパティの値である関数
関数がオブジェクトのメソッドとして呼び出されると、そのオブジェクトは関数にその
built-in functionであるメソッド
標準built-in methodsはこの仕様で定義されます。
プロパティの何らかの特性を定義する内部値
そのオブジェクトによって直接含まれるプロパティ
own propertyではないが、そのオブジェクトのプロトタイプのプロパティ(ownまたはinheritedのいずれか)であるオブジェクトのプロパティ
この仕様の残りは、以下のように構成されます:
Clause
Clauses
Clauses
Clauses
Clause