このページはECMAScript® 2020 Language Specification19 Fundamental Objects章をJavaScriptの学習目的で私的に日本語訳したものであり、直訳と意訳および推測が混在しています。そのため内容については正確ではない可能性があります。正確な情報を知りたい場合は、原文をご覧ください。また一部訳者によるコメントが含まれていることがあります。※このサイトの内容で損害や不利益を受けたとしても当方は一切の責任を負いません。

19.1 Objectオブジェクト(Object Objects)

Object Objectsは、Objectという名前のオブジェクト

19.1.1 Objectコンストラクター(The Object Constructor)

Objectコンストラクターは、次の特徴があります。

19.1.1.1 Object ( [ value ] )

オプション引数valueを使用してObject関数を呼び出すと、次の手順が実行されます。

  1. NewTargetundefined でも アクティブな関数でもないなら、
    1. ? OrdinaryCreateFromConstructor(NewTarget, "%Object.prototype%") を返す
  2. valueundefined または null なら、 OrdinaryObjectCreate(%Object.prototype%) を返す
  3. ! ToObject(value) を返す

Objectコンストラクター関数の"length"プロパティは、1です。

関数が[[Call]]で呼び出されると、NewTargetはundefined。
[[Construct]]で呼び出されると、NewTargetは値あり。

19.1.2 Objectコンストラクタのプロパティ(Properties of the Object Constructor)

Objectコンストラクタには、次の特徴があります。

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

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

assign関数は、列挙可能なすべての独自プロパティの値をソースオブジェクトからオブジェクトtargetにコピーします。 assign関数が呼び出されると、次の手順が実行されます。

  1. ? ToObject(target) を to とする
  2. 渡された引数が1つだけなら to を返す
  3. 2番目の引数で始まる引数値のリストを Listsources とする
  4. sources の各要素を nextSource とし、インデックスの昇順で、 nextSource ごとに次を実行する
    1. nextSourceundefinednull でないなら、
      1. ! ToObject(nextSource) を from とする
      2. ? from.[[OwnPropertyKeys]]() を keys とする
      3. keys の各要素を nextKey とし、リスト順で nextKey ごとに次を実行する
        1. ? from.[[GetOwnProperty]](nextKey) を desc とする
        2. descundefined ではなく desc.[[Enumerable]] が true なら、
          1. ? Get(from, nextKey) を propValue とする
          2. ? Set(to, nextKey, propValue, true) を実行する
  5. to を返す

assign関数の"length"プロパティは、2です。

19.1.2.2 Object.create ( O, Properties )

create関数は、指定されたプロトタイプで新しいオブジェクトを作成します。 create関数が呼び出されると、次の手順が実行されます。

  1. Type(O) が Object でも Null でもないなら、TypeError例外をスローする
  2. OrdinaryObjectCreate(O) を obj とする
  3. Propertiesundefined でないなら、
    1. ? ObjectDefineProperties(obj, Properties) を返す
  4. obj を返す

19.1.2.3 Object.defineProperties ( O, Properties )

defineProperties関数は、独自プロパティの追加や、既存の独自プロパティの属性の更新をおこないます。 defineProperties関数が呼び出されると、次の手順が実行されます。

  1. ? ObjectDefineProperties(O, Properties) を返す
19.1.2.3.1 ランタイムセマンティクス(Runtime Semantics): ObjectDefineProperties ( O, Properties )

引数O, Propertiesを持つ抽象操作ObjectDefinePropertiesは、次の手順を実行します。

  1. Type(O) が Object型 でないなら、TypeError例外をスローする
  2. ? ToObject(Properties) を props とする
  3. ? props.[[OwnPropertyKeys]]() を keys とする
  4. 空の新規Listdescriptors とする
  5. keys の 各要素を nextKey とし、リスト順で nextKey ごとに次を実行する
    1. ? props.[[GetOwnProperty]](nextKey) を propDesc とする
    2. propDescundefined ではなく、 propDesc.[[Enumerable]] が true なら、
      1. ? Get(props, nextKey) を descObj とする
      2. ? ToPropertyDescriptor(descObj) を desc とする
      3. nextKeydesc で構成されるペアを (2要素のリスト) を descriptors の最後に追加する
  6. descriptors の各ペアを pair とし、リスト順で pair ごとに次を実行する
    1. pair の 最初の要素を P とする
    2. pair の 2番目の要素を desc とする
    3. ? DefinePropertyOrThrow(O, P, desc) を実行する
  7. O を返す

19.1.2.4 Object.defineProperty ( O, P, Attributes )

defineProperty関数は、独自プロパティを追加や、既存の独自プロパティの属性を更新します。 defineProperty関数が呼び出されると、次の手順が実行されます。

  1. Type(O) が Object型 でないなら、TypeError例外をスローする
  2. ? ToPropertyKey(P) を key とする
  3. ? ToPropertyDescriptor(Attributes) を desc とする
  4. ? DefinePropertyOrThrow(O, key, desc) を実行する
  5. O を返す

19.1.2.5 Object.entries ( O )

entries関数が引数Oで呼び出されると、次の手順が実行されます。

  1. ? ToObject(O) を obj とする
  2. ? EnumerableOwnPropertyNames(obj, key+value) を nameList とする
  3. CreateArrayFromList(nameList) を返す

19.1.2.6 Object.freeze ( O )

freeze関数が呼び出されると、次の手順が実行されます。

  1. Type(O) が Object型 でないなら、 O を返す
  2. ? SetIntegrityLevel(O, frozen) を status とする
  3. statusfalse なら、TypeError例外をスローする
  4. O を返す

19.1.2.7 Object.fromEntries ( iterable )

fromEntriesメソッドが引数iterableで呼び出されると、次の手順が実行されます。

  1. ? RequireObjectCoercible(iterable) を実行する
  2. OrdinaryObjectCreate(%Object.prototype%) を obj とする
  3. Assert: obj独自プロパティを持たない拡張可能な通常のオブジェクト
  4. CreateDataPropertyOnObject関数 で定義されたアルゴリズムステップを stepsDefine とする
  5. ! CreateBuiltinFunction(stepsDefine, « ») を adder とする
  6. ? AddEntriesFromIterable(obj, iterable, adder) を返す
作成されたadder関数は、ECMAScriptコードに直接アクセスすることはできません。
19.1.2.7.1 CreateDataPropertyOnObject関数

CreateDataPropertyOnObject関数は、匿名の組み込み関数です。 CreateDataPropertyOnObject関数が引数keyvalueを使用して呼び出されると、次の手順が実行されます。

  1. this値 を O とする
  2. Assert: Type(O) は Object型
  3. Assert: O は拡張可能な 通常のオブジェクト
  4. ? ToPropertyKey(key) を propertyKey とする
  5. ! CreateDataPropertyOrThrow(O, propertyKey, value) を実行する
  6. undefined を返す

19.1.2.8 Object.getOwnPropertyDescriptor ( O, P )

getOwnPropertyDescriptor関数が呼び出されると、次の手順が実行されます。

  1. ? ToObject(O) を obj とする
  2. ? ToPropertyKey(P) を key とする
  3. ? obj.[[GetOwnProperty]](key) を desc とする
  4. FromPropertyDescriptor(desc) を返す

19.1.2.9 Object.getOwnPropertyDescriptors ( O )

getOwnPropertyDescriptors関数が呼び出されると、次の手順が実行されます。

  1. ? ToObject(O) を obj とする
  2. ? obj.[[OwnPropertyKeys]]() を ownKeys とする
  3. ! OrdinaryObjectCreate(%Object.prototype%) を descriptors とする
  4. ownKeys の各要素を key とし、リスト順で key ごとに次を実行する
    1. ? obj.[[GetOwnProperty]](key) を desc とする
    2. ! FromPropertyDescriptor(desc) を descriptor とする
    3. descriptorundefined でないなら、 ! CreateDataPropertyOrThrow(descriptors, key, descriptor) を実行する
  5. descriptors を返す

19.1.2.10 Object.getOwnPropertyNames ( O )

getOwnPropertyNames関数が呼び出されると、次の手順が実行されます。

  1. ? GetOwnPropertyKeys(O, string) を返す

19.1.2.11 Object.getOwnPropertySymbols ( O )

getOwnPropertySymbols関数が引数Oで呼び出されると、次の手順が実行されます。

  1. ? GetOwnPropertyKeys(O, symbol) を返す
19.1.2.11.1 ランタイムセマンティクス(Runtime Semantics): GetOwnPropertyKeys ( O, type )

抽象演算GetOwnPropertyKeysは、オブジェクトOtype(stringまたはsymbol)を使用して呼び出されると、次の手順が実行されます。

  1. ? ToObject(O) を obj とする
  2. ? obj.[[OwnPropertyKeys]]() を keys とする
  3. 空の新規ListnameList とする
  4. keys の 各要素を nextKey とし、リスト順で nextKey ごとに次を実行する
    1. Type(nextKey) が Symboltype が symbol型 または Type(nextKey) が String型 で typestring なら、
      1. nextKeynameList の最後に追加する
  5. CreateArrayFromList(nameList) を返す

19.1.2.12 Object.getPrototypeOf ( O )

getPrototypeOf関数が引数Oで呼び出されると、次の手順が実行されます。

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

19.1.2.13 Object.is ( value1, value2 )

is関数が引数value1value2で呼び出されると、次の手順が実行されます。

  1. SameValue(value1, value2) を返す

19.1.2.14 Object.isExtensible ( O )

isExtensible関数が引数Oで呼び出されると、次の手順が実行されます。

  1. Type(O) が Object型でないなら、 false を返す
  2. ? IsExtensible(O) を返す

19.1.2.15 Object.isFrozen ( O )

isFrozen関数が引数Oで呼び出されると、次の手順が実行されます。

  1. Type(O) が Object型 でないなら、 true を返す
  2. ? TestIntegrityLevel(O, frozen) を返す

19.1.2.16 Object.isSealed ( O )

isSealed関数が引数Oで呼び出されると、次の手順が実行されます。

  1. Type(O) が Object型でないなら、 true を返す
  2. ? TestIntegrityLevel(O, sealed) を返す

19.1.2.17 Object.keys ( O )

keys関数が引数Oで呼び出されると、次の手順が実行されます。

  1. ? ToObject(O) を obj とする
  2. ? EnumerableOwnPropertyNames(obj, key) を nameList とする
  3. CreateArrayFromList(nameList) を返す

19.1.2.18 Object.preventExtensions ( O )

preventExtensions関数が引数Oで呼び出されると、次の手順が実行されます。

  1. Type(O) が Object型 でないなら、 O を返す
  2. ? O.[[PreventExtensions]]() を status とする
  3. statusfalse なら、TypeError例外をスローする
  4. O を返す

19.1.2.19 Object.prototype

Object.prototypeの初期値は%Object.prototype%です。
このプロパティの属性は、{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } です。

19.1.2.20 Object.seal ( O )

seal関数が引数Oで呼び出されると、次の手順が実行されます。

  1. Type(O) が Object型 でないなら、 O を返す
  2. ? SetIntegrityLevel(O, sealed) を status とする
  3. statusfalse なら、TypeError例外をスローする
  4. O を返す

19.1.2.21 Object.setPrototypeOf ( O, proto )

setPrototypeOf関数が引数Oprotoで呼び出されると、次の手順が実行されます。

  1. ? RequireObjectCoercible(O) を O にセットする
  2. Type(proto) が Object型 でも Null でもないなら、TypeError例外をスローする
  3. Type(O) が Object型 でないなら、 O を返す
  4. ? O.[[SetPrototypeOf]](proto) を status とする
  5. statusfalse なら、TypeError例外をスローする
  6. O を返す

19.1.2.22 Object.values ( O )

setPrototypeOf関数が引数Oで呼び出されると、次の手順が実行されます。

  1. ? ToObject(O) を obj とする
  2. ? EnumerableOwnPropertyNames(obj, value) を nameList とする
  3. CreateArrayFromList(nameList) を返す

19.1.3 Objectプロトタイプオブジェクトのプロパティ(Properties of the Object Prototype Object)

Objectプロトタイプオブジェクトは、次の特徴があります。

  • 組み込みオブジェクト%ObjectPrototype%です。
  • [[Extensible]]内部スロットがあり、値はtrueです。
  • 9.4.7.1で定義されている[[SetPrototypeOf]]メソッド以外の、通常のオブジェクトに対して定義された内部メソッドがあります。(したがって、これはイミュータブルプロトタイプエキゾチックオブジェクトです。)
  • [[Prototype]]内部スロットがあり、値はnullです。

19.1.3.1 Object.prototype.constructor

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

19.1.3.2 Object.prototype.hasOwnProperty ( V )

hasOwnPropertyメソッドが引数Vで呼び出されると、次の手順が実行されます。

  1. ? ToPropertyKey(V) を P とする
  2. ? ToObject(this値) を O とする
  3. ? HasOwnProperty(O, P) を返す
this値がundefinedまたはnullであっても、この仕様の以前のエディションで手順1でスローされた例外が引き続きスローされるように、手順1と2の順序付けがなされています。

19.1.3.3 Object.prototype.isPrototypeOf ( V )

isPrototypeOfメソッドが引数Vで呼び出されると、次の手順が実行されます。

  1. Type(V) が Object型 でないなら、 false を返す
  2. ? ToObject(this値) を O とする
  3. 繰り返す
    1. ? V.[[GetPrototypeOf]]() を V にセットする
    2. Vnull なら、 false を返す
    3. SameValue(O, V) が true なら、 true を返す
手順1と2の順序付けでは、V がオブジェクトではなく、this値がundefinedまたは null の場合に、この仕様の以前のエディションで指定された動作が保持されます。

19.1.3.4 Object.prototype.propertyIsEnumerable ( V )

propertyIsEnumerableメソッドが引数Vで呼び出されると、次の手順が実行されます。

  1. ? ToPropertyKey(V) を P とする
  2. ? ToObject(this値) を O とする
  3. ? O.[[GetOwnProperty]](P) を desc とする
  4. descundefined なら、 false を返す
  5. desc.[[Enumerable]] を返す
このメソッドは、プロトタイプチェーン内のオブジェクトを考慮しません。
ステップ1と2の順序は、この仕様の以前のエディションでステップ1によってスローされたはずの例外が、this値がundefinedまたはnullであっても、引き続きスローされるように選択されています。

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

toLocaleStringメソッドが呼び出されると、次の手順が実行されます。

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

この関数のオプションのパラメーターは使用されません。ECMA-402 toLocaleString関数で使用されるパラメーターパターンに対応することを目的としています。 ECMA-402サポートをおこなわない実装でも、パラメーター位置を他の目的に使用してはいけません。

この関数は、ロケール固有のtoString動作を持たないオブジェクトに汎用のtoLocaleString実装を提供します。 Array、Number、Date、および%TypedArray% は、ロケールに依存する独自のtoLocaleStringメソッドを提供します。
ECMA-402は、意図的に、このデフォルトの実装に代わるものを提供していません。

19.1.3.6 Object.prototype.toString ( )

toStringメソッドが呼び出されると、次の手順が実行されます。

  1. this値 が undefined なら、 "[object Undefined]" を返す
  2. this値 が null なら、 "[object Null]" を返す
  3. ! ToObject(this値) を O とする
  4. ? IsArray(O) を isArray とする
  5. isArraytrue なら、 "Array"builtinTag とする
  6. 5. と異なるなり、 O が [[ParameterMap]] 内部スロットを持っているなら、 "Arguments"builtinTag とする
  7. 6. と異なるなり、 O が [[Call]] 内部メソッドを持っているなら、 "Function"builtinTag とする
  8. 7. と異なるなり、 O が [[ErrorData]] 内部スロットを持っているなら、 "Error"builtinTag とする
  9. 8. と異なるなり、O が [[BooleanData]] 内部スロットを持っているなら、 "Boolean"builtinTag とする
  10. 9. と異なるなり、O が [[NumberData]] 内部スロットを持っているなら、 "Number"builtinTag とする
  11. 10. と異なるなり、 O が [[StringData]] 内部スロットを持っているなら、 "String"builtinTag とする
  12. 11. と異なるなり、O が [[DateValue]] 内部スロットを持っているなら、 "Date"builtinTag とする
  13. 12. と異なるなり、O が [[RegExpMatcher]] 内部スロットを持っているなら、"RegExp"builtinTag とする
  14. 13. と異なるなら、 "Object"builtinTag とする
  15. ? Get(O, @@toStringTag) を tag とする
  16. Type(tag) が String型 でないなら、 builtinTagtag にセットする
  17. "[object ", tag, and "]" の文字列連結を返す

この関数は、%ObjProto_toString%組み込みオブジェクトです。

歴史的にこの関数は、この仕様の以前のエディションで、[[Class]]内部スロット(さまざまな組み込みオブジェクトの名義型タグとして使用されていた)の文字列値にアクセスするために使用されることがありました。 上記のtoStringの定義は、組み込みオブジェクトの種類の確認手段としてtoStringを使用するレガシーコードの互換性を維持します。 他の種類の組み込みオブジェクトやプログラム定義オブジェクトに対して信頼性の高い型テストメカニズムは提供されません。さらにプログラムは、このようなレガシ型テストの信頼性を無効にする方法で@@toStringTagを使用できます。

19.1.3.7 Object.prototype.valueOf ( )

valueOfメソッドが呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を返す

この関数は、%ObjProto_valueOf%組み込みオブジェクトです。

19.1.4 オブジェクトインスタンスのプロパティ(Properties of Object Instances)

オブジェクトインスタンスには、オブジェクトプロトタイプオブジェクトから継承されたプロパティがあります。その他の特別なプロパティはありません。

19.2 Functionオブジェクト(Function Objects)

19.2.1 Functionコンストラクター(The Function Constructor)

Functionコンストラクターは、次の特徴があります。

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

19.2.1.1 Function ( p1, p2, … , pn, body )

最後の引数は、関数の本体(実行可能コード)を指定します。 先行する引数はすべて仮パラメーターを指定します。

Function関数がいくつかの引数p1、p2、…、pn、body(引数がない場合もあり)で呼び出された場合、次の手順が実行されます。

  1. アクティブ関数オブジェクトC とする
  2. [[Call]]または[[Construct]]から渡されたargumentsListargs とする
  3. ? CreateDynamicFunction(C, NewTarget, normal, args) を返す

次の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")

19.2.1.1.1 ランタイムセマンティクス(Runtime Semantics): CreateDynamicFunction ( constructor, newTarget, kind, args )

抽象操作CreateDynamicFunctionは、引数constructornewTargetkindargsを使用して呼び出されます。 constructorは、このアクションを実行するコンストラクター関数です。newTargetは、newが最初に適用されたコンストラクターです。kindは、normalgeneratorasyncasyncGeneratorのいずれかです。argsは、コンストラクターに渡された引数値のリストです。 次の手順が実行されます。

  1. Assert: 実行コンテキストスタック には2つ以上の要素あり
  2. 実行コンテキストスタック の上から2番目の要素を callerContext とする
  3. callerContextRealmコンポーネントcallerRealm とする
  4. 現在のレルムレコードcalleeRealm とする
  5. ? HostEnsureCanCompileStrings(callerRealm, calleeRealm) を実行する
  6. newTargetundefined なら constructornewTarget にセットする
  7. kindnormal なら、
    1. 文法シンボル FunctionBody[~Yield, ~Await]goal とする
    2. 文法シンボル FormalParameters[~Yield, ~Await]parameterGoal とする
    3. "%Function.prototype%"fallbackProto とする
  8. 7. と異なるなり、 kindgenerator なら、
    1. 文法シンボル GeneratorBodygoal とする
    2. 文法シンボル FormalParameters[+Yield, ~Await]parameterGoal とする
    3. "%Generator%"fallbackProto とする
  9. 8. と異なるなり、 kind is async なら、
    1. 文法シンボル AsyncFunctionBodygoal とする
    2. 文法シンボル FormalParameters[~Yield, +Await]parameterGoal とする
    3. "%AsyncFunction.prototype%"fallbackProto とする
  10. 9. と異なるなら、
    1. Assert: kindasyncGenerator
    2. 文法シンボル AsyncGeneratorBodygoal とする
    3. 文法シンボル FormalParameters[+Yield, +Await]parameterGoal とする
    4. "%AsyncGenerator%"fallbackProto とする
  11. args の要素数を argCount とする
  12. empty String を P とする
  13. argCount = 0 なら、 empty String を bodyArg とする
  14. 13. と異なるなり argCount = 1 なら args[0] を bodyArg とする
  15. 14. と異なるなら、
    1. Assert: argCount > 1
    2. args[0] を firstArg とする
    3. ? ToString(firstArg) を P にセットする
    4. 1 を k とする
    5. k < argCount - 1 の間繰り返す
      1. args[k] を nextArg とする
      2. ? ToString(nextArg) を nextArgString とする
      3. P"," (カンマ) と nextArgString の文字列連結を P にセットする
      4. k + 1k にセットする
    6. args[k] を bodyArg とする
  16. 0x000A (LINE FEED) と ? ToString(bodyArg) と 0x000A (LINE FEED) の文字列連結を bodyString とする
  17. 次のサブステップを実装に依存する順序で実行する。(解析とエラー検出をインターリーブする可能性があり)
    1. ゴールシンボルとしてparameterGoalを使用し、! UTF16DecodeString(P) の解析結果を parameters とする。解析失敗なら、SyntaxError例外をスローする
    2. ゴールシンボルとしてgoalを使用し、! UTF16DecodeString(bodyString) の解析結果を body とする。解析失敗なら、SyntaxError例外をスローする
    3. bodyContainsUseStrictstrict とする
    4. parametersまたはbodyで静的セマンティクスエラーが検出されたなら、SyntaxError例外をスロする。 stricttrue なら、UniqueFormalParameters : FormalParameters の早期エラールールが適用される
    5. stricttrueparametersIsSimpleParameterListfalse なら、SyntaxError例外をスローする
    6. parametersBoundNames の要素が bodyLexicallyDeclaredNames にもあるなら、SyntaxError例外をスローする。
    7. body Contains SuperCalltrue なら、SyntaxError例外をスローする
    8. parameters Contains SuperCalltrue なら、SyntaxError例外をスローする
    9. body Contains SuperPropertytrue なら、SyntaxError例外をスローする
    10. parameters Contains SuperPropertytrue なら、SyntaxError例外をスローする
    11. kindgeneratorasyncGenerator なら、
      1. parameters Contains YieldExpressiontrue なら、SyntaxError例外をスローする
    12. kindasyncasyncGenerator なら、
      1. parameters Contains AwaitExpressiontrue なら、SyntaxError例外をスローする
    13. stricttrue なら、
      1. parametersBoundNames の要素が重複したいるなら SyntaxError例外をスローする
  18. ? GetPrototypeFromConstructor(newTarget, fallbackProto) を proto とする
  19. 現在のレルムレコードrealmF とする
  20. realmF.[[GlobalEnv]] を scope とする
  21. ! OrdinaryFunctionCreate(proto, parameters, body, non-lexical-this, scope) を F とする
  22. kindgenerator なら、
    1. OrdinaryObjectCreate(%Generator.prototype%) を prototype とする
    2. DefinePropertyOrThrow(F, "prototype",プロパティ記述子 { [[Value]]: prototype, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) を実行する
  23. 22. と異なるなり、 kindasyncGenerator なら、
    1. OrdinaryObjectCreate(%AsyncGenerator.prototype%) を prototype とする
    2. DefinePropertyOrThrow(F, "prototype",プロパティ記述子 { [[Value]]: prototype, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) を実行する
  24. 23. と異なるなり、 kindnormal なら、 MakeConstructor(F) を実行する
  25. NOTE: 非同期関数は構築できない。[[Construct]]内部メソッドまたは"prototype"プロパティがない
  26. SetFunctionName(F, "anonymous") を実行する
  27. 表48kind に対応するプレフィックスを prefix とする
  28. prefix" anonymous("P0x000A (LINE FEED) と ") {"bodyString"}" の文字列連結を sourceString とする
  29. ! UTF16DecodeString(sourceString) を F.[[SourceText]] にセットする
  30. F を返す
関数がコンストラクターとして使用される可能性があるので、CreateDynamicFunction を使用して作成されたすべての非同期ではない関数に対して"prototype" プロパティが作成されます。
表48: 動的関数のSourceTextプレフィックス
Kind プレフィックス
normal "function"
generator "function*"
async "async function"
asyncGenerator "async function*"

19.2.2 Functionコンストラクターのプロパティ(Properties of the Function Constructor)

Functionコンストラクターには、次の特徴があります。

19.2.2.1 Function.length

これは、値が1のデータプロパティです。このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。

19.2.2.2 Function.prototype

Function.prototypeの値は、組み込み関数プロトタイプオブジェクトである%Function.prototype%です。

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

19.2.3 Functionプロトタイプオブジェクトのプロパティ(Properties of the Function Prototype Object)

Functionプロトタイプオブジェクトには、次の特徴があります。

  • %Function.prototype%です。
  • それ自体が組み込み関数オブジェクトです。
  • 引数を受け入れ、呼び出されるとundefinedを返します。
  • [[Construct]]内部メソッドがありません。 new演算子のコンストラクターとして使用できません。
  • 値が%Object.prototype%の[[Prototype]]内部スロットがあります。
  • "prototype"プロパティはありません。
  • "length"プロパティの値0です。
  • 値が空の文字列である"name"プロパティがあり、値はempty Stringです。
ECMAScript2015仕様より前に作成されたECMAScriptコードとの互換性を確保するために、Functionプロトタイプオブジェクトは 関数オブジェクトとして指定されています。

19.2.3.1 Function.prototype.apply ( thisArg, argArray )

applyメソッドが引数thisArgおよびargArrayを指定して呼び出されると、次の手順が実行されます。

  1. this値 を func とする
  2. IsCallable(func) が false なら、TypeError例外をスローする
  3. argArrayundefinednull なら、
    1. PrepareForTailCall() を実行する
    2. ? Call(func, thisArg) を返す
  4. ? CreateListFromArrayLike(argArray) を argList とする
  5. PrepareForTailCall() を実行する
  6. ? Call(func, thisArg, argList) を返す
thisArg値は、this値として変更せずに渡されます。 これはエディション3からの変更です。undefinedまたはnullthisArgグローバルオブジェクト に置き換えられ、ToObjectが他のすべての値に適用され、その結果がthis値として渡されます。 thisArgは変更せずに渡されますが、非strict関数は関数へのエントリ時にこれらの変換を実行します。
funcがアロー関数またはバウンド関数エキゾチックオブジェクトである場合、thisArgはステップ6の関数[[Call]]によって無視されます。

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

bindメソッドが引数thisArgと0個以上の引数を指定して呼び出されると、次の手順が実行されます。

  1. this値 を Target とする
  2. IsCallable(Target) が false なら、TypeError例外をスローする
  3. thisArgの後に続く引数を、順番に格納した新規リスト(引数0ならempty)を、 args とする
  4. ? BoundFunctionCreate(Target, thisArg, args) を F とする
  5. ? HasOwnProperty(Target, "length") を targetHasLength とする
  6. targetHasLengthtrue なら、
    1. ? Get(Target, "length") を targetLen とする
    2. Type(targetLen) が Number型でないなら、 0L とする
    3. b. と異なるなら、
      1. ! ToInteger(targetLen) を targetLen にセットする
      2. 0と、targetLenの結果からargsの要素数を引いたものの大きい方を、L とする
  7. 6. と異なるなら、 0L とする
  8. ! SetFunctionLength(F, L) を実行する
  9. ? Get(Target, "name") を targetName とする
  10. Type(targetName) が String型 でないなら、empty String を targetName にセットする
  11. SetFunctionName(F, targetName, "bound") を実行する
  12. F を返す
Function.prototype.bindを使用して作成された関数オブジェクトは、エキゾチックなオブジェクトです。 また、"prototype"プロパティはありません。
funcがアロー関数またはバウンド関数エキゾチックオブジェクトである場合、このメソッドに渡されたthisArgは、後続のFの呼び出しでは使用されません。

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

引数thisArgと0個以上の引数を指定してcallメソッドが呼び出されると、次の手順が実行されます。

  1. this値 を func とする
  2. IsCallable(func) が false なら、TypeError例外をスローする
  3. 空の新規ListargList とする
  4. このメソッドが複数の引数で呼び出されたなら、左から右の順序で、2番目の引数から始めて、各引数をargListの最後の要素として追加する
  5. PrepareForTailCall() を実行する
  6. ? Call(func, thisArg, argList) を返す
thisArg値は、this値として変更せずに渡されます。 これはエディション3からの変更であり、undefinedまたはnullthisArgグローバルオブジェクトに置き換えられ、ToObjectが他のすべての値に適用され、その結果がthis値として渡されます。 thisArgは変更せずに渡されますが、非strict関数は関数へのエントリ時にこれらの変換を実行します。
funcがアロー関数またはバウンド関数エキゾチックオブジェクトである場合、thisArgはステップ6の関数[[Call]]によって無視されます。

19.2.3.4 Function.prototype.constructor

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

19.2.3.5 Function.prototype.toString ( )

toStringメソッドが呼び出されると、次の手順が実行されます。

  1. this値 を func とする
  2. funcバウンド関数エキゾチックオブジェクト または組み込み関数オブジェクトなら、funcの実装に依存する文字列ソースコード表現を返す。 表現には、NativeFunctionの構文を使用する。 また、func既知組み込みオブジェクトで、無名関数として識別されないなら、返される文字列のPropertyNameと一致する部分は、funcの"name"プロパティの初期値である必要がある。
  3. Type(func) が Object型 で、 func が [[SourceText]] 内部スロットを持ち、 func.[[SourceText]] がUnicodeコードポイントのシーケンスで、 ! HostHasSourceTextAvailable(func) が true なら、
    1. ! UTF16Encode(func.[[SourceText]]) を返す
  4. Type(func) が Object型 で、 IsCallable(func) が true なら、funcの実装に依存する文字列ソースコード表現を返す。 表現には、NativeFunctionの構文を使用する。
  5. TypeError例外をスローする

NativeFunction :

functionPropertyName[~Yield, ~Await]opt (FormalParameters[~Yield, ~Await] ){[nativecode]}

19.2.3.6 Function.prototype [ @@hasInstance ] ( V )

オブジェクトFの@@hasInstanceメソッドが値Vで呼び出されると、次の手順が実行されます。

  1. this値 を F とする
  2. ? OrdinaryHasInstance(F, V) を返す

この関数の"name"プロパティの値は"[Symbol.hasInstance]"です。

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

これは@@hasInstanceのデフォルトの実装で、ほとんどの関数が継承します。 @@hasInstanceは、特定のコンストラクターのインスタンスであるかどうかを判別するために、instanceof演算子によって呼び出されます。

次のような表現

v instanceof F

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

F[@@hasInstance](v)

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

このプロパティは、書き込みおよび構成できません。バインドされた関数のターゲット関数を、グローバルに公開するような改ざんを防ぐためです。

19.2.4 Functionインスタンス(Function Instances)

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

Functionインスタンスには次のプロパティがあります。

19.2.4.1 length

"length"プロパティの値は整数で、関数が受け付ける引数の数を示します。 ただしこの言語は、引数の数が"length"でない場合でも、関数を呼び出すことができます。 "length"プロパティ数以外の引数で呼び出された関数の動作は、関数に依存します。 このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。

19.2.4.2 name

"name"プロパティの値は、関数を説明する文字列です。 名前には特別な意味はありませんが、通常は変数名またはプロパティ名で、ECMAScriptコードで関数を参照するために使用されます。このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。

コンテキスト名が関連付けられていない無名関数オブジェクトには、"name"独自プロパティはありません。ただし、%Function.prototype%"name"プロパティを継承します。

19.2.4.3 prototype

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

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

Function.prototype.bindを使用して、またはMethodDefinitionGeneratorMethodまたはAsyncGeneratorMethodではない)またはArrowFunctionを評価することによって作成された関数オブジェクトには、"prototype"プロパティがありません。

19.2.5 HostHasSourceTextAvailable ( func )

HostHasSourceTextAvailableは、実装で定義された抽象操作です。ホスト環境で、特定の関数にソーステキストが提供されないようにすることができます。

HostHasSourceTextAvailableの実装は、正常に完了する必要があります。 引数として特定の同じ引数で呼び出されるたびに、同じ完了レコードを返す必要があります。 HostHasSourceTextAvailableのデフォルトの実装は、値がtrueの通常の完了を無条件に返すことです。

19.3 Booleanオブジェクト(Boolean Objects)

19.3.1 Booleanコンストラクター(The Boolean Constructor)

Booleanコンストラクターは、次のような特徴があります。

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

19.3.1.1 Boolean ( value )

Booleanが引数valueで呼び出されると、次の手順が実行されます。

  1. ! ToBoolean(value) を b とする
  2. NewTargetundefined なら、 b を返す
  3. ? OrdinaryCreateFromConstructor(NewTarget, "%Boolean.prototype%", « [[BooleanData]] ») を O とする
  4. bO.[[BooleanData]] にセットする
  5. O を返す

19.3.2 Booleanコンストラクターのプロパティ(Properties of the Boolean Constructor)

Booleanコンストラクターは、次のような特徴があります。

  • [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
  • 次のプロパティがあります。

19.3.2.1 Boolean.prototype

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

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

19.3.3 Booleanプロトタイプオブジェクトのプロパティ(Properties of the Boolean Prototype Object)

Booleanプロトタイプオブジェクトは、次のような特徴があります。

  • 組み込みオブジェクト%BooleanPrototype%です。
  • 通常のオブジェクトです。
  • それ自体がBooleanオブジェクトです。 値がfalseの[[BooleanData]]内部スロットがあります。
  • 値が%Object.prototype%の[[Prototype]]内部スロットがあります。

抽象操作thisBooleanValue(value) は、次の手順を実行します。

  1. Type(value) が Boolean型 なら、 value を返す
  2. Type(value) が Object型 で value が [[BooleanData]] 内部スロットを持っているなら、
    1. value.[[BooleanData]] を b とする
    2. Assert: Type(b) は Boolean型
    3. b を返す
  3. TypeError例外をスローする

19.3.3.1 Boolean.prototype.constructor

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

19.3.3.2 Boolean.prototype.toString ( )

次の手順が実行されます。

  1. ? thisBooleanValue(this値) を b とする
  2. btrue なら、 "true" を、異なるなら "false" を返す

19.3.3.3 Boolean.prototype.valueOf ( )

次の手順が実行されます。

  1. ? thisBooleanValue(this値) を返す

19.3.4 Booleanインスタンスのプロパティ(Properties of Boolean Instances)

Booleanインスタンスは、Booleanプロトタイプオブジェクトからプロパティを継承する通常のオブジェクトです。 Booleanインスタンスには[[BooleanData]]内部スロットがあります。 [[BooleanData]]内部スロットは、このブールオブジェクトで表されるブール値です。

19.4 Symbolオブジェクト(Symbol Objects)

19.4.1 Symbolコンストラクター(The Symbol Constructor)

Symbolコンストラクターは、次のような特徴があります。

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

19.4.1.1 Symbol ( [ description ] )

オプションの引数descriptionを指定してSymbolが呼び出されると、次の手順が実行されます。

  1. NewTargetundefined でないなら、TypeError例外をスローする
  2. descriptionundefined なら、 undefineddescString とする
  3. 2. と異なるなら、 ? ToString(description) を descString とする
  4. [[Description]]値がdescStringである新しい一意のSymbol値を返す

19.4.2 Symbolコンストラクターのプロパティ(Properties of the Symbol Constructor)

Symbolコンストラクターは、次のような特徴があります。

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

19.4.2.1 Symbol.asyncIterator

Symbol.asyncIteratorの初期値は、既知シンボル@@asyncIteratorです(表1)。

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

19.4.2.2 Symbol.for ( key )

Symbol.forが引数keyを指定して呼び出されると、次の手順が実行されます。

  1. ? ToString(key) を stringKey とする
  2. GlobalSymbolRegistry リストの 各要素を e とし、e ごとに次を実行する
    1. SameValue(e.[[Key]], stringKey) が true なら、 e. [[Symbol]] を返す
  3. Assert: GlobalSymbolRegistryには、stringKeyのエントリが含まれていない
  4. [[Description]]値が stringKey である新しい一意のSymbol値 を newSymbol とする
  5. GlobalSymbolRegistry リストに Record { [[Key]]: stringKey, [[Symbol]]: newSymbol } を追加する
  6. newSymbol を返す

GlobalSymbolRegistryは、グローバルなリストです。 すべてのレルムで共有されます。 ECMAScriptコードの評価前に、新しい空のリストとして初期化されます。 GlobalSymbolRegistryの要素は、表49の構造をもつレコードです。

表49: GlobalSymbolRegistryレコードフィールド
フィールド名 目的
[[Key]] String シンボルをグローバルに識別するために使用される文字列キー。
[[Symbol]] Symbol 任意のレルムから取得できるシンボル。

19.4.2.3 Symbol.hasInstance

Symbol.hasInstanceの初期値は、既知シンボル@@hasInstanceです(表1)。

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

19.4.2.4 Symbol.isConcatSpreadable

Symbol.isConcatSpreadableの初期値は、既知シンボル@@isConcatSpreadableです(表1)。

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

19.4.2.5 Symbol.iterator

Symbol.iteratorの初期値は、既知シンボル@@iteratorです(表1)。

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

19.4.2.6 Symbol.keyFor ( sym )

Symbol.keyForが引数symで呼び出されると、次の手順が実行されます。

  1. Type(sym) が Symbol型 でないなら、TypeError例外をスローする
  2. GlobalSymbolRegistry リストの各要素を e とし、e ごとに次を実行する
    1. SameValue(e.[[Symbol]], sym) が true なら、 e を返す [[Key]]
  3. Assert: GlobalSymbolRegistryに、symのエントリが含まれていない
  4. undefined を返す

19.4.2.7 Symbol.match

Symbol.matchの初期値は、既知シンボル@@matchです(表1)。

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

19.4.2.8 Symbol.matchAll

Symbol.matchAllの初期値は、既知シンボル@@matchAllです(表1)。

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

19.4.2.9 Symbol.prototype

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

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

19.4.2.10 Symbol.replace

Symbol.replaceの初期値は、既知シンボル@@replaceです(表1)。

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

19.4.2.11 Symbol.search

Symbol.searchの初期値は、既知シンボル@@searchです(表1)。

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

19.4.2.12 Symbol.species

Symbol.speciesの初期値は、既知シンボル@@speciesです(表1)。

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

19.4.2.13 Symbol.split

Symbol.splitの初期値は、既知シンボル@@splitです(表1)。

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

19.4.2.14 Symbol.toPrimitive

Symbol.toPrimitiveの初期値は、既知シンボル@@toPrimitiveです(表1)。

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

19.4.2.15 Symbol.toStringTag

Symbol.toStringTagの初期値は、既知シンボル@@toStringTagです(表1)。

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

19.4.2.16 Symbol.unscopables

Symbol.unscopablesの初期値は、既知シンボル@@unscopablesです(表1)。

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

19.4.3 Symbolプロトタイプオブジェクトのプロパティ(Properties of the Symbol Prototype Object)

Symbolプロトタイプオブジェクトは、次のような特徴があります。

  • 組み込みオブジェクト%SymbolPrototype%です。
  • 通常のオブジェクト です。
  • Symbolインスタンスではありません。[[SymbolData]]内部スロットがありません。
  • [[Prototype]]内部スロットがあり、値は%Object.prototype%です。

抽象操作thisSymbolValue(value)は、次の手順を実行します。

  1. Type(value) が Symbol型 なら、 value を返す
  2. Type(value) が Object型 で value が [[SymbolData]] 内部スロットを持っているなら、
    1. value.[[SymbolData]] を s とする
    2. Assert: Type(s) は Symbol型
    3. s を返す
  3. TypeError例外をスローする

19.4.3.1 Symbol.prototype.constructor

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

19.4.3.2 get Symbol.prototype.description

Symbol.prototype.descriptionアクセサプロパティで、setアクセサー関数がundefinedです。 Symbol.prototype.descriptionのgetアクセサー関数は、次の手順を実行します。

  1. this値 を s とする
  2. ? thisSymbolValue(s) を sym とする
  3. sym.[[Description]] を返す

19.4.3.3 Symbol.prototype.toString ( )

次の手順が実行されます。

  1. ? thisSymbolValue(this値) を sym とする
  2. SymbolDescriptiveString(sym) を返す
19.4.3.3.1 ランタイムセマンティクス(Runtime Semantics): SymbolDescriptiveString ( sym )

抽象演算SymbolDescriptiveStringが引数symを指定して呼び出されると、次の手順が実行されます。

  1. Assert: Type(sym) は Symbol型
  2. sym の [[Description]] 値 を desc とする
  3. descundefined なら empty String を desc にセットする
  4. Assert: Type(desc) は String型
  5. "Symbol("desc")" の文字列連結を返す

19.4.3.4 Symbol.prototype.valueOf ( )

次の手順が実行されます。

  1. ? thisSymbolValue(this値) を返す

19.4.3.5 Symbol.prototype [ @@toPrimitive ] ( hint )

ヒント文字列

この関数は、Symbolオブジェクトをプリミティブ値に変換するためにECMAScript言語演算子によって呼び出されます。 hintに許可される値は、"default""number""string"です。

@@toPrimitiveメソッドが引数hintを指定して呼び出されると、次の手順が実行されます。

  1. ? thisSymbolValue(this値) を返す

この関数の"name"プロパティの値は"[Symbol.toPrimitive]"です。

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

19.4.3.6 Symbol.prototype [ @@toStringTag ]

@@toStringTagプロパティの初期値は、文字列値"Symbol"です。

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

19.4.4 Symbolインスタンスのプロパティ(Properties of Symbol Instances)

Symbolインスタンスは、Symbolプロトタイプオブジェクトからプロパティを継承する通常のオブジェクトです。 Symbolインスタンスには[[SymbolData]]内部スロットがあります。 [[SymbolData]]内部スロットには、Symbolオブジェクトで表されるSymbol値が格納されています。

19.5 Errorオブジェクト(Error Objects)

Errorオブジェクトのインスタンスは、ランタイムエラー発生時に例外としてスローされます。 Errorオブジェクトは、ユーザー定義の例外クラスの基本オブジェクトとしても機能することがあります。

19.5.1 Errorコンストラクター(The Error Constructor)

Errorコンストラクターは、次のような特徴があります。

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

19.5.1.1 Error ( message )

引数messageを指定してError関数を呼び出すと、次の手順が実行されます。

  1. NewTargetundefined なら アクティブ関数オブジェクトを、 異なるなら、 NewTarget を newTarget とする
  2. ? OrdinaryCreateFromConstructor(newTarget, %Error.prototype%, « [[ErrorData]] ») を O とする
  3. messageundefined でないなら、
    1. ? ToString(message) を msg とする
    2. PropertyDescriptor型 { [[Value]]: msg, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } を msgDesc とする
    3. ! DefinePropertyOrThrow(O, "message", msgDesc) を実行する
  4. O を返す

19.5.2 Errorコンストラクターのプロパティ(Properties of the Error Constructor)

Errorコンストラクターは、次のような特徴があります。

  • [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
  • 次のプロパティがあります。

19.5.2.1 Error.prototype

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

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

19.5.3 Errorプロトタイプオブジェクトのプロパティ(Properties of the Error Prototype Object)

Errorプロトタイプオブジェクトは、次のような特徴があります。

  • 組み込みオブジェクト%ErrorPrototype%です。
  • 通常のオブジェクトです。
  • Errorインスタンスではありません。[[ErrorData]]内部スロットがありません。
  • [[Prototype]]内部スロットがあり、値は%Object.prototype%です。

19.5.3.1 Error.prototype.constructor

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

19.5.3.2 Error.prototype.message

Error.prototype.messageの初期値は空の文字列です。

19.5.3.3 Error.prototype.name

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

19.5.3.4 Error.prototype.toString ( )

次の手順が実行されます。

  1. this値 を O とする
  2. Type(O) が Object型 でないなら、TypeError例外をスローする
  3. ? Get(O, "name") を name とする
  4. nameundefined なら "Error" を、異なるなら ? ToString(name) を name にセットする
  5. ? Get(O, "message") を msg とする
  6. msgundefined, なら empty String を、異なるなら ? ToString(msg) を msg にセットする
  7. nameempty String なら、 msg を返す
  8. msgempty String なら、 name を返す
  9. name と コードユニット 0x003A (COLON) と コードユニット 0x0020 (SPACE) と msg の文字列連結を返す

19.5.4 Errorインスタンスのプロパティ(Properties of Error Instances)

Errorインスタンスは、通常のオブジェクトです。Errorプロトタイプオブジェクトからプロパティを継承し、値がundefinedの[[ErrorData]]内部スロットを持ちます。 [[ErrorData]]の唯一の使用法は、ErrorインスタンスとNativeErrorインスタンスをObject.prototype.toString内のエラーオブジェクトとして識別することです。

19.5.5 この規格で使用されるNative Error型(Native Error Types Used in This Standard)

ランタイムエラーが検出されると、以下で複数挙げているNativeErrorオブジェクトのいずれかの新規インスタンスがスローされます。 19.5.6で説明されているように、これらのオブジェクトはすべて同じ構造を共有します。

19.5.5.1 EvalError

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

19.5.5.2 RangeError

許容できない値の設定または範囲外の値を示します。

19.5.5.3 ReferenceError

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

19.5.5.4 SyntaxError

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

19.5.5.5 TypeError

TypeErrorは、他の失敗の原因に当たらない場合に、失敗した操作を示すために使用されます。

19.5.5.6 URIError

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

19.5.6 NativeErrorオブジェクト構造(NativeError Object Structure)

ECMAScript実装は、ランタイムエラーを検出すると、19.5.5で定義されているNativeErrorオブジェクトのうち適切な新規インスタンスをスローします。 各オブジェクトの構造は以下のとおりです。コンストラクター名として使用される名前、プロトタイプオブジェクトの"name"プロパティ、およびプロトタイプオブジェクトの"message"プロパティ(実装定義)のみが異なります。

エラーオブジェクトごとに、定義内のNativeErrorへの参照を、19.5.5の適切なエラーオブジェクト名に置き換える必要があります。

19.5.6.1 NativeErrorコンストラクター(The NativeError Constructors)

NativeErrorコンストラクターは、次のような特徴があります。

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

NativeError関数が引数messageとともに呼び出されると、次の手順が実行されます。

  1. NewTargetundefined ならアクティブ関数オブジェクト を、異なるなら NewTarget を newTarget とする
  2. ? OrdinaryCreateFromConstructor(newTarget, "%NativeError.prototype%", « [[ErrorData]] ») を O とする
  3. messageundefined でないなら、
    1. ? ToString(message) を msg とする
    2. PropertyDescriptor型 { [[Value]]: msg, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } を msgDesc とする
    3. ! DefinePropertyOrThrow(O, "message", msgDesc) を実行する
  4. O を返す

手順2で渡す文字列の実際の値は、"%EvalError.prototype%""%RangeError.prototype%""%ReferenceError.prototype%""%SyntaxError.prototype%""%TypeError.prototype%""%URIError.prototype%" のいずれかです。

19.5.6.2 NativeErrorコンストラクターのプロパティ(Properties of the NativeError Constructors)

NativeErrorコンストラクターは、次のような特徴があります。

  • [[Prototype]]内部スロットがあり、値は%Error%です。
  • "name"プロパティがあり、値は文字列値"NativeError"です。
  • 次のプロパティがあります。
19.5.6.2.1 NativeError.prototype

NativeError.prototypeの初期値は、NativeErrorプロトタイプオブジェクト(19.5.6.3)です。 各NativeErrorコンストラクターには、個別のプロトタイプオブジェクトがあります。

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

19.5.6.3 NativeErrorプロトタイプオブジェクトのプロパティ(Properties of the NativeError Prototype Objects)

NativeErrorプロトタイプオブジェクトは、次のような特徴があります。

19.5.6.3.1 NativeError.prototype.constructor

NativeErrorコンストラクターのプロトタイプの"constructor" プロパティの初期値は、対応する組み込みオブジェクト%NativeError%(19.5.6.1)です。

19.5.6.3.2 NativeError.prototype.message

NativeErrorコンストラクターのプロトタイプの"message"プロパティの初期値は空の文字列です。

19.5.6.3.3 NativeError.prototype.name

NativeErrorコンストラクターのプロトタイプの"name"プロパティの初期値は、コンストラクターの名前(NativeErrorの代わりに使用される名前)で構成される文字列値です。

19.5.6.4 NativeErrorインスタンスのプロパティ(Properties of NativeError Instances)

NativeErrorインスタンスは、通常のオブジェクトです。NativeErrorプロトタイプオブジェクトからプロパティを継承し、値がundefinedの[[ErrorData]]内部スロットを持ちます。 [[ErrorData]]の唯一の使用法は、Object.prototype.toString(19.1.3.6)が、ErrorまたはNativeErrorインスタンスを識別します。