20 基礎オブジェクト (Fundamental Objects)

20.1 Object オブジェクト

20.1.1 Object コンストラクタ

Object コンストラクタ:

20.1.1.1 Object ( [ value ] )

この関数は呼び出されたとき次の手順を行う:

  1. NewTarget が undefined でもアクティブな関数オブジェクトでもないなら
    1. OrdinaryCreateFromConstructor(NewTarget, "%Object.prototype%") を返す。
  2. valueundefined または null なら OrdinaryObjectCreate(%Object.prototype%) を返す。
  3. ToObject(value) を返す。

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

Object コンストラクタ:

  • %Function.prototype% を持つ [[Prototype]] 内部スロットを有する。
  • 1𝔽"length" プロパティを持つ。
  • 以下の追加プロパティを持つ:

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

この関数は 1 つ以上のソースオブジェクトの列挙可能な自身のプロパティ(値)を target オブジェクトへコピーする。

呼び出されたとき次を行う:

  1. to を ? ToObject(target) とする。
  2. 引数が 1 個だけなら to を返す。
  3. sources の各要素 nextSource について
    1. nextSourceundefined でも null でもなければ
      1. from を ! ToObject(nextSource) とする。
      2. keys を ? from.[[OwnPropertyKeys]]() とする。
      3. keys の各 nextKey について
        1. desc を ? from.[[GetOwnProperty]](nextKey) とする。
        2. descundefined でなく desc.[[Enumerable]]true なら
          1. propValue を ? Get(from, nextKey) とする。
          2. Set(to, nextKey, propValue, true) を実行。
  4. to を返す。

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

20.1.2.2 Object.create ( O, Properties )

この関数は指定されたプロトタイプを持つ新しいオブジェクトを生成する。

呼び出されたとき次を行う:

  1. O が Object でなく かつ null でもないなら TypeError 例外を投げる。
  2. objOrdinaryObjectCreate(O) とする。
  3. Propertiesundefined でなければ
    1. ObjectDefineProperties(obj, Properties) を返す。
  4. obj を返す。

20.1.2.3 Object.defineProperties ( O, Properties )

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

呼び出されたとき次を行う:

  1. O が Object でなければ TypeError 例外。
  2. ObjectDefineProperties(O, Properties) を返す。

20.1.2.3.1 ObjectDefineProperties ( O, Properties )

The abstract operation ObjectDefineProperties takes arguments O (Object) and Properties (ECMAScript 言語値) and returns オブジェクトを含む通常完了または throw completion. It performs the following steps when called:

  1. props を ? ToObject(Properties) とする。
  2. keys を ? props.[[OwnPropertyKeys]]() とする。
  3. descriptors を空リストとする。
  4. keys の各 nextKey について
    1. propDesc を ? props.[[GetOwnProperty]](nextKey) とする。
    2. propDescundefined でなく propDesc.[[Enumerable]]true なら
      1. descObj を ? Get(props, nextKey) とする。
      2. desc を ? ToPropertyDescriptor(descObj) とする。
      3. Record { [[Key]]: nextKey, [[Descriptor]]: desc } を descriptors に追加。
  5. descriptors の各 property について
    1. DefinePropertyOrThrow(O, property.[[Key]], property.[[Descriptor]]) を実行。
  6. O を返す。

20.1.2.4 Object.defineProperty ( O, P, Attributes )

この関数は自身のプロパティを追加し/または既存自身プロパティの属性を更新する。

呼び出されたとき次を行う:

  1. O が Object でなければ TypeError
  2. key を ? ToPropertyKey(P) とする。
  3. desc を ? ToPropertyDescriptor(Attributes) とする。
  4. DefinePropertyOrThrow(O, key, desc)。
  5. O を返す。

20.1.2.5 Object.entries ( O )

この関数は呼び出されたとき次を行う:

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

20.1.2.6 Object.freeze ( O )

この関数は呼び出されたとき次を行う:

  1. O が Object でなければ O を返す。
  2. status を ? SetIntegrityLevel(O, frozen) とする。
  3. statusfalse なら TypeError
  4. O を返す。

20.1.2.7 Object.fromEntries ( iterable )

この関数は呼び出されたとき次を行う:

  1. RequireObjectCoercible(iterable) を実行。
  2. objOrdinaryObjectCreate(%Object.prototype%) とする。
  3. Assert: obj は拡張可能な通常オブジェクトで自身プロパティを持たない。
  4. closure を引数 (key, value) を取り obj を捕捉し次を行う新しい Abstract Closure とする:
    1. propertyKey を ? ToPropertyKey(key) とする。
    2. CreateDataPropertyOrThrow(obj, propertyKey, value)。
    3. NormalCompletion(undefined) を返す。
  5. adderCreateBuiltinFunction(closure, 2, "", « ») とする。
  6. AddEntriesFromIterable(obj, iterable, adder) を返す。
Note
adder 向けに生成された関数は ECMAScript コードから直接はアクセスできない。

20.1.2.8 Object.getOwnPropertyDescriptor ( O, P )

この関数は呼び出されたとき次を行う:

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

20.1.2.9 Object.getOwnPropertyDescriptors ( O )

この関数は呼び出されたとき次を行う:

  1. obj を ? ToObject(O) とする。
  2. ownKeys を ? obj.[[OwnPropertyKeys]]() とする。
  3. descriptorsOrdinaryObjectCreate(%Object.prototype%) とする。
  4. ownKeys の各 key について
    1. desc を ? obj.[[GetOwnProperty]](key) とする。
    2. descriptorFromPropertyDescriptor(desc) とする。
    3. descriptorundefined でなければ ! CreateDataPropertyOrThrow(descriptors, key, descriptor)。
  5. descriptors を返す。

20.1.2.10 Object.getOwnPropertyNames ( O )

この関数は呼び出されたとき次を行う:

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

20.1.2.11 Object.getOwnPropertySymbols ( O )

この関数は呼び出されたとき次を行う:

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

20.1.2.11.1 GetOwnPropertyKeys ( O, type )

The abstract operation GetOwnPropertyKeys takes arguments O (ECMAScript 言語値) and type (string または symbol) and returns プロパティキーリストを含む通常完了または throw completion. It performs the following steps when called:

  1. obj を ? ToObject(O) とする。
  2. keys を ? obj.[[OwnPropertyKeys]]() とする。
  3. nameList を空リストとする。
  4. keys の各 nextKey について
    1. nextKey が Symbol で typesymbol の場合、または nextKey が String で typestring の場合
      1. nextKeynameList に追加。
  5. nameList を返す。

20.1.2.12 Object.getPrototypeOf ( O )

この関数は呼び出されたとき次を行う:

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

20.1.2.13 Object.groupBy ( items, callback )

Note

callback は 2 引数を受け取る関数であるべき。groupByitems の各要素に昇順で 1 回ずつ callback を呼び出し新しいオブジェクトを構築する。callback から返された各値はプロパティキーに変換され、そのキーごとに結果オブジェクトはキーをそのキーに変換された値を持つ要素すべての配列に対応付ける。

callback は (要素の値, そのインデックス) の 2 引数で呼ばれる。

groupBy の返す値は %Object.prototype% を継承しないオブジェクト。

呼び出されたとき次を行う:

  1. groups を ? GroupBy(items, callback, property) とする。
  2. objOrdinaryObjectCreate(null) とする。
  3. Record { [[Key]], [[Elements]] } ggroups について
    1. elementsCreateArrayFromList(g.[[Elements]]) とする。
    2. CreateDataPropertyOrThrow(obj, g.[[Key]], elements)。
  4. obj を返す。

20.1.2.14 Object.hasOwn ( O, P )

この関数は呼び出されたとき次を行う:

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

20.1.2.15 Object.is ( value1, value2 )

この関数は呼び出されたとき次を行う:

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

20.1.2.16 Object.isExtensible ( O )

この関数は呼び出されたとき次を行う:

  1. O が Object でなければ false を返す。
  2. IsExtensible(O) を返す。

20.1.2.17 Object.isFrozen ( O )

この関数は呼び出されたとき次を行う:

  1. O が Object でなければ true を返す。
  2. TestIntegrityLevel(O, frozen) を返す。

20.1.2.18 Object.isSealed ( O )

この関数は呼び出されたとき次を行う:

  1. O が Object でなければ true を返す。
  2. TestIntegrityLevel(O, sealed) を返す。

20.1.2.19 Object.keys ( O )

この関数は呼び出されたとき次を行う:

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

20.1.2.20 Object.preventExtensions ( O )

この関数は呼び出されたとき次を行う:

  1. O が Object でなければ O を返す。
  2. status を ? O.[[PreventExtensions]]() とする。
  3. statusfalse なら TypeError
  4. O を返す。

20.1.2.21 Object.prototype

Object.prototype の初期値は Object プロトタイプオブジェクトである。

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

20.1.2.22 Object.seal ( O )

この関数は呼び出されたとき次を行う:

  1. O が Object でなければ O を返す。
  2. status を ? SetIntegrityLevel(O, sealed) とする。
  3. statusfalse なら TypeError
  4. O を返す。

20.1.2.23 Object.setPrototypeOf ( O, proto )

この関数は呼び出されたとき次を行う:

  1. RequireObjectCoercible(O) を実行。
  2. proto が Object でなく かつ null でもないなら TypeError
  3. O が Object でなければ O を返す。
  4. status を ? O.[[SetPrototypeOf]](proto) とする。
  5. statusfalse なら TypeError
  6. O を返す。

20.1.2.24 Object.values ( O )

この関数は呼び出されたとき次を行う:

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

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

Object プロトタイプオブジェクト は次を満たす:

20.1.3.1 Object.prototype.constructor

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

20.1.3.2 Object.prototype.hasOwnProperty ( V )

このメソッドは呼び出されたとき次を行う:

  1. P を ? ToPropertyKey(V) とする。
  2. O を ? ToObject(this value) とする。
  3. HasOwnProperty(O, P) を返す。
Note

手順 12 の順序は、以前の版で最初の手順が投げていた可能性のある例外を thisundefined / null の場合でも維持するために選ばれている。

20.1.3.3 Object.prototype.isPrototypeOf ( V )

このメソッドは呼び出されたとき次を行う:

  1. V が Object でなければ false を返す。
  2. O を ? ToObject(this value) とする。
  3. 繰り返し:
    1. V を ? V.[[GetPrototypeOf]]() に設定。
    2. Vnull なら false を返す。
    3. SameValue(O, V) が true なら true を返す。
Note

手順順序は前版との互換性(V がオブジェクトでない場合の挙動)を保つ。

20.1.3.4 Object.prototype.propertyIsEnumerable ( V )

このメソッドは呼び出されたとき次を行う:

  1. P を ? ToPropertyKey(V) とする。
  2. O を ? ToObject(this value) とする。
  3. desc を ? O.[[GetOwnProperty]](P) とする。
  4. descundefined なら false
  5. desc.[[Enumerable]] を返す。
Note 1

このメソッドはプロトタイプチェーン上のオブジェクトを考慮しない。

Note 2

手順順序は過去との互換性保持のため。

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

このメソッドは呼び出されたとき次を行う:

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

オプション引数は使用されないが ECMA-402 の toLocaleString 形式と整合させるために予約される。ECMA-402 を実装しない実装は他目的に使ってはならない。

Note 1

ロケール依存の toString を持たないオブジェクト用の汎用実装。Array, Number, Date, %TypedArray% は固有実装を持つ。

Note 2

ECMA-402 はこのデフォルト実装の代替を意図的に提供しない。

20.1.3.6 Object.prototype.toString ( )

このメソッドは呼び出されたとき次を行う:

  1. this 値が undefined なら "[object Undefined]" を返す。
  2. this 値が null なら "[object Null]" を返す。
  3. O を ! ToObject(this value) とする。
  4. isArray を ? IsArray(O) とする。
  5. isArraytrue なら builtinTag"Array"
  6. Else O[[ParameterMap]] 内部スロットを持つなら builtinTag = "Arguments"
  7. Else O[[Call]] 内部メソッドを持つなら builtinTag = "Function"
  8. Else O[[ErrorData]] 内部スロットを持つなら builtinTag = "Error"
  9. Else O[[BooleanData]] 内部スロットを持つなら "Boolean"
  10. Else O[[NumberData]] 内部スロットを持つなら "Number"
  11. Else O[[StringData]] 内部スロットを持つなら "String"
  12. Else O[[DateValue]] 内部スロットを持つなら "Date"
  13. Else O[[RegExpMatcher]] 内部スロットを持つなら "RegExp"
  14. Else builtinTag = "Object"
  15. tag を ? Get(O, %Symbol.toStringTag%) とする。
  16. tag が String でなければ tag = builtinTag
  17. "[object "tag"]" の連結を返す。
Note

歴史的にこのメソッドは [[Class]] 内部スロットの文字列表現取得に使われた。定義は互換性保持のためであり汎用型判定手段ではない。%Symbol.toStringTag% の利用で信頼性が損なわれ得る。

20.1.3.7 Object.prototype.valueOf ( )

このメソッドは呼び出されたとき次を行う:

  1. ToObject(this value) を返す。
Normative Optional, Legacy

20.1.3.8 Object.prototype.__proto__

Object.prototype.__proto__ は属性 { [[Enumerable]]: false, [[Configurable]]: true } のアクセサプロパティで、[[Get]] / [[Set]] は以下:

20.1.3.8.1 get Object.prototype.__proto__

引数不要の組み込み関数。呼び出し時:

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

20.1.3.8.2 set Object.prototype.__proto__

引数 proto を取る組み込み関数。呼び出し時:

  1. Othis 値とする。
  2. RequireObjectCoercible(O)。
  3. proto が Object でなく null でもなければ undefined を返す。
  4. O が Object でなければ undefined を返す。
  5. status を ? O.[[SetPrototypeOf]](proto) とする。
  6. statusfalse なら TypeError
  7. undefined を返す。
Normative Optional, Legacy

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

20.1.3.9.1 Object.prototype.__defineGetter__ ( P, getter )

呼び出し手順:

  1. O を ? ToObject(this value) とする。
  2. IsCallable(getter) が false なら TypeError
  3. desc を PropertyDescriptor { [[Get]]: getter, [[Enumerable]]: true, [[Configurable]]: true } とする。
  4. key を ? ToPropertyKey(P) とする。
  5. DefinePropertyOrThrow(O, key, desc)。
  6. undefined を返す。

20.1.3.9.2 Object.prototype.__defineSetter__ ( P, setter )

呼び出し手順:

  1. O を ? ToObject(this value) とする。
  2. IsCallable(setter) が false なら TypeError
  3. desc を PropertyDescriptor { [[Set]]: setter, [[Enumerable]]: true, [[Configurable]]: true } とする。
  4. key を ? ToPropertyKey(P) とする。
  5. DefinePropertyOrThrow(O, key, desc)。
  6. undefined を返す。

20.1.3.9.3 Object.prototype.__lookupGetter__ ( P )

呼び出し手順:

  1. O を ? ToObject(this value) とする。
  2. key を ? ToPropertyKey(P) とする。
  3. 繰り返し:
    1. desc を ? O.[[GetOwnProperty]](key) とする。
    2. descundefined でなければ
      1. IsAccessorDescriptor(desc) が true なら desc.[[Get]] を返す。
      2. undefined を返す。
    3. O を ? O.[[GetPrototypeOf]]() とする。
    4. Onull なら undefined を返す。

20.1.3.9.4 Object.prototype.__lookupSetter__ ( P )

呼び出し手順:

  1. O を ? ToObject(this value)。
  2. key を ? ToPropertyKey(P)。
  3. 繰り返し:
    1. desc を ? O.[[GetOwnProperty]](key)。
    2. descundefined でなければ
      1. IsAccessorDescriptor(desc) が true なら desc.[[Set]] を返す。
      2. undefined を返す。
    3. O を ? O.[[GetPrototypeOf]]()
    4. Onull なら undefined を返す。

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

Object インスタンスは Object プロトタイプオブジェクトから継承するもの以外の特別なプロパティを持たない。

20.2 Function オブジェクト

20.2.1 Function コンストラクタ

Function コンストラクタ:

  • %Function% である。
  • グローバルオブジェクト"Function" プロパティの初期値である。
  • コンストラクタでなく関数として呼び出されたとき新しい関数オブジェクトを生成し初期化する。すなわち Function(…) は同じ引数での new Function(…) と等価。
  • クラス定義の extends 節値として使用できる。指定の Function 挙動を継承するサブクラスコンストラクタは内部スロットを持つインスタンス生成と初期化のため super 呼び出しが必要。ECMAScript の全ての構文的関数定義形式は Function のインスタンスを生成し、組み込み GeneratorFunction / AsyncFunction / AsyncGeneratorFunction のサブクラス以外にサブクラスインスタンスを生成する構文はない。

20.2.1.1 Function ( ...parameterArgs, bodyArg )

最後の引数(存在すれば)が関数本体(実行コード)を指定し、それ以前は仮引数を指定する。

呼び出し手順:

  1. C をアクティブな関数オブジェクトとする。
  2. bodyArg が与えられなければ空文字列に設定。
  3. CreateDynamicFunction(C, NewTarget, normal, parameterArgs, bodyArg) を返す。
Note

各仮引数に個別の引数を与える必要はない。以下 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 ( constructor, newTarget, kind, parameterArgs, bodyArg )

The abstract operation CreateDynamicFunction takes arguments constructor (コンストラクタ), newTarget (コンストラクタまたは undefined), kind (normal, generator, async, async-generator), parameterArgs (ECMAScript 言語値リスト), and bodyArg (ECMAScript 言語値) and returns 関数オブジェクトを含む通常完了または throw completion. constructor はこの操作を実行中のコンストラクタnewTarget は最初に new が適用されたコンストラクタparameterArgs, bodyArgconstructor に渡された引数値。 It performs the following steps when called:

  1. newTargetundefined なら newTarget = constructor
  2. kindnormal なら
    1. prefix = "function"
    2. exprSym = FunctionExpression
    3. bodySym = FunctionBody[~Yield, ~Await]
    4. parameterSym = FormalParameters[~Yield, ~Await]
    5. fallbackProto = "%Function.prototype%"
  3. Else if kind = generator
    1. prefix = "function*"
    2. exprSym = GeneratorExpression
    3. bodySym = GeneratorBody
    4. parameterSym = FormalParameters[+Yield, ~Await]
    5. fallbackProto = "%GeneratorFunction.prototype%"
  4. Else if kind = async
    1. prefix = "async function"
    2. exprSym = AsyncFunctionExpression
    3. bodySym = AsyncFunctionBody
    4. parameterSym = FormalParameters[~Yield, +Await]
    5. fallbackProto = "%AsyncFunction.prototype%"
  5. Else
    1. Assert: kind = async-generator
    2. prefix = "async function*"
    3. exprSym = AsyncGeneratorExpression
    4. bodySym = AsyncGeneratorBody
    5. parameterSym = FormalParameters[+Yield, +Await]
    6. fallbackProto = "%AsyncGeneratorFunction.prototype%"
  6. argCountparameterArgs の要素数とする。
  7. parameterStrings を空リストとする。
  8. parameterArgs の各 arg について
    1. ToString(arg) を parameterStrings に追加。
  9. bodyString を ? ToString(bodyArg) とする。
  10. currentRealm を現在の Realm Record とする。
  11. HostEnsureCanCompileStrings(currentRealm, parameterStrings, bodyString, false)。
  12. P を空文字列とする。
  13. argCount > 0 なら
    1. P = parameterStrings[0]。
    2. k = 1。
    3. k < argCount の間
      1. nextArgString = parameterStrings[k]。
      2. P を (P + "," + nextArgString) に。
      3. k = k + 1。
  14. bodyParseString を LF, bodyString, LF の連結とする。
  15. sourceStringprefix, " anonymous(", P, LF, ") {", bodyParseString, "}" の連結とする。
  16. sourceText = StringToCodePoints(sourceString)。
  17. parameters = ParseText(P, parameterSym)。
  18. parameters がエラーリストなら SyntaxError
  19. body = ParseText(bodyParseString, bodySym)。
  20. body がエラーリストなら SyntaxError
  21. (注)パラメータと本体を個別にパースすることでそれぞれ単独でも妥当性を保証。
  22. (注)ここに到達したら sourceTextexprSym の構文を満たすはず。次の 2 手順で Early Error を適用。
  23. expr = ParseText(sourceText, exprSym)。
  24. expr がエラーリストなら SyntaxError
  25. proto を ? GetPrototypeFromConstructor(newTarget, fallbackProto) とする。
  26. envcurrentRealm.[[GlobalEnv]]
  27. privateEnv = null
  28. F = OrdinaryFunctionCreate(proto, sourceText, parameters, body, non-lexical-this, env, privateEnv)。
  29. SetFunctionName(F, "anonymous")。
  30. kind = generator なら
    1. prototype = OrdinaryObjectCreate(%GeneratorPrototype%)。
    2. DefinePropertyOrThrow(F, "prototype", PropertyDescriptor { [[Value]]: prototype, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false })。
  31. Else if kind = async-generator
    1. prototype = OrdinaryObjectCreate(%AsyncGeneratorPrototype%)。
    2. DefinePropertyOrThrow(F, "prototype", PropertyDescriptor { [[Value]]: prototype, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false })。
  32. Else if kind = normal
    1. MakeConstructor(F) を実行。
  33. (注)kind = async の関数は構築不能で "prototype" を持たない。
  34. F を返す。
Note

CreateDynamicFunction は kindasync でない関数に "prototype" プロパティを付与しコンストラクタとして利用され得るようにする。

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

Function コンストラクタ:

20.2.2.1 Function.prototype

Function.prototype の値は Function プロトタイプオブジェクト

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

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

Function プロトタイプオブジェクト:

  • %Function.prototype% である。
  • 自身が組み込み関数オブジェクト
  • 任意の引数を受け取り undefined を返す。
  • [[Construct]] 内部メソッドを持たず newコンストラクタ使用不可。
  • [[Prototype]] 内部スロットは %Object.prototype%
  • "prototype" プロパティを持たない。
  • "length" プロパティ値は +0𝔽
  • "name" プロパティ値は空文字列。
Note

互換性のため関数オブジェクトと規定される。

20.2.3.1 Function.prototype.apply ( thisArg, argArray )

呼び出し手順:

  1. functhis 値とする。
  2. IsCallable(func) が false なら TypeError
  3. argArrayundefined または null なら
    1. PrepareForTailCall() を実行。
    2. ? Call(func, thisArg) を返す。
  4. argList を ? CreateListFromArrayLike(argArray) とする。
  5. PrepareForTailCall()。
  6. ? Call(func, thisArg, argList) を返す。
Note 1

thisArg は変換なしに渡される(Edition 3 との違い)。非厳格関数は入口で再度変換を行う。

Note 2

func がアローまたはバウンド関数なら thisArg は手順 6[[Call]] に無視される。

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

呼び出し手順:

  1. Targetthis 値とする。
  2. IsCallable(Target) が false なら TypeError
  3. F を ? BoundFunctionCreate(Target, thisArg, args) とする。
  4. L = 0。
  5. targetHasLength = ? HasOwnProperty(Target, "length")。
  6. targetHasLengthtrue なら
    1. targetLen = ? Get(Target, "length")。
    2. targetLen が Number なら
      1. targetLen+∞𝔽 なら L = +∞。
      2. Else if targetLen-∞𝔽 なら L = 0。
      3. Else
        1. targetLenAsInt = ! ToIntegerOrInfinity(targetLen)。
        2. Assert: 有限
        3. argCount = args の要素数。
        4. L = max(targetLenAsInt - argCount, 0)。
  7. SetFunctionLength(F, L)。
  8. targetName = ? Get(Target, "name")。
  9. targetName が String でなければ空文字列。
  10. SetFunctionName(F, targetName, "bound")。
  11. F を返す。
Note 1

bind で生成される関数はエキゾチックオブジェクト"prototype" を持たない。

Note 2

Target がアローまたはバウンド関数なら thisArg は後続呼出で使用されない。

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

呼び出し手順:

  1. functhis 値とする。
  2. IsCallable(func) が false なら TypeError
  3. PrepareForTailCall()。
  4. ? Call(func, thisArg, args) を返す。
Note 1

thisArg は変換されないが非厳格関数は入口で変換。

Note 2

func がアロー/バウンド関数なら thisArg は手順 4 で無視。

20.2.3.4 Function.prototype.constructor

Function.prototype.constructor の初期値は %Function%

20.2.3.5 Function.prototype.toString ( )

呼び出し手順:

  1. functhis 値とする。
  2. func が Object で [[SourceText]] 内部スロットを持ち Unicode コードポイント列で HostHasSourceTextAvailable(func) が true なら
    1. CodePointsToString(func.[[SourceText]]) を返す。
  3. func組み込み関数オブジェクト なら実装定義の文字列(構文は NativeFunction)を返す。さらに [[InitialName]] があれば PropertyName 部にそれを用いる。
  4. func が Object かつ IsCallable(func) が true なら実装定義文字列(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% ] ( V )

呼び出し手順:

  1. Fthis 値とする。
  2. OrdinaryHasInstance(F, V) を返す。

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

Note

多くの関数が継承するデフォルト実装。instanceof はこれを用いる。例

v instanceof F

F[%Symbol.hasInstance%](v)

と評価される。コンストラクタは別実装を公開することで判定を制御可能。

改ざん防止のため非書換・非再構成。

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

20.2.4 Function インスタンス

全 Function インスタンスは ECMAScript 関数オブジェクトであり Table 28 の内部スロットを持つ。Function.prototype.bind により生成されたものは Table 29 の内部スロットを持つ。

Function インスタンスは以下のプロパティを持つ:

20.2.4.1 length

"length" プロパティ値は典型的に期待される引数個数(整数)。他個数で呼び出し可能でその挙動は関数次第。このプロパティは { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }。

20.2.4.2 name

"name" プロパティ値は説明的な String。意味的影響はなく定義位置で参照に使われる識別的名称。属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }。

文脈名を持たない匿名関数は空文字列を用いる。

20.2.4.3 prototype

コンストラクタとして使用可能な関数インスタンスは "prototype" プロパティを持ち、生成時に別の通常オブジェクトが作られ初期値となる。特に規定がない限りこの値はコンストラクタとして呼び出されたとき生成オブジェクトの [[Prototype]] 初期化に用いられる。

属性 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }。

Note

Function.prototype.bindMethodDefinitionGeneratorMethod / AsyncGeneratorMethod 以外)評価、ArrowFunction によるものは "prototype" を持たない。

20.2.5 HostHasSourceTextAvailable ( func )

The host-defined abstract operation HostHasSourceTextAvailable takes argument func (関数オブジェクト) and returns Boolean. ホストfunc のソーステキスト提供を防止するために用いる。

HostHasSourceTextAvailable の実装要件:

  • 引数に対して決定的であること。同一 func への各呼出で同じ結果を返す。

デフォルト実装は true を返す。

20.3 Boolean オブジェクト

20.3.1 Boolean コンストラクタ

Boolean コンストラクタ:

  • %Boolean% である。
  • グローバルオブジェクト"Boolean" プロパティ初期値。
  • コンストラクタとして呼ぶと新 Boolean オブジェクト生成初期化。
  • 関数呼出時は型変換を行う。
  • extends 節で利用可能。継承意図のサブクラスは super 呼び出しで [[BooleanData]] 内部スロットを持つインスタンスを生成初期化する必要。

20.3.1.1 Boolean ( value )

呼び出し手順:

  1. bToBoolean(value) とする。
  2. NewTarget が undefined なら b を返す。
  3. O を ? OrdinaryCreateFromConstructor(NewTarget, "%Boolean.prototype%", « [[BooleanData]] »)。
  4. O.[[BooleanData]] = b
  5. O を返す。

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

Boolean コンストラクタ:

20.3.2.1 Boolean.prototype

Boolean.prototype の初期値は Boolean プロトタイプオブジェクト

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

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

Boolean プロトタイプオブジェクト:

  • %Boolean.prototype% である。
  • 通常オブジェクト
  • 自身が Boolean オブジェクトで [[BooleanData]] 内部スロット値 false
  • [[Prototype]] 内部スロット値は %Object.prototype%

20.3.3.1 Boolean.prototype.constructor

Boolean.prototype.constructor の初期値は %Boolean%

20.3.3.2 Boolean.prototype.toString ( )

呼び出し手順:

  1. b を ? ThisBooleanValue(this value) とする。
  2. btrue なら "true" それ以外 "false" を返す。

20.3.3.3 Boolean.prototype.valueOf ( )

呼び出し手順:

  1. ThisBooleanValue(this value) を返す。

20.3.3.3.1 ThisBooleanValue ( value )

The abstract operation ThisBooleanValue takes argument value (ECMAScript 言語値) and returns Boolean を含む通常完了または throw completion. It performs the following steps when called:

  1. value が Boolean なら返す。
  2. value が Object かつ [[BooleanData]] 内部スロットを持つなら
    1. b = value.[[BooleanData]]
    2. Assert: b は Boolean。
    3. b を返す。
  3. TypeError 例外。

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

Boolean インスタンスは Boolean プロトタイプオブジェクトを継承する通常オブジェクト[[BooleanData]] 内部スロットを持つ。これは当該 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. descriptionundefined の場合、descStringundefined とする。
  3. それ以外の場合、descString を ? ToString(description) とする。
  4. [[Description]]descString である新しい Symbol を返す。

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

Symbol コンストラクタ:

20.4.2.1 Symbol.asyncIterator

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

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.2 Symbol.for ( key )

呼び出し手順:

  1. stringKey を ? ToString(key) とする。
  2. GlobalSymbolRegistry List の各 e について
    1. e.[[Key]]stringKey なら e.[[Symbol]] を返す。
  3. Assert: 現時点で stringKey のエントリはない。
  4. newSymbol[[Description]]=stringKey の新しい Symbol とする。
  5. Record { [[Key]]: stringKey, [[Symbol]]: newSymbol } を GlobalSymbolRegistry List に追加。
  6. newSymbol を返す。

GlobalSymbolRegistry List は全レルム共有の追記専用リスト。ECMAScript コード評価前に空リストで初期化。要素は Table 61 の構造。

Table 61: GlobalSymbolRegistry Record Fields
Field Name Value Usage
[[Key]] a String シンボルをグローバル識別する文字列キー。
[[Symbol]] a Symbol どのレルムからも取得可能なシンボル。

20.4.2.3 Symbol.hasInstance

Symbol.hasInstance の初期値は well-known symbol %Symbol.hasInstance%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.4 Symbol.isConcatSpreadable

Symbol.isConcatSpreadable の初期値は well-known symbol %Symbol.isConcatSpreadable%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.5 Symbol.iterator

Symbol.iterator の初期値は well-known symbol %Symbol.iterator%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.6 Symbol.keyFor ( sym )

呼び出し手順:

  1. sym が Symbol でなければ TypeError
  2. KeyForSymbol(sym) を返す。

20.4.2.7 Symbol.match

Symbol.match 初期値は %Symbol.match%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.8 Symbol.matchAll

Symbol.matchAll 初期値は %Symbol.matchAll%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.9 Symbol.prototype

Symbol.prototype の初期値は Symbol プロトタイプオブジェクト

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.10 Symbol.replace

Symbol.replace 初期値は %Symbol.replace%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.11 Symbol.search

Symbol.search 初期値は %Symbol.search%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.12 Symbol.species

Symbol.species 初期値は %Symbol.species%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.13 Symbol.split

Symbol.split 初期値は %Symbol.split%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.14 Symbol.toPrimitive

Symbol.toPrimitive 初期値は %Symbol.toPrimitive%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.15 Symbol.toStringTag

Symbol.toStringTag 初期値は %Symbol.toStringTag%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

20.4.2.16 Symbol.unscopables

Symbol.unscopables 初期値は %Symbol.unscopables%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

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

Symbol プロトタイプオブジェクト:

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. s = this 値。
  2. sym = ? ThisSymbolValue(s)。
  3. sym.[[Description]] を返す。

20.4.3.3 Symbol.prototype.toString ( )

呼び出し手順:

  1. sym = ? ThisSymbolValue(this value)。
  2. SymbolDescriptiveString(sym) を返す。

20.4.3.3.1 SymbolDescriptiveString ( sym )

The abstract operation SymbolDescriptiveString takes argument sym (Symbol) and returns String. It performs the following steps when called:

  1. desc = sym.[[Description]]
  2. descundefined なら空文字列に。
  3. Assert: desc は String。
  4. "Symbol(" + desc + ")" を返す。

20.4.3.4 Symbol.prototype.valueOf ( )

呼び出し手順:

  1. ThisSymbolValue(this value) を返す。

20.4.3.4.1 ThisSymbolValue ( value )

The abstract operation ThisSymbolValue takes argument value (ECMAScript 言語値) and returns Symbol を含む通常完了または throw completion. It performs the following steps when called:

  1. value が Symbol なら返す。
  2. value が Object かつ [[SymbolData]] 内部スロットを持つなら
    1. s = value.[[SymbolData]]
    2. Assert: s は Symbol。
    3. s を返す。
  3. TypeError 例外。

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

このメソッドは Symbol オブジェクトをプリミティブに変換する際に呼ばれる。

呼び出し手順:

  1. ThisSymbolValue(this value) を返す。
Note

引数は無視される。

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }。

"name" プロパティ値は "[Symbol.toPrimitive]"

20.4.3.6 Symbol.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag% プロパティ初期値は "Symbol"

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }。

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

Symbol インスタンスは Symbol プロトタイプオブジェクトを継承する通常オブジェクト[[SymbolData]] 内部スロットを持ち、その値が表現する Symbol 値である。

20.4.5 Symbol 用抽象操作

20.4.5.1 KeyForSymbol ( sym )

The abstract operation KeyForSymbol takes argument sym (Symbol) and returns String または undefined. symGlobalSymbolRegistry List にあるなら登録時の文字列を返す。 It performs the following steps when called:

  1. GlobalSymbolRegistry List の各 e について
    1. SameValue(e.[[Symbol]], sym) が true なら e.[[Key]] を返す。
  2. Assert: sym のエントリは存在しない。
  3. undefined を返す。

20.5 Error オブジェクト

実行時エラー発生時に例外として投げられる。ユーザー定義例外クラスの基底にも利用可能。

実行時エラー検出時、20.5.5NativeError20.5.7 の AggregateError の新インスタンスが投げられる。

20.5.1 Error コンストラクタ

Error コンストラクタ:

  • %Error% である。
  • グローバルオブジェクト"Error" プロパティ初期値。
  • 関数呼出しでもコンストラクタと同様に新 Error オブジェクトを生成初期化(Error(…)new Error(…) と等価)。
  • extends 節で使用可。継承意図のサブクラスは [[ErrorData]] 内部スロット付きで初期化するため super 呼出しが必要。

20.5.1.1 Error ( message [ , options ] )

呼び出し手順:

  1. NewTarget が undefined なら newTarget = アクティブ関数オブジェクト; Else newTarget = NewTarget。
  2. O を ? OrdinaryCreateFromConstructor(newTarget, "%Error.prototype%", « [[ErrorData]] ») とする。
  3. messageundefined でなければ
    1. msg = ? ToString(message)。
    2. CreateNonEnumerableDataPropertyOrThrow(O, "message", msg)。
  4. InstallErrorCause(O, options)。
  5. O を返す。

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

Error コンストラクタ:

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 プロトタイプオブジェクト

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

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

Error プロトタイプオブジェクト:

20.5.3.1 Error.prototype.constructor

Error.prototype.constructor 初期値は %Error%

20.5.3.2 Error.prototype.message

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

20.5.3.3 Error.prototype.name

Error.prototype.name 初期値は "Error"

20.5.3.4 Error.prototype.toString ( )

呼び出し手順:

  1. O = this 値。
  2. O が Object でなければ TypeError
  3. name = ? Get(O, "name")。
  4. nameundefined なら "Error" に; それ以外は ? ToString(name)。
  5. msg = ? Get(O, "message")。
  6. msgundefined なら空文字列; Else ? ToString(msg)。
  7. name が空なら msg を返す。
  8. msg が空なら name を返す。
  9. name, 0x003A, 0x0020, msg の連結を返す。

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

Error インスタンスは Error プロトタイプオブジェクトを継承する通常オブジェクト[[ErrorData]] 内部スロット値 undefined。このスロットの唯一の用途は Object.prototype.toStringError.isError による識別。

20.5.5 本仕様で使用されるネイティブエラー型

以下の NativeError 又は AggregateError の新インスタンスがランタイムエラーで投げられる。全 NativeError20.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%

他の NativeError が適切でない失敗原因を示す失敗時に使用。

20.5.5.6 URIError

URIError コンストラクタ%URIError%

グローバル URI 処理関数の不適切利用を示す。

20.5.6 NativeError オブジェクト構造

以下の各オブジェクトは記述に従う構造を持ち、コンストラクタ名とプロトタイプオブジェクトの "name" のみ異なる。

各エラーオブジェクトの定義内の NativeError 参照は該当エラー名に置換される。

20.5.6.1 NativeError コンストラクタ

NativeError コンストラクタ:

  • 関数呼出でコンストラクタ呼出と同等に新 NativeError オブジェクトを生成初期化(NativeError(…)new NativeError(…) と等価)。
  • extends 節で利用可。継承意図のサブクラスは [[ErrorData]] 付きインスタンス生成のため super 呼出しが必要。

20.5.6.1.1 NativeError ( message [ , options ] )

NativeError 関数は呼び出し時次を行う:

  1. NewTarget が undefined なら newTarget = アクティブ関数オブジェクト; Else newTarget = NewTarget。
  2. O を ? OrdinaryCreateFromConstructor(newTarget, "%NativeError.prototype%", « [[ErrorData]] »)。
  3. messageundefined でなければ
    1. msg = ? ToString(message)。
    2. CreateNonEnumerableDataPropertyOrThrow(O, "message", msg)。
  4. InstallErrorCause(O, options)。
  5. O を返す。

手順 2 の文字列は定義対象に応じ "%EvalError.prototype%", "%RangeError.prototype%", "%ReferenceError.prototype%", "%SyntaxError.prototype%", "%TypeError.prototype%", "%URIError.prototype%" のいずれか。

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

NativeError コンストラクタ:

  • [[Prototype]] 内部スロット値は %Error%
  • "name" プロパティ値は "NativeError"
  • 以下のプロパティを持つ:

20.5.6.2.1 NativeError.prototype

NativeError.prototype 初期値は NativeError プロトタイプオブジェクト (20.5.6.3)。各コンストラクタは固有プロトタイプを持つ。

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

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

NativeError プロトタイプオブジェクト:

20.5.6.3.1 NativeError.prototype.constructor

該当 NativeError コンストラクタのプロトタイプ "constructor" 初期値はそのコンストラクタ自身。

20.5.6.3.2 NativeError.prototype.message

"message" 初期値は空文字列。

20.5.6.3.3 NativeError.prototype.name

"name" 初期値はコンストラクタ名(NativeError の代わりに用いる名称)。

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

NativeError インスタンスは独自プロトタイプを継承する通常オブジェクト[[ErrorData]] 内部スロット値 undefined。用途は Object.prototype.toStringError.isError による識別。

20.5.7 AggregateError オブジェクト

20.5.7.1 AggregateError コンストラクタ

AggregateError コンストラクタ:

  • %AggregateError% である。
  • グローバルオブジェクト"AggregateError" プロパティ初期値。
  • 関数呼出しでも new と同等。
  • extends 節に使用可能。継承意図サブクラスは [[ErrorData]] 用に super 呼出しが必要。

20.5.7.1.1 AggregateError ( errors, message [ , options ] )

呼び出し手順:

  1. NewTarget が undefined なら newTarget = アクティブ関数; Else newTarget = NewTarget。
  2. O = ? OrdinaryCreateFromConstructor(newTarget, "%AggregateError.prototype%", « [[ErrorData]] »)。
  3. messageundefined でなければ
    1. msg = ? ToString(message)。
    2. CreateNonEnumerableDataPropertyOrThrow(O, "message", msg)。
  4. InstallErrorCause(O, options)。
  5. errorsList = ? IteratorToList(? GetIterator(errors, sync))。
  6. DefinePropertyOrThrow(O, "errors", PropertyDescriptor { [[Configurable]]: true, [[Enumerable]]: false, [[Writable]]: true, [[Value]]: CreateArrayFromList(errorsList) })。
  7. O を返す。

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

AggregateError コンストラクタ:

  • [[Prototype]] 内部スロット値は %Error%
  • 以下のプロパティを持つ:

20.5.7.2.1 AggregateError.prototype

AggregateError.prototype 初期値は %AggregateError.prototype%

属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

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

AggregateError プロトタイプオブジェクト:

  • %AggregateError.prototype%
  • 通常オブジェクト
  • Error でも AggregateError インスタンスでもなく [[ErrorData]] を持たない。
  • [[Prototype]] 内部スロット値は %Error.prototype%

20.5.7.3.1 AggregateError.prototype.constructor

AggregateError.prototype.constructor 初期値は %AggregateError%

20.5.7.3.2 AggregateError.prototype.message

AggregateError.prototype.message 初期値は空文字列。

20.5.7.3.3 AggregateError.prototype.name

AggregateError.prototype.name 初期値は "AggregateError"

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

AggregateError インスタンスは AggregateError プロトタイプを継承し [[ErrorData]] 内部スロット値 undefined。用途は Object.prototype.toStringError.isError での識別。

20.5.8 Error オブジェクト用抽象操作

20.5.8.1 InstallErrorCause ( O, options )

The abstract operation InstallErrorCause takes arguments O (Object) and options (ECMAScript 言語値) and returns unused を含む通常完了または throw completion. options"cause" プロパティがある場合 O"cause" プロパティを作成する。 It performs the following steps when called:

  1. options が Object かつ ? HasProperty(options, "cause") が true なら
    1. cause = ? Get(options, "cause")。
    2. CreateNonEnumerableDataPropertyOrThrow(O, "cause", cause)。
  2. unused を返す。