18 ECMAScript Standard Built-in Objects

ECMAScript の Script または Module が実行を開始する際に利用可能ないくつかの組み込みオブジェクトがある。ひとつはグローバルオブジェクトであり、実行中のプログラムのグローバル環境の一部である。他はグローバルオブジェクトの初期プロパティとして、またはアクセス可能な組み込みオブジェクトのプロパティを通じて間接的にアクセス可能である。

特に指定がない限り、関数として呼び出し可能な組み込みオブジェクトは 10.3 に記述された特性を持つ組み込み関数オブジェクトである。特に指定がない限り、組み込みオブジェクトの [[Extensible]] 内部スロットは初期値として true を持つ。すべての組み込み関数オブジェクトは [[Realm]] 内部スロットを持ち、その値はオブジェクトが最初に作成されたレルムのレコードである。

多くの組み込みオブジェクトは関数であり、引数を指定して呼び出すことができる。さらにそれらのうちいくつかはコンストラクタであり、new 演算子で使うことを意図した関数である。各組み込み関数について、本仕様はその関数が要求する引数とその関数オブジェクトのプロパティを記述する。各組み込みコンストラクタについては、さらにそのコンストラクタの prototype オブジェクトのプロパティおよびそのコンストラクタを呼び出す new 式によって返される特定のオブジェクトインスタンスのプロパティを記述する。

特定の関数の記述で別段の指定がない限り、組み込み関数またはコンストラクタに指定された必要引数より少ない引数が与えられた場合、その関数またはコンストラクタは、各不足引数が undefined 値であるかのように振る舞わなければならない。そのような不足引数は「存在しない」と見なされ、仕様アルゴリズムによってそのように識別され得る。特定の関数の記述において、「this 値」および「NewTarget」という用語は 10.3 に与えられた意味を持つ。

特定の関数の記述で別段の指定がない限り、記述された組み込み関数またはコンストラクタに指定された許容引数より多くの引数が与えられた場合、追加の引数は呼び出しにより評価され、その後関数によって無視される。ただし、実装はそのような引数に関して実装特有の振る舞いを定義することができるが、その振る舞いが単に余分な引数の存在を理由に TypeError を投げることを含んではならない。

Note 1

組み込み関数の集合に追加的な機能を加える実装は、既存関数に新しいパラメータを追加するのではなく、新しい関数を追加する方法で行うことが推奨される。

特に指定がない限り、すべての組み込み関数およびすべての組み込みコンストラクタは Function prototype オブジェクト(式 Function.prototype の初期値としてのオブジェクト、20.2.3)をその [[Prototype]] 内部スロットの値として持つ。

特に指定がない限り、すべての組み込みプロトタイプオブジェクトは Object prototype オブジェクト(式 Object.prototype の初期値、20.1.3)をその [[Prototype]] 内部スロットの値として持つ(Object prototype オブジェクト自体を除く)。

もし本仕様が組み込みコンストラクタの振る舞いをアルゴリズム手順で定義するなら、それは [[Call]][[Construct]] の双方に対する振る舞いである。もしそのようなアルゴリズムが二つの場合を区別する必要があるなら、NewTarget が undefined かどうかをチェックし、undefined であれば [[Call]] 呼び出しを示す。

組み込み関数オブジェクトで、その関数がコンストラクタとして識別されていないものは、特に指定がない限り [[Construct]] 内部メソッドを実装しない。

組み込み関数オブジェクトでコンストラクタでないものは、特に指定がない限り "prototype" プロパティを持たない。

本仕様で定義された各組み込み関数は CreateBuiltinFunction 抽象操作 (10.3.4) を呼び出すことによって作成される。length および name パラメータの値は、後述の "length" および "name" プロパティの初期値である。prefix パラメータの値についても同様に後述する。

すべての組み込み関数オブジェクト(コンストラクタを含む)は "length" プロパティを持ち、その値は非負の整数 Number である。特に指定がない限り、この値は関数記述の小節見出しに示された必要パラメータの数である。オプションパラメータおよびレストパラメータはパラメータ数に含まれない。

Note 2

例えば、Array prototype オブジェクトの "map" プロパティの初期値である関数オブジェクトは小節見出し «Array.prototype.map (callback [ , thisArg])» の下に記述され、二つの名前付き引数 callback と thisArg が示されるが後者はオプションである。したがってその関数オブジェクトの "length" プロパティの値は 1𝔽 である。

特に指定がない限り、組み込み関数オブジェクトの "length" プロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持つ。

すべての組み込み関数オブジェクト(コンストラクタを含む)は "name" プロパティを持ち、その値は文字列である。特に指定がない限り、この値は本仕様で関数に与えられた名前である。無名関数として識別される関数は空文字列を "name" プロパティの値として使用する。オブジェクトのプロパティとして指定される関数については、名前の値はその関数にアクセスするために用いられるプロパティ名文字列である。組み込みプロパティの get または set アクセサ関数として指定された関数には、CreateBuiltinFunction を呼び出す際に prefix パラメータとしてそれぞれ "get" または "set" が渡される。

"name" プロパティの値は、プロパティキーが Symbol 値である各組み込み関数について明示的に指定される。もしそのように明示的に指定された値が "get " または "set " のプレフィックスで始まり、かつそれが組み込みプロパティの get または set アクセサ関数であるなら、プレフィックスを除いた値が name パラメータに渡され、プレフィックス "get" または "set"(それぞれ)が CreateBuiltinFunction を呼ぶ際に prefix パラメータとして渡される。

特に指定がない限り、組み込み関数オブジェクトの "name" プロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持つ。

19 から 28 までの小節および付録 B.2 に記述されたその他のすべてのデータプロパティは、特に指定がない限り属性 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } を持つ。

19 から 28 までの小節および付録 B.2 に記述されたすべてのアクセサプロパティは、特に指定がない限り属性 { [[Enumerable]]: false, [[Configurable]]: true } を持つ。もし get アクセサ関数のみが記述されている場合、set アクセサ関数のデフォルト値は undefined である。もし set アクセサのみが記述されている場合、get アクセサのデフォルト値は undefined である。