19 グローバルオブジェクト

The グローバルオブジェクト

19.1 グローバルオブジェクトの値プロパティ

19.1.1 globalThis

Realm Record realm におけるグローバルオブジェクト"globalThis" プロパティの初期値は realm.[[GlobalEnv]].[[GlobalThisValue]] である。

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

19.1.2 Infinity

Infinity の値は +∞𝔽 である(参照 6.1.6.1)。このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

19.1.3 NaN

NaN の値は NaN である(参照 6.1.6.1)。このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

19.1.4 undefined

undefined の値は undefined である(参照 6.1.1)。このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

19.2 グローバルオブジェクトの関数プロパティ

19.2.1 eval ( source )

この関数は %eval% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. Return ? PerformEval(source, false, false).

19.2.1.1 PerformEval ( source, strictCaller, direct )

The abstract operation PerformEval takes arguments source (an ECMAScript language value), strictCaller (a Boolean), and direct (a Boolean) and returns either a normal completion containing an ECMAScript language value or a throw completion. It performs the following steps when called:

  1. 断言: directfalse の場合、strictCallerfalse であること。
  2. もし source が文字列でなければ、source を返す。
  3. evalRealm を現在の Realm Record とする。
  4. 注: 直接 eval の場合、evalRealm は eval を呼んだ側のレルムと eval 関数自身のレルムの両方である。
  5. Perform ? HostEnsureCanCompileStrings(evalRealm, « », source, direct) を実行する。
  6. inFunctionfalse にする。
  7. inMethodfalse にする。
  8. inDerivedConstructorfalse にする。
  9. inClassFieldInitializerfalse にする。
  10. もし directtrue ならば
    1. thisEnvRecGetThisEnvironment() とする。
    2. もし thisEnvRecFunction Environment Record であれば、
      1. functhisEnvRec.[[FunctionObject]] とする。
      2. inFunctiontrue にする。
      3. inMethodthisEnvRec.HasSuperBinding() にする。
      4. もし func.[[ConstructorKind]]derived であれば、inDerivedConstructortrue にする。
      5. classFieldInitializerNamefunc.[[ClassFieldInitializerName]] とする。
      6. もし classFieldInitializerNameempty でなければ、inClassFieldInitializertrue にする。
  11. 実装定義の順序で次のサブステップを実行する(パースとエラー検出を並列に行うことがある):
    1. scriptParseText(source, Script) とする。
    2. もし script がエラーのリストであれば、SyntaxError 例外を投げる。
    3. もし scriptScriptBody を含まないなら、undefined を返す。
    4. bodyscriptScriptBody とする。
    5. もし inFunctionfalse でかつ bodyNewTarget を含むなら、SyntaxError 例外を投げる。
    6. もし inMethodfalse でかつ bodySuperProperty を含むなら、SyntaxError 例外を投げる。
    7. もし inDerivedConstructorfalse でかつ bodySuperCall を含むなら、SyntaxError 例外を投げる。
    8. もし inClassFieldInitializertrue でかつ bodyContainsArgumentstrue なら、SyntaxError 例外を投げる。
  12. もし strictCallertrue なら、strictEvaltrue とする。
  13. さもなければ、strictEvalScriptIsStrict(script) とする。
  14. runningContext を実行中の実行コンテキストとする。
  15. 注: もし directtrue なら、runningContext は直接 eval を行った実行コンテキストとなる。もし directfalse なら、runningContexteval 関数の呼び出しのための実行コンテキストとなる。
  16. もし directtrue なら
    1. lexEnvNewDeclarativeEnvironment(runningContext's LexicalEnvironment) とする。
    2. varEnvrunningContext's VariableEnvironment とする。
    3. privateEnvrunningContext's PrivateEnvironment とする。
  17. さもなければ、
    1. lexEnvNewDeclarativeEnvironment(evalRealm.[[GlobalEnv]]) とする。
    2. varEnvevalRealm.[[GlobalEnv]] とする。
    3. privateEnvnull とする。
  18. もし strictEvaltrue なら、varEnvlexEnv に設定する。
  19. もし runningContext がまだ一時停止していなければ、runningContext を一時停止する。
  20. evalContext を新しい ECMAScript コード実行コンテキストとする。
  21. evalContext の Function を null に設定する。
  22. evalContextRealmevalRealm に設定する。
  23. evalContext の ScriptOrModule を runningContext's ScriptOrModule に設定する。
  24. evalContext の VariableEnvironment を varEnv に設定する。
  25. evalContext の LexicalEnvironment を lexEnv に設定する。
  26. evalContext の PrivateEnvironment を privateEnv に設定する。
  27. 実行コンテキストスタックに evalContext をプッシュする;evalContext が現在の実行コンテキストとなる。
  28. resultCompletion(EvalDeclarationInstantiation(body, varEnv, lexEnv, privateEnv, strictEval)) とする。
  29. もし result が通常完了なら、
    1. resultCompletion(Evaluation of body) に設定する。
  30. もし result が通常完了かつ result.[[Value]]empty なら、
    1. resultNormalCompletion(undefined) に設定する。
  31. evalContext を一時停止し、実行コンテキストスタックから取り除く。
  32. 実行コンテキストスタックのトップになっているコンテキストを再開して実行コンテキストとする。
  33. Return ? result.
Note

eval コードは、呼び出し元コンテキストのコードまたは eval コードのいずれかが strict mode の場合、呼び出し元の variable environment に変数や関数の束縛を生成できない。代わりにそのような束縛は eval コードだけがアクセス可能な新しい VariableEnvironment に生成される。letconstclass 宣言によって導入された束縛は常に新しい LexicalEnvironment に生成される。

19.2.1.2 HostEnsureCanCompileStrings ( calleeRealm, parameterStrings, bodyString, direct )

The host-defined abstract operation HostEnsureCanCompileStrings takes arguments calleeRealm (a Realm Record), parameterStrings (a List of Strings), bodyString (a String), and direct (a Boolean) and returns either a normal completion containing unused or a throw completion. ホスト環境が、文字列を ECMAScript コードとして解釈・評価することを可能にする特定の ECMAScript 関数をブロックできるようにする。

parameterStrings は関数コンストラクタを使用する際にパラメータリストを構築するために連結される文字列を表す。bodyString は関数本体または eval 呼び出しに渡される文字列を表す。 direct は評価が直接 eval であるかどうかを示す。

HostEnsureCanCompileStrings のデフォルト実装は NormalCompletion(unused) を返すことである。

19.2.1.3 EvalDeclarationInstantiation ( body, varEnv, lexEnv, privateEnv, strict )

The abstract operation EvalDeclarationInstantiation takes arguments body (a ScriptBody Parse Node), varEnv (an Environment Record), lexEnv (a Declarative Environment Record), privateEnv (a PrivateEnvironment Record or null), and strict (a Boolean) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. varNamesbodyVarDeclaredNames とする。
  2. varDeclarationsbodyVarScopedDeclarations とする。
  3. もし strictfalse なら、
    1. もし varEnvGlobal Environment Record であれば、
      1. 各要素 name に対して varNames の、次を行う
        1. もし HasLexicalDeclaration(varEnv, name) が true なら、SyntaxError 例外を投げる。
        2. 注: eval はグローバルな lexical 宣言によって覆い隠されるようなグローバル var 宣言を作成しない。
    2. thisEnvlexEnv とする。
    3. 断言: 以下のループは終了する。
    4. thisEnvvarEnv が同じ Environment Record でない間、繰り返す、
      1. もし thisEnvObject Environment Record でないなら、
        1. 注: with 文の環境は lexical 宣言を含まないため var/let ホイスティングの競合チェックは必要ない。
        2. 各要素 name に対して varNames の、次を行う
          1. もし ! thisEnv.HasBinding(name) が true なら、
            1. ホストが Web ブラウザであるか、または Catch ブロック内の VariableStatement をサポートしている場合は
              1. もし thisEnvCatch 節の Environment Record でなければ、SyntaxError 例外を投げる。
            2. さもなければ、
              1. SyntaxError 例外を投げる。
          2. 注: 直接 eval は同名の lexical 宣言よりも var 宣言をホイストしない。
      2. thisEnvthisEnv.[[OuterEnv]] に設定する。
  4. privateIdentifiers を新しい空のリストとする。
  5. pointerprivateEnv とする。
  6. pointernull でない間、繰り返す、
    1. pointer.[[Names]] の各 Private Name binding に対して、次を行う
      1. もし privateIdentifiersbinding.[[Description]] を含まなければ、binding.[[Description]]privateIdentifiers に追加する。
    2. pointerpointer.[[OuterPrivateEnvironment]] に設定する。
  7. もし AllPrivateIdentifiersValid(body, privateIdentifiers) が false なら、SyntaxError 例外を投げる。
  8. functionsToInitialize を新しい空のリストとする。
  9. declaredFunctionNames を新しい空のリストとする。
  10. varDeclarations の各要素 d に対して、逆リスト順で、次を行う
    1. もし dVariableDeclarationForBinding、あるいは BindingIdentifier のいずれでもないなら、
      1. 断言: dFunctionDeclarationGeneratorDeclarationAsyncFunctionDeclaration、または AsyncGeneratorDeclaration のいずれかである。
      2. 注: 同じ名前の関数宣言が複数ある場合、最後の宣言が使用される。
      3. fndBoundNames の唯一の要素とする。
      4. もし declaredFunctionNamesfn を含まなければ、
        1. もし varEnvGlobal Environment Record であれば、
          1. fnDefinable を ? CanDeclareGlobalFunction(varEnv, fn) とする。
          2. もし fnDefinablefalse なら、TypeError 例外を投げる。
        2. fndeclaredFunctionNames に追加する。
        3. dfunctionsToInitialize の最初の要素として挿入する。
  11. declaredVarNames を新しい空のリストとする。
  12. varDeclarations の各要素 d に対して、次を行う
    1. もし dVariableDeclarationForBinding、または BindingIdentifier のいずれかであれば、
      1. dBoundNames の各文字列 vn に対して、次を行う
        1. もし declaredFunctionNamesvn を含まなければ、
          1. もし varEnvGlobal Environment Record であれば、
            1. vnDefinable を ? CanDeclareGlobalVar(varEnv, vn) とする。
            2. もし vnDefinablefalse なら、TypeError 例外を投げる。
          2. もし declaredVarNamesvn を含まなければ、
            1. vndeclaredVarNames に追加する。
  13. もし strictfalse でホストが Web ブラウザであるか、または ブロックレベル Function Declaration の Web レガシー互換性意味論 をサポートしているなら、
    1. declaredFunctionOrVarNamesdeclaredFunctionNamesdeclaredVarNames の連結リストとする。
    2. BlockCaseClause、または DefaultClauseStatementList に直接含まれる FunctionDeclaration f について、かつ body がその x を含む場合、次を行う
      1. funcNamefBindingIdentifierStringValue とする。
      2. もし FunctionDeclaration fVariableStatementBindingIdentifierfuncName)に置き換えても body に早期エラーが発生しないなら、
        1. bindingExistsfalse にする。
        2. thisEnvlexEnv に設定する。
        3. 断言: 以下のループは終了する。
        4. thisEnvvarEnv でない間、繰り返す、
          1. もし thisEnvObject Environment Record でないなら、
            1. もし ! thisEnv.HasBinding(funcName) が true なら、
              1. ホストが Web ブラウザであるか、または Catch ブロック内の VariableStatement をサポートしている場合、
                1. もし thisEnvCatch 節の Environment Record でなければ、bindingExiststrue に設定する。
              2. さもなければ、
                1. bindingExiststrue に設定する。
          2. thisEnvthisEnv.[[OuterEnv]] に設定する。
        5. もし bindingExistsfalse でかつ varEnvGlobal Environment Record であれば、
          1. もし HasLexicalDeclaration(varEnv, funcName) が false なら、
            1. fnDefinable を ? CanDeclareGlobalVar(varEnv, funcName) とする。
          2. さもなければ、
            1. fnDefinablefalse にする。
        6. さもなければ、
          1. fnDefinabletrue にする。
        7. もし bindingExistsfalse かつ fnDefinabletrue なら、
          1. もし declaredFunctionOrVarNamesfuncName を含まなければ、
            1. もし varEnvGlobal Environment Record であれば、
              1. Perform ? CreateGlobalVarBinding(varEnv, funcName, true) を実行する。
            2. さもなければ、
              1. bindingExists を ! varEnv.HasBinding(funcName) に設定する。
              2. もし bindingExistsfalse なら、
                1. Perform ! varEnv.CreateMutableBinding(funcName, true) を実行する。
                2. Perform ! varEnv.InitializeBinding(funcName, undefined) を実行する。
            3. funcNamedeclaredFunctionOrVarNames に追加する。
          2. FunctionDeclaration f が評価されるとき、次の手順を FunctionDeclaration 評価アルゴリズムの代わりに実行する:
            1. gEnv を実行中の実行コンテキストの VariableEnvironment とする。
            2. bEnv を実行中の実行コンテキストの LexicalEnvironment とする。
            3. fObj を ! bEnv.GetBindingValue(funcName, false) とする。
            4. Perform ? gEnv.SetMutableBinding(funcName, fObj, false) を実行する。
            5. Return unused
  14. 注: このアルゴリズムステップ以降は、varEnvGlobal Environment Record であり、かつグローバルオブジェクトが Proxy exotic object でない限り異常終了は発生しない。
  15. lexDeclarationsbodyLexicallyScopedDeclarations とする。
  16. lexDeclarations の各要素 d に対して、次を行う
    1. 注: レキシカルに宣言された名前はここでのみ生成され、初期化はされない。
    2. dBoundNames の各要素 dn に対して、次を行う
      1. もし IsConstantDeclaration(d) が true なら、
        1. Perform ? lexEnv.CreateImmutableBinding(dn, true) を実行する。
      2. さもなければ、
        1. Perform ? lexEnv.CreateMutableBinding(dn, false) を実行する。
  17. functionsToInitialize の各 Parse Node f に対して、次を行う
    1. fnfBoundNames の唯一の要素とする。
    2. foInstantiateFunctionObject(f, lexEnv, privateEnv) とする。
    3. もし varEnvGlobal Environment Record であれば、
      1. Perform ? CreateGlobalFunctionBinding(varEnv, fn, fo, true) を実行する。
    4. さもなければ、
      1. bindingExists を ! varEnv.HasBinding(fn) とする。
      2. もし bindingExistsfalse なら、
        1. 注: 以下の呼び出しは、前の検証により異常完了を返すことはない。
        2. Perform ! varEnv.CreateMutableBinding(fn, true) を実行する。
        3. Perform ! varEnv.InitializeBinding(fn, fo) を実行する。
      3. さもなければ、
        1. Perform ! varEnv.SetMutableBinding(fn, fo, false) を実行する。
  18. declaredVarNames の各文字列 vn に対して、次を行う
    1. もし varEnvGlobal Environment Record であれば、
      1. Perform ? CreateGlobalVarBinding(varEnv, vn, true) を実行する。
    2. さもなければ、
      1. bindingExists を ! varEnv.HasBinding(vn) とする。
      2. もし bindingExistsfalse なら、
        1. 注: 以下の呼び出しは、前の検証により異常完了を返すことはない。
        2. Perform ! varEnv.CreateMutableBinding(vn, true) を実行する。
        3. Perform ! varEnv.InitializeBinding(vn, undefined) を実行する。
  19. Return unused

19.2.2 isFinite ( number )

この関数は %isFinite% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. num を ? ToNumber(number) とする。
  2. もし num が有限なら、true を返す。
  3. false を返す。

19.2.3 isNaN ( number )

この関数は %isNaN% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. num を ? ToNumber(number) とする。
  2. もし numNaN なら、true を返す。
  3. false を返す。
Note

XNaN かどうかを ECMAScript コードから確実に検査する方法は X !== X のような式である。これはかつその場合に限り結果が true となる。

19.2.4 parseFloat ( string )

この関数は、string 引数の内容を小数リテラルとして解釈することによって規定される Number 値を生成する。

これは %parseFloat% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. inputString を ? ToString(string) とする。
  2. trimmedString を ! TrimString(inputString, start) とする。
  3. trimmedStringToCodePoints(trimmedString) とする。
  4. trimmedPrefixStrDecimalLiteral の構文を満たす trimmed の最長プレフィックス(存在するならそれ自身)とする。もしそのようなプレフィックスがなければ、NaN を返す。
  5. parsedNumberParseText(trimmedPrefix, StrDecimalLiteral) とする。
  6. 断言: parsedNumberParse Node である。
  7. parsedNumberStringNumericValue を返す。
Note

この関数は string の先頭部分のみを Number 値として解釈する場合があり、10進リテラルの表記の一部として解釈できないコード単位は無視される。無視されたことを示す手段は与えられない。

19.2.5 parseInt ( string, radix )

この関数は、指定された radix に従って string の内容を解釈することによって定められる整数の Number を生成する。string の先頭の空白は無視される。radix が 0 に変換されると(例えば undefined の場合)、表記が "0x" または "0X" で始まらない限り 10 と見なされる。表記が "0x" または "0X" で始まる場合は 16 と見なされる。radix が 16 の場合、表記は任意で "0x" または "0X" で始まることができる。

これは %parseInt% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. inputString を ? ToString(string) とする。
  2. trimmedString を ! TrimString(inputString, start) とする。
  3. sign を 1 にする。
  4. もし trimmedString が空でなく、かつ最初のコード単位が 0x002D (HYPHEN-MINUS) であれば、sign を -1 にする。
  5. もし trimmedString が空でなく、かつ最初のコード単位が 0x002B (PLUS SIGN) または 0x002D (HYPHEN-MINUS) のいずれかであれば、trimmedString をインデックス 1 からの部分文字列にする。
  6. radixMV(? ToInt32(radix)) とする。
  7. stripPrefixtrue にする。
  8. もし radixMV ≠ 0 なら、
    1. もし radixMV < 2 または radixMV > 36 なら、NaN を返す。
    2. もし radixMV ≠ 16 なら、stripPrefixfalse に設定する。
  9. さもなければ、
    1. radixMV を 10 に設定する。
  10. もし stripPrefixtrue なら、
    1. もし trimmedString の長さが ≥ 2 でかつ最初の二つのコード単位が "0x" または "0X" であれば、
      1. trimmedString をインデックス 2 からの部分文字列にする。
      2. radixMV を 16 に設定する。
  11. もし trimmedString が radix-radixMV の数字でないコード単位を含むなら、end をその最初の位置のインデックスにする;さもなければ endtrimmedString の長さにする。
  12. numberStringtrimmedString の 0 から end までの部分文字列とする。
  13. もし numberString が空なら、NaN を返す。
  14. mathInt を、numberString が radix-radixMV 表記で表す整数値とする(値 10 から 35 の数字には AZaz を用いる)。(しかしながら、もし radixMV = 10 かつ numberString が 20 を超える有効桁を含む場合、実装は 20 桁目以降の各有効桁を 0 に置き換えることができる;また radixMV が 2,4,8,10,16,32 のいずれでもない場合、mathInt は実装により近似された整数であってよい。)
  15. もし mathInt = 0 なら、
    1. もし sign = -1 なら、-0𝔽 を返す。
    2. +0𝔽 を返す。
  16. 𝔽(sign × mathInt) を返す。
Note

この関数は string の先頭部分のみを整数値として解釈する場合があり、整数の表記として解釈できないコード単位は無視される。無視されたことを示す手段は与えられない。

19.2.6 URI 処理関数

Uniform Resource Identifier(URI)は、インターネット上のリソース(例: ウェブページやファイル)およびそれらにアクセスするためのトランスポートプロトコル(例: HTTP や FTP)を識別する文字列である。ECMAScript 言語自体は URI を使用するためのサポートを提供しないが、本節で説明するように URI をエンコード/デコードする関数は提供する。encodeURIdecodeURI は完全な URI を扱うことを意図している;これらは予約文字が特別な意味(例えば区切り)を持つことを想定しており、エンコードしない。encodeURIComponentdecodeURIComponent は URI の個々のコンポーネントを扱うことを意図している;これらは予約文字がテキストを表し、コンポーネントが完全な URI の一部となる際に特別な意味を持たないようにエンコードされるべきであると想定している。

Note 1

予約文字の集合は RFC 2396 に基づいており、より新しい RFC 3986 による変更を反映していない。

Note 2

多くの ECMAScript 実装はウェブページを操作する追加の関数やメソッドを提供する;これらの関数は本標準の範囲外である。

19.2.6.1 decodeURI ( encodedURI )

この関数は、encodeURI 関数によって導入される可能性のある各エスケープシーケンスおよび UTF-8 エンコーディングを、それが表すコードポイントの UTF-16 エンコーディングに置き換えた URI の新しいバージョンを計算する。encodeURI によって導入され得ないエスケープシーケンスは置き換えられない。

これは %decodeURI% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. uriString を ? ToString(encodedURI) とする。
  2. preserveEscapeSet";/?:@&=+$,#" とする。
  3. Return ? Decode(uriString, preserveEscapeSet) を実行する。

19.2.6.2 decodeURIComponent ( encodedURIComponent )

この関数は、encodeURIComponent 関数によって導入される可能性のある各エスケープシーケンスおよび UTF-8 エンコーディングを、それが表すコードポイントの UTF-16 エンコーディングに置き換えた URI の新しいバージョンを計算する。

これは %decodeURIComponent% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. componentString を ? ToString(encodedURIComponent) とする。
  2. preserveEscapeSet を空の文字列とする。
  3. Return ? Decode(componentString, preserveEscapeSet) を実行する。

19.2.6.3 encodeURI ( uri )

この関数は、UTF-16 エンコードされた(6.1.4)URI の各インスタンスについて、あるコードポイントのインスタンスをそのコードポイントの UTF-8 エンコーディングを表す 1、2、3、または 4 のエスケープシーケンスに置き換えた新しいバージョンを計算する。

これは %encodeURI% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. uriString を ? ToString(uri) とする。
  2. extraUnescaped";/?:@&=+$,#" とする。
  3. Return ? Encode(uriString, extraUnescaped) を実行する。

19.2.6.4 encodeURIComponent ( uriComponent )

この関数は、UTF-16 エンコードされた(6.1.4)URI の各インスタンスについて、あるコードポイントのインスタンスをそのコードポイントの UTF-8 エンコーディングを表す 1、2、3、または 4 のエスケープシーケンスに置き換えた新しいバージョンを計算する。

これは %encodeURIComponent% 内在オブジェクトである。

呼び出されたとき、以下の手順を実行する:

  1. componentString を ? ToString(uriComponent) とする。
  2. extraUnescaped を空の文字列とする。
  3. Return ? Encode(componentString, extraUnescaped) を実行する。

19.2.6.5 Encode ( string, extraUnescaped )

The abstract operation Encode takes arguments string (a String) and extraUnescaped (a String) and returns either a normal completion containing a String or a throw completion. これは URI のエンコードとエスケープを行い、string6.1.4 に記述されるような UTF-16 エンコードされたコードポイントの列として解釈する。文字が RFC 2396 において unreserved と識別されるか、extraUnescaped に現れる場合、それはエスケープされない。 It performs the following steps when called:

  1. lenstring の長さとする。
  2. result を空の文字列とする。
  3. alwaysUnescaped を ASCII の単語文字と "-.!~*'()" の文字列連結とする。
  4. unescapedSetalwaysUnescapedextraUnescaped の連結とする。
  5. k を 0 にする。
  6. k < len の間、繰り返す、
    1. codeUnitstring のインデックス k のコード単位とする。
    2. もし unescapedSetcodeUnit を含むなら、
      1. kk + 1 にする。
      2. resultresultcodeUnit の文字列連結に設定する。
    3. さもなければ、
      1. cpCodePointAt(string, k) とする。
      2. もし cp.[[IsUnpairedSurrogate]]true なら、URIError 例外を投げる。
      3. kk + cp.[[CodeUnitCount]] に設定する。
      4. octetscp.[[CodePoint]] に UTF-8 変換を適用して得られるオクテットのリストとする。
      5. octets の各要素 octet に対して、次を行う
        1. hexoctet の大文字の16進数文字列表現とする。
        2. resultresult"%"、および StringPad(hex, 2, "0", start) の連結に設定する。
  7. result を返す。
Note

パーセントエンコーディングは個々のオクテットを表現するため、単一のコードポイントは複数の連続するエスケープシーケンス(各 8 ビットの UTF-8 コード単位ごとに1つ)として表され得る。

19.2.6.6 Decode ( string, preserveEscapeSet )

The abstract operation Decode takes arguments string (a String) and preserveEscapeSet (a String) and returns either a normal completion containing a String or a throw completion. これは URI のアンエスケープとデコードを行い、preserveEscapeSet にある Basic Latin 文字に対応するエスケープシーケンスを保持する。 It performs the following steps when called:

  1. lenstring の長さとする。
  2. result を空の文字列とする。
  3. k を 0 にする。
  4. k < len の間、繰り返す、
    1. codeUnitstring のインデックス k のコード単位とする。
    2. segmentcodeUnit に設定する。
    3. もし codeUnit が 0x0025 (PERCENT SIGN) のコード単位であるなら、
      1. もし k + 3 > len なら、URIError 例外を投げる。
      2. escapestringk から k + 3 の部分文字列とする。
      3. firstOctetParseHexOctet(string, k + 1) とする。
      4. もし firstOctet が整数でなければ、URIError 例外を投げる。
      5. kk + 2 に設定する。
      6. nfirstOctet の先頭に並ぶ 1 ビットの数とする。
      7. もし n = 0 なら、
        1. asciiChar を数値が firstOctet のコード単位とする。
        2. もし preserveEscapeSetasciiChar を含めば、segmentescape に設定する;さもなければ segmentasciiChar に設定する。
      8. さもなければ、
        1. もし n = 1 または n > 4 なら、URIError 例外を投げる。
        2. octets を « firstOctet » とする。
        3. j を 1 にする。
        4. j < n の間、繰り返す、
          1. kk + 1 に設定する。
          2. もし k + 3 > len なら、URIError 例外を投げる。
          3. もし string のインデックス k のコード単位が 0x0025 (PERCENT SIGN) でなければ、URIError 例外を投げる。
          4. continuationByteParseHexOctet(string, k + 1) とする。
          5. もし continuationByte が整数でなければ、URIError 例外を投げる。
          6. continuationByteoctets に追加する。
          7. kk + 2 に設定する。
          8. jj + 1 に設定する。
        5. 断言: octets の長さは n である。
        6. もし octets が Unicode コードポイントの有効な UTF-8 エンコーディングを含まないなら、URIError 例外を投げる。
        7. codePointoctets に UTF-8 変換を適用して得られるコードポイントとする(21 ビット値)。
        8. segmentUTF16EncodeCodePoint(codePoint) に設定する。
    4. resultresultsegment の文字列連結に設定する。
    5. kk + 1 に設定する。
  5. result を返す。
Note

RFC 3629 は無効な UTF-8 オクテットシーケンスのデコードを禁じている。例えば無効なシーケンス 0xC0 0x80 はコード単位 0x0000 にデコードされてはならない。Decode アルゴリズムの実装は、そのような無効シーケンスに遭遇したとき URIError を投げることが要求される。

19.2.6.7 ParseHexOctet ( string, position )

The abstract operation ParseHexOctet takes arguments string (a String) and position (a non-negative integer) and returns either a non-negative integer or a non-empty List of SyntaxError objects. 指定した position における文字列中の 2 文字の 16 進文字列を無符号 8 ビット整数に解析する。 It performs the following steps when called:

  1. lenstring の長さとする。
  2. 断言: position + 2 ≤ len
  3. hexDigitsstringposition から position + 2 の部分文字列とする。
  4. parseResultParseText(hexDigits, HexDigits[~Sep]) とする。
  5. もし parseResultParse Node でなければ、parseResult を返す。
  6. nparseResult の MV とする。
  7. 断言: n は 0 から 255 の閉区間内である。
  8. n を返す。

19.3 グローバルオブジェクトのコンストラクタプロパティ

19.3.1 AggregateError ( . . . )

参照 20.5.7.1

19.3.2 Array ( . . . )

参照 23.1.1

19.3.3 ArrayBuffer ( . . . )

参照 25.1.4

19.3.4 BigInt ( . . . )

参照 21.2.1

19.3.5 BigInt64Array ( . . . )

参照 23.2.5

19.3.6 BigUint64Array ( . . . )

参照 23.2.5

19.3.7 Boolean ( . . . )

参照 20.3.1

19.3.8 DataView ( . . . )

参照 25.3.2

19.3.9 Date ( . . . )

参照 21.4.2

19.3.10 Error ( . . . )

参照 20.5.1

19.3.11 EvalError ( . . . )

参照 20.5.5.1

19.3.12 FinalizationRegistry ( . . . )

参照 26.2.1

19.3.13 Float16Array ( . . . )

参照 23.2.5

19.3.14 Float32Array ( . . . )

参照 23.2.5

19.3.15 Float64Array ( . . . )

参照 23.2.5

19.3.16 Function ( . . . )

参照 20.2.1

19.3.17 Int8Array ( . . . )

参照 23.2.5

19.3.18 Int16Array ( . . . )

参照 23.2.5

19.3.19 Int32Array ( . . . )

参照 23.2.5

19.3.20 Iterator ( . . . )

参照 27.1.3.1

19.3.21 Map ( . . . )

参照 24.1.1

19.3.22 Number ( . . . )

参照 21.1.1

19.3.23 Object ( . . . )

参照 20.1.1

19.3.24 Promise ( . . . )

参照 27.2.3

19.3.25 Proxy ( . . . )

参照 28.2.1

19.3.26 RangeError ( . . . )

参照 20.5.5.2

19.3.27 ReferenceError ( . . . )

参照 20.5.5.3

19.3.28 RegExp ( . . . )

参照 22.2.4

19.3.29 Set ( . . . )

参照 24.2.2

19.3.30 SharedArrayBuffer ( . . . )

参照 25.2.3

19.3.31 String ( . . . )

参照 22.1.1

19.3.32 Symbol ( . . . )

参照 20.4.1

19.3.33 SyntaxError ( . . . )

参照 20.5.5.4

19.3.34 TypeError ( . . . )

参照 20.5.5.5

19.3.35 Uint8Array ( . . . )

参照 23.2.5

19.3.36 Uint8ClampedArray ( . . . )

参照 23.2.5

19.3.37 Uint16Array ( . . . )

参照 23.2.5

19.3.38 Uint32Array ( . . . )

参照 23.2.5

19.3.39 URIError ( . . . )

参照 20.5.5.6

19.3.40 WeakMap ( . . . )

参照 24.3.1

19.3.41 WeakRef ( . . . )

参照 26.1.1

19.3.42 WeakSet ( . . . )

参照 24.4

19.4 グローバルオブジェクトのその他のプロパティ

19.4.1 Atomics

参照 25.4

19.4.2 JSON

参照 25.5

19.4.3 Math

参照 21.3

19.4.4 Reflect

参照 28.1