7 抽象操作

これらの操作は ECMAScript 言語の一部ではない。これらは、ECMAScript 言語の意味論を仕様化するのを補助するためだけに、ここで定義される。この仕様全体を通して、他にもより特殊化された抽象操作が定義されている。

7.1 型変換

ECMAScript 言語は必要に応じて暗黙に自動型変換を行う。ある種の構文の意味論を明確にするために、変換抽象操作の集合を定義しておくことは有用である。変換抽象操作は多相的であり、任意の ECMAScript 言語型の値を受け取ることができる。しかし、これらの操作では他の仕様型は使用されない。

BigInt 型には ECMAScript 言語における暗黙変換は存在しない。プログラマは、他の型から値を変換するために BigInt を明示的に呼び出さなければならない。

7.1.1 ToPrimitive ( input [ , preferredType ] )

The abstract operation ToPrimitive takes argument input (an ECMAScript language value) and optional argument preferredType (string or number) and returns either a normal completion containing an ECMAScript language value or a throw completion. これは input 引数を非 Object 型へ変換する。あるオブジェクトが複数の primitive 型へ変換可能な場合、任意のヒント preferredType を用いてその型を優先してよい。 It performs the following steps when called:

  1. input が Object である場合、
    1. exoticToPrim を ? GetMethod(input, %Symbol.toPrimitive%) とする。
    2. exoticToPrimundefined でない場合、
      1. preferredType が存在しない場合、
        1. hint"default" とする。
      2. Else if preferredTypestring である場合、
        1. hint"string" とする。
      3. Else,
        1. Assert: preferredTypenumber である。
        2. hint"number" とする。
      4. result を ? Call(exoticToPrim, input, « hint ») とする。
      5. result が Object でないなら、result を返す。
      6. TypeError 例外を throw する。
    3. preferredType が存在しないなら、preferredTypenumber に設定する。
    4. OrdinaryToPrimitive(input, preferredType) を返す。
  2. input を返す。
Note

ToPrimitive がヒントなしで呼び出されると、一般にはヒントが number であったかのように振る舞う。しかし、オブジェクトは %Symbol.toPrimitive% メソッドを定義することでこの振る舞いを上書きできる。この仕様で定義されるオブジェクトのうち、既定の ToPrimitive の振る舞いを上書きするのは Date(21.4.4.45 を参照)と Symbol object(20.4.3.5 を参照)のみである。Date は、ヒントが存在しない場合を、ヒントが string であったかのように扱う。

7.1.1.1 OrdinaryToPrimitive ( obj, hint )

The abstract operation OrdinaryToPrimitive takes arguments obj (an Object) and hint (string or number) and returns either a normal completion containing an ECMAScript language value or a throw completion. It performs the following steps when called:

  1. hintstring の場合、
    1. methodNames を « "toString", "valueOf" » とする。
  2. Else,
    1. methodNames を « "valueOf", "toString" » とする。
  3. methodNames の各要素 name について、次を行う
    1. method を ? Get(obj, name) とする。
    2. IsCallable(method) が true なら、
      1. result を ? Call(method, obj) とする。
      2. result が Object でないなら、result を返す。
  4. TypeError 例外を throw する。

7.1.2 ToBoolean ( argument )

The abstract operation ToBoolean takes argument argument (an ECMAScript language value) and returns a Boolean. これは argumentBoolean 型の値へ変換する。 It performs the following steps when called:

  1. argument が Boolean なら、argument を返す。
  2. argumentundefined, null, +0𝔽, -0𝔽, NaN, 0, または空の String のいずれかであるなら、false を返す。
  3. ホストがウェブブラウザであるか、または [[IsHTMLDDA]] 内部スロット をサポートする場合、
    1. argument が Object であり、かつ argument[[IsHTMLDDA]] 内部スロットを持つなら、false を返す。
  4. true を返す。

7.1.3 ToNumeric ( value )

The abstract operation ToNumeric takes argument value (an ECMAScript language value) and returns either a normal completion containing either a Number or a BigInt, or a throw completion. これは value を Number または BigInt に変換して返す。 It performs the following steps when called:

  1. primValue を ? ToPrimitive(value, number) とする。
  2. primValue が BigInt なら、primValue を返す。
  3. ToNumber(primValue) を返す。

7.1.4 ToNumber ( argument )

The abstract operation ToNumber takes argument argument (an ECMAScript language value) and returns either a normal completion containing a Number or a throw completion. これは argumentNumber 型の値へ変換する。 It performs the following steps when called:

  1. argument が Number なら、argument を返す。
  2. argument が Symbol または BigInt のいずれかであるなら、TypeError 例外を throw する。
  3. argumentundefined なら、NaN を返す。
  4. argumentnull または false のいずれかであるなら、+0𝔽 を返す。
  5. argumenttrue なら、1𝔽 を返す。
  6. argument が String なら、StringToNumber(argument) を返す。
  7. Assert: argument は Object である。
  8. primValue を ? ToPrimitive(argument, number) とする。
  9. Assert: primValue は Object ではない。
  10. ToNumber(primValue) を返す。

7.1.4.1 String 型に適用される ToNumber

抽象操作 StringToNumber は、以下の文法を用いて、String 値を Number 値へ変換する方法を規定する。

構文

StringNumericLiteral ::: StrWhiteSpaceopt StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpaceopt StrWhiteSpaceChar ::: WhiteSpace LineTerminator StrNumericLiteral ::: StrDecimalLiteral NonDecimalIntegerLiteral[~Sep] StrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: Infinity DecimalDigits[~Sep] . DecimalDigits[~Sep]opt ExponentPart[~Sep]opt . DecimalDigits[~Sep] ExponentPart[~Sep]opt DecimalDigits[~Sep] ExponentPart[~Sep]opt

上で明示的に定義されていないすべての文法記号は、数値リテラルの字句文法(12.9.3)で使用される定義を持つ。

Note

StringNumericLiteralNumericLiteral の構文の間には、いくつかの相違点があることに注意すべきである。

7.1.4.1.1 StringToNumber ( str )

The abstract operation StringToNumber takes argument str (a String) and returns a Number. It performs the following steps when called:

  1. literalParseText(str, StringNumericLiteral) とする。
  2. literal がエラーの List なら、NaN を返す。
  3. literalStringNumericValue を返す。

7.1.4.1.2 Runtime Semantics: StringNumericValue

The syntax-directed operation StringNumericValue takes no arguments and returns a Number.

Note

StringNumericLiteral から Number 値への変換は、全体としては NumericLiteralNumericValue の決定(12.9.3 を参照)に似ているが、細部の一部は異なる。

It is defined piecewise over the following productions:

StringNumericLiteral ::: StrWhiteSpaceopt
  1. +0𝔽 を返す。
StringNumericLiteral ::: StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt
  1. StrNumericLiteralStringNumericValue を返す。
StrNumericLiteral ::: NonDecimalIntegerLiteral
  1. 𝔽(NonDecimalIntegerLiteral の MV) を返す。
StrDecimalLiteral ::: - StrUnsignedDecimalLiteral
  1. aStrUnsignedDecimalLiteralStringNumericValue とする。
  2. a+0𝔽 なら、-0𝔽 を返す。
  3. -a を返す。
StrUnsignedDecimalLiteral ::: Infinity
  1. +∞𝔽 を返す。
StrUnsignedDecimalLiteral ::: DecimalDigits . DecimalDigitsopt ExponentPartopt
  1. a を最初の DecimalDigits の MV とする。
  2. 2 番目の DecimalDigits が存在する場合、
    1. b を 2 番目の DecimalDigits の MV とする。
    2. n を 2 番目の DecimalDigits に含まれるコードポイント数とする。
  3. Else,
    1. b を 0 とする。
    2. n を 0 とする。
  4. ExponentPart が存在するなら eExponentPart の MV とし、そうでなければ e を 0 とする。
  5. RoundMVResult((a + (b × 10-n)) × 10e) を返す。
StrUnsignedDecimalLiteral ::: . DecimalDigits ExponentPartopt
  1. bDecimalDigits の MV とする。
  2. ExponentPart が存在するなら eExponentPart の MV とし、そうでなければ e を 0 とする。
  3. nDecimalDigits に含まれるコードポイント数とする。
  4. RoundMVResult(b × 10e - n) を返す。
StrUnsignedDecimalLiteral ::: DecimalDigits ExponentPartopt
  1. aDecimalDigits の MV とする。
  2. ExponentPart が存在するなら eExponentPart の MV とし、そうでなければ e を 0 とする。
  3. RoundMVResult(a × 10e) を返す。

7.1.4.1.3 RoundMVResult ( n )

The abstract operation RoundMVResult takes argument n (a mathematical value) and returns a Number. これは nimplementation-defined な方法で Number に変換する。この抽象操作において、ある桁は、それが 0 でないか、またはその左側に非 0 の桁が存在し、かつその右側にも非 0 の桁が存在する場合に significant である。この抽象操作において、数学的値の表現によって “表される数学的値” とは、数学的値の “10 進表現” の逆である。 It performs the following steps when called:

  1. n の 10 進表現が 20 桁以下の significant digits を持つなら、𝔽(n) を返す。
  2. option1 を、n の 10 進表現において 20 桁目より後の各 significant digit を 0 桁で置き換えた結果によって表される数学的値とする。
  3. option2 を、n の 10 進表現において 20 桁目より後の各 significant digit を 0 桁で置き換え、その後 20 桁目でインクリメントした結果(必要に応じて桁上がりを行う)によって表される数学的値とする。
  4. chosen を、option1 または option2 のいずれかを選ぶ implementation-defined な選択とする。
  5. 𝔽(chosen) を返す。

7.1.5 ToIntegerOrInfinity ( argument )

The abstract operation ToIntegerOrInfinity takes argument argument (an ECMAScript language value) and returns either a normal completion containing either an integer, +∞, or -∞, or a throw completion. これは argument を、その Number 値の小数部分を切り捨てた整数へ変換する。また、その Number 値が無限大である場合には +∞ または -∞ へ変換する。 It performs the following steps when called:

  1. number を ? ToNumber(argument) とする。
  2. numberNaN, +0𝔽, または -0𝔽 のいずれかであるなら、0 を返す。
  3. number+∞𝔽 なら、+∞ を返す。
  4. number-∞𝔽 なら、-∞ を返す。
  5. truncate((number)) を返す。
Note
𝔽(ToIntegerOrInfinity(x)) は、どのような x の値に対しても -0𝔽 を返さない。小数部分の切り捨ては、x を数学的値へ変換した後に行われる。

7.1.6 ToFixedSizeInteger ( int, signed, bitWidth )

The abstract operation ToFixedSizeInteger takes arguments int (整数、+∞、または -∞), signed (unsigned または signed), and bitWidth (正の整数) and returns 整数. これは、int を、0 から 2bitWidth - 1 までの両端を含む区間にある 2bitWidth 個の整数のうちの 1 つ(signedunsigned の場合)、または -2bitWidth - 1 から 2bitWidth - 1 - 1 まで(signedsigned の場合)に写像する。 It performs the following steps when called:

  1. int = +∞ または int = -∞ である場合、0 を返す。
  2. fixedIntint modulo 2bitWidth とする。
  3. NOTE: 次のステップは fixedInt の 2 の補数表現を変更しない。
  4. signedsigned であり、かつ fixedInt ≥ 2bitWidth - 1 である場合、fixedIntfixedInt - 2bitWidth に設定する。
  5. fixedInt を返す。
Note

ToFixedSizeInteger は冪等である: 任意の ECMAScript 言語値 x について、ToFixedSizeInteger(ToFixedSizeInteger(x, signed, bitWidth), signed, bitWidth) は ToFixedSizeInteger(x, signed, bitWidth) と同じである。実際、+∞ と -∞ は 0 に写像されるため、この不変条件は signed の反転をまたいでも維持される(例えば、ToFixedSizeInteger(ToFixedSizeInteger(x, signed, 32), unsigned, 32) は ToFixedSizeInteger(x, unsigned, 32) と同じである)。

7.1.7 ToInt32 ( argument )

The abstract operation ToInt32 takes argument argument (ECMAScript 言語値) and returns 整数の Number を含む正常完了、または throw 完了. これは、argument を、𝔽(-231) から 𝔽(231 - 1) までの両端を含む区間にある、-0𝔽 を除く 232 個の整数の Number 値のうちの 1 つに変換する。 It performs the following steps when called:

  1. int を ? ToIntegerOrInfinity(argument) とする。
  2. 𝔽(ToFixedSizeInteger(int, signed, 32)) を返す。

7.1.8 ToUint32 ( argument )

The abstract operation ToUint32 takes argument argument (ECMAScript 言語値) and returns 整数の Number を含む正常完了、または throw 完了. これは、argument を、+0𝔽 から 𝔽(232 - 1) までの両端を含む区間にある 232 個の整数の Number 値のうちの 1 つに変換する。 It performs the following steps when called:

  1. int を ? ToIntegerOrInfinity(argument) とする。
  2. 𝔽(ToFixedSizeInteger(int, unsigned, 32)) を返す。

7.1.9 ToInt16 ( argument )

The abstract operation ToInt16 takes argument argument (ECMAScript 言語値) and returns 整数の Number を含む正常完了、または throw 完了. これは、argument を、𝔽(-215) から 𝔽(215 - 1) までの両端を含む区間にある、-0𝔽 を除く 216 個の整数の Number 値のうちの 1 つに変換する。 It performs the following steps when called:

  1. int を ? ToIntegerOrInfinity(argument) とする。
  2. 𝔽(ToFixedSizeInteger(int, signed, 16)) を返す。

7.1.10 ToUint16 ( argument )

The abstract operation ToUint16 takes argument argument (ECMAScript 言語値) and returns 整数の Number を含む正常完了、または throw 完了. これは、argument を、+0𝔽 から 𝔽(216 - 1) までの両端を含む区間にある 216 個の整数の Number 値のうちの 1 つに変換する。 It performs the following steps when called:

  1. int を ? ToIntegerOrInfinity(argument) とする。
  2. 𝔽(ToFixedSizeInteger(int, unsigned, 16)) を返す。

7.1.11 ToInt8 ( argument )

The abstract operation ToInt8 takes argument argument (ECMAScript 言語値) and returns 整数の Number を含む正常完了、または throw 完了. これは、argument を、-128𝔽 から 127𝔽 までの両端を含む区間にある、-0𝔽 を除く 28 個の整数の Number 値のうちの 1 つに変換する。 It performs the following steps when called:

  1. int を ? ToIntegerOrInfinity(argument) とする。
  2. 𝔽(ToFixedSizeInteger(int, signed, 8)) を返す。

7.1.12 ToUint8 ( argument )

The abstract operation ToUint8 takes argument argument (ECMAScript 言語値) and returns 整数の Number を含む正常完了、または throw 完了. これは、argument を、+0𝔽 から 255𝔽 までの両端を含む区間にある 28 個の整数の Number 値のうちの 1 つに変換する。 It performs the following steps when called:

  1. int を ? ToIntegerOrInfinity(argument) とする。
  2. 𝔽(ToFixedSizeInteger(int, unsigned, 8)) を返す。

7.1.13 ToUint8Clamp ( argument )

The abstract operation ToUint8Clamp takes argument argument (ECMAScript 言語値) and returns 整数の Number を含む正常完了、または throw 完了. これは、argument+0𝔽 から 255𝔽 までの両端を含む区間にある 28 個の整数の Number 値のうちの 1 つにクランプし、丸める。 It performs the following steps when called:

  1. number を ? ToNumber(argument) とする。
  2. numberNaN である場合、+0𝔽 を返す。
  3. mvnumber の拡張数学値とする。
  4. clampedmv を 0 と 255 の間にクランプした結果とする。
  5. ffloor(clamped) とする。
  6. clamped < f + 0.5 である場合、𝔽(f) を返す。
  7. clamped > f + 0.5 である場合、𝔽(f + 1) を返す。
  8. f が偶数である場合、𝔽(f) を返す。
  9. 𝔽(f + 1) を返す。
Note

他のほとんどの ECMAScript 整数変換操作とは異なり、ToUint8Clamp は非整数値を切り捨てるのではなく丸める。また、これは「最近接偶数丸め」の同値分岐を使用し、これは Math.round の「最近接切り上げ」の同値分岐とは異なる。

7.1.14 ToBigInt ( argument )

The abstract operation ToBigInt takes argument argument (ECMAScript 言語値) and returns BigInt を含む正常完了、または throw 完了. これは、argument を BigInt 値に変換する、または Number からの暗黙の変換が必要となる場合は throw する。 It performs the following steps when called:

  1. prim を ? ToPrimitive(argument, number) とする。
  2. Table 12 において prim が対応する値を返す。
Table 12: BigInt 変換
引数の型 結果
Undefined TypeError 例外を投げる。
Null TypeError 例外を投げる。
Boolean primtrue である場合は 1n を返し、primfalse である場合は 0n を返す。
BigInt prim を返す。
Number TypeError 例外を投げる。
String
  1. nStringToBigInt(prim) とする。
  2. nundefined である場合、SyntaxError 例外を投げる。
  3. n を返す。
Symbol TypeError 例外を投げる。

7.1.15 StringToBigInt ( str )

The abstract operation StringToBigInt takes argument str (String) and returns BigInt または undefined. It performs the following steps when called:

  1. literalParseText(str, StringIntegerLiteral) とする。
  2. literal がエラーの List である場合、undefined を返す。
  3. mvliteral の MV とする。
  4. Assert: mv は整数である。
  5. (mv) を返す。

7.1.15.1 StringIntegerLiteral 文法

StringToBigInt は次の文法を使用する。

構文

StringIntegerLiteral ::: StrWhiteSpaceopt StrWhiteSpaceopt StrIntegerLiteral StrWhiteSpaceopt StrIntegerLiteral ::: SignedInteger[~Sep] NonDecimalIntegerLiteral[~Sep]

7.1.15.2 実行時セマンティクス: MV

7.1.16 ToBigInt64 ( argument )

The abstract operation ToBigInt64 takes argument argument (ECMAScript 言語値) and returns BigInt を含む正常完了、または throw 完了. これは、argument を、(-263) から (263 - 1) までの両端を含む区間にある 264 個の BigInt 値のうちの 1 つに変換する。 It performs the following steps when called:

  1. int(? ToBigInt(argument)) とする。
  2. (ToFixedSizeInteger(int, signed, 64)) を返す。

7.1.17 ToBigUint64 ( argument )

The abstract operation ToBigUint64 takes argument argument (ECMAScript 言語値) and returns BigInt を含む正常完了、または throw 完了. これは、argument を、0 から (264 - 1) までの両端を含む区間にある 264 個の BigInt 値のうちの 1 つに変換する。 It performs the following steps when called:

  1. int(? ToBigInt(argument)) とする。
  2. (ToFixedSizeInteger(int, unsigned, 64)) を返す。

7.1.18 ToString ( argument )

The abstract operation ToString takes argument argument (ECMAScript 言語値) and returns String を含む正常完了、または throw 完了. これは、argumentString 型の値に変換する。 It performs the following steps when called:

  1. argument が String である場合、argument を返す。
  2. argument が Symbol である場合、TypeError 例外を投げる。
  3. argumentundefined である場合、"undefined" を返す。
  4. argumentnull である場合、"null" を返す。
  5. argumenttrue である場合、"true" を返す。
  6. argumentfalse である場合、"false" を返す。
  7. argument が Number である場合、Number::toString(argument, 10) を返す。
  8. argument が BigInt である場合、BigInt::toString(argument, 10) を返す。
  9. Assert: argument は Object である。
  10. primValue を ? ToPrimitive(argument, string) とする。
  11. Assert: primValue は Object ではない。
  12. ToString(primValue) を返す。

7.1.19 ToObject ( argument )

The abstract operation ToObject takes argument argument (ECMAScript 言語値) and returns Object を含む正常完了、または throw 完了. これは、argumentObject 型の値に変換する。 It performs the following steps when called:

  1. argumentundefined または null のいずれかである場合、TypeError 例外を投げる。
  2. argument が Boolean である場合、[[BooleanData]] 内部スロットが argument に設定された新しい Boolean オブジェクトを返す。Boolean オブジェクトの説明については 20.3 を参照。
  3. argument が Number である場合、[[NumberData]] 内部スロットが argument に設定された新しい Number オブジェクトを返す。Number オブジェクトの説明については 21.1 を参照。
  4. argument が String である場合、[[StringData]] 内部スロットが argument に設定された新しい String オブジェクトを返す。String オブジェクトの説明については 22.1 を参照。
  5. argument が Symbol である場合、[[SymbolData]] 内部スロットが argument に設定された新しい Symbol オブジェクトを返す。Symbol オブジェクトの説明については 20.4 を参照。
  6. argument が BigInt である場合、[[BigIntData]] 内部スロットが argument に設定された新しい BigInt オブジェクトを返す。BigInt オブジェクトの説明については 21.2 を参照。
  7. Assert: argument は Object である。
  8. argument を返す。

7.1.20 ToPropertyKey ( argument )

The abstract operation ToPropertyKey takes argument argument (ECMAScript 言語値) and returns プロパティキーを含む正常完了、または throw 完了. これは、argument をプロパティキーとして使用できる値に変換する。 It performs the following steps when called:

  1. key を ? ToPrimitive(argument, string) とする。
  2. key が Symbol である場合、
    1. key を返す。
  3. ToString(key) を返す。

7.1.21 ToLength ( argument )

The abstract operation ToLength takes argument argument (ECMAScript 言語値) and returns 非負の整数の Number を含む正常完了、または throw 完了. これは、argument を、配列風オブジェクトの長さとして使用するのに適した非負の整数の Number にクランプし、切り捨てる。 It performs the following steps when called:

  1. len を ? ToIntegerOrInfinity(argument) とする。
  2. len ≤ 0 である場合、+0𝔽 を返す。
  3. 𝔽(min(len, 253 - 1)) を返す。

7.1.22 CanonicalNumericIndexString ( argument )

The abstract operation CanonicalNumericIndexString takes argument argument (String) and returns Number または undefined. argument"-0" であるか、ある Number 値 n について ToString(n) と正確に一致する場合、それは対応する Number 値を返す。そうでない場合、undefined を返す。 It performs the following steps when called:

  1. argument"-0" である場合、-0𝔽 を返す。
  2. n を ! ToNumber(argument) とする。
  3. ToString(n) が argument である場合、n を返す。
  4. undefined を返す。

正準数値文字列とは、CanonicalNumericIndexString 抽象操作が undefined を返さない任意の String である。

7.1.23 ToIndex ( value )

The abstract operation ToIndex takes argument value (an ECMAScript language value) and returns either a normal completion containing a non-negative integer or a throw completion. これは value を整数へ変換し、その整数が非負であり、かつ integer index に対応するならその整数を返す。そうでなければ例外を throw する。 It performs the following steps when called:

  1. integer を ? ToIntegerOrInfinity(value) とする。
  2. integer が 0 から 253 - 1 までの包含区間にないなら、RangeError 例外を throw する。
  3. integer を返す。

7.2 判定および比較操作

7.2.1 RequireObjectCoercible ( argument )

The abstract operation RequireObjectCoercible takes argument argument (an ECMAScript language value) and returns either a normal completion containing unused or a throw completion. これは argumentToObject を用いて Object に変換できない値である場合、エラーを throw する。 It performs the following steps when called:

  1. argumentundefined または null のいずれかであるなら、TypeError 例外を throw する。
  2. unused を返す。

7.2.2 IsArray ( argument )

The abstract operation IsArray takes argument argument (an ECMAScript language value) and returns either a normal completion containing a Boolean or a throw completion. It performs the following steps when called:

  1. argument が Object でないなら、false を返す。
  2. argument が Array exotic object なら、true を返す。
  3. argument が Proxy exotic object なら、
    1. ValidateNonRevokedProxy(argument) を実行する。
    2. proxyTargetargument.[[ProxyTarget]] とする。
    3. IsArray(proxyTarget) を返す。
  4. false を返す。

7.2.3 IsCallable ( argument )

The abstract operation IsCallable takes argument argument (an ECMAScript language value) and returns a Boolean. これは argument[[Call]] 内部メソッドを持つ callable function であるかどうかを判定する。 It performs the following steps when called:

  1. argument が Object でないなら、false を返す。
  2. argument[[Call]] 内部メソッドを持つなら、true を返す。
  3. false を返す。

7.2.4 IsConstructor ( argument )

The abstract operation IsConstructor takes argument argument (an ECMAScript language value) and returns a Boolean. これは argument[[Construct]] 内部メソッドを持つ function object であるかどうかを判定する。 It performs the following steps when called:

  1. argument が Object でないなら、false を返す。
  2. argument[[Construct]] 内部メソッドを持つなら、true を返す。
  3. false を返す。

7.2.5 IsExtensible ( obj )

The abstract operation IsExtensible takes argument obj (an Object) and returns either a normal completion containing a Boolean or a throw completion. これは obj に追加のプロパティを加えることができるかどうかを判定するために用いられる。 It performs the following steps when called:

  1. obj.[[IsExtensible]]() を返す。

7.2.6 IsRegExp ( argument )

The abstract operation IsRegExp takes argument argument (an ECMAScript language value) and returns either a normal completion containing a Boolean or a throw completion. It performs the following steps when called:

  1. argument が Object でないなら、false を返す。
  2. matcher を ? Get(argument, %Symbol.match%) とする。
  3. matcherundefined でないなら、ToBoolean(matcher) を返す。
  4. argument[[RegExpMatcher]] 内部スロットを持つなら、true を返す。
  5. false を返す。

7.2.7 Static Semantics: IsStringWellFormedUnicode ( string )

The abstract operation IsStringWellFormedUnicode takes argument string (a String) and returns a Boolean. これは 6.1.4 に記述されるように string を UTF-16 で符号化されたコードポイント列として解釈し、それが well formed な UTF-16 列であるかどうかを判定する。 It performs the following steps when called:

  1. lenstring の長さとする。
  2. k を 0 とする。
  3. k < len の間、繰り返す
    1. cpCodePointAt(string, k) とする。
    2. cp.[[IsUnpairedSurrogate]]true なら、false を返す。
    3. kk + cp.[[CodeUnitCount]] に設定する。
  4. true を返す。

7.2.8 SameType ( x, y )

The abstract operation SameType takes arguments x (an ECMAScript language value) and y (an ECMAScript language value) and returns a Boolean. これは 2 つの引数が同じ型であるかどうかを判定する。 It performs the following steps when called:

  1. xundefined かつ yundefined なら、true を返す。
  2. xnull かつ ynull なら、true を返す。
  3. x が Boolean かつ y が Boolean なら、true を返す。
  4. x が Number かつ y が Number なら、true を返す。
  5. x が BigInt かつ y が BigInt なら、true を返す。
  6. x が Symbol かつ y が Symbol なら、true を返す。
  7. x が String かつ y が String なら、true を返す。
  8. x が Object かつ y が Object なら、true を返す。
  9. false を返す。

7.2.9 SameValue ( x, y )

The abstract operation SameValue takes arguments x (an ECMAScript language value) and y (an ECMAScript language value) and returns a Boolean. これは 2 つの引数が同じ値であるかどうかを判定する。 It performs the following steps when called:

  1. SameType(x, y) が false なら、false を返す。
  2. x が Number なら、
    1. Number::sameValue(x, y) を返す。
  3. SameValueNonNumber(x, y) を返す。
Note

このアルゴリズムは、すべての NaN 値を等価として扱い、かつ +0𝔽-0𝔽 を区別する点で IsStrictlyEqual Algorithm と異なる。

7.2.10 SameValueZero ( x, y )

The abstract operation SameValueZero takes arguments x (an ECMAScript language value) and y (an ECMAScript language value) and returns a Boolean. これは 2 つの引数が同じ値であるかどうかを判定する(+0𝔽-0𝔽 の違いは無視する)。 It performs the following steps when called:

  1. SameType(x, y) が false なら、false を返す。
  2. x が Number なら、
    1. Number::sameValueZero(x, y) を返す。
  3. SameValueNonNumber(x, y) を返す。
Note

SameValueZero は、+0𝔽-0𝔽 を等価として扱う点だけが SameValue と異なる。

7.2.11 SameValueNonNumber ( x, y )

The abstract operation SameValueNonNumber takes arguments x (an ECMAScript language value, but not a Number) and y (an ECMAScript language value, but not a Number) and returns a Boolean. It performs the following steps when called:

  1. Assert: SameType(x, y) is true.
  2. xundefined または null のいずれかなら、true を返す。
  3. x が BigInt なら、
    1. BigInt::equal(x, y) を返す。
  4. x が String なら、
    1. xy の長さが同じであり、かつ同じ位置に同じコードユニットを持つなら、true を返す。
    2. false を返す。
  5. x が Boolean なら、
    1. xtrue かつ ytrue なら、true を返す。
    2. xfalse かつ yfalse なら、true を返す。
    3. false を返す。
  6. NOTE: 他のすべての ECMAScript 言語値は identity によって比較される。
  7. x is y なら、true を返す。
  8. false を返す。
Note 1
説明上の目的から、このアルゴリズムの中では、そうする必要がない場合であっても、いくつかのケースが個別に扱われている。
Note 2
x is y” の意味の詳細は 5.2.8 に記述されている。

7.2.12 IsLessThan ( x, y, leftFirst )

The abstract operation IsLessThan takes arguments x (an ECMAScript language value), y (an ECMAScript language value), and leftFirst (a Boolean) and returns either a normal completion containing either a Boolean or undefined, or a throw completion. これは比較 x < y のセマンティクスを提供し、truefalse、または undefined(これは、オペランドを同じ数値型の比較可能な値へ強制変換できなかったことを示す)を返す。leftFirst フラグは、潜在的に可視の副作用を伴う操作が x および y に対して実行される順序を制御するために使用される。ECMAScript は式の左から右への評価を規定しているため、これは必要である。leftFirsttrue の場合、x パラメータは、y パラメータに対応する式の左側に現れる式に対応する。leftFirstfalse の場合、その逆であり、操作は x より前に y に対して実行されなければならない。 It performs the following steps when called:

  1. leftFirsttrue の場合、
    1. px を ? ToPrimitive(x, number) とする。
    2. py を ? ToPrimitive(y, number) とする。
  2. Else,
    1. NOTE: 左から右への評価を保つために、評価順序を逆転させる必要がある。
    2. py を ? ToPrimitive(y, number) とする。
    3. px を ? ToPrimitive(x, number) とする。
  3. px が String かつ py が String なら、
    1. lxpx の長さとする。
    2. lypy の長さとする。
    3. 0 ≤ i < min(lx, ly) を満たす各整数 i について、昇順で次を行う
      1. cxpx 内の添字 i にあるコードユニットの数値とする。
      2. cypy 内の添字 i にあるコードユニットの数値とする。
      3. cx < cy なら、true を返す。
      4. cx > cy なら、false を返す。
    4. lx < ly なら、true を返す。
    5. false を返す。
  4. px が BigInt かつ py が String なら、
    1. nyStringToBigInt(py) とする。
    2. nyundefined なら、undefined を返す。
    3. BigInt::lessThan(px, ny) を返す。
  5. px が String かつ py が BigInt なら、
    1. nxStringToBigInt(px) とする。
    2. nxundefined なら、undefined を返す。
    3. BigInt::lessThan(nx, py) を返す。
  6. NOTE: pxpy は primitive 値なので、評価順序は重要ではない。
  7. nx を ? ToNumeric(px) とする。
  8. ny を ? ToNumeric(py) とする。
  9. SameType(nx, ny) が true なら、
    1. nx が Number なら、Number::lessThan(nx, ny) を返す。
    2. Assert: nx は BigInt である。
    3. BigInt::lessThan(nx, ny) を返す。
  10. Assert: nx は BigInt かつ ny は Number、または nx は Number かつ ny は BigInt である。
  11. nxNaN または nyNaN なら、undefined を返す。
  12. nx-∞𝔽 または ny+∞𝔽 なら、true を返す。
  13. nx+∞𝔽 または ny-∞𝔽 なら、false を返す。
  14. (nx) < (ny) なら、true を返す。
  15. false を返す。
Note 1

手順 3 は、加算演算子 + を扱うアルゴリズム(13.15.3)における手順 1.c と、論理和ではなく論理積を使用する点で異なる。

Note 2

String の比較では、UTF-16 コードユニット値の列に対する単純な辞書式順序を用いる。Unicode 仕様で定義される、より複雑で意味論指向の文字または文字列の等価性や照合順序の定義を使おうとはしない。したがって、Unicode Standard に従えば正準的に等しいが同じ正規化形式にない String 値は、不等と判定されうる。また、code unit による辞書式順序は、surrogate pair を含む String に対しては code point による順序とは異なることにも注意。

7.2.13 IsLooselyEqual ( x, y )

The abstract operation IsLooselyEqual takes arguments x (an ECMAScript language value) and y (an ECMAScript language value) and returns either a normal completion containing a Boolean or a throw completion. これは == 演算子の意味論を与える。 It performs the following steps when called:

  1. SameType(x, y) が true なら、
    1. IsStrictlyEqual(x, y) を返す。
  2. xnull かつ yundefined なら、true を返す。
  3. xundefined かつ ynull なら、true を返す。
  4. ホストがウェブブラウザであるか、または [[IsHTMLDDA]] 内部スロット をサポートする場合、
    1. x が Object であり、x[[IsHTMLDDA]] 内部スロットを持ち、かつ yundefined または null のいずれかであるなら、true を返す。
    2. xundefined または null のいずれかであり、y が Object であり、かつ y[[IsHTMLDDA]] 内部スロットを持つなら、true を返す。
  5. x が Number かつ y が String なら、! IsLooselyEqual(x, ! ToNumber(y)) を返す。
  6. x が String かつ y が Number なら、! IsLooselyEqual(! ToNumber(x), y) を返す。
  7. x が BigInt かつ y が String なら、
    1. nStringToBigInt(y) とする。
    2. nundefined なら、false を返す。
    3. IsLooselyEqual(x, n) を返す。
  8. x が String かつ y が BigInt なら、! IsLooselyEqual(y, x) を返す。
  9. x が Boolean なら、! IsLooselyEqual(! ToNumber(x), y) を返す。
  10. y が Boolean なら、! IsLooselyEqual(x, ! ToNumber(y)) を返す。
  11. x が String、Number、BigInt、または Symbol のいずれかであり、かつ y が Object なら、! IsLooselyEqual(x, ? ToPrimitive(y)) を返す。
  12. x が Object であり、かつ y が String、Number、BigInt、または Symbol のいずれかであるなら、! IsLooselyEqual(? ToPrimitive(x), y) を返す。
  13. x が BigInt かつ y が Number、または x が Number かつ y が BigInt である場合、
    1. x が有限でないか、または y が有限でないなら、false を返す。
    2. (x) = (y) なら、true を返す。
    3. false を返す。
  14. false を返す。

7.2.14 IsStrictlyEqual ( x, y )

The abstract operation IsStrictlyEqual takes arguments x (an ECMAScript language value) and y (an ECMAScript language value) and returns a Boolean. これは === 演算子の意味論を与える。 It performs the following steps when called:

  1. SameType(x, y) が false なら、false を返す。
  2. x が Number なら、
    1. Number::equal(x, y) を返す。
  3. SameValueNonNumber(x, y) を返す。
Note

このアルゴリズムは、符号付きゼロと NaN の扱いにおいて SameValue Algorithm と異なる。

7.3 Object に対する操作

7.3.1 MakeBasicObject ( internalSlotsList )

The abstract operation MakeBasicObject takes argument internalSlotsList (a List of internal slot names) and returns an Object. これは、ordinary objectexotic object の両方を含め、アルゴリズム的に生成されるすべての ECMAScript object の源である。これは、すべての object の生成で用いられる共通手順を切り出し、object 生成を一元化する。 It performs the following steps when called:

  1. internalSlotsList を、internalSlotsList と « [[PrivateElements]] » の list-concatenation に設定する。
  2. obj を、internalSlotsList 内の各名前に対応する内部スロットを持つ新しく生成された object とする。
  3. NOTE: Object 内部メソッドと内部スロット に記述されるとおり、特に規定されない限り、そのような各内部スロットの初期値は undefined である。
  4. obj.[[PrivateElements]] を新しい空の List に設定する。
  5. obj の essential internal methods を、10.1 で規定される既定の ordinary object 定義に設定する。
  6. Assert: 呼び出し元が obj[[GetPrototypeOf]] および [[SetPrototypeOf]] の両 essential internal method を上書きしないなら、internalSlotsList[[Prototype]] を含む。
  7. Assert: 呼び出し元が obj[[SetPrototypeOf]][[IsExtensible]][[PreventExtensions]] の essential internal methods をすべて上書きしないなら、internalSlotsList[[Extensible]] を含む。
  8. internalSlotsList[[Extensible]] を含むなら、obj.[[Extensible]]true に設定する。
  9. obj を返す。
Note

この仕様において、exotic object は、ArrayCreateBoundFunctionCreate のような抽象操作内で、まず MakeBasicObject を呼び出して基本的で土台となる object を得てから、その object の内部メソッドの一部または全部を上書きすることで生成される。exotic object の生成をカプセル化するために、その object の essential internal methods はそれらの操作の外では決して変更されない。

7.3.2 Get ( obj, propertyKey )

The abstract operation Get takes arguments obj (an Object) and propertyKey (a property key) and returns either a normal completion containing an ECMAScript language value or a throw completion. これは object の特定のプロパティの値を取得するために用いられる。 It performs the following steps when called:

  1. obj.[[Get]](propertyKey, obj) を返す。

7.3.3 GetV ( value, propertyKey )

The abstract operation GetV takes arguments value (an ECMAScript language value) and propertyKey (a property key) and returns either a normal completion containing an ECMAScript language value or a throw completion. これは ECMAScript 言語値の特定のプロパティの値を取得するために用いられる。値が object でない場合、プロパティ探索はその値の型に応じた wrapper object を用いて行われる。 It performs the following steps when called:

  1. obj を ? ToObject(value) とする。
  2. obj.[[Get]](propertyKey, value) を返す。

7.3.4 Set ( obj, propertyKey, value, throw )

The abstract operation Set takes arguments obj (an Object), propertyKey (a property key), value (an ECMAScript language value), and throw (a Boolean) and returns either a normal completion containing unused or a throw completion. これは object の特定のプロパティの値を設定するために用いられる。value はそのプロパティの新しい値である。 It performs the following steps when called:

  1. success を ? obj.[[Set]](propertyKey, value, obj) とする。
  2. successfalse かつ throwtrue なら、TypeError 例外を throw する。
  3. unused を返す。

7.3.5 CreateDataProperty ( obj, propertyKey, value )

The abstract operation CreateDataProperty takes arguments obj (an Object), propertyKey (a property key), and value (an ECMAScript language value) and returns either a normal completion containing a Boolean or a throw completion. これは object の新しい own property を生成するために用いられる。 It performs the following steps when called:

  1. newDesc を PropertyDescriptor { [[Value]]: value, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true } とする。
  2. obj.[[DefineOwnProperty]](propertyKey, newDesc) を返す。
Note

この抽象操作は、その属性が ECMAScript 言語の代入演算子によって生成されるプロパティと同じ既定値に設定されたプロパティを生成する。通常、そのプロパティはまだ存在しない。もし存在していて configurable でないか、または obj が extensible でないなら、[[DefineOwnProperty]]false を返す。

7.3.6 CreateDataPropertyOrThrow ( obj, propertyKey, value )

The abstract operation CreateDataPropertyOrThrow takes arguments obj (an Object), propertyKey (a property key), and value (an ECMAScript language value) and returns either a normal completion containing unused or a throw completion. これは object の新しい own property を生成するために用いられる。要求されたプロパティ更新を実行できない場合、TypeError 例外を throw する。 It performs the following steps when called:

  1. success を ? CreateDataProperty(obj, propertyKey, value) とする。
  2. successfalse なら、TypeError 例外を throw する。
  3. unused を返す。
Note

この抽象操作は、その属性が ECMAScript 言語の代入演算子によって生成されるプロパティと同じ既定値に設定されたプロパティを生成する。通常、そのプロパティはまだ存在しない。もし存在していて configurable でないか、または obj が extensible でないなら、[[DefineOwnProperty]]false を返し、その結果この操作は TypeError 例外を throw する。

7.3.7 CreateNonEnumerableDataPropertyOrThrow ( obj, propertyKey, value )

The abstract operation CreateNonEnumerableDataPropertyOrThrow takes arguments obj (an Object), propertyKey (a property key), and value (an ECMAScript language value) and returns unused. これは ordinary object の新しい non-enumerable な own property を生成するために用いられる。 It performs the following steps when called:

  1. Assert: obj は ordinary で extensible な object であり、non-configurable なプロパティを持たない。
  2. newDesc を PropertyDescriptor { [[Value]]: value, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } とする。
  3. DefinePropertyOrThrow(obj, propertyKey, newDesc) を実行する。
  4. unused を返す。
Note

この抽象操作は、その属性が ECMAScript 言語の代入演算子によって生成されるプロパティと同じ既定値に設定されるが、enumerable ではないプロパティを生成する。通常、そのプロパティはまだ存在しない。もし存在していたとしても、DefinePropertyOrThrow は正常完了することが保証される。

7.3.8 DefinePropertyOrThrow ( obj, propertyKey, desc )

The abstract operation DefinePropertyOrThrow takes arguments obj (an Object), propertyKey (a property key), and desc (a Property Descriptor) and returns either a normal completion containing unused or a throw completion. これは object の [[DefineOwnProperty]] 内部メソッドを、要求されたプロパティ更新を実行できない場合に TypeError 例外を throw する形で呼び出すために用いられる。 It performs the following steps when called:

  1. success を ? obj.[[DefineOwnProperty]](propertyKey, desc) とする。
  2. successfalse なら、TypeError 例外を throw する。
  3. unused を返す。

7.3.9 DeletePropertyOrThrow ( obj, propertyKey )

The abstract operation DeletePropertyOrThrow takes arguments obj (an Object) and propertyKey (a property key) and returns either a normal completion containing unused or a throw completion. これは object の特定の own property を削除するために用いられる。そのプロパティが configurable でない場合は例外を throw する。 It performs the following steps when called:

  1. success を ? obj.[[Delete]](propertyKey) とする。
  2. successfalse なら、TypeError 例外を throw する。
  3. unused を返す。

7.3.10 GetMethod ( value, propertyKey )

The abstract operation GetMethod takes arguments value (an ECMAScript language value) and propertyKey (a property key) and returns either a normal completion containing either a function object or undefined, or a throw completion. これは、ECMAScript 言語値の特定のプロパティの値を取得するために用いられる。そのプロパティの値は function であることが期待されている。 It performs the following steps when called:

  1. func を ? GetV(value, propertyKey) とする。
  2. funcundefined または null のいずれかであるなら、undefined を返す。
  3. IsCallable(func) が false なら、TypeError 例外を throw する。
  4. func を返す。

7.3.11 HasProperty ( obj, propertyKey )

The abstract operation HasProperty takes arguments obj (an Object) and propertyKey (a property key) and returns either a normal completion containing a Boolean or a throw completion. これは、指定された property key を持つプロパティを object が持つかどうかを判定するために用いられる。そのプロパティは own でも inherited でもよい。 It performs the following steps when called:

  1. obj.[[HasProperty]](propertyKey) を返す。

7.3.12 HasOwnProperty ( obj, propertyKey )

The abstract operation HasOwnProperty takes arguments obj (an Object) and propertyKey (a property key) and returns either a normal completion containing a Boolean or a throw completion. これは、指定された property key を持つ own property を object が持つかどうかを判定するために用いられる。 It performs the following steps when called:

  1. desc を ? obj.[[GetOwnProperty]](propertyKey) とする。
  2. descundefined なら、false を返す。
  3. true を返す。

7.3.13 Call ( func, thisValue [ , argumentsList ] )

The abstract operation Call takes arguments func (an ECMAScript language value) and thisValue (an ECMAScript language value) and optional argument argumentsList (a List of ECMAScript language values) and returns either a normal completion containing an ECMAScript language value or a throw completion. これは function object[[Call]] 内部メソッドを呼び出すために用いられる。funcfunction objectthisValue[[Call]]this 値となる ECMAScript 言語値argumentsList はその内部メソッドの対応する引数に渡される値である。argumentsList が存在しない場合、その値として新しい空の List が用いられる。 It performs the following steps when called:

  1. argumentsList が存在しないなら、argumentsList を新しい空の List に設定する。
  2. IsCallable(func) が false なら、TypeError 例外を throw する。
  3. func.[[Call]](thisValue, argumentsList) を返す。

7.3.14 Construct ( constructor [ , argumentsList [ , newTarget ] ] )

The abstract operation Construct takes argument constructor (a constructor) and optional arguments argumentsList (a List of ECMAScript language values) and newTarget (a constructor) and returns either a normal completion containing an Object or a throw completion. これは function object[[Construct]] 内部メソッドを呼び出すために用いられる。argumentsList および newTarget は、その内部メソッドの対応する引数として渡される値である。argumentsList が存在しない場合、その値として新しい空の List が用いられる。newTarget が存在しない場合、その値として constructor が用いられる。 It performs the following steps when called:

  1. newTarget が存在しないなら、newTargetconstructor に設定する。
  2. argumentsList が存在しないなら、argumentsList を新しい空の List に設定する。
  3. constructor.[[Construct]](argumentsList, newTarget) を返す。
Note

newTarget が存在しない場合、この操作は new F(...argumentsList) と等価である。

7.3.15 SetIntegrityLevel ( obj, level )

The abstract operation SetIntegrityLevel takes arguments obj (an Object) and level (sealed or frozen) and returns either a normal completion containing a Boolean or a throw completion. これは object の own property の集合を固定するために用いられる。 It performs the following steps when called:

  1. status を ? obj.[[PreventExtensions]]() とする。
  2. statusfalse なら、false を返す。
  3. keys を ? obj.[[OwnPropertyKeys]]() とする。
  4. levelsealed の場合、
    1. keys の各要素 key について、次を行う
      1. DefinePropertyOrThrow(obj, key, PropertyDescriptor { [[Configurable]]: false }) を実行する。
  5. Else,
    1. Assert: levelfrozen である。
    2. keys の各要素 key について、次を行う
      1. currentDesc を ? obj.[[GetOwnProperty]](key) とする。
      2. currentDescundefined でないなら、
        1. IsAccessorDescriptor(currentDesc) が true なら、
          1. desc を PropertyDescriptor { [[Configurable]]: false } とする。
        2. Else,
          1. desc を PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false } とする。
        3. DefinePropertyOrThrow(obj, key, desc) を実行する。
  6. true を返す。

7.3.16 TestIntegrityLevel ( obj, level )

The abstract operation TestIntegrityLevel takes arguments obj (an Object) and level (sealed or frozen) and returns either a normal completion containing a Boolean or a throw completion. これは object の own property の集合が固定されているかどうかを判定するために用いられる。 It performs the following steps when called:

  1. extensible を ? IsExtensible(obj) とする。
  2. extensibletrue なら、false を返す。
  3. NOTE: object が extensible である場合、そのプロパティは一切検査されない。
  4. keys を ? obj.[[OwnPropertyKeys]]() とする。
  5. keys の各要素 key について、次を行う
    1. currentDesc を ? obj.[[GetOwnProperty]](key) とする。
    2. currentDescundefined でないなら、
      1. currentDesc.[[Configurable]]true なら、false を返す。
      2. levelfrozen かつ IsDataDescriptor(currentDesc) が true なら、
        1. currentDesc.[[Writable]]true なら、false を返す。
  6. true を返す。

7.3.17 CreateArrayFromList ( elements )

The abstract operation CreateArrayFromList takes argument elements (a List of ECMAScript language values) and returns an Array. これは elements によって与えられる要素を持つ Array を生成するために用いられる。 It performs the following steps when called:

  1. array を ! ArrayCreate(0) とする。
  2. n を 0 とする。
  3. elements の各要素 e について、次を行う
    1. CreateDataPropertyOrThrow(array, ! ToString(𝔽(n)), e) を実行する。
    2. nn + 1 に設定する。
  4. array を返す。

7.3.18 LengthOfArrayLike ( obj )

The abstract operation LengthOfArrayLike takes argument obj (an Object) and returns either a normal completion containing a non-negative integer or a throw completion. これは array-like object の "length" プロパティの値を返す。 It performs the following steps when called:

  1. (? ToLength(? Get(obj, "length"))) を返す。

array-like object とは、この操作が normal completion を返す任意の object である。

Note 1
通常、array-like object は integer index 名を持ついくつかのプロパティも持つだろう。しかし、それはこの定義の要件ではない。
Note 2
Array と String object は array-like object の例である。

7.3.19 CreateListFromArrayLike ( obj [ , validElementTypes ] )

The abstract operation CreateListFromArrayLike takes argument obj (an ECMAScript language value) and optional argument validElementTypes (all or property-key) and returns either a normal completion containing a List of ECMAScript language values or a throw completion. これは obj の添字付きプロパティによって与えられる要素を持つ List 値を生成するために用いられる。validElementTypes は、要素として許可される値の型を示す。 It performs the following steps when called:

  1. validElementTypes が存在しないなら、validElementTypesall に設定する。
  2. obj が Object でないなら、TypeError 例外を throw する。
  3. len を ? LengthOfArrayLike(obj) とする。
  4. list を新しい空の List とする。
  5. index を 0 とする。
  6. index < len の間、繰り返す
    1. indexName を ! ToString(𝔽(index)) とする。
    2. next を ? Get(obj, indexName) とする。
    3. validElementTypesproperty-key であり、かつ nextproperty key でないなら、TypeError 例外を throw する。
    4. nextlist に追加する。
    5. indexindex + 1 に設定する。
  7. list を返す。

7.3.20 Invoke ( value, propertyKey [ , argumentsList ] )

The abstract operation Invoke takes arguments value (an ECMAScript language value) and propertyKey (a property key) and optional argument argumentsList (a List of ECMAScript language values) and returns either a normal completion containing an ECMAScript language value or a throw completion. これは ECMAScript 言語値の method property を呼び出すために用いられる。value はプロパティ探索の起点であると同時に、呼出し時の this 値でもある。argumentsList は、その method に渡される引数値のリストである。argumentsList が存在しない場合、その値として新しい空の List が用いられる。 It performs the following steps when called:

  1. argumentsList が存在しないなら、argumentsList を新しい空の List に設定する。
  2. func を ? GetV(value, propertyKey) とする。
  3. Call(func, value, argumentsList) を返す。

7.3.21 OrdinaryHasInstance ( constructor, instance )

The abstract operation OrdinaryHasInstance takes arguments constructor (an ECMAScript language value) and instance (an ECMAScript language value) and returns either a normal completion containing a Boolean or a throw completion. これは、instanceconstructor によって提供されるインスタンス object 継承経路を継承しているかどうかを判定する既定アルゴリズムを実装する。 It performs the following steps when called:

  1. IsCallable(constructor) が false なら、false を返す。
  2. constructor[[BoundTargetFunction]] 内部スロットを持つなら、
    1. boundConstructorconstructor.[[BoundTargetFunction]] とする。
    2. InstanceofOperator(instance, boundConstructor) を返す。
  3. instance が Object でないなら、false を返す。
  4. proto を ? Get(constructor, "prototype") とする。
  5. proto が Object でないなら、TypeError 例外を throw する。
  6. 繰り返す
    1. instance を ? instance.[[GetPrototypeOf]]() に設定する。
    2. instancenull なら、false を返す。
    3. SameValue(proto, instance) が true なら、true を返す。

7.3.22 SpeciesConstructor ( obj, defaultConstructor )

The abstract operation SpeciesConstructor takes arguments obj (an Object) and defaultConstructor (a constructor) and returns either a normal completion containing a constructor or a throw completion. これは obj から派生する新しい object を生成するのに使うべき constructor を取得するために用いられる。defaultConstructor は、obj から始めて constructor%Symbol.species% プロパティを見つけられない場合に使用する constructor である。 It performs the following steps when called:

  1. constructor を ? Get(obj, "constructor") とする。
  2. constructorundefined なら、defaultConstructor を返す。
  3. constructor が Object でないなら、TypeError 例外を throw する。
  4. species を ? Get(constructor, %Symbol.species%) とする。
  5. speciesundefined または null のいずれかなら、defaultConstructor を返す。
  6. IsConstructor(species) が true なら、species を返す。
  7. TypeError 例外を throw する。

7.3.23 EnumerableOwnProperties ( obj, kind )

The abstract operation EnumerableOwnProperties takes arguments obj (an Object) and kind (key, value, or key+value) and returns either a normal completion containing a List of ECMAScript language values or a throw completion. It performs the following steps when called:

  1. ownKeys を ? obj.[[OwnPropertyKeys]]() とする。
  2. results を新しい空の List とする。
  3. ownKeys の各要素 key について、次を行う
    1. key が String であるなら、
      1. desc を ? obj.[[GetOwnProperty]](key) とする。
      2. descundefined でなく、かつ desc.[[Enumerable]]true であるなら、
        1. kindkey なら、
          1. keyresults に追加する。
        2. Else,
          1. value を ? Get(obj, key) とする。
          2. kindvalue なら、
            1. valueresults に追加する。
          3. Else,
            1. Assert: kindkey+value である。
            2. entryCreateArrayFromListkey, value ») とする。
            3. entryresults に追加する。
  4. results を返す。

7.3.24 GetFunctionRealm ( func )

The abstract operation GetFunctionRealm takes argument func (a function object) and returns either a normal completion containing a Realm Record or a throw completion. It performs the following steps when called:

  1. func[[Realm]] 内部スロットを持つなら、
    1. func.[[Realm]] を返す。
  2. func が bound function exotic object なら、
    1. boundTargetFunctionfunc.[[BoundTargetFunction]] とする。
    2. GetFunctionRealm(boundTargetFunction) を返す。
  3. func が Proxy exotic object なら、
    1. ValidateNonRevokedProxy(func) を実行する。
    2. proxyTargetfunc.[[ProxyTarget]] とする。
    3. Assert: proxyTargetfunction object である。
    4. GetFunctionRealm(proxyTarget) を返す。
  4. 現在の Realm Record を返す。
Note

手順 4 に到達するのは、func[[Realm]] 内部スロットを持たない非標準の function exotic object である場合に限られる。

7.3.25 CopyDataProperties ( target, source, excludedItems )

The abstract operation CopyDataProperties takes arguments target (an Object), source (an ECMAScript language value), and excludedItems (a List of property keys) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. sourceundefined または null のいずれかであるなら、unused を返す。
  2. from を ! ToObject(source) とする。
  3. keys を ? from.[[OwnPropertyKeys]]() とする。
  4. keys の各要素 nextKey について、次を行う
    1. excludedfalse とする。
    2. excludedItems の各要素 e について、次を行う
      1. SameValue(e, nextKey) が true なら、
        1. excludedtrue に設定する。
    3. excludedfalse なら、
      1. desc を ? from.[[GetOwnProperty]](nextKey) とする。
      2. descundefined でなく、かつ desc.[[Enumerable]]true であるなら、
        1. propValue を ? Get(from, nextKey) とする。
        2. CreateDataPropertyOrThrow(target, nextKey, propValue) を実行する。
  5. unused を返す。
Note

ここで渡される target は、エラーが throw された場合に直接アクセスできない、新しく生成された object である。

7.3.26 PrivateElementFind ( obj, privateName )

The abstract operation PrivateElementFind takes arguments obj (an Object) and privateName (a Private Name) and returns a PrivateElement or empty. It performs the following steps when called:

  1. obj.[[PrivateElements]] が、pe.[[Key]] is privateName である PrivateElement pe を含むなら、
    1. pe を返す。
  2. empty を返す。

7.3.27 PrivateFieldAdd ( obj, privateName, value )

The abstract operation PrivateFieldAdd takes arguments obj (an Object), privateName (a Private Name), and value (an ECMAScript language value) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. ホストがウェブブラウザであるなら、
    1. HostEnsureCanAddPrivateElement(obj) を実行する。
  2. entryPrivateElementFind(obj, privateName) とする。
  3. entryempty でないなら、TypeError 例外を throw する。
  4. PrivateElement { [[Key]]: privateName, [[Kind]]: field, [[Value]]: value } を obj.[[PrivateElements]] に追加する。
  5. unused を返す。

7.3.28 PrivateMethodOrAccessorAdd ( obj, method )

The abstract operation PrivateMethodOrAccessorAdd takes arguments obj (an Object) and method (a PrivateElement) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. Assert: method.[[Kind]]method または accessor のいずれかである。
  2. ホストがウェブブラウザであるなら、
    1. HostEnsureCanAddPrivateElement(obj) を実行する。
  3. entryPrivateElementFind(obj, method.[[Key]]) とする。
  4. entryempty でないなら、TypeError 例外を throw する。
  5. methodobj.[[PrivateElements]] に追加する。
  6. unused を返す。
Note

private method と accessor の値はインスタンス間で共有される。この操作は method または accessor の新しいコピーを生成しない。

7.3.29 HostEnsureCanAddPrivateElement ( obj )

The host-defined abstract operation HostEnsureCanAddPrivateElement takes argument obj (an Object) and returns either a normal completion containing unused or a throw completion. これは、ホスト環境が特定の host-defined exotic object への private element の追加を防げるようにする。

HostEnsureCanAddPrivateElement の実装は、次の要件に適合しなければならない。

  • objhost-defined exotic object でないなら、この抽象操作は NormalCompletion(unused) を返し、他の手順を一切実行してはならない。
  • 同じ引数でこの抽象操作を 2 回呼び出した場合、その両方は同じ種類の Completion Record を返さなければならない。

HostEnsureCanAddPrivateElement の既定実装は NormalCompletion(unused) を返すことである。

この抽象操作は、ウェブブラウザである ECMAScript ホストによってのみ呼び出される。

7.3.30 PrivateGet ( obj, privateName )

The abstract operation PrivateGet takes arguments obj (an Object) and privateName (a Private Name) and returns either a normal completion containing an ECMAScript language value or a throw completion. It performs the following steps when called:

  1. entryPrivateElementFind(obj, privateName) とする。
  2. entryempty なら、TypeError 例外を throw する。
  3. entry.[[Kind]]field または method のいずれかなら、
    1. entry.[[Value]] を返す。
  4. Assert: entry.[[Kind]]accessor である。
  5. entry.[[Get]]undefined なら、TypeError 例外を throw する。
  6. getterentry.[[Get]] とする。
  7. Call(getter, obj) を返す。

7.3.31 PrivateSet ( obj, privateName, value )

The abstract operation PrivateSet takes arguments obj (an Object), privateName (a Private Name), and value (an ECMAScript language value) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. entryPrivateElementFind(obj, privateName) とする。
  2. entryempty なら、TypeError 例外を throw する。
  3. entry.[[Kind]]method なら、TypeError 例外を throw する。
  4. entry.[[Kind]]field なら、
    1. entry.[[Value]]value に設定する。
  5. Else,
    1. Assert: entry.[[Kind]]accessor である。
    2. entry.[[Set]]undefined なら、TypeError 例外を throw する。
    3. setterentry.[[Set]] とする。
    4. Call(setter, obj, « value ») を実行する。
  6. unused を返す。

7.3.32 DefineField ( receiver, fieldRecord )

The abstract operation DefineField takes arguments receiver (an Object) and fieldRecord (a ClassFieldDefinition Record) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. fieldNamefieldRecord.[[Name]] とする。
  2. initializerfieldRecord.[[Initializer]] とする。
  3. initializerempty でない場合、
    1. initValue を ? Call(initializer, receiver) とする。
  4. Else,
    1. initValueundefined とする。
  5. fieldNamePrivate Name なら、
    1. PrivateFieldAdd(receiver, fieldName, initValue) を実行する。
  6. Else,
    1. Assert: fieldNameproperty key である。
    2. CreateDataPropertyOrThrow(receiver, fieldName, initValue) を実行する。
  7. unused を返す。

7.3.33 InitializeInstanceElements ( obj, constructor )

The abstract operation InitializeInstanceElements takes arguments obj (an Object) and constructor (an ECMAScript function object or a built-in function object) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. methodsconstructor.[[PrivateMethods]] とする。
  2. methods 内の各 PrivateElement method について、次を行う
    1. PrivateMethodOrAccessorAdd(obj, method) を実行する。
  3. fieldsconstructor.[[Fields]] とする。
  4. fields の各要素 fieldRecord について、次を行う
    1. DefineField(obj, fieldRecord) を実行する。
  5. unused を返す。

7.3.34 AddValueToKeyedGroup ( groups, key, value )

The abstract operation AddValueToKeyedGroup takes arguments groups (a List of Records with fields [[Key]] (an ECMAScript language value) and [[Elements]] (a List of ECMAScript language values)), key (an ECMAScript language value), and value (an ECMAScript language value) and returns unused. It performs the following steps when called:

  1. groups 内の各 Record { [[Key]], [[Elements]] } group について、次を行う
    1. SameValue(group.[[Key]], key) が true なら、
      1. Assert: groups の要素のうち、この条件を満たすものはちょうど 1 つである。
      2. valuegroup.[[Elements]] に追加する。
      3. unused を返す。
  2. groupRecord { [[Key]]: key, [[Elements]]: « value » } とする。
  3. groupgroups に追加する。
  4. unused を返す。

7.3.35 GroupBy ( items, callback, keyCoercion )

The abstract operation GroupBy takes arguments items (an ECMAScript language value), callback (an ECMAScript language value), and keyCoercion (property or collection) and returns either a normal completion containing a List of Records with fields [[Key]] (an ECMAScript language value) and [[Elements]] (a List of ECMAScript language values), or a throw completion. It performs the following steps when called:

  1. RequireObjectCoercible(items) を実行する。
  2. IsCallable(callback) が false なら、TypeError 例外を throw する。
  3. groups を新しい空の List とする。
  4. iteratorRecord を ? GetIterator(items, sync) とする。
  5. k を 0 とする。
  6. 繰り返す
    1. k ≥ 253 - 1 の場合、
      1. errorThrowCompletion(a newly created TypeError object) とする。
      2. IteratorClose(iteratorRecord, error) を返す。
    2. next を ? IteratorStepValue(iteratorRecord) とする。
    3. nextdone の場合、
      1. groups を返す。
    4. valuenext とする。
    5. keyCompletion(Call(callback, undefined, « value, 𝔽(k) »)) とする。
    6. IfAbruptCloseIterator(key, iteratorRecord)。
    7. keyCoercionproperty の場合、
      1. keyCompletion(ToPropertyKey(key)) に設定する。
      2. IfAbruptCloseIterator(key, iteratorRecord)。
    8. Else,
      1. Assert: keyCoercioncollection である。
      2. keyCanonicalizeKeyedCollectionKey(key) に設定する。
    9. AddValueToKeyedGroup(groups, key, value) を実行する。
    10. kk + 1 に設定する。

7.3.36 GetOptionsObject ( options )

The abstract operation GetOptionsObject takes argument options (an ECMAScript language value) and returns either a normal completion containing an Object or a throw completion. It performs the following steps when called:

  1. optionsundefined の場合、
    1. OrdinaryObjectCreate(null) を返す。
  2. options が Object である場合、
    1. options を返す。
  3. TypeError 例外を throw する。

7.3.37 SetterThatIgnoresPrototypeProperties ( thisValue, home, propertyKey, value )

The abstract operation SetterThatIgnoresPrototypeProperties takes arguments thisValue (an ECMAScript language value), home (an Object), propertyKey (a property key), and value (an ECMAScript language value) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. thisValue が Object でない場合、
    1. TypeError 例外を throw する。
  2. SameValue(thisValue, home) が true の場合、
    1. NOTE: ここで throw することは、strict mode code における home object 上の non-writable data property への代入を模倣する。
    2. TypeError 例外を throw する。
  3. desc を ? thisValue.[[GetOwnProperty]](propertyKey) とする。
  4. descundefined の場合、
    1. CreateDataPropertyOrThrow(thisValue, propertyKey, value) を実行する。
  5. Else,
    1. Set(thisValue, propertyKey, value, true) を実行する。
  6. unused を返す。

7.4 Iterator Object に対する操作

Common Iteration Interfaces(27.1)を参照。

7.4.1 Iterator Record

Iterator Record は、iterator または async iterator とその next メソッドを一緒にカプセル化するために用いられる Record 値である。

Iterator Record は Table 13 に列挙されるフィールドを持つ。

Table 13: Iterator Record Fields
フィールド名 意味
[[Iterator]] an Object iterator interface または async iterator interface に適合する object。
[[NextMethod]] an ECMAScript language value [[Iterator]] object の next メソッド。
[[Done]] a Boolean その iterator が完了したか、または close されたかどうか。

7.4.2 GetIteratorDirect ( obj )

The abstract operation GetIteratorDirect takes argument obj (an Object) and returns either a normal completion containing an Iterator Record or a throw completion. It performs the following steps when called:

  1. nextMethod を ? Get(obj, "next") とする。
  2. iteratorRecordIterator Record { [[Iterator]]: obj, [[NextMethod]]: nextMethod, [[Done]]: false } とする。
  3. iteratorRecord を返す。

7.4.3 GetIteratorFromMethod ( obj, method )

The abstract operation GetIteratorFromMethod takes arguments obj (an ECMAScript language value) and method (a function object) and returns either a normal completion containing an Iterator Record or a throw completion. It performs the following steps when called:

  1. iterator を ? Call(method, obj) とする。
  2. iterator が Object でないなら、TypeError 例外を throw する。
  3. GetIteratorDirect(iterator) を返す。

7.4.4 GetIterator ( obj, kind )

The abstract operation GetIterator takes arguments obj (an ECMAScript language value) and kind (sync or async) and returns either a normal completion containing an Iterator Record or a throw completion. It performs the following steps when called:

  1. kindasync の場合、
    1. method を ? GetMethod(obj, %Symbol.asyncIterator%) とする。
    2. methodundefined である場合、
      1. syncMethod を ? GetMethod(obj, %Symbol.iterator%) とする。
      2. syncMethodundefined なら、TypeError 例外を throw する。
      3. syncIteratorRecord を ? GetIteratorFromMethod(obj, syncMethod) とする。
      4. CreateAsyncFromSyncIterator(syncIteratorRecord) を返す。
  2. Else,
    1. method を ? GetMethod(obj, %Symbol.iterator%) とする。
  3. methodundefined なら、TypeError 例外を throw する。
  4. GetIteratorFromMethod(obj, method) を返す。

7.4.5 GetIteratorFlattenable ( obj, primitiveHandling )

The abstract operation GetIteratorFlattenable takes arguments obj (an ECMAScript language value) and primitiveHandling (iterate-string-primitives or reject-primitives) and returns either a normal completion containing an Iterator Record or a throw completion. It performs the following steps when called:

  1. obj が Object でない場合、
    1. primitiveHandlingreject-primitives なら、TypeError 例外を throw する。
    2. Assert: primitiveHandlingiterate-string-primitives である。
    3. obj が String でないなら、TypeError 例外を throw する。
  2. method を ? GetMethod(obj, %Symbol.iterator%) とする。
  3. methodundefined である場合、
    1. iteratorobj とする。
  4. Else,
    1. iterator を ? Call(method, obj) とする。
  5. iterator が Object でないなら、TypeError 例外を throw する。
  6. GetIteratorDirect(iterator) を返す。

7.4.6 IteratorNext ( iteratorRecord [ , value ] )

The abstract operation IteratorNext takes argument iteratorRecord (an Iterator Record) and optional argument value (an ECMAScript language value) and returns either a normal completion containing an Object or a throw completion. It performs the following steps when called:

  1. value が存在しない場合、
    1. resultCompletion(Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]])) とする。
  2. Else,
    1. resultCompletion(Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]], « value »)) とする。
  3. resultthrow completion である場合、
    1. iteratorRecord.[[Done]]true に設定する。
    2. result を返す。
  4. result を ! result に設定する。
  5. result が Object でない場合、
    1. iteratorRecord.[[Done]]true に設定する。
    2. TypeError 例外を throw する。
  6. result を返す。

7.4.7 IteratorComplete ( iteratorResult )

The abstract operation IteratorComplete takes argument iteratorResult (an Object) and returns either a normal completion containing a Boolean or a throw completion. It performs the following steps when called:

  1. ToBoolean(? Get(iteratorResult, "done")) を返す。

7.4.8 IteratorValue ( iteratorResult )

The abstract operation IteratorValue takes argument iteratorResult (an Object) and returns either a normal completion containing an ECMAScript language value or a throw completion. It performs the following steps when called:

  1. Get(iteratorResult, "value") を返す。

7.4.9 IteratorStep ( iteratorRecord )

The abstract operation IteratorStep takes argument iteratorRecord (an Iterator Record) and returns either a normal completion containing either an Object or done, or a throw completion. これは iteratorRecord.[[Iterator]] から次の値を要求するために iteratorRecord.[[NextMethod]] を呼び出し、iterator が終端に到達したことを示す done、または次の値が利用可能な場合には IteratorResult object を返す。 It performs the following steps when called:

  1. result を ? IteratorNext(iteratorRecord) とする。
  2. doneCompletion(IteratorComplete(result)) とする。
  3. donethrow completion である場合、
    1. iteratorRecord.[[Done]]true に設定する。
    2. done を返す。
  4. done を ! done に設定する。
  5. donetrue なら、
    1. iteratorRecord.[[Done]]true に設定する。
    2. done を返す。
  6. result を返す。

7.4.10 IteratorStepValue ( iteratorRecord )

The abstract operation IteratorStepValue takes argument iteratorRecord (an Iterator Record) and returns either a normal completion containing either an ECMAScript language value or done, or a throw completion. これは iteratorRecord.[[Iterator]] から次の値を要求するために iteratorRecord.[[NextMethod]] を呼び出し、iterator が終端に到達したことを示す done、または次の値が利用可能な場合には IteratorResult object の value を返す。 It performs the following steps when called:

  1. result を ? IteratorStep(iteratorRecord) とする。
  2. resultdone なら、
    1. done を返す。
  3. valueCompletion(IteratorValue(result)) とする。
  4. valuethrow completion である場合、
    1. iteratorRecord.[[Done]]true に設定する。
  5. value を返す。

7.4.11 IteratorClose ( iteratorRecord, completion )

The abstract operation IteratorClose takes arguments iteratorRecord (an Iterator Record) and completion (a Completion Record) and returns a Completion Record. これは iterator に対して、それが完了状態に達したとき通常行うべきあらゆる動作を実行するよう通知するために用いられる。 It performs the following steps when called:

  1. Assert: iteratorRecord.[[Iterator]] は Object である。
  2. iteratoriteratorRecord.[[Iterator]] とする。
  3. innerResultCompletion(GetMethod(iterator, "return")) とする。
  4. innerResultnormal completion である場合、
    1. returninnerResult.[[Value]] とする。
    2. returnundefined なら、? completion を返す。
    3. innerResultCompletion(Call(return, iterator)) に設定する。
  5. completionthrow completion なら、? completion を返す。
  6. innerResultthrow completion なら、? innerResult を返す。
  7. innerResult.[[Value]] が Object でないなら、TypeError 例外を throw する。
  8. completion を返す。

7.4.12 IteratorCloseAll ( iters, completion )

The abstract operation IteratorCloseAll takes arguments iters (a List of Iterator Records) and completion (a Completion Record) and returns a Completion Record. It performs the following steps when called:

  1. iters の各要素 iter について、逆順の List 順序で次を行う
    1. completionCompletion(IteratorClose(iter, completion)) に設定する。
  2. completion を返す。

7.4.13 IfAbruptCloseIterator ( value, iteratorRecord )

IfAbruptCloseIterator は、Iterator Record を使用する一連のアルゴリズム手順の略記である。次の形式のアルゴリズム手順:

  1. IfAbruptCloseIterator(value, iteratorRecord)。

は、次と同じ意味である:

  1. Assert: valueCompletion Record である。
  2. valueabrupt completion なら、? IteratorClose(iteratorRecord, value) を返す。
  3. value を ! value に設定する。

7.4.14 AsyncIteratorClose ( iteratorRecord, completion )

The abstract operation AsyncIteratorClose takes arguments iteratorRecord (an Iterator Record) and completion (a Completion Record) and returns a Completion Record. これは async iterator に対して、それが完了状態に達したとき通常行うべきあらゆる動作を実行するよう通知するために用いられる。 It performs the following steps when called:

  1. Assert: iteratorRecord.[[Iterator]] は Object である。
  2. iteratoriteratorRecord.[[Iterator]] とする。
  3. innerResultCompletion(GetMethod(iterator, "return")) とする。
  4. innerResultnormal completion である場合、
    1. returninnerResult.[[Value]] とする。
    2. returnundefined なら、? completion を返す。
    3. innerResultCompletion(Call(return, iterator)) に設定する。
    4. innerResultnormal completion なら、innerResultCompletion(Await(innerResult.[[Value]])) に設定する。
  5. completionthrow completion なら、? completion を返す。
  6. innerResultthrow completion なら、? innerResult を返す。
  7. innerResult.[[Value]] が Object でないなら、TypeError 例外を throw する。
  8. completion を返す。

7.4.15 IfAbruptCloseAsyncIterator ( value, iteratorRecord )

IfAbruptCloseAsyncIterator は、Iterator Record を使用する一連のアルゴリズム手順の略記である。次の形式のアルゴリズム手順:

  1. IfAbruptCloseAsyncIterator(value, iteratorRecord)。

は、次と同じ意味である:

  1. Assert: valueCompletion Record である。
  2. valueabrupt completion なら、? AsyncIteratorClose(iteratorRecord, value) を返す。
  3. value を ! value に設定する。

7.4.16 CreateIteratorResultObject ( value, done )

The abstract operation CreateIteratorResultObject takes arguments value (an ECMAScript language value) and done (a Boolean) and returns an Object that conforms to the IteratorResult interface. これは IteratorResult interface に適合する object を生成する。 It performs the following steps when called:

  1. objOrdinaryObjectCreate(%Object.prototype%) とする。
  2. CreateDataPropertyOrThrow(obj, "value", value) を実行する。
  3. CreateDataPropertyOrThrow(obj, "done", done) を実行する。
  4. obj を返す。

7.4.17 CreateListIteratorRecord ( list )

The abstract operation CreateListIteratorRecord takes argument list (a List of ECMAScript language values) and returns an Iterator Record. これは [[NextMethod]]list の連続する要素を返す Iterator Record を生成する。 It performs the following steps when called:

  1. closure を、新しい Abstract Closure とする。この Closure はパラメータを持たず、list を捕捉し、呼び出されたときに次の手順を実行する:
    1. list の各要素 value について、次を行う
      1. GeneratorYield(CreateIteratorResultObject(value, false)) を実行する。
    2. NormalCompletion(undefined) を返す。
  2. iteratorCreateIteratorFromClosure(closure, empty, %Iterator.prototype%) とする。
  3. Iterator Record { [[Iterator]]: iterator, [[NextMethod]]: %GeneratorPrototype.next%, [[Done]]: false } を返す。
Note

list iterator object は ECMAScript コードから直接アクセス可能になることはない。

7.4.18 IteratorToList ( iteratorRecord )

The abstract operation IteratorToList takes argument iteratorRecord (an Iterator Record) and returns either a normal completion containing a List of ECMAScript language values or a throw completion. It performs the following steps when called:

  1. values を新しい空の List とする。
  2. 繰り返す
    1. next を ? IteratorStepValue(iteratorRecord) とする。
    2. nextdone の場合、
      1. values を返す。
    3. nextvalues に追加する。