ページ表示設定

18 ECMAScript 標準組込みオブジェクト

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

別段の規定がない限り、関数として呼出し可能な組込みオブジェクトは、10.3 で説明される特性を持つ組込み関数オブジェクトです。別段の規定がない限り、組込みオブジェクトの [[Extensible]] 内部スロットは初期状態で値 true を持ちます。すべての組込み関数オブジェクトは [[Realm]] 内部スロットを持ち、その値は、そのオブジェクトが最初に作成された realm の Realm Record です。

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

特定の関数の説明で別段の規定がない限り、組込み関数またはコンストラクターに、その関数が必要とすると規定されている数より少ない引数が渡された場合、その関数またはコンストラクターは、不足する各引数として undefined 値が渡されたかのように正確に動作しなければなりません。このような不足している引数は「存在しない」とみなされ、仕様アルゴリズムによってそのように識別される場合があります。特定の関数の説明において、「this 値」および「NewTarget」という用語は、10.3 で与えられる意味を持ちます。

特定の関数の説明で別段の規定がない限り、説明される組込み関数またはコンストラクターに、その関数が許容すると規定されている数より多い引数が渡された場合、余分な引数は呼出しによって評価された後、その関数によって無視されます。ただし、余分な引数が存在するという理由だけを根拠として TypeError 例外をスローする動作でない限り、実装はそのような引数に関連する実装固有の動作を定義してもかまいません。

注 1

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

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

別段の規定がない限り、Object prototype オブジェクト自身を除くすべての組込み prototype オブジェクトは、その [[Prototype]] 内部スロットの値として、式 Object.prototype の初期値である Object prototype オブジェクト(20.1.3)を持ちます。

この仕様が組込みコンストラクターの動作をアルゴリズム手順によって定義する場合、それは [[Call]] と [[Construct]] の両方における動作です。このようなアルゴリズムが2つの場合を区別する必要がある場合、NewTarget が undefined であるかどうかを検査します。これは [[Call]] による呼出しを示します。

コンストラクターとして識別されていない組込み関数オブジェクトは、特定の関数の説明で別段の規定がない限り、[[Construct]] 内部メソッドを実装しません。

コンストラクターでない組込み関数オブジェクトは、特定の関数の説明で別段の規定がない限り、"prototype" プロパティを持ちません。

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

コンストラクターを含むすべての組込み関数オブジェクトは、値が非負の整数 Number である "length" プロパティを持ちます。別段の規定がない限り、この値は関数の説明の副節見出しに示される必須パラメーターの数です。省略可能なパラメーターおよび rest パラメーターはパラメーター数に含まれません。

注 2

たとえば、Array prototype オブジェクトの "map" プロパティの初期値である関数オブジェクトは、副節見出し «Array.prototype.map (callback [ , thisArg])» で説明されており、名前付き引数 callback と thisArg の2つが示されています。後者は省略可能です。したがって、その関数オブジェクトの "length" プロパティの値は 1𝔽 です。

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

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

プロパティキーが Symbol 値である各組込み関数について、"name" プロパティの値は明示的に規定されます。このように明示的に規定された値が接頭辞 "get " または "set " で始まり、その値が規定されている関数が組込みプロパティの get または set アクセサー関数である場合、接頭辞を除いた値が name パラメーターに渡され、CreateBuiltinFunction を呼び出すときに、それぞれ値 "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 です。