ページ表示設定

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

グローバルオブジェクトは:

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. ? PerformEval(source, false, false) を返す。

19.2.1.1 PerformEval ( source, strictCaller, direct )

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

  1. 表明: direct が false である場合、strictCaller も false である。
  2. source が String でない場合、source を返す。
  3. evalRealm を現在の Realm Record とする。
  4. 注記: direct eval の場合、evalRealm は eval の呼出し元と eval 関数自身の両方の realm である。
  5. ? HostEnsureCanCompileStrings(evalRealm, « », source, direct) を実行する。
  6. inFunc を false とする。
  7. inMethod を false とする。
  8. inDerivedCtor を false とする。
  9. inClassFieldInitializer を false とする。
  10. direct が true である場合、
    1. thisEnvRecord を GetThisEnvironment() とする。
    2. thisEnvRecord が Function Environment Record である場合、
      1. func を thisEnvRecord.[[FunctionObject]] とする。
      2. inFunc を true に設定する。
      3. inMethod を thisEnvRecord.HasSuperBinding() に設定する。
      4. func.[[ConstructorKind]] が derived である場合、inDerivedCtor を true に設定する。
      5. classFieldInitializerName を func.[[ClassFieldInitializerName]] とする。
      6. classFieldInitializerName が empty でない場合、inClassFieldInitializer を true に設定する。
  11. 次の副手順を実装定義の順序で実行し、構文解析とエラー検出を交互に行ってもよい。
    1. script を ParseText(source, Script) とする。
    2. script がエラーの List である場合、SyntaxError 例外をスローする。
    3. script Contains ScriptBody が false である場合、undefined を返す。
    4. body を script の ScriptBody とする。
    5. inFunc が false であり、body Contains NewTarget である場合、SyntaxError 例外をスローする。
    6. inMethod が false であり、body Contains SuperProperty である場合、SyntaxError 例外をスローする。
    7. inDerivedCtor が false であり、body Contains SuperCall である場合、SyntaxError 例外をスローする。
    8. inClassFieldInitializer が true であり、body の ContainsArguments が true である場合、SyntaxError 例外をスローする。
  12. strictCaller が true である場合、strictEval を true とする。
  13. そうでない場合、strictEval を script の ScriptIsStrict とする。
  14. runningContext を実行中の実行コンテキストとする。
  15. 注記: direct が true である場合、runningContext は direct eval を実行した実行コンテキストである。direct が false である場合、runningContext は eval 関数の呼出しに対する実行コンテキストである。
  16. direct が true である場合、
    1. lexicalEnv を NewDeclarativeEnvironment(runningContext の LexicalEnvironment) とする。
    2. variableEnv を runningContext の VariableEnvironment とする。
    3. privateEnv を runningContext の PrivateEnvironment とする。
  17. そうでない場合、
    1. lexicalEnv を NewDeclarativeEnvironment(evalRealm.[[GlobalEnv]]) とする。
    2. variableEnv を evalRealm.[[GlobalEnv]] とする。
    3. privateEnv を null とする。
  18. strictEval が true である場合、variableEnv を lexicalEnv に設定する。
  19. runningContext がまだ一時停止されていない場合、runningContext を一時停止する。
  20. evalContext を新しい ECMAScript コード実行コンテキストとする。
  21. evalContext の Function を null に設定する。
  22. evalContext の Realm を evalRealm に設定する。
  23. evalContext の ScriptOrModule を runningContext の ScriptOrModule に設定する。
  24. evalContext の VariableEnvironment を variableEnv に設定する。
  25. evalContext の LexicalEnvironment を lexicalEnv に設定する。
  26. evalContext の PrivateEnvironment を privateEnv に設定する。
  27. evalContext を実行コンテキストスタックにプッシュする。これで evalContext が実行中の実行コンテキストになる。
  28. result を Completion(EvalDeclarationInstantiation(body, variableEnv, lexicalEnv, privateEnv, strictEval)) とする。
  29. result が正常完了である場合、
    1. result を Completion(body の Evaluation) に設定する。
  30. result が正常完了であり、result.[[Value]] が empty である場合、
    1. result を NormalCompletion(undefined) に設定する。
  31. evalContext を一時停止し、実行コンテキストスタックから削除する。
  32. 現在実行コンテキストスタックの先頭にあるコンテキストを、実行中の実行コンテキストとして再開する。
  33. ? result を返す。
注

呼出し元コンテキストのコードまたは eval コードのいずれかが strict モードコードである場合、eval コードは、その eval を呼び出した呼出し元コンテキストの variable environment 内に変数または関数束縛をインスタンス化できません。代わりに、このような束縛は eval コードからだけアクセス可能な新しい VariableEnvironment 内にインスタンス化されます。let、const、または class 宣言によって導入される束縛は、常に新しい LexicalEnvironment 内にインスタンス化されます。

19.2.1.2 HostEnsureCanCompileStrings ( calleeRealm, paramStrings, bodyString, direct )

ホスト定義の抽象操作 HostEnsureCanCompileStrings。引数 calleeRealm (Realmレコード)、paramStrings (リスト (要素:String))、bodyString (String) および direct (Boolean)。戻り値:(正常完了 (値:unused) または throw 完了)。 開発者が文字列を ECMAScript コードとして解釈および評価できるようにする特定の ECMAScript 関数を、ホスト環境がブロックできるようにします。

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

HostEnsureCanCompileStrings の既定の実装は、NormalCompletion(unused) を返すことです。

19.2.1.3 EvalDeclarationInstantiation ( body, variableEnv, lexicalEnv, privateEnv, strict )

抽象操作 EvalDeclarationInstantiation。引数 body (a ScriptBody Parse Node)、variableEnv (Environmentレコード)、lexicalEnv (Declarative Environmentレコード)、privateEnv ((PrivateEnvironmentレコード または null)) および strict (Boolean)。戻り値:(正常完了 (値:unused) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. variableNames を body の VarDeclaredNames とする。
  2. variableDecls を body の VarScopedDeclarations とする。
  3. strict が false である場合、
    1. variableEnv が Global Environment Record である場合、
      1. variableNames の各要素 name について、次を行う。
        1. HasLexicalDeclaration(variableEnv, name) が true である場合、SyntaxError 例外をスローする。
        2. 注記: eval は、グローバルレキシカル宣言によって隠蔽されるグローバル var 宣言を作成しない。
    2. thisEnv を lexicalEnv とする。
    3. 表明: 次のループは終了する。
    4. thisEnv と variableEnv が同じ Environment Record でない間、次を繰り返す。
      1. thisEnv が Object Environment Record でない場合、
        1. 注記: with 文の環境はいかなるレキシカル宣言も含むことができないため、var/let の巻き上げ競合について検査する必要はない。
        2. variableNames の各要素 name について、次を行う。
          1. ! thisEnv.HasBinding(name) が true である場合、
            1. Normative Optional
              ホストが Web ブラウザーであるか、その他の方法で Catch ブロック内の VariableStatement をサポートする場合、
              1. thisEnv が Catch 節の Environment Record でない場合、SyntaxError 例外をスローする。
            2. そうでない場合、
              1. SyntaxError 例外をスローする。
          2. 注記: direct eval は、同じ名前のレキシカル宣言を越えて var 宣言を巻き上げない。
      2. thisEnv を thisEnv.[[OuterEnv]] に設定する。
  4. privateIdentifiers を新しい空の List とする。
  5. pointer を privateEnv とする。
  6. pointer が null でない間、次を繰り返す。
    1. pointer.[[Names]] の各 Private Name binding について、次を行う。
      1. privateIdentifiers が binding.[[Description]] を含まない場合、binding.[[Description]] を privateIdentifiers に追加する。
    2. pointer を pointer.[[OuterPrivateEnvironment]] に設定する。
  7. 引数 privateIdentifiers を指定した body の AllPrivateIdentifiersValid が false である場合、SyntaxError 例外をスローする。
  8. funcsToInitialize を新しい空の List とする。
  9. declaredFuncNames を新しい空の List とする。
  10. variableDecls の各要素 variableDecl について、List の逆順で次を行う。
    1. variableDecl が VariableDeclaration、ForBinding、または BindingIdentifier のいずれでもない場合、
      1. 表明: variableDecl は FunctionDeclaration、GeneratorDeclaration、AsyncFunctionDeclaration、または AsyncGeneratorDeclaration のいずれかである。
      2. 注記: 同じ名前について複数の関数宣言がある場合、最後の宣言が使用される。
      3. funcName を variableDecl の BoundNames の唯一の要素とする。
      4. declaredFuncNames が funcName を含まない場合、
        1. variableEnv が Global Environment Record である場合、
          1. funcDefinable を ? CanDeclareGlobalFunction(variableEnv, funcName) とする。
          2. funcDefinable が false である場合、TypeError 例外をスローする。
        2. funcName を declaredFuncNames に追加する。
        3. variableDecl を funcsToInitialize の最初の要素として挿入する。
  11. declaredVariableNames を新しい空の List とする。
  12. variableDecls の各要素 variableDecl について、次を行う。
    1. variableDecl が VariableDeclaration、ForBinding、または BindingIdentifier のいずれかである場合、
      1. variableDecl の BoundNames の各 String name について、次を行う。
        1. declaredFuncNames が name を含まない場合、
          1. variableEnv が Global Environment Record である場合、
            1. variableDefinable を ? CanDeclareGlobalVar(variableEnv, name) とする。
            2. variableDefinable が false である場合、TypeError 例外をスローする。
          2. declaredVariableNames が name を含まない場合、
            1. name を declaredVariableNames に追加する。
  13. Normative Optional
    strict が false であり、ホストが Web ブラウザーであるか、その他の方法で ブロックレベル関数宣言の Web Legacy 互換性意味論 をサポートする場合、
    1. declaredFuncOrVariableNames を declaredFuncNames と declaredVariableNames のリスト連結とする。
    2. body Contains x が true となる任意の Block、CaseClause、または DefaultClause x の StatementList に直接含まれる各 FunctionDeclaration funcDecl について、次を行う。
      1. funcName を funcDecl の BindingIdentifier の StringValue とする。
      2. FunctionDeclaration funcDecl を、funcName を BindingIdentifier として持つ VariableStatement に置き換えても body に早期エラーが生じない場合、
        1. bindingExists を false とする。
        2. thisEnv を lexicalEnv に設定する。
        3. 表明: 次のループは終了する。
        4. thisEnv が variableEnv でない間、次を繰り返す。
          1. thisEnv が Object Environment Record でない場合、
            1. ! thisEnv.HasBinding(funcName) が true である場合、
              1. Normative Optional
                ホストが Web ブラウザーであるか、その他の方法で Catch ブロック内の VariableStatement をサポートする場合、
                1. thisEnv が Catch 節の Environment Record でない場合、bindingExists を true に設定する。
              2. そうでない場合、
                1. bindingExists を true に設定する。
          2. thisEnv を thisEnv.[[OuterEnv]] に設定する。
        5. bindingExists が false であり、variableEnv が Global Environment Record である場合、
          1. HasLexicalDeclaration(variableEnv, funcName) が false である場合、
            1. funcDefinable を ? CanDeclareGlobalVar(variableEnv, funcName) とする。
          2. そうでない場合、
            1. funcDefinable を false とする。
        6. そうでない場合、
          1. funcDefinable を true とする。
        7. bindingExists が false であり、funcDefinable が true である場合、
          1. declaredFuncOrVariableNames が funcName を含まない場合、
            1. variableEnv が Global Environment Record である場合、
              1. ? CreateGlobalVarBinding(variableEnv, funcName, true) を実行する。
            2. そうでない場合、
              1. bindingExists を ! variableEnv.HasBinding(funcName) に設定する。
              2. bindingExists が false である場合、
                1. ! variableEnv.CreateMutableBinding(funcName, true) を実行する。
                2. ! variableEnv.InitializeBinding(funcName, undefined) を実行する。
            3. funcName を declaredFuncOrVariableNames に追加する。
          2. FunctionDeclaration funcDecl が評価されるとき、15.2.6 で提供される FunctionDeclaration Evaluation アルゴリズムの代わりに、次の手順を実行する。
            1. globalEnv を実行中の実行コンテキストの VariableEnvironment とする。
            2. blockEnv を実行中の実行コンテキストの LexicalEnvironment とする。
            3. funcObj を ! blockEnv.GetBindingValue(funcName, false) とする。
            4. ? globalEnv.SetMutableBinding(funcName, funcObj, false) を実行する。
            5. unused を返す。
  14. 注記: variableEnv が Global Environment Record であり、かつグローバルオブジェクトが Proxy 特殊オブジェクトである場合を除き、このアルゴリズムのこの手順以降では異常終了は発生しない。
  15. lexicalDecls を body の LexicallyScopedDeclarations とする。
  16. lexicalDecls の各要素 lexicalDecl について、次を行う。
    1. 注記: レキシカルに宣言された名前はここではインスタンス化されるだけで、初期化はされない。
    2. lexicalDecl の BoundNames の各要素 name について、次を行う。
      1. lexicalDecl の IsConstantDeclaration が true である場合、
        1. ? lexicalEnv.CreateImmutableBinding(name, true) を実行する。
      2. そうでない場合、
        1. ? lexicalEnv.CreateMutableBinding(name, false) を実行する。
  17. funcsToInitialize の各 Parse Node funcDecl について、次を行う。
    1. funcName を funcDecl の BoundNames の唯一の要素とする。
    2. funcObj を、引数 lexicalEnv および privateEnv を指定した funcDecl の InstantiateFunctionObject とする。
    3. variableEnv が Global Environment Record である場合、
      1. ? CreateGlobalFunctionBinding(variableEnv, funcName, funcObj, true) を実行する。
    4. そうでない場合、
      1. bindingExists を ! variableEnv.HasBinding(funcName) とする。
      2. bindingExists が false である場合、
        1. 注記: 手順 14 に先立つ検証により、次の呼出しは中断完了を返すことができない。
        2. ! variableEnv.CreateMutableBinding(funcName, true) を実行する。
        3. ! variableEnv.InitializeBinding(funcName, funcObj) を実行する。
      3. そうでない場合、
        1. ! variableEnv.SetMutableBinding(funcName, funcObj, false) を実行する。
  18. declaredVariableNames の各 String variableName について、次を行う。
    1. variableEnv が Global Environment Record である場合、
      1. ? CreateGlobalVarBinding(variableEnv, variableName, true) を実行する。
    2. そうでない場合、
      1. bindingExists を ! variableEnv.HasBinding(variableName) とする。
      2. bindingExists が false である場合、
        1. 注記: 手順 14 に先立つ検証により、次の呼出しは中断完了を返すことができない。
        2. ! variableEnv.CreateMutableBinding(variableName, true) を実行する。
        3. ! variableEnv.InitializeBinding(variableName, undefined) を実行する。
  19. unused を返す。

19.2.2 isFinite ( value )

この関数は %isFinite% イントリンシックオブジェクトです。

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

  1. number を ? ToNumber(value) とする。
  2. number が有限 Number である場合、true を返す。
  3. false を返す。

19.2.3 isNaN ( value )

この関数は %isNaN% イントリンシックオブジェクトです。

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

  1. number を ? ToNumber(value) とする。
  2. number が NaN である場合、true を返す。
  3. false を返す。
注

ECMAScript コードで値 X が NaN かどうかを確実に検査する方法は、X !== X という形式の式です。X が NaN である場合に限り、結果は true になります。

19.2.4 parseFloat ( string )

この関数は、string 引数の内容を10進リテラルとして解釈した結果に従って Number 値を生成します。

これは %parseFloat% イントリンシックオブジェクトです。

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

  1. inputString を ? ToString(string) とする。
  2. trimmedString を ! TrimString(inputString, start) とする。
  3. trimmed を StringToCodePoints(trimmedString) とする。
  4. trimmedPrefix を、StrDecimalLiteral の構文を満たす trimmed の最長の接頭辞とする。これは trimmed 自身である場合もある。そのような接頭辞が存在しない場合、NaN を返す。
  5. parsedNumber を ParseText(trimmedPrefix, StrDecimalLiteral) とする。
  6. 表明: parsedNumber は Parse Node である。
  7. parsedNumber の StringNumericValue を返す。
注

この関数は string の先頭部分だけを Number 値として解釈する場合があります。10進リテラル表記の一部として解釈できないコード単位は無視され、そのようなコード単位が無視されたことを示す通知は行われません。

19.2.5 parseInt ( string, radix )

この関数は、指定された radix に従って string の内容を解釈した結果に基づく整数 Number を生成します。string の先頭の空白は無視されます。radix が 0 に型強制される場合(undefined の場合など)、数値表現が "0x" または "0X" で始まる場合を除いて 10 とみなされ、その場合は 16 とみなされます。radix が 16 の場合、数値表現は任意で "0x" または "0X" で始めることができます。

これは %parseInt% イントリンシックオブジェクトです。

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

  1. inputString を ? ToString(string) とする。
  2. radixMV を ℝ(? ToInt32(radix)) とする。
  3. radixMV ≠ 0 であり、radixMV が 2 から 36 までの閉区間内にない場合、NaN を返す。
  4. trimmedString を ! TrimString(inputString, start) とする。
  5. trimmedString が空の String である場合、NaN を返す。
  6. sign を 1 とする。
  7. trimmedString の最初のコード単位がコード単位 0x002D (HYPHEN-MINUS) である場合、
    1. sign を -1 に設定する。
    2. trimmedString を、1 から始まる trimmedString の部分文字列に設定する。
  8. そうでなく、trimmedString の最初のコード単位がコード単位 0x002B (PLUS SIGN) である場合、
    1. trimmedString を、1 から始まる trimmedString の部分文字列に設定する。
  9. radixMV = 0 または radixMV = 16 である場合、
    1. trimmedString の長さ ≥ 2 であり、0 から 2 までの trimmedString の部分文字列が "0x" または "0X" のいずれかである場合、
      1. trimmedString を、2 から始まる trimmedString の部分文字列に設定する。
      2. radixMV を 16 に設定する。
  10. radixMV = 0 である場合、radixMV を 10 に設定する。
  11. trimmedString が基数 radixMV の数字でないコード単位を含む場合、end をそのような最初のコード単位の trimmedString 内のインデックスとする。そうでない場合、end を trimmedString の長さとする。
  12. numberString を、0 から end までの trimmedString の部分文字列とする。
  13. numberString が空である場合、NaN を返す。
  14. mathInt を、値 10 から 35 の数字として A から Z および a から z の文字を使用して、基数 radixMV 表記の numberString によって表される整数値とする。(ただし、radixMV = 10 で numberString が20桁を超える有効数字を含む場合、実装の選択により21桁目以降の各有効数字を数字 0 に置き換えてもよい。また、radixMV が 2、4、8、10、16、または 32 のいずれでもない場合、mathInt は基数 radixMV 表記で numberString によって表される整数値を表す、実装によって近似された整数であってもよい。)
  15. sign = -1 かつ mathInt = 0 である場合、-0𝔽 を返す。
  16. 𝔽(sign × mathInt) を返す。
注

この関数は string の先頭部分だけを整数値として解釈する場合があります。整数表記の一部として解釈できないコード単位は無視され、そのようなコード単位が無視されたことを示す通知は行われません。

19.2.6 URI 処理関数

Uniform Resource Identifier、すなわち URI は、インターネット上のリソース(Web ページやファイルなど)と、それらにアクセスするための転送プロトコル(HTTP や FTP など)を識別する String です。ECMAScript 言語自体は、この節で説明する URI をエンコードおよびデコードする関数を除いて、URI を使用するためのサポートを提供しません。encodeURI および decodeURI は完全な URI を扱うことを意図しています。これらは、予約文字が特殊な意味(区切り文字など)を持つことを意図しているものと仮定するため、それらをエンコードしません。encodeURIComponent および decodeURIComponent は URI の個々の構成要素を扱うことを意図しています。これらは、予約文字がテキストを表しているものと仮定し、その構成要素が完全な URI の一部となるときに特殊な意味を持たないようにエンコードしなければならないものとします。

注 1

予約文字の集合は RFC 2396 に基づいており、より新しい RFC 3986 によって導入された変更を反映していません。

注 2

ECMAScript の多くの実装は、Web ページを操作する追加の関数およびメソッドを提供していますが、これらの関数はこの標準の範囲外です。

19.2.6.1 decodeURI ( encodedURI )

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

これは %decodeURI% イントリンシックオブジェクトです。

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

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

19.2.6.2 decodeURIComponent ( encodedURIComponent )

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

これは %decodeURIComponent% イントリンシックオブジェクトです。

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

  1. componentString を ? ToString(encodedURIComponent) とする。
  2. preserveEscapeSet を空の String とする。
  3. ? Decode(componentString, preserveEscapeSet) を返す。

19.2.6.3 encodeURI ( uri )

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

これは %encodeURI% イントリンシックオブジェクトです。

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

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

19.2.6.4 encodeURIComponent ( uriComponent )

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

これは %encodeURIComponent% イントリンシックオブジェクトです。

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

  1. componentString を ? ToString(uriComponent) とする。
  2. extraUnescaped を空の String とする。
  3. ? Encode(componentString, extraUnescaped) を返す。

19.2.6.5 Encode ( string, extraUnescaped )

抽象操作 Encode。引数 string (String) および extraUnescaped (String)。戻り値:(正常完了 (値:String) または throw 完了)。 6.1.4 で説明されるように string を UTF-16 でエンコードされたコードポイントの列として解釈し、URI のエンコードおよびエスケープを実行します。文字が RFC 2396 で unreserved と識別されるか、extraUnescaped に現れる場合、その文字はエスケープされません。 呼び出されると、次の手順を実行する。

  1. length を string の長さとする。
  2. result を空の String とする。
  3. alwaysUnescaped を ASCII word characters と "-.!~*'()" の文字列連結とする。
  4. unescapedSet を alwaysUnescaped と extraUnescaped の文字列連結とする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. codeUnit を string 内のインデックス k にあるコード単位とする。
    2. unescapedSet が codeUnit を含む場合、
      1. k を k + 1 に設定する。
      2. result を result と codeUnit の文字列連結に設定する。
    3. そうでない場合、
      1. codePoint を CodePointAt(string, k) とする。
      2. codePoint.[[IsUnpairedSurrogate]] が true である場合、URIError 例外をスローする。
      3. k を k + codePoint.[[CodeUnitCount]] に設定する。
      4. octets を、codePoint.[[CodePoint]] に UTF-8 変換を適用した結果のオクテットの List とする。
      5. octets の各要素 octet について、次を行う。
        1. hex を、octet を大文字の16進数として整形した String 表現とする。
        2. result を result、"%"、および StringPad(hex, 2, "0", start) の文字列連結に設定する。
  7. result を返す。
注

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

19.2.6.6 Decode ( string, preserveEscapeSet )

抽象操作 Decode。引数 string (String) および preserveEscapeSet (String)。戻り値:(正常完了 (値:String) または throw 完了)。 URI のエスケープ解除およびデコードを実行し、preserveEscapeSet 内の Basic Latin 文字に対応するエスケープシーケンスを保持します。 呼び出されると、次の手順を実行する。

  1. length を string の長さとする。
  2. result を空の String とする。
  3. k を 0 とする。
  4. k < length の間、次を繰り返す。
    1. codeUnit を string 内のインデックス k にあるコード単位とする。
    2. segment を codeUnit とする。
    3. codeUnit がコード単位 0x0025 (PERCENT SIGN) である場合、
      1. k + 3 > length である場合、URIError 例外をスローする。
      2. escape を string の k から k + 3 までの部分文字列とする。
      3. firstOctet を ParseHexOctet(string, k + 1) とする。
      4. firstOctet が整数でない場合、URIError 例外をスローする。
      5. k を k + 2 に設定する。
      6. n を firstOctet 内の先頭の 1 ビットの数とする。
      7. n = 0 である場合、
        1. asciiChar を、数値が firstOctet であるコード単位とする。
        2. preserveEscapeSet が asciiChar を含む場合、segment を escape に設定する。そうでない場合、segment を asciiChar に設定する。
      8. そうでない場合、
        1. n = 1 または n > 4 である場合、URIError 例外をスローする。
        2. octets を « firstOctet » とする。
        3. j を 1 とする。
        4. j < n の間、次を繰り返す。
          1. k を k + 1 に設定する。
          2. k + 3 > length である場合、URIError 例外をスローする。
          3. string 内のインデックス k にあるコード単位がコード単位 0x0025 (PERCENT SIGN) でない場合、URIError 例外をスローする。
          4. continuationByte を ParseHexOctet(string, k + 1) とする。
          5. continuationByte が整数でない場合、URIError 例外をスローする。
          6. continuationByte を octets に追加する。
          7. k を k + 2 に設定する。
          8. j を j + 1 に設定する。
        5. 表明: octets の長さは n である。
        6. octets が Unicode コードポイントの有効な UTF-8 エンコーディングを含まない場合、URIError 例外をスローする。
        7. codePoint を、octets に UTF-8 変換を適用して得られるコードポイント、すなわちオクテットの List から21ビット値へ変換したものとする。
        8. segment を UTF16EncodeCodePoint(codePoint) に設定する。
    4. result を result と segment の文字列連結に設定する。
    5. k を k + 1 に設定する。
  5. result を返す。
注

RFC 3629 は無効な UTF-8 オクテット列のデコードを禁止しています。たとえば、無効な列 0xC0 0x80 をコード単位 0x0000 にデコードしてはなりません。Decode アルゴリズムの実装は、このような無効な列に遭遇した場合に URIError をスローすることが要求されます。

19.2.6.7 ParseHexOctet ( string, position )

抽象操作 ParseHexOctet。引数 string (String) および position (非負整数)。戻り値:(非負整数 または a non-empty List of SyntaxError objects)。 string 内の指定された position にある2つの16進文字の列を、符号なし8ビット整数として構文解析します。 呼び出されると、次の手順を実行する。

  1. length を string の長さとする。
  2. 表明: position + 2 ≤ length。
  3. hexDigits を string の position から position + 2 までの部分文字列とする。
  4. parseResult を ParseText(hexDigits, HexDigits[~Sep]) とする。
  5. parseResult が Parse Node でない場合、parseResult を返す。
  6. n を parseResult の 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 AsyncDisposableStack ( . . . )

27.4.1 を参照してください。

19.3.5 BigInt ( . . . )

21.2.1 を参照してください。

19.3.6 BigInt64Array ( . . . )

23.2.5 を参照してください。

19.3.7 BigUint64Array ( . . . )

23.2.5 を参照してください。

19.3.8 Boolean ( . . . )

20.3.1 を参照してください。

19.3.9 DataView ( . . . )

25.3.2 を参照してください。

19.3.10 Date ( . . . )

21.4.2 を参照してください。

19.3.11 DisposableStack ( . . . )

27.3.1 を参照してください。

19.3.12 Error ( . . . )

20.5.1 を参照してください。

19.3.13 EvalError ( . . . )

20.5.5.1 を参照してください。

19.3.14 FinalizationRegistry ( . . . )

26.2.1 を参照してください。

19.3.15 Float16Array ( . . . )

23.2.5 を参照してください。

19.3.16 Float32Array ( . . . )

23.2.5 を参照してください。

19.3.17 Float64Array ( . . . )

23.2.5 を参照してください。

19.3.18 Function ( . . . )

20.2.1 を参照してください。

19.3.19 Int8Array ( . . . )

23.2.5 を参照してください。

19.3.20 Int16Array ( . . . )

23.2.5 を参照してください。

19.3.21 Int32Array ( . . . )

23.2.5 を参照してください。

19.3.22 Iterator ( . . . )

27.1.3.1 を参照してください。

19.3.23 Map ( . . . )

24.1.1 を参照してください。

19.3.24 Number ( . . . )

21.1.1 を参照してください。

19.3.25 Object ( . . . )

20.1.1 を参照してください。

19.3.26 Promise ( . . . )

27.5.3 を参照してください。

19.3.27 Proxy ( . . . )

28.2.1 を参照してください。

19.3.28 RangeError ( . . . )

20.5.5.2 を参照してください。

19.3.29 ReferenceError ( . . . )

20.5.5.3 を参照してください。

19.3.30 RegExp ( . . . )

22.2.4 を参照してください。

19.3.31 Set ( . . . )

24.2.2 を参照してください。

19.3.32 SharedArrayBuffer ( . . . )

25.2.3 を参照してください。

19.3.33 String ( . . . )

22.1.1 を参照してください。

19.3.34 SuppressedError ( . . . )

20.5.8.1 を参照してください。

19.3.35 Symbol ( . . . )

20.4.1 を参照してください。

19.3.36 SyntaxError ( . . . )

20.5.5.4 を参照してください。

19.3.37 TypeError ( . . . )

20.5.5.5 を参照してください。

19.3.38 Uint8Array ( . . . )

23.2.5 を参照してください。

19.3.39 Uint8ClampedArray ( . . . )

23.2.5 を参照してください。

19.3.40 Uint16Array ( . . . )

23.2.5 を参照してください。

19.3.41 Uint32Array ( . . . )

23.2.5 を参照してください。

19.3.42 URIError ( . . . )

20.5.5.6 を参照してください。

19.3.43 WeakMap ( . . . )

24.3.1 を参照してください。

19.3.44 WeakRef ( . . . )

26.1.1 を参照してください。

19.3.45 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 を参照してください。