ページ表示設定

20 基本オブジェクト

20.1 Object オブジェクト

20.1.1 Object コンストラクター

Object コンストラクターは:

20.1.1.1 Object ( value )

この関数は呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined でもアクティブな関数オブジェクトでもない場合、
    1. ? OrdinaryCreateFromConstructor(NewTarget, "%Object.prototype%") を返す。
  2. value が undefined または null のいずれかである場合、OrdinaryObjectCreate(%Object.prototype%) を返す。
  3. ! ToObject(value) を返す。

20.1.2 Object コンストラクターのプロパティ

Object コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 次の追加プロパティを持ちます。

20.1.2.1 Object.assign ( target, ...sources )

この関数は、1つ以上のソースオブジェクトから、すべての列挙可能な独自プロパティの値を target オブジェクトへコピーします。

呼び出されたとき、次の手順を実行します。

  1. targetObj を ? ToObject(target) とする。
  2. 引数が1つだけ渡された場合、targetObj を返す。
  3. sources の各要素 nextSource について、次を行う。
    1. nextSource が undefined でも null でもない場合、
      1. from を ! ToObject(nextSource) とする。
      2. keys を ? from.[[OwnPropertyKeys]]() とする。
      3. keys の各要素 nextKey について、次を行う。
        1. propertyDesc を ? from.[[GetOwnProperty]](nextKey) とする。
        2. propertyDesc が undefined でなく、propertyDesc.[[Enumerable]] が true である場合、
          1. propertyValue を ? Get(from, nextKey) とする。
          2. ? Set(targetObj, nextKey, propertyValue, true) を実行する。
  4. targetObj を返す。

この関数の "length" プロパティは 2𝔽 です。

20.1.2.2 Object.create ( proto, properties )

この関数は、指定された prototype を持つ新しいオブジェクトを作成します。

呼び出されたとき、次の手順を実行します。

  1. proto が Object でなく、かつ proto が null でない場合、TypeError 例外をスローする。
  2. obj を OrdinaryObjectCreate(proto) とする。
  3. properties が undefined でない場合、
    1. ? ObjectDefineProperties(obj, properties) を返す。
  4. obj を返す。

20.1.2.3 Object.defineProperties ( obj, properties )

この関数は、オブジェクトに独自プロパティを追加し、または既存の独自プロパティの属性を更新します。

呼び出されたとき、次の手順を実行します。

  1. obj が Object でない場合、TypeError 例外をスローする。
  2. ? ObjectDefineProperties(obj, properties) を返す。

20.1.2.3.1 ObjectDefineProperties ( obj, properties )

抽象操作 ObjectDefineProperties。引数 obj (Object) および properties (ECMAScript 言語値)。戻り値:(正常完了 (値:Object) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. properties を ? ToObject(properties) に設定する。
  2. keys を ? properties.[[OwnPropertyKeys]]() とする。
  3. propertyDescs を新しい空の List とする。
  4. keys の各要素 nextKey について、次を行う。
    1. currentPropertyDesc を ? properties.[[GetOwnProperty]](nextKey) とする。
    2. currentPropertyDesc が undefined でなく、currentPropertyDesc.[[Enumerable]] が true である場合、
      1. propertyDescObj を ? Get(properties, nextKey) とする。
      2. propertyDesc を ? ToPropertyDescriptor(propertyDescObj) とする。
      3. Record { [[Key]]: nextKey, [[Descriptor]]: propertyDesc } を propertyDescs に追加する。
  5. propertyDescs の各要素 property について、次を行う。
    1. ? DefinePropertyOrThrow(obj, property.[[Key]], property.[[Descriptor]]) を実行する。
  6. obj を返す。

20.1.2.4 Object.defineProperty ( obj, key, attrs )

この関数は、オブジェクトに独自プロパティを追加し、または既存の独自プロパティの属性を更新します。

呼び出されたとき、次の手順を実行します。

  1. obj が Object でない場合、TypeError 例外をスローする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. propertyDesc を ? ToPropertyDescriptor(attrs) とする。
  4. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc) を実行する。
  5. obj を返す。

20.1.2.5 Object.entries ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. coerced を ? ToObject(obj) とする。
  2. entryList を ? EnumerableOwnProperties(coerced, key+value) とする。
  3. CreateArrayFromList(entryList) を返す。

20.1.2.6 Object.freeze ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. obj が Object でない場合、obj を返す。
  2. status を ? SetIntegrityLevel(obj, frozen) とする。
  3. status が false である場合、TypeError 例外をスローする。
  4. obj を返す。

20.1.2.7 Object.fromEntries ( iterable )

この関数は呼び出されたとき、次の手順を実行します。

  1. ? RequireObjectCoercible(iterable) を実行する。
  2. obj を OrdinaryObjectCreate(%Object.prototype%) とする。
  3. 表明: obj は独自プロパティを持たない拡張可能な通常オブジェクトである。
  4. closure を、パラメーター (key, value) を持ち、obj を捕捉し、呼び出されたときに次の手順を実行する新しい Abstract Closure とする。
    1. propertyKey を ? ToPropertyKey(key) とする。
    2. ! CreateDataPropertyOrThrow(obj, propertyKey, value) を実行する。
    3. NormalCompletion(undefined) を返す。
  5. adder を CreateBuiltinFunction(closure, 2, "", « ») とする。
  6. ? AddEntriesFromIterable(obj, iterable, adder) を返す。
注
adder のために作成された関数は ECMAScript コードから直接アクセスされることはありません。

20.1.2.8 Object.getOwnPropertyDescriptor ( obj, key )

この関数は呼び出されたとき、次の手順を実行します。

  1. coerced を ? ToObject(obj) とする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. propertyDesc を ? coerced.[[GetOwnProperty]](propertyKey) とする。
  4. FromPropertyDescriptor(propertyDesc) を返す。

20.1.2.9 Object.getOwnPropertyDescriptors ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. coerced を ? ToObject(obj) とする。
  2. ownKeys を ? coerced.[[OwnPropertyKeys]]() とする。
  3. descs を OrdinaryObjectCreate(%Object.prototype%) とする。
  4. ownKeys の各要素 key について、次を行う。
    1. propertyDesc を ? coerced.[[GetOwnProperty]](key) とする。
    2. propertyDescObj を FromPropertyDescriptor(propertyDesc) とする。
    3. propertyDescObj が undefined でない場合、! CreateDataPropertyOrThrow(descs, key, propertyDescObj) を実行する。
  5. descs を返す。

20.1.2.10 Object.getOwnPropertyNames ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. CreateArrayFromList(? GetOwnPropertyKeys(obj, string)) を返す。

20.1.2.11 Object.getOwnPropertySymbols ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. CreateArrayFromList(? GetOwnPropertyKeys(obj, symbol)) を返す。

20.1.2.11.1 GetOwnPropertyKeys ( value, type )

抽象操作 GetOwnPropertyKeys。引数 value (ECMAScript 言語値) および type ((string または symbol))。戻り値:(正常完了 (値:リスト (要素:プロパティキー)) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. obj を ? ToObject(value) とする。
  2. keys を ? obj.[[OwnPropertyKeys]]() とする。
  3. nameList を新しい空の List とする。
  4. keys の各要素 nextKey について、次を行う。
    1. nextKey が Symbol で type が symbol であるか、または nextKey が String で type が string である場合、
      1. nextKey を nameList に追加する。
  5. nameList を返す。

20.1.2.12 Object.getPrototypeOf ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. coerced を ? ToObject(obj) とする。
  2. ? coerced.[[GetPrototypeOf]]() を返す。

20.1.2.13 Object.groupBy ( items, callback )

注

callback は2つの引数を受け取る関数であるべきです。groupBy は items 内の各要素について昇順に1回ずつ callback を呼び出し、新しいオブジェクトを構築します。callback によって返される各値はプロパティキーへ型強制されます。このような各プロパティキーについて、結果オブジェクトは、そのプロパティキーをキーとし、callback の戻り値がそのキーへ型強制されたすべての要素を含む配列を値とするプロパティを持ちます。

callback は2つの引数、すなわち要素の値と要素のインデックスを指定して呼び出されます。

groupBy の戻り値は %Object.prototype% から継承しないオブジェクトです。

この関数は呼び出されたとき、次の手順を実行します。

  1. groups を ? GroupBy(items, callback, property) とする。
  2. obj を OrdinaryObjectCreate(null) とする。
  3. groups の各 Record { [[Key]], [[Elements]] } group について、次を行う。
    1. elements を CreateArrayFromList(group.[[Elements]]) とする。
    2. ! CreateDataPropertyOrThrow(obj, group.[[Key]], elements) を実行する。
  4. obj を返す。

20.1.2.14 Object.hasOwn ( obj, key )

この関数は呼び出されたとき、次の手順を実行します。

  1. coerced を ? ToObject(obj) とする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. ? HasOwnProperty(coerced, propertyKey) を返す。

20.1.2.15 Object.is ( value1, value2 )

この関数は呼び出されたとき、次の手順を実行します。

  1. SameValue(value1, value2) を返す。

20.1.2.16 Object.isExtensible ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. obj が Object でない場合、false を返す。
  2. ? IsExtensible(obj) を返す。

20.1.2.17 Object.isFrozen ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. obj が Object でない場合、true を返す。
  2. ? TestIntegrityLevel(obj, frozen) を返す。

20.1.2.18 Object.isSealed ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. obj が Object でない場合、true を返す。
  2. ? TestIntegrityLevel(obj, sealed) を返す。

20.1.2.19 Object.keys ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. coerced を ? ToObject(obj) とする。
  2. keyList を ? EnumerableOwnProperties(coerced, key) とする。
  3. CreateArrayFromList(keyList) を返す。

20.1.2.20 Object.preventExtensions ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. obj が Object でない場合、obj を返す。
  2. status を ? obj.[[PreventExtensions]]() とする。
  3. status が false である場合、TypeError 例外をスローする。
  4. obj を返す。

20.1.2.21 Object.prototype

Object.prototype の初期値は Object prototype オブジェクトです。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.1.2.22 Object.seal ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. obj が Object でない場合、obj を返す。
  2. status を ? SetIntegrityLevel(obj, sealed) とする。
  3. status が false である場合、TypeError 例外をスローする。
  4. obj を返す。

20.1.2.23 Object.setPrototypeOf ( obj, proto )

この関数は呼び出されたとき、次の手順を実行します。

  1. ? RequireObjectCoercible(obj) を実行する。
  2. proto が Object でなく、かつ proto が null でない場合、TypeError 例外をスローする。
  3. obj が Object でない場合、obj を返す。
  4. status を ? obj.[[SetPrototypeOf]](proto) とする。
  5. status が false である場合、TypeError 例外をスローする。
  6. obj を返す。

20.1.2.24 Object.values ( obj )

この関数は呼び出されたとき、次の手順を実行します。

  1. coerced を ? ToObject(obj) とする。
  2. valueList を ? EnumerableOwnProperties(coerced, value) とする。
  3. CreateArrayFromList(valueList) を返す。

20.1.3 Object Prototype オブジェクトのプロパティ

Object prototype オブジェクトは:

  • %Object.prototype% です。
  • 値が true である [[Extensible]] 内部スロットを持ちます。
  • [[SetPrototypeOf]] メソッドを除き、通常オブジェクトについて定義された内部メソッドを持ちます。[[SetPrototypeOf]] メソッドは 10.4.7.1 で定義されるとおりです。(したがって、これは immutable prototype 特殊オブジェクトです。)
  • 値が null である [[Prototype]] 内部スロットを持ちます。

20.1.3.1 Object.prototype.constructor

Object.prototype.constructor の初期値は %Object% です。

20.1.3.2 Object.prototype.hasOwnProperty ( value )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. propertyKey を ? ToPropertyKey(value) とする。
  2. obj を ? ToObject(this 値) とする。
  3. ? HasOwnProperty(obj, propertyKey) を返す。
注

手順 1 と 2 の順序は、以前の版のこの仕様において手順 1 によってスローされていた例外が、this 値が undefined または null である場合でも引き続きスローされることを保証するために選択されています。

20.1.3.3 Object.prototype.isPrototypeOf ( value )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. value が Object でない場合、false を返す。
  2. obj を ? ToObject(this 値) とする。
  3. 次を繰り返す。
    1. value を ? value.[[GetPrototypeOf]]() に設定する。
    2. value が null である場合、false を返す。
    3. SameValue(obj, value) が true である場合、true を返す。
注

手順 1 と 2 の順序は、value がオブジェクトでなく、this 値が undefined または null である場合について、以前の版のこの仕様で規定されていた動作を保持します。

20.1.3.4 Object.prototype.propertyIsEnumerable ( value )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. propertyKey を ? ToPropertyKey(value) とする。
  2. obj を ? ToObject(this 値) とする。
  3. propertyDesc を ? obj.[[GetOwnProperty]](propertyKey) とする。
  4. propertyDesc が undefined である場合、false を返す。
  5. propertyDesc.[[Enumerable]] を返す。
注 1

このメソッドは prototype チェーン内のオブジェクトを考慮しません。

注 2

手順 1 と 2 の順序は、以前の版のこの仕様において手順 1 によってスローされていた例外が、this 値が undefined または null である場合でも引き続きスローされることを保証するために選択されています。

20.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. thisValue を this 値とする。
  2. ? Invoke(thisValue, "toString") を返す。

このメソッドの省略可能なパラメーターは使用されませんが、ECMA-402 の toLocaleString メソッドで使用されるパラメーターパターンに対応することを意図しています。ECMA-402 のサポートを含まない実装は、これらのパラメーター位置を他の目的に使用してはなりません。

注 1

このメソッドは、ロケール依存の toString 動作を持たないオブジェクトのための汎用的な toLocaleString 実装を提供します。Array、Number、Date、および %TypedArray% は、それぞれ独自のロケール依存 toLocaleString メソッドを提供します。

注 2

ECMA-402 は意図的に、この既定の実装の代替を提供していません。

20.1.3.6 Object.prototype.toString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. this 値が undefined である場合、"[object Undefined]" を返す。
  2. this 値が null である場合、"[object Null]" を返す。
  3. obj を ! ToObject(this 値) とする。
  4. isArray を ? IsArray(obj) とする。
  5. isArray が true である場合、builtinTag を "Array" とする。
  6. そうでなく、obj が [[ParameterMap]] 内部スロットを持つ場合、builtinTag を "Arguments" とする。
  7. そうでなく、obj が [[Call]] 内部メソッドを持つ場合、builtinTag を "Function" とする。
  8. そうでなく、obj が [[ErrorData]] 内部スロットを持つ場合、builtinTag を "Error" とする。
  9. そうでなく、obj が [[BooleanData]] 内部スロットを持つ場合、builtinTag を "Boolean" とする。
  10. そうでなく、obj が [[NumberData]] 内部スロットを持つ場合、builtinTag を "Number" とする。
  11. そうでなく、obj が [[StringData]] 内部スロットを持つ場合、builtinTag を "String" とする。
  12. そうでなく、obj が [[DateValue]] 内部スロットを持つ場合、builtinTag を "Date" とする。
  13. そうでなく、obj が [[RegExpMatcher]] 内部スロットを持つ場合、builtinTag を "RegExp" とする。
  14. そうでない場合、builtinTag を "Object" とする。
  15. tag を ? Get(obj, %Symbol.toStringTag%) とする。
  16. tag が String でない場合、tag を builtinTag に設定する。
  17. "[object "、tag、および "]" の文字列連結を返す。
注

歴史的に、このメソッドは、以前の版のこの仕様でさまざまな組込みオブジェクトの名目的な型タグとして使用されていた [[Class]] 内部スロットの String 値へアクセスするために使用されることがありました。上記の toString の定義は、それらの特定種類の組込みオブジェクトを検査するために toString を使用するレガシーコードとの互換性を保持します。他の種類の組込みオブジェクトまたはプログラム定義オブジェクトについて、信頼できる型検査の仕組みを提供するものではありません。さらに、プログラムは %Symbol.toStringTag% を、このようなレガシー型検査の信頼性を無効にする方法で使用できます。

20.1.3.7 Object.prototype.valueOf ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. ? ToObject(this 値) を返す。
規定の任意機能, レガシー

20.1.3.8 Object.prototype.__proto__

Object.prototype.__proto__ は属性 { [[Enumerable]]: false, [[Configurable]]: true } を持つアクセサープロパティです。[[Getter]] および [[Setter]] 属性は次のように定義されます。

20.1.3.8.1 get Object.prototype.__proto__

[[Getter]] 属性の値は、引数を必要としない組込み関数です。呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. ? obj.[[GetPrototypeOf]]() を返す。

20.1.3.8.2 set Object.prototype.__proto__

[[Setter]] 属性の値は、引数 proto を取る組込み関数です。呼び出されたとき、次の手順を実行します。

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. proto が Object でなく、かつ proto が null でない場合、undefined を返す。
  4. thisValue が Object でない場合、undefined を返す。
  5. status を ? thisValue.[[SetPrototypeOf]](proto) とする。
  6. status が false である場合、TypeError 例外をスローする。
  7. undefined を返す。
規定の任意機能, レガシー

20.1.3.9 レガシー Object.prototype アクセサーメソッド

20.1.3.9.1 Object.prototype.__defineGetter__ ( key, getter )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. IsCallable(getter) が false である場合、TypeError 例外をスローする。
  3. propertyDesc を PropertyDescriptor { [[Getter]]: getter, [[Enumerable]]: true, [[Configurable]]: true } とする。
  4. propertyKey を ? ToPropertyKey(key) とする。
  5. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc) を実行する。
  6. undefined を返す。

20.1.3.9.2 Object.prototype.__defineSetter__ ( key, setter )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. IsCallable(setter) が false である場合、TypeError 例外をスローする。
  3. propertyDesc を PropertyDescriptor { [[Setter]]: setter, [[Enumerable]]: true, [[Configurable]]: true } とする。
  4. propertyKey を ? ToPropertyKey(key) とする。
  5. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc) を実行する。
  6. undefined を返す。

20.1.3.9.3 Object.prototype.__lookupGetter__ ( key )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. 次を繰り返す。
    1. propertyDesc を ? obj.[[GetOwnProperty]](propertyKey) とする。
    2. propertyDesc が undefined でない場合、
      1. IsAccessorDescriptor(propertyDesc) が true である場合、propertyDesc.[[Getter]] を返す。
      2. undefined を返す。
    3. obj を ? obj.[[GetPrototypeOf]]() に設定する。
    4. obj が null である場合、undefined を返す。

20.1.3.9.4 Object.prototype.__lookupSetter__ ( key )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. propertyKey を ? ToPropertyKey(key) とする。
  3. 次を繰り返す。
    1. propertyDesc を ? obj.[[GetOwnProperty]](propertyKey) とする。
    2. propertyDesc が undefined でない場合、
      1. IsAccessorDescriptor(propertyDesc) が true である場合、propertyDesc.[[Setter]] を返す。
      2. undefined を返す。
    3. obj を ? obj.[[GetPrototypeOf]]() に設定する。
    4. obj が null である場合、undefined を返す。

20.1.4 Object インスタンスのプロパティ

Object インスタンスは、Object prototype オブジェクトから継承されるもの以外に特別なプロパティを持ちません。

20.2 Function オブジェクト

20.2.1 Function コンストラクター

Function コンストラクターは:

  • %Function% です。
  • グローバルオブジェクトの "Function" プロパティの初期値です。
  • コンストラクターとしてではなく関数として呼び出されたとき、新しい関数オブジェクトを作成して初期化します。したがって、関数呼出し Function(…) は、同じ引数を持つオブジェクト作成式 new Function(…) と同等です。
  • クラス定義の extends 節の値として使用できます。規定された Function の動作を継承しようとするサブクラスコンストラクターは、組込み関数の動作に必要な内部スロットを持つサブクラスインスタンスを作成して初期化するために、Function コンストラクターへの super 呼出しを含まなければなりません。関数オブジェクトを定義するすべての ECMAScript 構文形式は Function のインスタンスを作成します。組込みの GeneratorFunction、AsyncFunction、および AsyncGeneratorFunction サブクラスを除き、Function サブクラスのインスタンスを作成する構文上の手段はありません。

20.2.1.1 Function ( ...paramArgs, bodyArg )

最後の引数(存在する場合)は関数の本体(実行可能コード)を指定し、それより前の引数は仮パラメーターを指定します。

この関数は呼び出されたとき、次の手順を実行します。

  1. ctor をアクティブな関数オブジェクトとする。
  2. bodyArg が存在しない場合、bodyArg を空の String に設定する。
  3. ? CreateDynamicFunction(ctor, NewTarget, normal, paramArgs, bodyArg) を返す。
注

指定される各仮パラメーターごとに1つの引数を持つことは許可されますが、必須ではありません。たとえば、次の3つの式はすべて同じ結果を生成します。

new Function("a", "b", "c", "return a+b+c")
new Function("a, b, c", "return a+b+c")
new Function("a,b", "c", "return a+b+c")

20.2.1.1.1 CreateDynamicFunction ( ctor, newTarget, kind, paramArgs, bodyArg )

抽象操作 CreateDynamicFunction。引数 ctor (コンストラクター)、newTarget ((コンストラクター または undefined))、kind ((normal、generator、async または async-generator))、paramArgs (リスト (要素:ECMAScript 言語値)) および bodyArg (ECMAScript 言語値)。戻り値:(正常完了 (値:ECMAScript 関数オブジェクト) または throw 完了)。 ctor はこの処理を実行しているコンストラクター関数です。newTarget は new が最初に適用されたコンストラクターです。paramArgs および bodyArg は ctor に渡された引数値を反映します。 呼び出されると、次の手順を実行する。

  1. newTarget が undefined である場合、newTarget を ctor に設定する。
  2. kind が normal である場合、
    1. prefix を "function" とする。
    2. exprGrammar を文法記号 FunctionExpression とする。
    3. bodyGrammar を文法記号 FunctionBody[~Yield, ~Await] とする。
    4. paramGrammar を文法記号 FormalParameters[~Yield, ~Await] とする。
    5. fallbackProto を "%Function.prototype%" とする。
  3. そうでなく、kind が generator である場合、
    1. prefix を "function*" とする。
    2. exprGrammar を文法記号 GeneratorExpression とする。
    3. bodyGrammar を文法記号 GeneratorBody とする。
    4. paramGrammar を文法記号 FormalParameters[+Yield, ~Await] とする。
    5. fallbackProto を "%GeneratorFunction.prototype%" とする。
  4. そうでなく、kind が async である場合、
    1. prefix を "async function" とする。
    2. exprGrammar を文法記号 AsyncFunctionExpression とする。
    3. bodyGrammar を文法記号 AsyncFunctionBody とする。
    4. paramGrammar を文法記号 FormalParameters[~Yield, +Await] とする。
    5. fallbackProto を "%AsyncFunction.prototype%" とする。
  5. そうでない場合、
    1. 表明: kind は async-generator である。
    2. prefix を "async function*" とする。
    3. exprGrammar を文法記号 AsyncGeneratorExpression とする。
    4. bodyGrammar を文法記号 AsyncGeneratorBody とする。
    5. paramGrammar を文法記号 FormalParameters[+Yield, +Await] とする。
    6. fallbackProto を "%AsyncGeneratorFunction.prototype%" とする。
  6. argCount を paramArgs の要素数とする。
  7. paramStrings を新しい空の List とする。
  8. paramArgs の各要素 arg について、次を行う。
    1. ? ToString(arg) を paramStrings に追加する。
  9. bodyString を ? ToString(bodyArg) とする。
  10. currentRealm を現在の Realm Record とする。
  11. ? HostEnsureCanCompileStrings(currentRealm, paramStrings, bodyString, false) を実行する。
  12. paramString を空の String とする。
  13. argCount > 0 である場合、
    1. paramString を paramStrings[0] に設定する。
    2. k を 1 とする。
    3. k < argCount の間、次を繰り返す。
      1. nextArgString を paramStrings[k] とする。
      2. paramString を paramString、","(コンマ)、および nextArgString の文字列連結に設定する。
      3. k を k + 1 に設定する。
  14. bodyParseString を 0x000A (LINE FEED)、bodyString、および 0x000A (LINE FEED) の文字列連結とする。
  15. sourceString を prefix、" anonymous("、paramString、0x000A (LINE FEED)、") {"、bodyParseString、および "}" の文字列連結とする。
  16. sourceText を StringToCodePoints(sourceString) とする。
  17. params を ParseText(paramString, paramGrammar) とする。
  18. params がエラーの List である場合、SyntaxError 例外をスローする。
  19. body を ParseText(bodyParseString, bodyGrammar) とする。
  20. body がエラーの List である場合、SyntaxError 例外をスローする。
  21. 注記: パラメーターと本体は、それぞれ単独で有効であることを保証するために別々に構文解析される。たとえば、new Function("/*", "*/ ) {") は関数に評価されない。
  22. 注記: この手順に到達した場合、sourceText は exprGrammar の構文を持たなければならない(ただし逆は成り立たない)。次の2つの手順の目的は、exprGrammar に直接適用される早期エラー規則を適用することである。
  23. expr を ParseText(sourceText, exprGrammar) とする。
  24. expr がエラーの List である場合、SyntaxError 例外をスローする。
  25. funcProto を ? GetPrototypeFromConstructor(newTarget, fallbackProto) とする。
  26. envRecord を currentRealm.[[GlobalEnv]] とする。
  27. privateEnv を null とする。
  28. func を OrdinaryFunctionCreate(funcProto, sourceText, params, body, non-lexical-this, envRecord, privateEnv) とする。
  29. SetFunctionName(func, "anonymous") を実行する。
  30. kind が generator である場合、
    1. protoProto を OrdinaryObjectCreate(%GeneratorPrototype%) とする。
    2. ! DefinePropertyOrThrow(func, "prototype", PropertyDescriptor { [[Value]]: protoProto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) を実行する。
  31. そうでなく、kind が async-generator である場合、
    1. protoProto を OrdinaryObjectCreate(%AsyncGeneratorPrototype%) とする。
    2. ! DefinePropertyOrThrow(func, "prototype", PropertyDescriptor { [[Value]]: protoProto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) を実行する。
  32. そうでなく、kind が normal である場合、
    1. MakeConstructor(func) を実行する。
  33. 注記: kind が async である関数は constructable ではなく、[[Construct]] 内部メソッドも "prototype" プロパティも持たない。
  34. func を返す。
注

CreateDynamicFunction は、その関数がコンストラクターとして使用される可能性に備えて、kind が async でない、作成するすべての関数に "prototype" プロパティを定義します。

20.2.2 Function コンストラクターのプロパティ

Function コンストラクターは:

  • それ自体が組込み関数オブジェクトです。
  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 値が 1𝔽 である "length" プロパティを持ちます。
  • 次のプロパティを持ちます。

20.2.2.1 Function.prototype

Function.prototype の値は Function prototype オブジェクトです。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.2.3 Function Prototype オブジェクトのプロパティ

Function prototype オブジェクトは:

  • %Function.prototype% です。
  • それ自体が組込み関数オブジェクトです。
  • 任意の引数を受け取り、呼び出されると undefined を返します。
  • [[Construct]] 内部メソッドを持ちません。new 演算子を使用してコンストラクターとして使用することはできません。
  • 値が %Object.prototype% である [[Prototype]] 内部スロットを持ちます。
  • "prototype" プロパティを持ちません。
  • 値が +0𝔽 である "length" プロパティを持ちます。
  • 値が空の String である "name" プロパティを持ちます。
注

Function prototype オブジェクトは、ECMAScript 2015 仕様より前に作成された ECMAScript コードとの互換性を保証するため、関数オブジェクトであると規定されています。

20.2.3.1 Function.prototype.apply ( thisArg, argArray )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. func を this 値とする。
  2. IsCallable(func) が false である場合、TypeError 例外をスローする。
  3. argArray が undefined または null のいずれかである場合、
    1. PrepareForTailCall() を実行する。
    2. ? Call(func, thisArg) を返す。
  4. argList を ? CreateListFromArrayLike(argArray) とする。
  5. PrepareForTailCall() を実行する。
  6. ? Call(func, thisArg, argList) を返す。
注 1

thisArg 値は変更されずに this 値として渡されます。これは Edition 3 からの変更であり、Edition 3 では undefined または null の thisArg はグローバルオブジェクトに置き換えられ、その他のすべての値には ToObject が適用され、その結果が this 値として渡されていました。thisArg は変更されずに渡されますが、非 strict 関数は関数への進入時に依然としてこれらの変換を実行します。

注 2

func がアロー関数または bound function 特殊オブジェクトのいずれかである場合、手順 6 の関数 [[Call]] によって thisArg は無視されます。

20.2.3.2 Function.prototype.bind ( thisArg, ...args )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. target を this 値とする。
  2. IsCallable(target) が false である場合、TypeError 例外をスローする。
  3. boundFunc を ? BoundFunctionCreate(target, thisArg, args) とする。
  4. length を 0 とする。
  5. targetHasLength を ? HasOwnProperty(target, "length") とする。
  6. targetHasLength が true である場合、
    1. targetLength を ? Get(target, "length") とする。
    2. targetLength が Number である場合、
      1. targetLengthAsInt を ! ToIntegerOrInfinity(targetLength) とする。
      2. targetLengthAsInt = +∞ である場合、
        1. length を +∞ に設定する。
      3. そうでなく、targetLengthAsInt = -∞ である場合、
        1. length を 0 に設定する。
      4. そうでない場合、
        1. argCount を args の要素数とする。
        2. length を max(targetLengthAsInt - argCount, 0) に設定する。
  7. SetFunctionLength(boundFunc, length) を実行する。
  8. targetName を ? Get(target, "name") とする。
  9. targetName が String でない場合、targetName を空の String に設定する。
  10. SetFunctionName(boundFunc, targetName, "bound") を実行する。
  11. boundFunc を返す。
注 1

Function.prototype.bind を使用して作成された Function オブジェクトは特殊オブジェクトです。また、"prototype" プロパティを持ちません。

注 2

target がアロー関数または bound function 特殊オブジェクトのいずれかである場合、このメソッドに渡された thisArg は、以後の func の呼出しでは使用されません。

20.2.3.3 Function.prototype.call ( thisArg, ...args )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. func を this 値とする。
  2. IsCallable(func) が false である場合、TypeError 例外をスローする。
  3. PrepareForTailCall() を実行する。
  4. ? Call(func, thisArg, args) を返す。
注 1

thisArg 値は変更されずに this 値として渡されます。これは Edition 3 からの変更であり、Edition 3 では undefined または null の thisArg はグローバルオブジェクトに置き換えられ、その他のすべての値には ToObject が適用され、その結果が this 値として渡されていました。thisArg は変更されずに渡されますが、非 strict 関数は関数への進入時に依然としてこれらの変換を実行します。

注 2

func がアロー関数または bound function 特殊オブジェクトのいずれかである場合、手順 4 の関数 [[Call]] によって thisArg は無視されます。

20.2.3.4 Function.prototype.constructor

Function.prototype.constructor の初期値は %Function% です。

20.2.3.5 Function.prototype.toString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. func を this 値とする。
  2. func が Object であり、func が [[SourceText]] 内部スロットを持ち、func.[[SourceText]] が Unicode コードポイントの列であり、HostHasSourceTextAvailable(func) が true である場合、
    1. CodePointsToString(func.[[SourceText]]) を返す。
  3. func が 組込み関数オブジェクトである場合、func の実装定義の String ソースコード表現を返す。この表現は NativeFunction の構文を持たなければならない。さらに、func が [[InitialName]] 内部スロットを持ち、func.[[InitialName]] が String である場合、返される String のうち NativeFunctionAccessoropt PropertyName に一致する部分は func.[[InitialName]] でなければならない。
  4. func が Object であり、IsCallable(func) が true である場合、func の実装定義の String ソースコード表現を返す。この表現は NativeFunction の構文を持たなければならない。
  5. TypeError 例外をスローする。
NativeFunction : function NativeFunctionAccessoropt PropertyName[~Yield, ~Await]opt ( FormalParameters[~Yield, ~Await] ) { [ native code ] } NativeFunctionAccessor : get set

20.2.3.6 Function.prototype [ %Symbol.hasInstance% ] ( value )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. thisValue を this 値とする。
  2. ? OrdinaryHasInstance(thisValue, value) を返す。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

注

これは、ほとんどの関数が継承する %Symbol.hasInstance% の既定の実装です。%Symbol.hasInstance% は、ある値が特定のコンストラクターのインスタンスであるかどうかを判定するために instanceof 演算子によって呼び出されます。たとえば次のような式は、

v instanceof F

次のように評価されます。

F[%Symbol.hasInstance%](v)

コンストラクター関数は、関数上で別の %Symbol.hasInstance% メソッドを公開することにより、instanceof によってどのオブジェクトがそのインスタンスとして認識されるかを制御できます。

このプロパティは、bound function の対象関数をグローバルに公開するために使用できる改変を防ぐため、書込み不可かつ構成不可です。

このメソッドの "name" プロパティの値は "[Symbol.hasInstance]" です。

20.2.4 Function インスタンス

すべての Function インスタンスは ECMAScript 関数オブジェクトであり、表 26 に列挙される内部スロットを持ちます。Function.prototype.bind メソッド(20.2.3.2)を使用して作成された Function オブジェクトは、表 27 に列挙される内部スロットを持ちます。

Function インスタンスは次のプロパティを持ちます。

20.2.4.1 length

"length" プロパティの値は、関数が通常期待する引数の数を示す整数 Number です。ただし、言語はそれ以外の数の引数で関数を呼び出すことも許可します。"length" プロパティで指定された数とは異なる数の引数で呼び出されたときの関数の動作は、その関数に依存します。このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持ちます。

20.2.4.2 name

"name" プロパティの値は、その関数を説明する String です。名前は意味論上の意味を持ちませんが、通常は ECMAScript ソーステキスト内の定義位置でその関数を参照するために使用される変数名またはプロパティ名です。このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持ちます。

この仕様によって文脈上の名前が関連付けられていない匿名関数オブジェクトは、"name" プロパティの値として空の String を使用します。

20.2.4.3 prototype

コンストラクターとして使用できる Function インスタンスは "prototype" プロパティを持ちます。このような Function インスタンスが作成されるたびに、別の通常オブジェクトも作成され、関数の "prototype" プロパティの初期値になります。別段の規定がない限り、"prototype" プロパティの値は、その関数がコンストラクターとして呼び出されたときに作成されるオブジェクトの [[Prototype]] 内部スロットを初期化するために使用されます。

このプロパティは属性 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

注

Function.prototype.bind を使用して作成された Function オブジェクト、または MethodDefinition(GeneratorMethod または AsyncGeneratorMethod ではないもの)もしくは ArrowFunction を評価して作成された Function オブジェクトは、"prototype" プロパティを持ちません。

20.2.5 HostHasSourceTextAvailable ( func )

ホスト定義の抽象操作 HostHasSourceTextAvailable。引数 func (関数オブジェクト)。戻り値:Boolean。 ホスト環境が func のソーステキストの提供を防止できるようにします。

HostHasSourceTextAvailable の実装は、次の要件に適合しなければなりません。

  • そのパラメーターに関して決定論的でなければなりません。特定の func を引数として呼び出されるたびに、同じ結果を返さなければなりません。

HostHasSourceTextAvailable の既定の実装は true を返すことです。

20.3 Boolean オブジェクト

20.3.1 Boolean コンストラクター

Boolean コンストラクターは:

  • %Boolean% です。
  • グローバルオブジェクトの "Boolean" プロパティの初期値です。
  • コンストラクターとして呼び出されたとき、新しい Boolean オブジェクトを作成して初期化します。
  • コンストラクターとしてではなく関数として呼び出されたとき、型変換を実行します。
  • クラス定義の extends 節の値として使用できます。規定された Boolean の動作を継承しようとするサブクラスコンストラクターは、[[BooleanData]] 内部スロットを持つサブクラスインスタンスを作成して初期化するために、Boolean コンストラクターへの super 呼出しを含まなければなりません。

20.3.1.1 Boolean ( value )

この関数は呼び出されたとき、次の手順を実行します。

  1. bool を ToBoolean(value) とする。
  2. NewTarget が undefined である場合、bool を返す。
  3. obj を ? OrdinaryCreateFromConstructor(NewTarget, "%Boolean.prototype%", « [[BooleanData]] ») とする。
  4. obj.[[BooleanData]] を bool に設定する。
  5. obj を返す。

20.3.2 Boolean コンストラクターのプロパティ

Boolean コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 次のプロパティを持ちます。

20.3.2.1 Boolean.prototype

Boolean.prototype の初期値は Boolean prototype オブジェクトです。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.3.3 Boolean Prototype オブジェクトのプロパティ

Boolean prototype オブジェクトは:

  • %Boolean.prototype% です。
  • 通常オブジェクトです。
  • それ自体が Boolean オブジェクトです。値が false である [[BooleanData]] 内部スロットを持ちます。
  • 値が %Object.prototype% である [[Prototype]] 内部スロットを持ちます。

20.3.3.1 Boolean.prototype.constructor

Boolean.prototype.constructor の初期値は %Boolean% です。

20.3.3.2 Boolean.prototype.toString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. bool を ? ThisBooleanValue(this 値) とする。
  2. bool が true である場合、"true" を返す。
  3. "false" を返す。

20.3.3.3 Boolean.prototype.valueOf ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. ? ThisBooleanValue(this 値) を返す。

20.3.3.3.1 ThisBooleanValue ( arg )

抽象操作 ThisBooleanValue。引数 arg (ECMAScript 言語値)。戻り値:(正常完了 (値:Boolean) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. arg が Boolean である場合、arg を返す。
  2. arg が Object であり、arg が [[BooleanData]] 内部スロットを持つ場合、
    1. bool を arg.[[BooleanData]] とする。
    2. 表明: bool は Boolean である。
    3. bool を返す。
  3. TypeError 例外をスローする。

20.3.4 Boolean インスタンスのプロパティ

Boolean インスタンスは、Boolean prototype オブジェクトからプロパティを継承する通常オブジェクトです。Boolean インスタンスは [[BooleanData]] 内部スロットを持ちます。[[BooleanData]] 内部スロットは、この Boolean オブジェクトによって表される Boolean 値です。

20.4 Symbol オブジェクト

20.4.1 Symbol コンストラクター

Symbol コンストラクターは:

  • %Symbol% です。
  • グローバルオブジェクトの "Symbol" プロパティの初期値です。
  • 関数として呼び出されたとき、新しい Symbol 値を返します。
  • new 演算子とともに使用することを意図していません。
  • サブクラス化されることを意図していません。
  • クラス定義の extends 節の値として使用できますが、それに対する super 呼出しは例外を発生させます。

20.4.1.1 Symbol ( [ description ] )

この関数は呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined でない場合、TypeError 例外をスローする。
  2. description が undefined である場合、descString を undefined とする。
  3. そうでない場合、descString を ? ToString(description) とする。
  4. descString を [[Description]] とする新しい Symbol を返す。

20.4.2 Symbol コンストラクターのプロパティ

Symbol コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 次のプロパティを持ちます。

20.4.2.1 Symbol.asyncDispose

Symbol.asyncDispose の初期値は well-known symbol %Symbol.asyncDispose%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.2 Symbol.asyncIterator

Symbol.asyncIterator の初期値は well-known symbol %Symbol.asyncIterator%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.3 Symbol.dispose

Symbol.dispose の初期値は well-known symbol %Symbol.dispose%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.4 Symbol.for ( key )

この関数は呼び出されたとき、次の手順を実行します。

  1. stringKey を ? ToString(key) とする。
  2. agentRecord を周囲の agent の Agent Record とする。
  3. globalSymbolRegistry を agentRecord.[[GlobalSymbolRegistry]] とする。
  4. globalSymbolRegistry の各要素 element について、次を行う。
    1. element.[[Key]] が stringKey である場合、element.[[Symbol]] を返す。
  5. 表明: globalSymbolRegistry は現在 stringKey の項目を含まない。
  6. newSymbol を、[[Description]] が stringKey である新しい Symbol とする。
  7. GlobalSymbolRegistry Record { [[Key]]: stringKey, [[Symbol]]: newSymbol } を globalSymbolRegistry に追加する。
  8. newSymbol を返す。

20.4.2.5 Symbol.hasInstance

Symbol.hasInstance の初期値は well-known symbol %Symbol.hasInstance%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.6 Symbol.isConcatSpreadable

Symbol.isConcatSpreadable の初期値は well-known symbol %Symbol.isConcatSpreadable%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.7 Symbol.iterator

Symbol.iterator の初期値は well-known symbol %Symbol.iterator%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.8 Symbol.keyFor ( symbol )

この関数は呼び出されたとき、次の手順を実行します。

  1. symbol が Symbol でない場合、TypeError 例外をスローする。
  2. KeyForSymbol(symbol) を返す。

20.4.2.9 Symbol.match

Symbol.match の初期値は well-known symbol %Symbol.match%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.10 Symbol.matchAll

Symbol.matchAll の初期値は well-known symbol %Symbol.matchAll%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.11 Symbol.prototype

Symbol.prototype の初期値は Symbol prototype オブジェクトです。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.12 Symbol.replace

Symbol.replace の初期値は well-known symbol %Symbol.replace%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.13 Symbol.search

Symbol.search の初期値は well-known symbol %Symbol.search%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.14 Symbol.species

Symbol.species の初期値は well-known symbol %Symbol.species%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.15 Symbol.split

Symbol.split の初期値は well-known symbol %Symbol.split%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.16 Symbol.toPrimitive

Symbol.toPrimitive の初期値は well-known symbol %Symbol.toPrimitive%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.17 Symbol.toStringTag

Symbol.toStringTag の初期値は well-known symbol %Symbol.toStringTag%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.2.18 Symbol.unscopables

Symbol.unscopables の初期値は well-known symbol %Symbol.unscopables%(表 1)です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.4.3 Symbol Prototype オブジェクトのプロパティ

Symbol prototype オブジェクトは:

  • %Symbol.prototype% です。
  • 通常オブジェクトです。
  • Symbol インスタンスではなく、[[SymbolData]] 内部スロットを持ちません。
  • 値が %Object.prototype% である [[Prototype]] 内部スロットを持ちます。

20.4.3.1 Symbol.prototype.constructor

Symbol.prototype.constructor の初期値は %Symbol% です。

20.4.3.2 get Symbol.prototype.description

Symbol.prototype.description は、set アクセサー関数が undefined であるアクセサープロパティです。その get アクセサー関数は、呼び出されたときに次の手順を実行します。

  1. symbol を ? ThisSymbolValue(this 値) とする。
  2. symbol.[[Description]] を返す。

20.4.3.3 Symbol.prototype.toString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. symbol を ? ThisSymbolValue(this 値) とする。
  2. SymbolDescriptiveString(symbol) を返す。

20.4.3.3.1 SymbolDescriptiveString ( symbol )

抽象操作 SymbolDescriptiveString。引数 symbol (Symbol)。戻り値:String。 呼び出されると、次の手順を実行する。

  1. description を symbol.[[Description]] とする。
  2. description が undefined である場合、description を空の String に設定する。
  3. 表明: description は String である。
  4. "Symbol("、description、および ")" の文字列連結を返す。

20.4.3.4 Symbol.prototype.valueOf ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. ? ThisSymbolValue(this 値) を返す。

20.4.3.4.1 ThisSymbolValue ( arg )

抽象操作 ThisSymbolValue。引数 arg (ECMAScript 言語値)。戻り値:(正常完了 (値:Symbol) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. arg が Symbol である場合、arg を返す。
  2. arg が Object であり、arg が [[SymbolData]] 内部スロットを持つ場合、
    1. symbol を arg.[[SymbolData]] とする。
    2. 表明: symbol は Symbol である。
    3. symbol を返す。
  3. TypeError 例外をスローする。

20.4.3.5 Symbol.prototype [ %Symbol.toPrimitive% ] ( hint )

このメソッドは、Symbol オブジェクトをプリミティブ値へ変換するために ECMAScript 言語演算子によって呼び出されます。

呼び出されたとき、次の手順を実行します。

  1. ? ThisSymbolValue(this 値) を返す。
注

引数は無視されます。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持ちます。

このメソッドの "name" プロパティの値は "[Symbol.toPrimitive]" です。

20.4.3.6 Symbol.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag% プロパティの初期値は String 値 "Symbol" です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } を持ちます。

20.4.4 Symbol インスタンスのプロパティ

Symbol インスタンスは、Symbol prototype オブジェクトからプロパティを継承する通常オブジェクトです。Symbol インスタンスは [[SymbolData]] 内部スロットを持ちます。[[SymbolData]] 内部スロットは、この Symbol オブジェクトによって表される Symbol 値です。

20.4.5 Symbol の抽象操作

20.4.5.1 GlobalSymbolRegistry Record

GlobalSymbolRegistry Record は、String キーを Symbol.for を介して登録された Symbol 値と関連付けるために使用される Record です。

GlobalSymbolRegistry Record は 表 59 に列挙されるフィールドを持ちます。

表 59: GlobalSymbolRegistry Record のフィールド
フィールド名 値 用途
[[Key]] a String Symbol をグローバルに識別するために使用される文字列キー。
[[Symbol]] a Symbol 任意の realm から取得できる symbol。

20.4.5.2 KeyForSymbol ( symbol )

抽象操作 KeyForSymbol。引数 symbol (Symbol)。戻り値:(String または undefined)。 symbol が周囲の agent の [[GlobalSymbolRegistry]] List 内にある場合、symbol を登録するために使用された String が返されます。 呼び出されると、次の手順を実行する。

  1. agentRecord を周囲の agent の Agent Record とする。
  2. globalSymbolRegistry を agentRecord.[[GlobalSymbolRegistry]] とする。
  3. globalSymbolRegistry の各要素 element について、次を行う。
    1. SameValue(element.[[Symbol]], symbol) が true である場合、element.[[Key]] を返す。
  4. 表明: globalSymbolRegistry は現在 symbol の項目を含まない。
  5. undefined を返す。

20.5 Error オブジェクト

実行時エラーが発生すると、Error オブジェクトのインスタンスが例外としてスローされます。Error オブジェクトは、ユーザー定義の例外クラスの基底オブジェクトとしても使用できます。

ECMAScript 実装が実行時エラーを検出すると、20.5.5 で定義される NativeError オブジェクトのいずれかの新しいインスタンス、20.5.7 で定義される AggregateError オブジェクトの新しいインスタンス、または 20.5.8 で定義される SuppressedError オブジェクトの新しいインスタンスをスローします。これらの各オブジェクトは、以下で説明される構造を持ち、NativeError の代わりにコンストラクター名として使用される名前、prototype オブジェクトの "name" プロパティ、prototype オブジェクトの実装定義の "message" プロパティ、および %AggregateError% 固有の "errors" プロパティまたは %SuppressedError% 固有の "error" および "suppressed" プロパティの有無だけが異なります。

20.5.1 Error コンストラクター

Error コンストラクターは:

  • %Error% です。
  • グローバルオブジェクトの "Error" プロパティの初期値です。
  • コンストラクターとしてではなく関数として呼び出されたとき、新しい Error オブジェクトを作成して初期化します。したがって、関数呼出し Error(…) は、同じ引数を持つオブジェクト作成式 new Error(…) と同等です。
  • クラス定義の extends 節の値として使用できます。規定された Error の動作を継承しようとするサブクラスコンストラクターは、[[ErrorData]] 内部スロットを持つサブクラスインスタンスを作成して初期化するために、Error コンストラクターへの super 呼出しを含まなければなりません。

20.5.1.1 Error ( message [ , options ] )

この関数は呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined である場合、newTarget をアクティブな関数オブジェクトとする。そうでない場合、newTarget を NewTarget とする。
  2. obj を ? OrdinaryCreateFromConstructor(newTarget, "%Error.prototype%", « [[ErrorData]] ») とする。
  3. message が undefined でない場合、
    1. messageString を ? ToString(message) とする。
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString) を実行する。
  4. ? InstallErrorCause(obj, options) を実行する。
  5. obj を返す。

20.5.2 Error コンストラクターのプロパティ

Error コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 次のプロパティを持ちます。

20.5.2.1 Error.isError ( arg )

この関数は呼び出されたとき、次の手順を実行します。

  1. arg が Object でない場合、false を返す。
  2. arg が [[ErrorData]] 内部スロットを持たない場合、false を返す。
  3. true を返す。

20.5.2.2 Error.prototype

Error.prototype の初期値は Error prototype オブジェクトです。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.5.3 Error Prototype オブジェクトのプロパティ

Error prototype オブジェクトは:

  • %Error.prototype% です。
  • 通常オブジェクトです。
  • Error インスタンスではなく、[[ErrorData]] 内部スロットを持ちません。
  • 値が %Object.prototype% である [[Prototype]] 内部スロットを持ちます。

20.5.3.1 Error.prototype.constructor

Error.prototype.constructor の初期値は %Error% です。

20.5.3.2 Error.prototype.message

Error.prototype.message の初期値は空の String です。

20.5.3.3 Error.prototype.name

Error.prototype.name の初期値は "Error" です。

20.5.3.4 Error.prototype.toString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. obj が Object でない場合、TypeError 例外をスローする。
  3. name を ? Get(obj, "name") とする。
  4. name が undefined である場合、name を "Error" に設定する。そうでない場合、name を ? ToString(name) に設定する。
  5. message を ? Get(obj, "message") とする。
  6. message が undefined である場合、message を空の String に設定する。そうでない場合、message を ? ToString(message) に設定する。
  7. name が空の String である場合、message を返す。
  8. message が空の String である場合、name を返す。
  9. name、コード単位 0x003A (COLON)、コード単位 0x0020 (SPACE)、および message の文字列連結を返す。

20.5.4 Error インスタンスのプロパティ

Error インスタンスは、Error prototype オブジェクトからプロパティを継承し、値が undefined である [[ErrorData]] 内部スロットを持つ通常オブジェクトです。[[ErrorData]] の唯一の規定された用途は、Object.prototype.toString および Error.isError 内で Error、AggregateError、SuppressedError、および NativeError のインスタンスを Error オブジェクトとして識別することです。

20.5.5 この標準で使用されるネイティブエラー型

実行時エラーが検出されると、以下の NativeError オブジェクトのいずれかの新しいインスタンス、または AggregateError オブジェクトもしくは SuppressedError オブジェクトのいずれかの新しいインスタンスがスローされます。すべての NativeError オブジェクトは、20.5.6 で説明される同じ構造を共有します。

20.5.5.1 EvalError

EvalError コンストラクターは %EvalError% です。

この例外は現在、この仕様内では使用されていません。このオブジェクトは、この仕様の以前の版との互換性のために残されています。

20.5.5.2 RangeError

RangeError コンストラクターは %RangeError% です。

許容される値の集合または範囲内にない値を示します。

20.5.5.3 ReferenceError

ReferenceError コンストラクターは %ReferenceError% です。

無効な参照が検出されたことを示します。

20.5.5.4 SyntaxError

SyntaxError コンストラクターは %SyntaxError% です。

構文解析エラーが発生したことを示します。

20.5.5.5 TypeError

TypeError コンストラクターは %TypeError% です。

TypeError は、他の NativeError オブジェクトのいずれも失敗原因を示すものとして適切でない場合に、操作が失敗したことを示すために使用されます。

20.5.5.6 URIError

URIError コンストラクターは %URIError% です。

グローバル URI 処理関数のいずれかが、その定義と互換性のない方法で使用されたことを示します。

20.5.6 NativeError オブジェクトの構造

これらの各オブジェクトは以下で説明される構造を持ち、コンストラクター名として使用される名前と、prototype オブジェクトの "name" プロパティだけが異なります。

各エラーオブジェクトについて、定義内の NativeError への参照は、20.5.5 にある適切なエラーオブジェクト名に置き換えるものとします。

20.5.6.1 NativeError コンストラクター

各 NativeError コンストラクターは:

  • コンストラクターとしてではなく関数として呼び出されたとき、新しい NativeError オブジェクトを作成して初期化します。オブジェクトを関数として呼び出すことは、同じ引数でコンストラクターとして呼び出すことと同等です。したがって、関数呼出し NativeError(…) は、同じ引数を持つオブジェクト作成式 new NativeError(…) と同等です。
  • クラス定義の extends 節の値として使用できます。規定された NativeError の動作を継承しようとするサブクラスコンストラクターは、[[ErrorData]] 内部スロットを持つサブクラスインスタンスを作成して初期化するために、NativeError コンストラクターへの super 呼出しを含まなければなりません。

20.5.6.1.1 NativeError ( message [ , options ] )

各 NativeError 関数は呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined である場合、newTarget をアクティブな関数オブジェクトとする。そうでない場合、newTarget を NewTarget とする。
  2. obj を ? OrdinaryCreateFromConstructor(newTarget, "%NativeError.prototype%", « [[ErrorData]] ») とする。
  3. message が undefined でない場合、
    1. messageString を ? ToString(message) とする。
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString) を実行する。
  4. ? InstallErrorCause(obj, options) を実行する。
  5. obj を返す。

手順 2 で渡される文字列の実際の値は、定義されている NativeError コンストラクターに応じて、"%EvalError.prototype%"、"%RangeError.prototype%"、"%ReferenceError.prototype%"、"%SyntaxError.prototype%"、"%TypeError.prototype%"、または "%URIError.prototype%" のいずれかです。

20.5.6.2 NativeError コンストラクターのプロパティ

各 NativeError コンストラクターは:

  • 値が %Error% である [[Prototype]] 内部スロットを持ちます。
  • 値が String 値 "NativeError" である "name" プロパティを持ちます。
  • 次のプロパティを持ちます。

20.5.6.2.1 NativeError.prototype

NativeError.prototype の初期値は NativeError prototype オブジェクト(20.5.6.3)です。各 NativeError コンストラクターは個別の prototype オブジェクトを持ちます。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.5.6.3 NativeError Prototype オブジェクトのプロパティ

各 NativeError prototype オブジェクトは:

  • 通常オブジェクトです。
  • Error インスタンスではなく、[[ErrorData]] 内部スロットを持ちません。
  • 値が %Error.prototype% である [[Prototype]] 内部スロットを持ちます。

20.5.6.3.1 NativeError.prototype.constructor

特定の NativeError コンストラクターに対する prototype の "constructor" プロパティの初期値は、そのコンストラクター自身です。

20.5.6.3.2 NativeError.prototype.message

特定の NativeError コンストラクターに対する prototype の "message" プロパティの初期値は空の String です。

20.5.6.3.3 NativeError.prototype.name

特定の NativeError コンストラクターに対する prototype の "name" プロパティの初期値は、そのコンストラクターの名前(NativeError の代わりに使用される名前)からなる String 値です。

20.5.6.4 NativeError インスタンスのプロパティ

NativeError インスタンスは、それぞれの NativeError prototype オブジェクトからプロパティを継承し、値が undefined である [[ErrorData]] 内部スロットを持つ通常オブジェクトです。[[ErrorData]] の唯一の規定された用途は、Object.prototype.toString(20.1.3.6)および Error.isError(20.5.2.1)によって Error、AggregateError、SuppressedError、または NativeError のインスタンスを識別することです。

20.5.7 AggregateError オブジェクト

20.5.7.1 AggregateError コンストラクター

AggregateError コンストラクターは:

  • %AggregateError% です。
  • グローバルオブジェクトの "AggregateError" プロパティの初期値です。
  • コンストラクターとしてではなく関数として呼び出されたとき、新しい AggregateError オブジェクトを作成して初期化します。したがって、関数呼出し AggregateError(…) は、同じ引数を持つオブジェクト作成式 new AggregateError(…) と同等です。
  • クラス定義の extends 節の値として使用できます。規定された AggregateError の動作を継承しようとするサブクラスコンストラクターは、[[ErrorData]] 内部スロットを持つサブクラスインスタンスを作成して初期化するために、AggregateError コンストラクターへの super 呼出しを含まなければなりません。

20.5.7.1.1 AggregateError ( errors, message [ , options ] )

この関数は呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined である場合、newTarget をアクティブな関数オブジェクトとする。そうでない場合、newTarget を NewTarget とする。
  2. obj を ? OrdinaryCreateFromConstructor(newTarget, "%AggregateError.prototype%", « [[ErrorData]] ») とする。
  3. message が undefined でない場合、
    1. messageString を ? ToString(message) とする。
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString) を実行する。
  4. ? InstallErrorCause(obj, options) を実行する。
  5. errorsList を ? IteratorToList(? GetIterator(errors, sync)) とする。
  6. ! DefinePropertyOrThrow(obj, "errors", PropertyDescriptor { [[Configurable]]: true, [[Enumerable]]: false, [[Writable]]: true, [[Value]]: CreateArrayFromList(errorsList) }) を実行する。
  7. obj を返す。

20.5.7.2 AggregateError コンストラクターのプロパティ

AggregateError コンストラクターは:

  • 値が %Error% である [[Prototype]] 内部スロットを持ちます。
  • 次のプロパティを持ちます。

20.5.7.2.1 AggregateError.prototype

AggregateError.prototype の初期値は %AggregateError.prototype% です。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.5.7.3 AggregateError Prototype オブジェクトのプロパティ

AggregateError prototype オブジェクトは:

  • %AggregateError.prototype% です。
  • 通常オブジェクトです。
  • Error インスタンスでも AggregateError インスタンスでもなく、[[ErrorData]] 内部スロットを持ちません。
  • 値が %Error.prototype% である [[Prototype]] 内部スロットを持ちます。

20.5.7.3.1 AggregateError.prototype.constructor

AggregateError.prototype.constructor の初期値は %AggregateError% です。

20.5.7.3.2 AggregateError.prototype.message

AggregateError.prototype.message の初期値は空の String です。

20.5.7.3.3 AggregateError.prototype.name

AggregateError.prototype.name の初期値は "AggregateError" です。

20.5.7.4 AggregateError インスタンスのプロパティ

AggregateError インスタンスは、それぞれの AggregateError prototype オブジェクトからプロパティを継承し、値が undefined である [[ErrorData]] 内部スロットを持つ通常オブジェクトです。[[ErrorData]] の唯一の規定された用途は、Object.prototype.toString(20.1.3.6)および Error.isError(20.5.2.1)によって Error、AggregateError、SuppressedError、または NativeError のインスタンスを識別することです。

20.5.8 SuppressedError オブジェクト

20.5.8.1 SuppressedError コンストラクター

SuppressedError コンストラクターは:

  • %SuppressedError% です。
  • グローバルオブジェクトの "SuppressedError" プロパティの初期値です。
  • コンストラクターとしてではなく関数として呼び出されたとき、新しい SuppressedError オブジェクトを作成して初期化します。したがって、関数呼出し SuppressedError(…) は、同じ引数を持つオブジェクト作成式 new SuppressedError(…) と同等です。
  • クラス定義の extends 節の値として使用できます。規定された SuppressedError の動作を継承しようとするサブクラスコンストラクターは、[[ErrorData]] 内部スロットを持つサブクラスインスタンスを作成して初期化するために、SuppressedError コンストラクターへの super 呼出しを含まなければなりません。

20.5.8.1.1 SuppressedError ( error, suppressed, message )

この関数は呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined である場合、newTarget をアクティブな関数オブジェクトとする。そうでない場合、newTarget を NewTarget とする。
  2. obj を ? OrdinaryCreateFromConstructor(newTarget, "%SuppressedError.prototype%", « [[ErrorData]] ») とする。
  3. message が undefined でない場合、
    1. messageString を ? ToString(message) とする。
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString) を実行する。
  4. CreateNonEnumerableDataPropertyOrThrow(obj, "error", error) を実行する。
  5. CreateNonEnumerableDataPropertyOrThrow(obj, "suppressed", suppressed) を実行する。
  6. obj を返す。

20.5.8.2 SuppressedError コンストラクターのプロパティ

SuppressedError コンストラクターは:

  • 値が %Error% である [[Prototype]] 内部スロットを持ちます。
  • 次のプロパティを持ちます。

20.5.8.2.1 SuppressedError.prototype

SuppressedError.prototype の初期値は SuppressedError prototype オブジェクトです。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

20.5.8.3 SuppressedError Prototype オブジェクトのプロパティ

SuppressedError prototype オブジェクトは:

  • %SuppressedError.prototype% です。
  • 通常オブジェクトです。
  • Error インスタンスでも SuppressedError インスタンスでもなく、[[ErrorData]] 内部スロットを持ちません。
  • 値が %Error.prototype% である [[Prototype]] 内部スロットを持ちます。

20.5.8.3.1 SuppressedError.prototype.constructor

SuppressedError.prototype.constructor の初期値は %SuppressedError% です。

20.5.8.3.2 SuppressedError.prototype.message

SuppressedError.prototype.message の初期値は空の String です。

20.5.8.3.3 SuppressedError.prototype.name

SuppressedError.prototype.name の初期値は "SuppressedError" です。

20.5.8.4 SuppressedError インスタンスのプロパティ

SuppressedError インスタンスは、それぞれの SuppressedError prototype オブジェクトからプロパティを継承し、値が undefined である [[ErrorData]] 内部スロットを持つ通常オブジェクトです。[[ErrorData]] の唯一の規定された用途は、Object.prototype.toString および Error.isError 内で Error、AggregateError、SuppressedError、および NativeError のインスタンスを Error オブジェクトとして識別することです。

20.5.9 Error オブジェクトの抽象操作

20.5.9.1 InstallErrorCause ( obj, options )

抽象操作 InstallErrorCause。引数 obj (Object) および options (ECMAScript 言語値)。戻り値:(正常完了 (値:unused) または throw 完了)。 options に "cause" プロパティが存在する場合に、obj 上に "cause" プロパティを作成するために使用されます。 呼び出されると、次の手順を実行する。

  1. options が Object であり、? HasProperty(options, "cause") が true である場合、
    1. cause を ? Get(options, "cause") とする。
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "cause", cause) を実行する。
  2. unused を返す。