18 ECMAScript 標準組み込みオブジェクト
ECMAScript の Script または Module が実行を開始するとき、特定の組み込みオブジェクトが利用可能である。1 つはグローバルオブジェクトで、実行中プログラムのグローバル環境の一部である。その他はグローバルオブジェクトの初期プロパティ、またはアクセス可能な組み込みオブジェクトのプロパティとして間接的にアクセスできる。
特に規定がない限り、関数として呼び出し可能な組み込みオブジェクトは 10.3 に記述される特性を持つ組み込み関数オブジェクトである。特に規定がない限り、組み込みオブジェクトの [[Extensible]] 内部スロットは初期値 true を持つ。すべての組み込み関数オブジェクトは、そのオブジェクトが最初に生成されたレルムの Realm Record を値とする [[Realm]] 内部スロットを持つ。
多くの組み込みオブジェクトは関数であり、引数付きで呼び出すことができる。そのうちいくつかはコンストラクタでもあり、new
演算子とともに使用されることを意図した関数である。各組み込み関数について、本仕様はその関数が要求する引数およびその関数オブジェクトのプロパティを記述する。各組み込みコンストラクタについては、さらにそのコンストラクタのプロトタイプオブジェクトのプロパティと、そのコンストラクタを呼び出す new
式が返す特定オブジェクトインスタンスのプロパティを記述する。
特に規定がない限り、ある関数またはコンストラクタが規定されたより少ない個数の引数を与えられた場合、その関数またはコンストラクタは不足引数(各々 undefined 値)を与えられたかのように正確に動作しなければならない。これら不足引数は「存在しない (not present)」ものと見なされ、仕様アルゴリズムによってそのように識別され得る。個別の関数の記述において、用語 “this value” および “NewTarget” は 10.3 に示される意味を持つ。
特に規定がない限り、記述された組み込み関数またはコンストラクタが許容されるより多い引数を与えられた場合、余剰引数は呼び出しにより評価された後その関数によって無視される。ただし、実装は単に余剰引数が存在することだけを条件として TypeError 例外を投げるのでない範囲で、そうした引数に関連する実装固有の挙動を定義してよい。
Note 1
組み込み関数集合に追加能力を加える実装は、既存関数へ新しいパラメータを追加するよりも、新しい関数を追加することで行うことが推奨される。
特に規定がない限り、すべての組み込み関数および組み込みコンストラクタは、その [[Prototype]] 内部スロットの値として Function プロトタイプオブジェクト(式 Function.prototype
の初期値 (20.2.3)) を持つ。
特に規定がない限り、すべての組み込みプロトタイプオブジェクトは、その [[Prototype]] 内部スロットの値として Object プロトタイプオブジェクト(式 Object.prototype
の初期値 (20.1.3))を持つ。ただし Object プロトタイプオブジェクト自身は除く。
本仕様が組み込みコンストラクタの挙動をアルゴリズム手順で定義する場合、[[Call]] と [[Construct]] の双方の目的における挙動はそれである。アルゴリズムが両者を区別する必要がある場合、NewTarget が undefined であるかを確認する(これは [[Call]] 呼び出しを示す)。
コンストラクタでない組み込み関数オブジェクトは、特別な規定がない限り [[Construct]] 内部メソッドを実装しない。
コンストラクタでない組み込み関数オブジェクトは、特別な規定がない限り "prototype" プロパティを持たない。
本仕様で定義される各組み込み関数は CreateBuiltinFunction 抽象操作 (10.3.4) を呼び出すことで生成される。パラメータ length および name の値は、それぞれ下記で述べられる "length" および "name" プロパティの初期値である。prefix パラメータの値も同様に下記で述べられる。
コンストラクタを含むすべての組み込み関数オブジェクトは、値が非負整数 Number である "length" プロパティを持つ。特に規定がない限り、この値は関数説明小節見出しに示される必須パラメータ数である。オプションパラメータおよび rest パラメータはカウントに含まれない。
Note 2
例えば、Array プロトタイプオブジェクトの "map" プロパティの初期値である関数オブジェクトは、小節見出し «Array.prototype.map (callback [ , thisArg])» で記述され、ふたつの名前付き引数 callback と thisArg を示し、後者はオプションである;したがってその関数オブジェクトの "length" プロパティ値は 1𝔽 である。
特に規定がない限り、組み込み関数オブジェクトの "length" プロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持つ。
コンストラクタを含むすべての組み込み関数オブジェクトは、値が String である "name" プロパティを持つ。特に規定がない限り、この値は本仕様でその関数に与えられる名前である。匿名関数として指定される関数は、"name" プロパティ値として空文字列を使用する。オブジェクトのプロパティとして指定される関数については、その関数へアクセスする際に使用されるプロパティ名文字列が name 値となる。組み込みプロパティの get または set アクセサ関数として指定される関数は、CreateBuiltinFunction を呼ぶ際 prefix パラメータに "get" または "set"(それぞれ)を渡す。
プロパティキーが Symbol 値である各組み込み関数については、"name" プロパティの値が明示的に規定される。明示値が接頭辞 "get " または "set " で始まり、その関数が組み込みプロパティの get / set アクセサ関数である場合、接頭辞を除いた値が name パラメータへ、"get" または "set"(それぞれ)が 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 である。