本頁の目次 目次

4 概要 (Overview)

このセクションは、 ECMAScript 言語の非公式な概要で構成する。

ECMAScript は、ホスト環境下での演算実行および演算的オブジェクト操作のための、オブジェクト指向プログラミング言語である。ここで述べる ECMAScript は演算的にそれ自身で十分なものを意図したものではない; 実に、外部データの入力及び演算結果の出力のためには、本仕様は何も提供しない。代わりに、 ECMAScript プログラムの演算環境は、本仕様内に述べられるオブジェクトとその他の設備の提供だけでなく、 ECMAScript プログラムからアクセス可能な個々のプロパティと呼び出し可能な個々の関数の提供してよいと示すことを除いて本仕様のスコープ上に説明と振る舞いを持つ、個々の環境指定のホストオブジェクトの提供が期待される。

スクリプティング言語は、既存のシステムの設備を操作、カスタマイズ、自動化に用いられるプログラミング言語である。そのようなシステムでは、ユーザーインターフェイスを通して既に有用な機能性が利用可能で、スクリプティング言語はプログラム制御への機能性の露出のためのメカニズムである。この方法で、既存のシステムは、スクリプティング言語の許容性を満たすオブジェクトと設備のホスト環境の提供に話す。スクリプティング言語は専門的また非専門的プログラマの両方による利用を意図している。非専門的プログラマに順応するために、言語の指針はあまり厳格ではなくてもよい。

ECMAScript は本来、ブラウザ内において Web ページを活気付け、そして Web ベースのクライアント-サーバアーキテクチャの一部としてサーバー演算を実行するメカニズムを提供する、 Web スクリプティング言語として設計された。 ECMAScript は様々なホスト環境にコアなスクリプティング機能を提供可能であり、それゆえ本仕様では、個々のホスト環境から切り離したコアなスクリプティング言語が規定される。

ECMAScript の機能には、他のプログラミング言語で使われるものに類似した部分もある; とりわけ、次に述べる JavaTM と Self である:

4.1 Web スクリプティング (Web Scripting)

ウェブブラウザは、例えばウィンドウ、メニュー、ポップアップ、ダイアログボックス、テキストエリア、アンカー、フレーム、履歴、クッキー、入出力を表すオブジェクトを含む、クライアントサイド演算のためのホスト環境を提供する。さらにホスト環境は、フォーカス、ページと画像の読み込み、遷移、エラー及び中止、選択、フォーム送信、マウス行動の変更のようなイベントにスクリプティングコードを取り付ける手段を提供する。スクリプティングコードは HTML 内に出現し、そして表示されたページは、ユーザーインターフェイス要素と固定され演算されたテキストと画像の結合体になる。スクリプティングコードはユーザの相互作用にすぐ反応し、メインプログラムには必要ない。

ウェブサーバはサーバサイド演算のための異なるホスト環境を提供し、リクエスト、クライアント、ファイルを表すオブジェクトと、ロックとデータ共有のメカニズムを含む。ブラウザサイド、サーバサイドのスクリプティングを共に使用することで、Web ベースアプリケーションにカスタマイズされたユーザーインターフェイスを提供すると同時に、クライアントとサーバ間の演算の分配を可能にする。

ECMAScript をサポートする Web ブラウザ及びサーバはそれぞれ、 ECMAScript 実行環境を完成する自分自身のホスト環境を提供する。

4.2 言語の概要 (Language Overview)

下記は ECMAScript の非公式な概要である -- 言語のすべての部分が記述されるわけではない。この概要は厳密には標準の一部ではない。

ECMAScript はオブジェクトベースである: 基礎的な言語およびホスト設備はオブジェクトによって提供される。また、 ECMAScript プログラムは、通信するオブジェクトの群である。 ECMAScript オブジェクト は、序列のない プロパティ の集合体で、それぞれのプロパティが、その利用されうる方法を決定する 0 個以上の 属性 を持つ -- 例えば、プロパティの ReadOnly 属性が true にセットされるときは、そのプロパティの値を変更しようとする、実行される ECMAScript コードによるどんな試行も効果を持たない。プロパティは、他のオブジェクトや プリミティブ値メソッド を保持するコンテナである。プリミティブな値は、次の組み込み 型: Undefined, Null, Boolean, Number, String の内のひとつの仲間である; オブジェクトは残りの組み込み 型 Object の仲間である; メソッドはプロパティ経由でオブジェクトに関連づけられた関数\である。

ECMAScript は 組み込みオブジェクト (built-in object) の集合を定義し、これは ECMAScript 実体の定義を完成する。これらの組み込みオブジェクトは、Global オブジェクト、 Object オブジェクト、 Function オブジェクト、 Array オブジェクト、 String オブジェクト Boolean オブジェクト、 Number オブジェクト、 Math オブジェクト、 Date オブジェクト、 RegExp オブジェクト、そして Error オブジェクト、Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError を含む。

ECMAScript は組み込みの演算子のセットも定義し、厳密には、それらは関数やメソッドではないかもしれない。ECMAScript 演算子は、さまざまな単項演算(unary operations), 乗除演算子(multiplicative operators), 加減演算子(additive operators), ビットシフト演算子(bitwise shift operators), 関係演算子(relational operators), 等価演算子(equality operators), ビット演算子(binary bitwise operators), 論理演算子(binary logical operators), 代入演算子(assignment operators), カンマ演算子(comma operator) を含む。

ECMAScript 構文は、意図的に Java 構文と似ている。 ECMAScript 構文は緩やかで、容易に利用できるスクリプティング言語としての提供を可能にしている。例えば、変数に型宣言は要求されず、プロパティに関連する型も要求されず、定義される関数は、テキスト的にそれが呼び出される前に宣言を出現させることを要求されない。

4.2.1 オブジェクト (Objects)

ECMAScript は、C++、Smalltalk あるいは Java のような厳密なクラスを持たない。だが、コードの実行によりオブジェクトを生成するコンストラクタをサポートし、このコードはオブジェクトに記憶領域を確保し、オブジェクトの全て又は一部をプロパティへの初期値代入によって初期化する。コンストラクタは全てオブジェクトであるが、しかし、すべてのオブジェクトがコンストラクタということではない。コンストラクタはそれぞれ prototype プロパティを持ち、プロトタイプベースの継承および共有プロパティの実装に使用される。オブジェクトは new 式中でのコンストラクタ使用により生成される; 例えば、new String("A String") は新しい String オブジェクトを生成する。 new を使用しないコンストラクタの呼出しの結果は、コンストラクタに依存する。例えば、 String("A String") は、オブジェクトではなくプリミティブな文字列を生成する。

ECMAScript はプロトタイプベースの継承をサポートする。コンストラクタは皆関連づけられたプロトタイプを持ち、また、そのコンストラクタに作成されたオブジェクトは皆、そのコンストラクタに関連づけられたプロトタイプ (オブジェクトのプロトタイプと呼ばれる) に暗黙の参照がある。プロトタイプは、更にそのプロトタイプに null 以外の暗黙の参照があるかもしれない(以下同様である); これはプロトタイプチェーン (prototype chain) と呼ばれる。オブジェクトのプロパティへが参照される場合、その参照は、プロトタイプチェーン中でその名前のプロパティを持つ最初のオブジェクトのプロパティへの参照である。言いかえれば、まず直接指定されたオブジェクトが、そのプロパティの有無を検査される; そのオブジェクトが指定されたプロパティを持つ場合、それが参照するプロパティである; そのオブジェクトが指定のプロパティを持たない場合、そのオブジェクトのプロトタイプが次に検査される; 以下同様に続く。

クラスベースのオブジェクト指向の言語では、一般に、状態(state) がインスタンスによって運ばれ、メソッドはクラスによって運ばれ、継承は構造(strucutuer) と振る舞い(behaviour) にのみ存在する。ECMAScriptでは、状態およびメソッドがオブジェクトによって運ばれ、構造、振る舞い、状態がすべて継承される。

プロトタイプが持つプロパティを直に持たないオブジェクトはすべて、プロパティとその値を共有する。次の図がこれを例示する:

  • プロトタイプへのリンク

CF はコンストラクタである(オブジェクトでもある)。5 つのオブジェクト: cf1, cf2, cf3, cf4, cf5 が new 式の使用により作成されている。これらのオブジェクトの各々は、q1 と q2 というプロパティを持つ。破線は暗黙のプロトタイプ関係を表わす; したがって、例えば、cf3 のプロトタイプは CFp である。コンストラクタ(CF) は、それ自身で P1 および P2 と名づけられた 2 つのプロパティを持つ(それは、CFp, cf1, cf2, cf3, cf4, cf5 からは見えない)。CFp の CFP1 というプロパティは、 CFp の暗黙のプロトタイプチェーン上で見つかる q1, q2, CFP1 という名でない任意のプロパティであり、cf1, cf2, cf3, cf4, cf5 に共有される( CF に共有されるのではない)。暗黙のプロトタイプ・リンクが CF と CFp の間にないことに注目しなさい。

クラスベースのオブジェクト言語と異なり、プロパティは値の代入によって、オブジェクトに動的に追加できる。すなわち、コンストラクタは、構築されるオブジェクトの全てまたは任意のプロパティの命名や値の代入を要求されない。上図では、CFp 内でプロパティに新たな値を代入することで、cf1, cf2, cf3, cf4, cf5 に新しい共有プロパティを追加できる。

4.3 定義 (Definitions)

次は ECMAScript に関連する鍵となる術語の非公式な定義である。

[訳注: この仕様では "instance" という語が散見するが、 ECMAScript はプロトタイプベース言語であり、この語はクラスベース言語における "instance" のような技術的意味を持たない。現に仕様内にこの語に関する定義は公式非公式含めて見つからず、日常語としての「実例、実体、具体的なもの」としての意味合いで用いられているとも考えられる。]

4.3.1 型 (Type)

型 (type) とはデータ値の集合である。

4.3.2 プリミティブ値 (Primitive Value)

プリミティブ値 (primitive value) は Undefined, Null, Boolean, Number, String 型のうちの一つの構成要素である。プリミティブ値は言語実装の最低レベルにおいて直接表されるデータである。

4.3.3 オブジェクト (Object)

オブジェクトは Object 型の構成要素である。序列のないプロパティの集合体で、それぞれのプロパティがプリミティブ値やオブジェクト、関数を含む。オブジェクトのプロパティに格納された関数はメソッドと呼ばれる。

4.3.4 コンストラクタ (Constructor)

コンストラクタとは、オブジェクトを生成し初期化する Function オブジェクトのことである。各コンストラクタは関連する prototype オブジェクトを持ち、継承と共有プロパティの実装に用いられる。

4.3.5 プロトタイプ (Prototype)

プロトタイプはオブジェクトであり、ECMAScript 中では、構造(structure), 状態(state), 振る舞い(behaviour) の継承に用いられる。コンストラクタがオブジェクトを生成するとき、プロパティの参照を解決する目的で、そのオブジェクトは暗黙にコンストラクタに関連するプロトタイプを参照する。コンストラクタに関連するプロトタイプはプログラム式 constructor.prototype で参照され、オブジェクトのプロトタイプに追加されたプロパティは、継承を通して、そのプロトタイプを共有する全オブジェクトによって共有される。

4.3.6 ネイティブオブジェクト (Native Object)

Native オブジェクトは、 ECMAScript 実装によって提供される任意のオブジェクトで、ホスト環境に依存しない。標準 Native オブジェクトは本仕様中で定義される。Native オブジェクトの一部は Built-in(組み込み) である。他のものは ECMAScript プログラムの実行行程の間に構築されるだろう。

4.3.7 組み込みオブジェクト (Built-in Object)

Built-in オブジェクトは ECMAScript 実装によって提供される任意のオブジェクトであり、ECMAScript プログラムの実行の開始時に存在するホスト環境に依存しない。標準 Built-in オブジェクトは本仕様中に定義され、ECMAScript 実装は他を定義してもよい。全 Built-in オブジェクトは Native オブジェクトである。

4.3.8 ホストオブジェクト (Host Object)

Host オブジェクトは ECMAScript の実行環境を満たすためにホスト環境によって提供される任意のオブジェクトである。Native でない任意のオブジェクトは Host オブジェクトである。

4.3.9 undefined 値 (Undefined Value)

undefined 値は、プリミティブ値であり、変数に値が代入されていないときに用いられる。

4.3.10 Undefined 型 (Undefined Type)

Undefined 型は、厳密には undefined と呼ばれるひとつの値を取る。

4.3.11 null 値 (Null Value)

null 値は、プリミティブな値であり、ヌル、空(empty)、存在しない参照を表す。

4.3.12 Null 型 (Null Type)

Null 型は、厳密には null と呼ばれるひとつの値を取る。

4.3.13 真偽値 (Boolean Value)

真偽値は Boolean 型の元 (member:集合を構成するもの) で、一意的な二つの値、 true と false の一方である。

4.3.14 Boolean 型 (Boolean Type)

Boorean 型は論理的実体を表し、厳密には二つの一意的な値で構成される。一方は true と呼ばれ、他方は false と呼ばれる。

4.3.15 Boolean オブジェクト (Boolean Object)

Boolean オブジェクトは Object 型の元で、組込み Boolean オブジェクトのインスタンスである。つまり、 Boolean オブジェクトは、 new 式内で引数にブーリアンを渡した Boolean コンストラクタを用いて作成される。結果のオブジェクトはブーリアンである暗黙の(無名の)プロパティを持つ。 Boolean オブジェクトはブーリアン値に強制される。

4.3.16 文字列値 (String Value)

文字列値は String 型の元で、0 以上の 16 ビット符号なし整数値による有限の順序あるシーケンスである。

NOTE 各値は通常単一の UTF-16 テキストの 16 ビット単位をあらわすが、言語はそれらが 16 ビット符号なし整数であること以外の制限また要求を値上に設置しない。

4.3.17 String 型 (String Type)

String 型はすべての文字列値の集合である。

4.3.18 String オブジェクト (String Object)

String オブジェクトは Object 型の元で、組込み String オブジェクトのインスタンスである。つまり、String オブジェクトは new 式内で引数として文字列を供給する String コンストラクタを用いて生成される。結果のオブジェクトは文字列である暗黙の(無名の)プロパティを持つ。 String コンストラクタの関数としての呼び出しにより、 String オブジェクトは文字列値に強制される。

4.3.19 数値 (Number Value)

数値は Number 型の元で、数を直接表現する。

4.3.20 Number 型 (Number Type)

Number 型は数を表す値の集合である。 ECMAScript において、値の集合は、特殊な "Not-a-Number" (NaN) 値、正の無限大、負の無限大を含めた倍精度64ビット形式 IEEE 754 値である。

4.3.21 Number オブジェクト (Number Object)

Number オブジェクトは Object 型の元で、組込み Number オブジェクトのインスタンスである。つまり、 Number オブジェクトは new 式において Number コンストラクタに引数として数を渡して生成される。結果のオブジェクトは数字である暗黙の (無名の) プロパティを持つ。 Number オブジェクトは関数としての Number コンストラクタ呼び出し (セクション 15.7.1) によって数値に矯正できる。

4.3.22 Infinity

プリミティブ値 Infinity は正の無限大をあらわす。この値は Number 型の元である。

4.3.23 NaN

プリミティブ値 NaN は、 IEEE 標準 "Not-a-Number" 値のセットあらわす。この値は Number 型の元である。

Page Contents

Issued: / Revised: / All rights reserved. © 2002-2016 TAKI