X 3060 : 2000 (ISO/IEC 16262 : 1998)
(1)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
まえがき
この規格は,工業標準化法に基づいて,日本工業標準調査会の審議を経て,通商産業大臣が制定した日
本工業規格である。
JIS X 3060には,次に示す附属書がある。
附属書1(参考) ECMAScript言語の概説
附属書2(参考) ISO/IEC 16262 : 1998 Information technology−ECMAScript language specification
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
日本工業規格 JIS
X 3060 : 2000
(ISO/IEC 16262 : 1998)
ECMAScript言語
Information technology−
ECMAScript language specification
序文 この規格は,1998年に発行されたISO/IEC 16262, Information technology−ECMAScript language
specificationについて,技術的内容を変更することなく日本工業規格として採用するために作成されたもの
であり,1.〜3.については原国際規格の同項目を全文翻訳し,4.以降については,それぞれ原国際規格の同
項目の内容を引用するものとした。ただし,原国際規格の4.は,“規定の一部ではない。”と原国際規格で
明記されているが,解説として有用なので特に全文翻訳し,附属書1(参考)として添付した。
1. 適用範囲 この規格は,ECMAScript言語を規定する。
2. 適合性 ECMAScriptに適合する実装は,この規格で規定する,型,値,オブジェクト,特性,関数
及びプログラム構文のすべてを提供しなければならない。
この規格に適合する実装は,UnicodeTM標準の第2.0版に適合する文字符号,又はJIS X 0221が実装水準
3の2オクテットBMP形式として規定する文字符号を,解釈できなければならない。実装が,採用する文
字集合として,JIS X 0221の部分集合を特に指定しなかった場合は,BMP部分集合である部分集合用図形
文字の組300が指定されているものとする。
ECMAScriptに適合する実装は,この規格で規定する以外の付加的な型,値,オブジェクト,特性及び
関数を提供してもよい。特に,ECMAScriptに適合する実装は,この規格で規定しない特性及びその値を,
この規格で規定するオブジェクトに対して提供してもよい。
ECMAScriptに適合する実装は,この規格で規定しないプログラム構文を提供してもよい。特に,
ECMAScriptに適合する実装は,この規格の7.4.3に挙げる“将来使用する予約語”を使用するプログラム
構文を提供してもよい。
3. 引用規格 次に掲げる規格は,この規格に引用されることによって,この規格の一部を構成する。こ
れらの引用規格のうちで,発行年を付記してあるものは,記載の年の版だけがこの規格の規定を構成する
ものであって,その後の改正版・追補には適用しない。発行年を付記していない引用規格は,追補を含む
その最新版を適用する。
−JIS X 0201 7ビット及び8ビットの情報交換用符号化文字集合
備考 ISO/IEC 646 : 1991, Information technology−ISO 7-bit coded character set for information
interchangeに,JIS X 0201が整合している。
−JIS X 0221 国際符号化文字集合 (UCS) −第1部 体系及び基本多言語面
2
X 3060 : 2000 (ISO/IEC 16262 : 1998)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
備考 ISO/IEC 10646-1 : 1993, Information Technology−Universal Multiple−Octet Coded Character Set
(UCS) −Part 1 : Architecture and Basic Multilingual Planeが,JIS X 0221と一致している。
−JIS X 3010 プログラム言語C
備考 ISO/IEC 9899 : 1990, Programming languages−Cが,JIS X 3010と一致している。
−ANSI/IEEE Std 754-1985, IEEE Standard for Binary Floating−Point Arithmetic. Institute of Electrical and
Electronics Engineers, New York (1985).
−Unicode Inc. (1996), The UnicodeTM Standard, Version 2.0. ISBN : 0-201-48345-9, Addison−Wesley
Publishing Co., Menlo Park, California.
4. 概要 ISO/IEC 16262 : 1998の4.Overviewによる。
5. 記法 ISO/IEC 16262 : 1998の5.Notational Conventionsによる。
6. ソーステキスト ISO/IEC 16262 : 1998の6.Source Textによる。
7. 字句 ISO/IEC 16262 : 1998の7.Lexical Conventionsによる。
8. 型 ISO/IEC 16262 : 1998の8.Typesによる。
9. 型変換 ISO/IEC 16262 : 1998の9.Type Conversionによる。
10. 実行文脈 ISO/IEC 16262 : 1998の10.Execution Contextsによる。
11. 式 ISO/IEC 16262 : 1998の11.Expressionsによる。
12. 文 ISO/IEC 16262 : 1998の12.Statementsによる。
13. 関数定義 ISO/IEC 16262 : 1998の13.Function Definitionによる。
14. プログラム ISO/IEC 16262 : 1998の14.Programによる。
15. 標準固有オブジェクト ISO/IEC 16262 : 1998の15.Native ECMAScript objectsによる。
16. 誤り ISO/IEC 16262 : 1998の16.Errorsによる。
3
X 3060 : 2000 (ISO/IEC 16262 : 1998)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
附属書1(参考) ECMAScript言語の概説
この附属書は,原国際規格ISO/IEC 16262 : 1998, Information technology−ECMAScript language
specificationの“規定の一部ではない。”と明記された“4.Overview”を,ECMAScriptの概要理解のために,
参考として完全翻訳したものであって,規定の一部ではない。
1. 概観 ECMAScriptは,ホスト環境の中で,処理を行い,処理オブジェクトを操作するためのオブジ
ェクト指向言語である。この規格で規定するECMAScriptは,それ自体で処理が完結することを意図して
いない。実際,この規格には,外部データの入力及び処理結果の出力についての規定が存在しない。その
代わりに,ECMAScriptプログラムの処理環境が,この規格が規定するオブジェクト及び種々の機能に加
えて,その環境に固有のホストオブジェクトを提供することになっている。ホストオブジェクトは,この
規格の規定対象外ではあるが,ECMAScriptプログラムから扱える幾つかの特性と呼出し可能な幾つかの
関数とを提供することになる。
スクリプト言語とは,既存のシステムがもつ機能を操作し,調整し,自動化するためのプログラム言語
を指す。このようなシステムでは,多くの機能がユーザインタフェースとして用意されていて,それらの
機能をプログラム制御するための機構としてスクリプト言語は動作する。この意味で,既存のシステムは,
オブジェクト及び機能を与えるホスト環境となって,スクリプト言語の能力を補完する。スクリプト言語
は,専門のプログラマが使うだけでなく,専門ではないプログラマも使うことを想定しているので,格式
張らない形が幾つも取り入れてある。
ECMAScriptは,もともとウェブ用のスクリプト言語として設計されたもので,ウェブページのブラウ
ザに能動性を与える機能,及びウェブを用いたクライアントサーバ構成でのサーバ処理を行う機能をもつ。
ECMAScriptは,様々なホスト環境に対してのスクリプト能力をもっているので,この規格では,核とな
るスクリプト言語を特定のホスト環境に依存しない形で規定する。
ECMAScriptの幾つかの機能は,他のプログラム言語の機能に類似する。特に,JavaTM言語及びSelf言
語に類似する。これらの言語は,次に示す文献に詳しい。
− Gosling, James, Bill Joy and Guy Steele. The Java Language Specification. Addison Wesley Publishing Co.,
1996.
− Ungar, David, and Smith, Randall B. Self: The Power of Simplicity. OOPSLA'87 Conference Proceedings,
pp.227-241, Orlando, FL, October, 1987.
2. ウェブのスクリプト ウェブブラウザは,クライアント側でのECMAScriptのホスト環境となり,ウ
ィンドウ,メニュー,ポップアップ,対話ボックス,テキスト領域,アンカ,フレーム,履歴,クッキー,
入出力などを提供する。このホスト環境は,さらに,注目対象の移動,ページ及び画像のロード又はアン
ロード,誤り及び異常終了,選択,フォーム送信,マウス動作などの事象に,スクリプトプログラムを連
動させる手段も提供する。スクリプトプログラムをHTMLページの中に書くことによって,ユーザインタ
フェース要素に加え,固定したテキスト及び画像だけでなく,処理を加えたテキスト及び画像も含むペー
ジを表示できる。こうしたスクリプトプログラムは,ユーザからの反応に呼応して動作するので,いわゆ
る主プログラムを必要としない。
ウェブサーバは,サーバ側でのECMAScriptのクライアント側とは別のホスト環境となり,要求,クラ
4
X 3060 : 2000 (ISO/IEC 16262 : 1998)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
イアント,ファイルなどを表すオブジェクトを提供し,データを共有したりロックしたりするための機能
を提供する。クライアント側のスクリプトもサーバ側のスクリプトも用いることで,クライアントとサー
バとにまたがった分散処理を行いながら,ウェブに基づく応用システムでの調整されたユーザインタフェ
ースが提供できるようになる。
ECMAScript環境を提供するウェブブラウザ及びサーバは,それぞれに固有のホスト環境を提供するこ
とで,ECMAScript実行環境を補完する。
3. 言語の概説 ECMAScriptは,オブジェクトに基づく。すなわち,基本言語機能及びホスト機能をオ
ブジェクトが提供するので,ECMAScriptプログラムは,通信し合うオブジェクトの集まりの形をとる。
ECMAScriptオブジェクトは,名前をもった特性の集まりをいう。各特性は,その使用方法を決定する0
個以上の属性をもつ。例えば,特性に対するReadOnly(読込み専用)属性がtrue(真)に設定されている
場合,実行中のECMAScriptプログラムがその特性の値を変更しようとしても変更が生じない。特性は,
ほかのオブジェクト,基本値又はメソッドを入れておく容器として機能する。基本値とは,幾つかの組込
み型の要素をいう。基本値を要素とする組込み型に,Undefined, Null, Boolean, Number及びStringがある。
組込み型には,もう一つ,Objectがあり,オブジェクトは,すべて,その要素となる。メソッドとは,特
性に入っている関数をいう。
ECMAScriptには,一群の組込みオブジェクトが用意してある。これらは,ECMAScriptの実体を定義付
ける性格をもつ。組込みオブジェクトには,Globalオブジェクト,Objectオブジェクト,Functionオブジ
ェクト,Arrayオブジェクト,Stringオブジェクト,Booleanオブジェクト,Numberオブジェクト,Math
オブジェクト及びDateオブジェクトがある。
ECMAScriptには,演算子が組み込んである。演算子は,厳密にいうと,関数でもメソッドでもない。
ECMAScript演算子には,単項演算子,乗法演算子,加法演算子,ビット単位のシフト演算子,関係演算
子,等価演算子,ビット単位演算子,論理演算子,代入演算子及びコンマ演算子がある。
ECMAScript構文は,意図的にJava構文に似せてある。しかしながら,規則をゆるめ,スクリプト言語
として簡易に使える工夫が施してある。例えば,変数の型を宣言する必要はないし,特性を型付ける必要
もない。ユーザ定義関数にも,宣言の位置より後ろでないと呼び出してはならないという縛りがない。
3.1
オブジェクト ECMAScriptには,C++,Smalltalk,Javaなどとは違って,本来のクラスがない。
代わりに,オブジェクトを生成するためのコンストラクタ(constructor,構築子ともいう。)を置く。コン
ストラクタは,関数であり,それを実行することで,オブジェクトヘの記憶域の割付けとオブジェクトの
初期設定とが生じる。オブジェクトの初期設定とは,オブジェクトの特性の全部又は一部に初期値を与え
ることをいう。コンストラクタを含めて,すべての関数はオブジェクトだが,すべてのオブジェクトがコ
ンストラクタというわけではない。すべてのコンストラクタは,特性Prototypeをもつ。この特性は,プロ
トタイプに基づく継承及び共有特性を実装するために用いる。オブジェクトは,コンストラクタを用いた
new式によって生成する。例えば,new String (“A String”) は,新しい文字列オブジェクトを生成する。
new式を使わずにコンストラクタを呼び出した場合の結果は,コンストラクタに依存する。例えば,String
(“A String”) は,基本値の文字列を生成し,オブジェクトを生成しない。
ECMAScriptでは,プロトタイプに基づく継承が行われる。すべてのコンストラクタは付随するプロト
タイプをもつ。コンストラクタによって生成されたオブジェクトは,すべて,そのコンストラクタに付随
するプロトタイプ(これをオブジェクトのプロトタイプという。)への暗黙参照をもつ。さらに,そのプロ
トタイプが,nullではない暗黙参照をもち,それ自体のプロトタイプを指していることがある。この関係
5
X 3060 : 2000 (ISO/IEC 16262 : 1998)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
の繰返しを,プロトタイプ連鎖という。オブジェクトに対する特性の参照は,プロトタイプ連鎖の中で最
初に現れる,その名前の特性をもつオブジェクトのその特性への参照となる。すなわち,まず,直接に指
定されているオブジェクトについて,その特性が調べられる。そのオブジェクトがその名前の特性をもっ
ている場合は,その特性が参照される。オブジェクトがその名前の特性をもたない場合には,次にそのオ
ブジェクトのプロトタイプが調べられる。以下同様に調べられていく。
クラスに基づくオブジェクト指向言語では,一般に,状態はインスタンスが保持し,メソッドはクラス
が保持しているので,構造と振舞いとだけが継承の対象となる。ECMAScriptでは,状態もメソッドもオ
ブジェクトが保持していて,構造,振舞い及び状態のすべてが継承の対象となる。
プロトタイプどうしは,プロトタイプがもつ特性について,それと同じ特性を自らもっているのでない
限り,それらの特性及びその値を共有することになる。附属書1図1にこの状況を例示する。
附属書1図1 ECMAScriptの継承関係
CFは,コンストラクタとする。これは,オブジェクトでもある。CF1,CF2,CF3,CF4及びCF5の五
つのオブジェクトをnew式で生成したとする。これらオブジェクトの各々は,q1及びq2という名前の付
いた特性をもつ。破線は,プロトタイプの暗黙参照を示す。例えば,CF3のプロトタイプは,CFpとなる。
コンストラクタCFは,それ自体,p1及びp2という名前の付いた二つの特性をもつ。これらの特性は,
CFp,CF1,CF2,CF3,CF4及びCF5には見えない。CFpの中のCFp1という名前の付いた特性は,CF1,
CF2,CF3,CF4及びCF5によって共有される。同様に,CFpの暗黙プロトタイプ連鎖の中に存在する,
名前がq1,q2及びCFp1ではない任意の特性も共有される。CFpとCFとの間にはプロトタイプの暗黙参
照リンクが存在しないことに注意すること。
クラスに基づくオブジェクト言語と違って,オブジェクトには,動的に特性を追加することができる。
それには,その特性に値を代入するだけでよい。すなわち,コンストラクタがオブジェクトを生成する際
6
X 3060 : 2000 (ISO/IEC 16262 : 1998)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
に,オブジェクトのすべての特性に名前を付けたり,値を代入したりしておく必要はない。附属書1図1
では,CFpの特性に新しい値を割り当てることで,CF1,CF2,CF3,CF4及びCF5に対する新しい共有特
性を追加できる。
4. 定義 この附属書で用いる主な用語の定義の大略は,次のとおりとする。
4.1
型 (type) データ値の集合。
4.2
基本値 (primitive value) Undefined型,Null型,Boolean型,Number型又はString型の要素。基本
値は,処理系の最下層で直接にデータ値を表現する。
4.3
オブジェクト (object) Object型の要素。個々のオブジェクトは,特性の集まりからなる。特性は,
基本値,オブジェクト又は関数を保持する。オブジェクトの特性の中で関数を保持する特性を,そのオブ
ジェクトのメソッドという。
4.4
コンストラクタ,構築子 (constructor) オブジェクトを生成し初期設定する関数。コンストラクタ
は,付随するプロトタイプオブジェクトをもつ。プロトタイプは,継承及び特性共有を実装するのに用い
る。
4.5
プロトタイプ (prototype) ECMAScriptにおける,構造,状態及び振舞いの継承を実装する際に用
いるオブジェクト。オブジェクトは,そのオブジェクトを生成したコンストラクタの付随プロトタイプへ
の暗黙参照をもつ。
この暗黙参照は,特性の参照の解決に用いる。コンストラクタcの付随プロトタイプは,プログラムの
うえでは,c. prototypeと書いて参照する。オブジェクトのプロトタイプに特性を追加すると,継承の仕組
みによって,同じプロトタイプをもつオブジェクトが共有することになる。
4.6
固有オブジェクト (native object) ECMAScriptの処理系がホスト環境によらず提供するオブジェク
ト。標準の固有オブジェクトは,この規格で規定する。固有オブジェクトには,組込みオブジェクトもあ
れば,ECMAScriptの実行中にコンストラクタを使って生成されるオブジェクトもある。
4.7
組込みオブジェクト (built-in object) ECMAScriptの処理系がホスト環境によらず提供し,
ECMAScriptプログラムの実行開始時点に存在しているオブジェクト。標準の組込みオブジェクトは,こ
の規格で規定する。ECMAScriptの処理系は,その他の組込みオブジェクトを定義してもよい。すべての
組込みオブジェクトは,固有オブジェクトとなる。
4.8
ホストオブジェクト (host object) ECMAScriptの実行環境を補完する形でホスト環境が提供する
オブジェクト。固有オブジェクトでないオブジェクトは,ホストオブジェクトとなる。
4.9
不定値 (undefined value) 値を代入していない変数がもつ基本値。
4.10 Undefined型 (Undefined type) 基本値である不定値だけを要素とする集合。
4.11 ナル値 (null value) 空参照を表す基本値。プログラムのうえでは,nullと書く。
4.12 Null型 (Null type) 基本値nullだけを要素とする集合。
4.13 論理値 (boolean value) 基本値true及びfalse。trueは論理での真に対応し,falseは偽に対応する。
4.14 Boolean型 (Boolean type) 基本値true及びfalseだけを要素とする集合。
4.15 論理オブジェクト (boolean object) 組込みオブジェクトBooleanのインスタンスであるObject型の
要素。言い換えると,new式でコンストラクタBooleanを指定し,その引数に論理値を与えて生成したオ
ブジェクト。生成されたオブジェクトは,その暗黙の(名前をもたない)特性として,その論理値をもつ。
論理オブジェクトは,その論理値に強制的に型変換されるので,論理値が必要となる位置に書くこともで
きる。
7
X 3060 : 2000 (ISO/IEC 16262 : 1998)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
この強制的な型変換は,ECMAScriptのもつ便宜性の一つである。その目的は,どんな経歴のプログラ
マにも対応することにある。手続き型言語又は命令型言語に慣れたプログラマにとっては,論理値,文字
列値,数値などを使うのが自然であるし,オブジェクト指向言語に慣れたプログラマにとっては,論理オ
ブジェクト,文字列オブジェクト,数値オブジェクトなどを使うのが直観に合う。
4.16 文字列値 (string value) String型の要素。個々の文字列値は,Unicode文字(1)の有限列(長さ0以上)
からなる。
注(1) この規格でいうUnicode文字とは,Unicode標準が定義する文字のことであって,符号化文字デ
ータ要素 (coded-character-data-element) ではないことに注意。したがって,文字合成列(JIS X
0221を参照。)が単一の文字として取り扱われることはない。
なお,原国際規格の制定時,ISO/IEC 10646及びUnicode標準において,BMP以外の面への
文字の定義が行われていなかったため,この規格においては,16ビットの符号なし整数値とし
て表現されるUnicode符号値と,一つ以上のUnicode符号値からなる列によって符号化される
Unicode文字との,明確な区別がなされていない。この規格におけるString型の要素は,実際に
は,Unicode文字ではなく,Unicode符号値と解釈するほうがより正確である。
4.17 String型 (String type) Unicode文字の有限列(長さ0以上)のすべてからなる集合。
4.18 文字列オブジェクト (string object) 組込みオブジェクトStringのインスタンスであるObject型の要
素。言い換えると,new式でコンストラクタStringを指定し,その引数に文字列値を与えて生成したオブ
ジェクト。生成されたオブジェクトは,その暗黙の(名前をもたない)特性として,その文字列値をもつ。
文字列オブジェクトは,その文字列値に強制的に型変換されるので,文字列値が必要となる位置に書くこ
ともできる。
4.19 数値 (number value) Number型の要素。1個の数値を直接に表現する。
4.20 Number型 (Number type) 数値の集合。ECMAScriptでの数値は,IEEE754の64ビット形式倍精度
浮動小数点表現を用いて表す。特殊値として,正の無限大,負の無限大及び“非数” ("Not-a-Number", NaN)
も含む。
4.21 数値オブジェクト (number object) 組込みオブジェクトNumberのインスタンスであるObject型の
要素。言い換えると,new式でコンストラクタNumberを指定し,その引数に数値を与えて生成したオブ
ジェクト。生成されたオブジェクトは,その暗黙の(名前をもたない)特性として,その数値をもつ。数
値オブジェクトは,その数値に強制的に型変換されるので,数値が必要となる位置に書くこともできる。
数値オブジェクトは,特性をプロトタイプNumberに加えることで,その特性を共有特性としてもっこと
ができる。
4.22 Infinity (Infinity) 数値の一つ。正の無限大を表す。
4.23 NaN (Not-a-Number) 数値の一つ。IEEE754での“非数”を表す。
8
X 3060 : 2000 (ISO/IEC 16262 : 1998)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
原案作成委員会 構成表
氏名
所属
(主査)
黒 川 利 明
株式会社CSK EC開発本部ECリサーチ
石 渡 克 己
日本ネットスケープコミュニケーション株式会社マーケ
ティング統括部
内 山 光 一
株式会社東芝デジタルメディア機器社コンピュータ&ネ
ットワーク開発センター開発第3部
筧 捷 彦
早稲田大学理工学部情報学科
木 戸 彰 夫
日本アイ・ビー・エム株式会社ソフトウェア開発研究所
後 藤 志津雄
株式会社日立製作所ソフトウェア事業部言語図形設計部
豊 田 祐 司
マイクロソフト株式会社研究開発本部デベロッパー製品
開発統括部
平 山 亮
金沢工業大学情報工学科
福 留 治 隆
株式会社アスキー株式会社メディア技術開発室
村 田 晴 久
日本ユニシス株式会社生産技術部技術1室
(工業技術院)
田 川 淳
通商産業省工業技術院標準部標準業務課情報電気標準化
推進室
(事務局)
橋 本 孔 佐
財団法人日本規格協会情報技術標準化研究センター