mirror of
https://github.com/bendtherules/ask262.git
synced 2026-08-18 21:31:46 +00:00
3882 lines
1.1 MiB
Plaintext
3882 lines
1.1 MiB
Plaintext
<!doctype html><html lang="en-GB-oxendict">
|
||
<head><meta name="viewport" content="width=device-width, initial-scale=1"><meta charset="utf-8"><meta property="og:image" content="https://tc39.es/ecmarkup/ecma-logo.png"><meta property="og:title" content="ECMAScript® 2026 Language Specification"><meta property="og:description" content="Introduction
|
||
This Ecma Standard defines the ECMAScript 2026 Language. It is the seventeenth edition of the ECMAScript Language Specification. ECMAScript is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript (Microsoft). The language was invent">
|
||
<link rel="icon" href="../img/favicon.ico">
|
||
<link rel="stylesheet" href="../assets/css/ecmarkup.css"><link rel="stylesheet" href="../assets/css/print.css" media="print">
|
||
|
||
<title>ECMAScript® 2026 Language Specification</title><script src="../assets/js/multipage.js?cache=Wu2V1pj2" defer=""></script><script src="../assets/js/ecmarkup.js?cache=BPFBckdu" defer=""></script><link rel="canonical" href="../#sec-text-processing"></head>
|
||
<body><div id="menu"><div id="menu-search"><input type="text" id="menu-search-box" placeholder="Search..."><div id="menu-search-results" class="inactive"></div></div><div id="menu-pins"><div class="menu-pane-header">Pins<button class="unpin-all">clear</button></div><ul id="menu-pins-list"></ul></div><div class="menu-pane-header">Table of Contents</div><div id="menu-toc"><ol class="toc"><li><span class="item-toggle-none"></span><a href="./#sec-intro" title="Introduction">Introduction</a></li><li><span class="item-toggle-none"></span><a href="scope.html#sec-scope" title="Scope"><span class="secnum">1</span> Scope</a></li><li><span class="item-toggle">+</span><a href="conformance.html#sec-conformance" title="Conformance"><span class="secnum">2</span> Conformance</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-normative-optional" title="Example Normative Optional Clause Heading"><span class="secnum">2.1</span> Example Normative Optional Clause Heading</a></li><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-legacy" title="Example Legacy Clause Heading"><span class="secnum">2.2</span> Example Legacy Clause Heading</a></li><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-legacy-normative-optional" title="Example Legacy Normative Optional Clause Heading"><span class="secnum">2.3</span> Example Legacy Normative Optional Clause Heading</a></li></ol></li><li><span class="item-toggle-none"></span><a href="normative-references.html#sec-normative-references" title="Normative References"><span class="secnum">3</span> Normative References</a></li><li><span class="item-toggle">+</span><a href="overview.html#sec-overview" title="Overview"><span class="secnum">4</span> Overview</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-web-scripting" title="Web Scripting"><span class="secnum">4.1</span> Web Scripting</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-hosts-and-implementations" title="Hosts and Implementations"><span class="secnum">4.2</span> Hosts and Implementations</a></li><li><span class="item-toggle">+</span><a href="overview.html#sec-ecmascript-overview" title="ECMAScript Overview"><span class="secnum">4.3</span> ECMAScript Overview</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-objects" title="Objects"><span class="secnum">4.3.1</span> Objects</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-strict-variant-of-ecmascript" title="The Strict Variant of ECMAScript"><span class="secnum">4.3.2</span> The Strict Variant of ECMAScript</a></li></ol></li><li><span class="item-toggle">+</span><a href="overview.html#sec-terms-and-definitions" title="Terms and Definitions"><span class="secnum">4.4</span> Terms and Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-implementation-approximated" title="implementation-approximated"><span class="secnum">4.4.1</span> implementation-approximated</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-implementation-defined" title="implementation-defined"><span class="secnum">4.4.2</span> implementation-defined</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-host-defined" title="host-defined"><span class="secnum">4.4.3</span> host-defined</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-type" title="type"><span class="secnum">4.4.4</span> type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-primitive-value" title="primitive value"><span class="secnum">4.4.5</span> primitive value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-object" title="object"><span class="secnum">4.4.6</span> object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-constructor" title="constructor"><span class="secnum">4.4.7</span> constructor</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-prototype" title="prototype"><span class="secnum">4.4.8</span> prototype</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-ordinary-object" title="ordinary object"><span class="secnum">4.4.9</span> ordinary object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-exotic-object" title="exotic object"><span class="secnum">4.4.10</span> exotic object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-standard-object" title="standard object"><span class="secnum">4.4.11</span> standard object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-object" title="built-in object"><span class="secnum">4.4.12</span> built-in object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-undefined-value" title="undefined value"><span class="secnum">4.4.13</span> undefined value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-undefined-type" title="Undefined type"><span class="secnum">4.4.14</span> Undefined type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-null-value" title="null value"><span class="secnum">4.4.15</span> null value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-null-type" title="Null type"><span class="secnum">4.4.16</span> Null type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-boolean-value" title="Boolean value"><span class="secnum">4.4.17</span> Boolean value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-boolean-type" title="Boolean type"><span class="secnum">4.4.18</span> Boolean type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-boolean-object" title="Boolean object"><span class="secnum">4.4.19</span> Boolean object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-string-value" title="String value"><span class="secnum">4.4.20</span> String value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-string-type" title="String type"><span class="secnum">4.4.21</span> String type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-string-object" title="String object"><span class="secnum">4.4.22</span> String object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-number-value" title="Number value"><span class="secnum">4.4.23</span> Number value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-number-type" title="Number type"><span class="secnum">4.4.24</span> Number type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-number-object" title="Number object"><span class="secnum">4.4.25</span> Number object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-infinity" title="Infinity"><span class="secnum">4.4.26</span> Infinity</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-nan" title="NaN"><span class="secnum">4.4.27</span> NaN</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-bigint-value" title="BigInt value"><span class="secnum">4.4.28</span> BigInt value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-bigint-type" title="BigInt type"><span class="secnum">4.4.29</span> BigInt type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-bigint-object" title="BigInt object"><span class="secnum">4.4.30</span> BigInt object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-symbol-value" title="Symbol value"><span class="secnum">4.4.31</span> Symbol value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-symbol-type" title="Symbol type"><span class="secnum">4.4.32</span> Symbol type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-symbol-object" title="Symbol object"><span class="secnum">4.4.33</span> Symbol object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-function" title="function"><span class="secnum">4.4.34</span> function</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-function" title="built-in function"><span class="secnum">4.4.35</span> built-in function</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-constructor" title="built-in constructor"><span class="secnum">4.4.36</span> built-in constructor</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-property" title="property"><span class="secnum">4.4.37</span> property</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-method" title="method"><span class="secnum">4.4.38</span> method</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-method" title="built-in method"><span class="secnum">4.4.39</span> built-in method</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-attribute" title="attribute"><span class="secnum">4.4.40</span> attribute</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-own-property" title="own property"><span class="secnum">4.4.41</span> own property</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-inherited-property" title="inherited property"><span class="secnum">4.4.42</span> inherited property</a></li></ol></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-organization-of-this-specification" title="Organization of This Specification"><span class="secnum">4.5</span> Organization of This Specification</a></li></ol></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-notational-conventions" title="Notational Conventions"><span class="secnum">5</span> Notational Conventions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-syntactic-and-lexical-grammars" title="Syntactic and Lexical Grammars"><span class="secnum">5.1</span> Syntactic and Lexical Grammars</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-context-free-grammars" title="Context-Free Grammars"><span class="secnum">5.1.1</span> Context-Free Grammars</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-lexical-and-regexp-grammars" title="The Lexical and RegExp Grammars"><span class="secnum">5.1.2</span> The Lexical and RegExp Grammars</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-numeric-string-grammar" title="The Numeric String Grammar"><span class="secnum">5.1.3</span> The Numeric String Grammar</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-syntactic-grammar" title="The Syntactic Grammar"><span class="secnum">5.1.4</span> The Syntactic Grammar</a></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-grammar-notation" title="Grammar Notation"><span class="secnum">5.1.5</span> Grammar Notation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-terminal-symbols" title="Terminal Symbols"><span class="secnum">5.1.5.1</span> Terminal Symbols</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-nonterminal-symbols-and-productions" title="Nonterminal Symbols and Productions"><span class="secnum">5.1.5.2</span> Nonterminal Symbols and Productions</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-optional-symbols" title="Optional Symbols"><span class="secnum">5.1.5.3</span> Optional Symbols</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-grammatical-parameters" title="Grammatical Parameters"><span class="secnum">5.1.5.4</span> Grammatical Parameters</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-one-of" title="one of"><span class="secnum">5.1.5.5</span> one of</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-empty" title="[empty]"><span class="secnum">5.1.5.6</span> [empty]</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-lookahead-restrictions" title="Lookahead Restrictions"><span class="secnum">5.1.5.7</span> Lookahead Restrictions</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-no-lineterminator-here" title="[no LineTerminator here]"><span class="secnum">5.1.5.8</span> [no <emu-nt>LineTerminator</emu-nt> here]</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-but-not" title="but not"><span class="secnum">5.1.5.9</span> but not</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-descriptive-phrases" title="Descriptive Phrases"><span class="secnum">5.1.5.10</span> Descriptive Phrases</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-algorithm-conventions" title="Algorithm Conventions"><span class="secnum">5.2</span> Algorithm Conventions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-evaluation-order" title="Evaluation Order"><span class="secnum">5.2.1</span> Evaluation Order</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-algorithm-conventions-abstract-operations" title="Abstract Operations"><span class="secnum">5.2.2</span> Abstract Operations</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations" title="Syntax-Directed Operations"><span class="secnum">5.2.3</span> Syntax-Directed Operations</a></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-runtime-semantics" title="Runtime Semantics"><span class="secnum">5.2.4</span> Runtime Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-completion-ao" title="Completion ( completionRecord )"><span class="secnum">5.2.4.1</span> Completion ( <var>completionRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-throw-an-exception" title="Throw an Exception"><span class="secnum">5.2.4.2</span> Throw an Exception</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-shorthands-for-unwrapping-completion-records" title="Shorthands for Unwrapping Completion Records"><span class="secnum">5.2.4.3</span> Shorthands for Unwrapping Completion Records</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-implicit-normal-completion" title="Implicit Normal Completion"><span class="secnum">5.2.4.4</span> Implicit Normal Completion</a></li></ol></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-static-semantic-rules" title="Static Semantics"><span class="secnum">5.2.5</span> Static Semantics</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-mathematical-operations" title="Mathematical Operations"><span class="secnum">5.2.6</span> Mathematical Operations</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-value-notation" title="Value Notation"><span class="secnum">5.2.7</span> Value Notation</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-identity" title="Identity"><span class="secnum">5.2.8</span> Identity</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-data-types-and-values" title="ECMAScript Data Types and Values"><span class="secnum">6</span> ECMAScript Data Types and Values</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types" title="ECMAScript Language Types"><span class="secnum">6.1</span> ECMAScript Language Types</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-undefined-type" title="The Undefined Type"><span class="secnum">6.1.1</span> The Undefined Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-null-type" title="The Null Type"><span class="secnum">6.1.2</span> The Null Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type" title="The Boolean Type"><span class="secnum">6.1.3</span> The Boolean Type</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type" title="The String Type"><span class="secnum">6.1.4</span> The String Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-stringindexof" title="StringIndexOf ( string, searchValue, fromIndex )"><span class="secnum">6.1.4.1</span> StringIndexOf ( <var>string</var>, <var>searchValue</var>, <var>fromIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-stringlastindexof" title="StringLastIndexOf ( string, searchValue, fromIndex )"><span class="secnum">6.1.4.2</span> StringLastIndexOf ( <var>string</var>, <var>searchValue</var>, <var>fromIndex</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type" title="The Symbol Type"><span class="secnum">6.1.5</span> The Symbol Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols" title="Well-Known Symbols"><span class="secnum">6.1.5.1</span> Well-Known Symbols</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-numeric-types" title="Numeric Types"><span class="secnum">6.1.6</span> Numeric Types</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type" title="The Number Type"><span class="secnum">6.1.6.1</span> The Number Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-unaryMinus" title="Number::unaryMinus ( x )"><span class="secnum">6.1.6.1.1</span> Number::unaryMinus ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseNOT" title="Number::bitwiseNOT ( x )"><span class="secnum">6.1.6.1.2</span> Number::bitwiseNOT ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-exponentiate" title="Number::exponentiate ( base, exponent )"><span class="secnum">6.1.6.1.3</span> Number::exponentiate ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-multiply" title="Number::multiply ( x, y )"><span class="secnum">6.1.6.1.4</span> Number::multiply ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-divide" title="Number::divide ( x, y )"><span class="secnum">6.1.6.1.5</span> Number::divide ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-remainder" title="Number::remainder ( n, d )"><span class="secnum">6.1.6.1.6</span> Number::remainder ( <var>n</var>, <var>d</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-add" title="Number::add ( x, y )"><span class="secnum">6.1.6.1.7</span> Number::add ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-subtract" title="Number::subtract ( x, y )"><span class="secnum">6.1.6.1.8</span> Number::subtract ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-leftShift" title="Number::leftShift ( x, y )"><span class="secnum">6.1.6.1.9</span> Number::leftShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-signedRightShift" title="Number::signedRightShift ( x, y )"><span class="secnum">6.1.6.1.10</span> Number::signedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-unsignedRightShift" title="Number::unsignedRightShift ( x, y )"><span class="secnum">6.1.6.1.11</span> Number::unsignedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-lessThan" title="Number::lessThan ( x, y )"><span class="secnum">6.1.6.1.12</span> Number::lessThan ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-equal" title="Number::equal ( x, y )"><span class="secnum">6.1.6.1.13</span> Number::equal ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-sameValue" title="Number::sameValue ( x, y )"><span class="secnum">6.1.6.1.14</span> Number::sameValue ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-sameValueZero" title="Number::sameValueZero ( x, y )"><span class="secnum">6.1.6.1.15</span> Number::sameValueZero ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numberbitwiseop" title="NumberBitwiseOp ( op, x, y )"><span class="secnum">6.1.6.1.16</span> NumberBitwiseOp ( <var>op</var>, <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseAND" title="Number::bitwiseAND ( x, y )"><span class="secnum">6.1.6.1.17</span> Number::bitwiseAND ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseXOR" title="Number::bitwiseXOR ( x, y )"><span class="secnum">6.1.6.1.18</span> Number::bitwiseXOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseOR" title="Number::bitwiseOR ( x, y )"><span class="secnum">6.1.6.1.19</span> Number::bitwiseOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-tostring" title="Number::toString ( x, radix )"><span class="secnum">6.1.6.1.20</span> Number::toString ( <var>x</var>, <var>radix</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type" title="The BigInt Type"><span class="secnum">6.1.6.2</span> The BigInt Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-unaryMinus" title="BigInt::unaryMinus ( x )"><span class="secnum">6.1.6.2.1</span> BigInt::unaryMinus ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseNOT" title="BigInt::bitwiseNOT ( x )"><span class="secnum">6.1.6.2.2</span> BigInt::bitwiseNOT ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-exponentiate" title="BigInt::exponentiate ( base, exponent )"><span class="secnum">6.1.6.2.3</span> BigInt::exponentiate ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-multiply" title="BigInt::multiply ( x, y )"><span class="secnum">6.1.6.2.4</span> BigInt::multiply ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-divide" title="BigInt::divide ( x, y )"><span class="secnum">6.1.6.2.5</span> BigInt::divide ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-remainder" title="BigInt::remainder ( n, d )"><span class="secnum">6.1.6.2.6</span> BigInt::remainder ( <var>n</var>, <var>d</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-add" title="BigInt::add ( x, y )"><span class="secnum">6.1.6.2.7</span> BigInt::add ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-subtract" title="BigInt::subtract ( x, y )"><span class="secnum">6.1.6.2.8</span> BigInt::subtract ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-leftShift" title="BigInt::leftShift ( x, y )"><span class="secnum">6.1.6.2.9</span> BigInt::leftShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-signedRightShift" title="BigInt::signedRightShift ( x, y )"><span class="secnum">6.1.6.2.10</span> BigInt::signedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-unsignedRightShift" title="BigInt::unsignedRightShift ( x, y )"><span class="secnum">6.1.6.2.11</span> BigInt::unsignedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-lessThan" title="BigInt::lessThan ( x, y )"><span class="secnum">6.1.6.2.12</span> BigInt::lessThan ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-equal" title="BigInt::equal ( x, y )"><span class="secnum">6.1.6.2.13</span> BigInt::equal ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryand" title="BinaryAnd ( x, y )"><span class="secnum">6.1.6.2.14</span> BinaryAnd ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryor" title="BinaryOr ( x, y )"><span class="secnum">6.1.6.2.15</span> BinaryOr ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryxor" title="BinaryXor ( x, y )"><span class="secnum">6.1.6.2.16</span> BinaryXor ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-bigintbitwiseop" title="BigIntBitwiseOp ( op, x, y )"><span class="secnum">6.1.6.2.17</span> BigIntBitwiseOp ( <var>op</var>, <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseAND" title="BigInt::bitwiseAND ( x, y )"><span class="secnum">6.1.6.2.18</span> BigInt::bitwiseAND ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseXOR" title="BigInt::bitwiseXOR ( x, y )"><span class="secnum">6.1.6.2.19</span> BigInt::bitwiseXOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseOR" title="BigInt::bitwiseOR ( x, y )"><span class="secnum">6.1.6.2.20</span> BigInt::bitwiseOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-tostring" title="BigInt::toString ( x, radix )"><span class="secnum">6.1.6.2.21</span> BigInt::toString ( <var>x</var>, <var>radix</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-object-type" title="The Object Type"><span class="secnum">6.1.7</span> The Object Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-property-attributes" title="Property Attributes"><span class="secnum">6.1.7.1</span> Property Attributes</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-object-internal-methods-and-internal-slots" title="Object Internal Methods and Internal Slots"><span class="secnum">6.1.7.2</span> Object Internal Methods and Internal Slots</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-invariants-of-the-essential-internal-methods" title="Invariants of the Essential Internal Methods"><span class="secnum">6.1.7.3</span> Invariants of the Essential Internal Methods</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-well-known-intrinsic-objects" title="Well-Known Intrinsic Objects"><span class="secnum">6.1.7.4</span> Well-Known Intrinsic Objects</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-specification-types" title="ECMAScript Specification Types"><span class="secnum">6.2</span> ECMAScript Specification Types</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-enum-specification-type" title="The Enum Specification Type"><span class="secnum">6.2.1</span> The Enum Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type" title="The List and Record Specification Types"><span class="secnum">6.2.2</span> The List and Record Specification Types</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-set-and-relation-specification-type" title="The Set and Relation Specification Types"><span class="secnum">6.2.3</span> The Set and Relation Specification Types</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type" title="The Completion Record Specification Type"><span class="secnum">6.2.4</span> The Completion Record Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-normalcompletion" title="NormalCompletion ( value )"><span class="secnum">6.2.4.1</span> NormalCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-throwcompletion" title="ThrowCompletion ( value )"><span class="secnum">6.2.4.2</span> ThrowCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-returncompletion" title="ReturnCompletion ( value )"><span class="secnum">6.2.4.3</span> ReturnCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-updateempty" title="UpdateEmpty ( completionRecord, value )"><span class="secnum">6.2.4.4</span> UpdateEmpty ( <var>completionRecord</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type" title="The Reference Record Specification Type"><span class="secnum">6.2.5</span> The Reference Record Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ispropertyreference" title="IsPropertyReference ( V )"><span class="secnum">6.2.5.1</span> IsPropertyReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isunresolvablereference" title="IsUnresolvableReference ( V )"><span class="secnum">6.2.5.2</span> IsUnresolvableReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-issuperreference" title="IsSuperReference ( V )"><span class="secnum">6.2.5.3</span> IsSuperReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isprivatereference" title="IsPrivateReference ( V )"><span class="secnum">6.2.5.4</span> IsPrivateReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-getvalue" title="GetValue ( V )"><span class="secnum">6.2.5.5</span> GetValue ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-putvalue" title="PutValue ( V, W )"><span class="secnum">6.2.5.6</span> PutValue ( <var>V</var>, <var>W</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-getthisvalue" title="GetThisValue ( V )"><span class="secnum">6.2.5.7</span> GetThisValue ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-initializereferencedbinding" title="InitializeReferencedBinding ( V, W )"><span class="secnum">6.2.5.8</span> InitializeReferencedBinding ( <var>V</var>, <var>W</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-makeprivatereference" title="MakePrivateReference ( baseValue, privateIdentifier )"><span class="secnum">6.2.5.9</span> MakePrivateReference ( <var>baseValue</var>, <var>privateIdentifier</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type" title="The Property Descriptor Specification Type"><span class="secnum">6.2.6</span> The Property Descriptor Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor" title="IsAccessorDescriptor ( Desc )"><span class="secnum">6.2.6.1</span> IsAccessorDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor" title="IsDataDescriptor ( Desc )"><span class="secnum">6.2.6.2</span> IsDataDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isgenericdescriptor" title="IsGenericDescriptor ( Desc )"><span class="secnum">6.2.6.3</span> IsGenericDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-frompropertydescriptor" title="FromPropertyDescriptor ( Desc )"><span class="secnum">6.2.6.4</span> FromPropertyDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-topropertydescriptor" title="ToPropertyDescriptor ( Obj )"><span class="secnum">6.2.6.5</span> ToPropertyDescriptor ( <var>Obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-completepropertydescriptor" title="CompletePropertyDescriptor ( Desc )"><span class="secnum">6.2.6.6</span> CompletePropertyDescriptor ( <var>Desc</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-lexical-environment-and-environment-record-specification-types" title="The Environment Record Specification Type"><span class="secnum">6.2.7</span> The Environment Record Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-abstract-closure" title="The Abstract Closure Specification Type"><span class="secnum">6.2.8</span> The Abstract Closure Specification Type</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-data-blocks" title="Data Blocks"><span class="secnum">6.2.9</span> Data Blocks</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-createbytedatablock" title="CreateByteDataBlock ( size )"><span class="secnum">6.2.9.1</span> CreateByteDataBlock ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-createsharedbytedatablock" title="CreateSharedByteDataBlock ( size )"><span class="secnum">6.2.9.2</span> CreateSharedByteDataBlock ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-copydatablockbytes" title="CopyDataBlockBytes ( toBlock, toIndex, fromBlock, fromIndex, count )"><span class="secnum">6.2.9.3</span> CopyDataBlockBytes ( <var>toBlock</var>, <var>toIndex</var>, <var>fromBlock</var>, <var>fromIndex</var>, <var>count</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type" title="The PrivateElement Specification Type"><span class="secnum">6.2.10</span> The PrivateElement Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type" title="The ClassFieldDefinition Record Specification Type"><span class="secnum">6.2.11</span> The ClassFieldDefinition Record Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-private-names" title="Private Names"><span class="secnum">6.2.12</span> Private Names</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-classstaticblockdefinition-record-specification-type" title="The ClassStaticBlockDefinition Record Specification Type"><span class="secnum">6.2.13</span> The ClassStaticBlockDefinition Record Specification Type</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-abstract-operations" title="Abstract Operations"><span class="secnum">7</span> Abstract Operations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-type-conversion" title="Type Conversion"><span class="secnum">7.1</span> Type Conversion</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-toprimitive" title="ToPrimitive ( input [ , preferredType ] )"><span class="secnum">7.1.1</span> ToPrimitive ( <var>input</var> [ , <var>preferredType</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ordinarytoprimitive" title="OrdinaryToPrimitive ( O, hint )"><span class="secnum">7.1.1.1</span> OrdinaryToPrimitive ( <var>O</var>, <var>hint</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toboolean" title="ToBoolean ( argument )"><span class="secnum">7.1.2</span> ToBoolean ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tonumeric" title="ToNumeric ( value )"><span class="secnum">7.1.3</span> ToNumeric ( <var>value</var> )</a></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-tonumber" title="ToNumber ( argument )"><span class="secnum">7.1.4</span> ToNumber ( <var>argument</var> )</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-tonumber-applied-to-the-string-type" title="ToNumber Applied to the String Type"><span class="secnum">7.1.4.1</span> ToNumber Applied to the String Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-stringtonumber" title="StringToNumber ( str )"><span class="secnum">7.1.4.1.1</span> StringToNumber ( <var>str</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-runtime-semantics-stringnumericvalue" title="Runtime Semantics: StringNumericValue"><span class="secnum">7.1.4.1.2</span> RS: StringNumericValue</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-roundmvresult" title="RoundMVResult ( n )"><span class="secnum">7.1.4.1.3</span> RoundMVResult ( <var>n</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tointegerorinfinity" title="ToIntegerOrInfinity ( argument )"><span class="secnum">7.1.5</span> ToIntegerOrInfinity ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint32" title="ToInt32 ( argument )"><span class="secnum">7.1.6</span> ToInt32 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint32" title="ToUint32 ( argument )"><span class="secnum">7.1.7</span> ToUint32 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint16" title="ToInt16 ( argument )"><span class="secnum">7.1.8</span> ToInt16 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint16" title="ToUint16 ( argument )"><span class="secnum">7.1.9</span> ToUint16 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint8" title="ToInt8 ( argument )"><span class="secnum">7.1.10</span> ToInt8 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint8" title="ToUint8 ( argument )"><span class="secnum">7.1.11</span> ToUint8 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint8clamp" title="ToUint8Clamp ( argument )"><span class="secnum">7.1.12</span> ToUint8Clamp ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobigint" title="ToBigInt ( argument )"><span class="secnum">7.1.13</span> ToBigInt ( <var>argument</var> )</a></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-stringtobigint" title="StringToBigInt ( str )"><span class="secnum">7.1.14</span> StringToBigInt ( <var>str</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-stringintegerliteral-grammar" title="StringIntegerLiteral Grammar"><span class="secnum">7.1.14.1</span> StringIntegerLiteral Grammar</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-runtime-semantics-mv-for-stringintegerliteral" title="Runtime Semantics: MV"><span class="secnum">7.1.14.2</span> RS: MV</a></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobigint64" title="ToBigInt64 ( argument )"><span class="secnum">7.1.15</span> ToBigInt64 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobiguint64" title="ToBigUint64 ( argument )"><span class="secnum">7.1.16</span> ToBigUint64 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tostring" title="ToString ( argument )"><span class="secnum">7.1.17</span> ToString ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toobject" title="ToObject ( argument )"><span class="secnum">7.1.18</span> ToObject ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-topropertykey" title="ToPropertyKey ( argument )"><span class="secnum">7.1.19</span> ToPropertyKey ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tolength" title="ToLength ( argument )"><span class="secnum">7.1.20</span> ToLength ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-canonicalnumericindexstring" title="CanonicalNumericIndexString ( argument )"><span class="secnum">7.1.21</span> CanonicalNumericIndexString ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toindex" title="ToIndex ( value )"><span class="secnum">7.1.22</span> ToIndex ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-testing-and-comparison-operations" title="Testing and Comparison Operations"><span class="secnum">7.2</span> Testing and Comparison Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-requireobjectcoercible" title="RequireObjectCoercible ( argument )"><span class="secnum">7.2.1</span> RequireObjectCoercible ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isarray" title="IsArray ( argument )"><span class="secnum">7.2.2</span> IsArray ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iscallable" title="IsCallable ( argument )"><span class="secnum">7.2.3</span> IsCallable ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isconstructor" title="IsConstructor ( argument )"><span class="secnum">7.2.4</span> IsConstructor ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isextensible-o" title="IsExtensible ( O )"><span class="secnum">7.2.5</span> IsExtensible ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isregexp" title="IsRegExp ( argument )"><span class="secnum">7.2.6</span> IsRegExp ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isstringwellformedunicode" title="Static Semantics: IsStringWellFormedUnicode ( string )"><span class="secnum">7.2.7</span> SS: IsStringWellFormedUnicode ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-sametype" title="SameType ( x, y )"><span class="secnum">7.2.8</span> SameType ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevalue" title="SameValue ( x, y )"><span class="secnum">7.2.9</span> SameValue ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevaluezero" title="SameValueZero ( x, y )"><span class="secnum">7.2.10</span> SameValueZero ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevaluenonnumber" title="SameValueNonNumber ( x, y )"><span class="secnum">7.2.11</span> SameValueNonNumber ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-islessthan" title="IsLessThan ( x, y, LeftFirst )"><span class="secnum">7.2.12</span> IsLessThan ( <var>x</var>, <var>y</var>, <var>LeftFirst</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-islooselyequal" title="IsLooselyEqual ( x, y )"><span class="secnum">7.2.13</span> IsLooselyEqual ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isstrictlyequal" title="IsStrictlyEqual ( x, y )"><span class="secnum">7.2.14</span> IsStrictlyEqual ( <var>x</var>, <var>y</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-operations-on-objects" title="Operations on Objects"><span class="secnum">7.3</span> Operations on Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-makebasicobject" title="MakeBasicObject ( internalSlotsList )"><span class="secnum">7.3.1</span> MakeBasicObject ( <var>internalSlotsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-get-o-p" title="Get ( O, P )"><span class="secnum">7.3.2</span> Get ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getv" title="GetV ( V, P )"><span class="secnum">7.3.3</span> GetV ( <var>V</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-set-o-p-v-throw" title="Set ( O, P, V, Throw )"><span class="secnum">7.3.4</span> Set ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Throw</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createdataproperty" title="CreateDataProperty ( O, P, V )"><span class="secnum">7.3.5</span> CreateDataProperty ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createdatapropertyorthrow" title="CreateDataPropertyOrThrow ( O, P, V )"><span class="secnum">7.3.6</span> CreateDataPropertyOrThrow ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createnonenumerabledatapropertyorthrow" title="CreateNonEnumerableDataPropertyOrThrow ( O, P, V )"><span class="secnum">7.3.7</span> CreateNonEnumerableDataPropertyOrThrow ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-definepropertyorthrow" title="DefinePropertyOrThrow ( O, P, desc )"><span class="secnum">7.3.8</span> DefinePropertyOrThrow ( <var>O</var>, <var>P</var>, <var>desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-deletepropertyorthrow" title="DeletePropertyOrThrow ( O, P )"><span class="secnum">7.3.9</span> DeletePropertyOrThrow ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getmethod" title="GetMethod ( V, P )"><span class="secnum">7.3.10</span> GetMethod ( <var>V</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hasproperty" title="HasProperty ( O, P )"><span class="secnum">7.3.11</span> HasProperty ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hasownproperty" title="HasOwnProperty ( O, P )"><span class="secnum">7.3.12</span> HasOwnProperty ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-call" title="Call ( F, V [ , argumentsList ] )"><span class="secnum">7.3.13</span> Call ( <var>F</var>, <var>V</var> [ , <var>argumentsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-construct" title="Construct ( F [ , argumentsList [ , newTarget ] ] )"><span class="secnum">7.3.14</span> Construct ( <var>F</var> [ , <var>argumentsList</var> [ , <var>newTarget</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-setintegritylevel" title="SetIntegrityLevel ( O, level )"><span class="secnum">7.3.15</span> SetIntegrityLevel ( <var>O</var>, <var>level</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-testintegritylevel" title="TestIntegrityLevel ( O, level )"><span class="secnum">7.3.16</span> TestIntegrityLevel ( <var>O</var>, <var>level</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createarrayfromlist" title="CreateArrayFromList ( elements )"><span class="secnum">7.3.17</span> CreateArrayFromList ( <var>elements</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-lengthofarraylike" title="LengthOfArrayLike ( obj )"><span class="secnum">7.3.18</span> LengthOfArrayLike ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createlistfromarraylike" title="CreateListFromArrayLike ( obj [ , validElementTypes ] )"><span class="secnum">7.3.19</span> CreateListFromArrayLike ( <var>obj</var> [ , <var>validElementTypes</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-invoke" title="Invoke ( V, P [ , argumentsList ] )"><span class="secnum">7.3.20</span> Invoke ( <var>V</var>, <var>P</var> [ , <var>argumentsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ordinaryhasinstance" title="OrdinaryHasInstance ( C, O )"><span class="secnum">7.3.21</span> OrdinaryHasInstance ( <var>C</var>, <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-speciesconstructor" title="SpeciesConstructor ( O, defaultConstructor )"><span class="secnum">7.3.22</span> SpeciesConstructor ( <var>O</var>, <var>defaultConstructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-enumerableownproperties" title="EnumerableOwnProperties ( O, kind )"><span class="secnum">7.3.23</span> EnumerableOwnProperties ( <var>O</var>, <var>kind</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getfunctionrealm" title="GetFunctionRealm ( obj )"><span class="secnum">7.3.24</span> GetFunctionRealm ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-copydataproperties" title="CopyDataProperties ( target, source, excludedItems )"><span class="secnum">7.3.25</span> CopyDataProperties ( <var>target</var>, <var>source</var>, <var>excludedItems</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateelementfind" title="PrivateElementFind ( O, P )"><span class="secnum">7.3.26</span> PrivateElementFind ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privatefieldadd" title="PrivateFieldAdd ( O, P, value )"><span class="secnum">7.3.27</span> PrivateFieldAdd ( <var>O</var>, <var>P</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privatemethodoraccessoradd" title="PrivateMethodOrAccessorAdd ( O, method )"><span class="secnum">7.3.28</span> PrivateMethodOrAccessorAdd ( <var>O</var>, <var>method</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hostensurecanaddprivateelement" title="HostEnsureCanAddPrivateElement ( O )"><span class="secnum">7.3.29</span> HostEnsureCanAddPrivateElement ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateget" title="PrivateGet ( O, P )"><span class="secnum">7.3.30</span> PrivateGet ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateset" title="PrivateSet ( O, P, value )"><span class="secnum">7.3.31</span> PrivateSet ( <var>O</var>, <var>P</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-definefield" title="DefineField ( receiver, fieldRecord )"><span class="secnum">7.3.32</span> DefineField ( <var>receiver</var>, <var>fieldRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-initializeinstanceelements" title="InitializeInstanceElements ( O, constructor )"><span class="secnum">7.3.33</span> InitializeInstanceElements ( <var>O</var>, <var>constructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-add-value-to-keyed-group" title="AddValueToKeyedGroup ( groups, key, value )"><span class="secnum">7.3.34</span> AddValueToKeyedGroup ( <var>groups</var>, <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-groupby" title="GroupBy ( items, callback, keyCoercion )"><span class="secnum">7.3.35</span> GroupBy ( <var>items</var>, <var>callback</var>, <var>keyCoercion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getoptionsobject" title="GetOptionsObject ( options )"><span class="secnum">7.3.36</span> GetOptionsObject ( <var>options</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-SetterThatIgnoresPrototypeProperties" title="SetterThatIgnoresPrototypeProperties ( thisValue, home, p, v )"><span class="secnum">7.3.37</span> SetterThatIgnoresPrototypeProperties ( <var>thisValue</var>, <var>home</var>, <var>p</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-operations-on-iterator-objects" title="Operations on Iterator Objects"><span class="secnum">7.4</span> Operations on Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iterator-records" title="Iterator Records"><span class="secnum">7.4.1</span> Iterator Records</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratordirect" title="GetIteratorDirect ( obj )"><span class="secnum">7.4.2</span> GetIteratorDirect ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratorfrommethod" title="GetIteratorFromMethod ( obj, method )"><span class="secnum">7.4.3</span> GetIteratorFromMethod ( <var>obj</var>, <var>method</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiterator" title="GetIterator ( obj, kind )"><span class="secnum">7.4.4</span> GetIterator ( <var>obj</var>, <var>kind</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratorflattenable" title="GetIteratorFlattenable ( obj, primitiveHandling )"><span class="secnum">7.4.5</span> GetIteratorFlattenable ( <var>obj</var>, <var>primitiveHandling</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratornext" title="IteratorNext ( iteratorRecord [ , value ] )"><span class="secnum">7.4.6</span> IteratorNext ( <var>iteratorRecord</var> [ , <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorcomplete" title="IteratorComplete ( iteratorResult )"><span class="secnum">7.4.7</span> IteratorComplete ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorvalue" title="IteratorValue ( iteratorResult )"><span class="secnum">7.4.8</span> IteratorValue ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorstep" title="IteratorStep ( iteratorRecord )"><span class="secnum">7.4.9</span> IteratorStep ( <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorstepvalue" title="IteratorStepValue ( iteratorRecord )"><span class="secnum">7.4.10</span> IteratorStepValue ( <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorclose" title="IteratorClose ( iteratorRecord, completion )"><span class="secnum">7.4.11</span> IteratorClose ( <var>iteratorRecord</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorcloseall" title="IteratorCloseAll ( iters, completion )"><span class="secnum">7.4.12</span> IteratorCloseAll ( <var>iters</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ifabruptcloseiterator" title="IfAbruptCloseIterator ( value, iteratorRecord )"><span class="secnum">7.4.13</span> IfAbruptCloseIterator ( <var>value</var>, <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-asynciteratorclose" title="AsyncIteratorClose ( iteratorRecord, completion )"><span class="secnum">7.4.14</span> AsyncIteratorClose ( <var>iteratorRecord</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ifabruptcloseasynciterator" title="IfAbruptCloseAsyncIterator ( value, iteratorRecord )"><span class="secnum">7.4.15</span> IfAbruptCloseAsyncIterator ( <var>value</var>, <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createiterresultobject" title="CreateIteratorResultObject ( value, done )"><span class="secnum">7.4.16</span> CreateIteratorResultObject ( <var>value</var>, <var>done</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createlistiteratorRecord" title="CreateListIteratorRecord ( list )"><span class="secnum">7.4.17</span> CreateListIteratorRecord ( <var>list</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratortolist" title="IteratorToList ( iteratorRecord )"><span class="secnum">7.4.18</span> IteratorToList ( <var>iteratorRecord</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations" title="Syntax-Directed Operations"><span class="secnum">8</span> Syntax-Directed Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">8.1</span> RS: Evaluation</a></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-scope-analysis" title="Scope Analysis"><span class="secnum">8.2</span> Scope Analysis</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-boundnames" title="Static Semantics: BoundNames"><span class="secnum">8.2.1</span> SS: BoundNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-declarationpart" title="Static Semantics: DeclarationPart"><span class="secnum">8.2.2</span> SS: DeclarationPart</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isconstantdeclaration" title="Static Semantics: IsConstantDeclaration"><span class="secnum">8.2.3</span> SS: IsConstantDeclaration</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames" title="Static Semantics: LexicallyDeclaredNames"><span class="secnum">8.2.4</span> SS: LexicallyDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-lexicallyscopeddeclarations" title="Static Semantics: LexicallyScopedDeclarations"><span class="secnum">8.2.5</span> SS: LexicallyScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames" title="Static Semantics: VarDeclaredNames"><span class="secnum">8.2.6</span> SS: VarDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-varscopeddeclarations" title="Static Semantics: VarScopedDeclarations"><span class="secnum">8.2.7</span> SS: VarScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevellexicallydeclarednames" title="Static Semantics: TopLevelLexicallyDeclaredNames"><span class="secnum">8.2.8</span> SS: TopLevelLexicallyDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevellexicallyscopeddeclarations" title="Static Semantics: TopLevelLexicallyScopedDeclarations"><span class="secnum">8.2.9</span> SS: TopLevelLexicallyScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevelvardeclarednames" title="Static Semantics: TopLevelVarDeclaredNames"><span class="secnum">8.2.10</span> SS: TopLevelVarDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevelvarscopeddeclarations" title="Static Semantics: TopLevelVarScopedDeclarations"><span class="secnum">8.2.11</span> SS: TopLevelVarScopedDeclarations</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-labels" title="Labels"><span class="secnum">8.3</span> Labels</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsduplicatelabels" title="Static Semantics: ContainsDuplicateLabels"><span class="secnum">8.3.1</span> SS: ContainsDuplicateLabels</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedbreaktarget" title="Static Semantics: ContainsUndefinedBreakTarget"><span class="secnum">8.3.2</span> SS: ContainsUndefinedBreakTarget</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedcontinuetarget" title="Static Semantics: ContainsUndefinedContinueTarget"><span class="secnum">8.3.3</span> SS: ContainsUndefinedContinueTarget</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-function-name-inference" title="Function Name Inference"><span class="secnum">8.4</span> Function Name Inference</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-hasname" title="Static Semantics: HasName"><span class="secnum">8.4.1</span> SS: HasName</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isfunctiondefinition" title="Static Semantics: IsFunctionDefinition"><span class="secnum">8.4.2</span> SS: IsFunctionDefinition</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition" title="Static Semantics: IsAnonymousFunctionDefinition ( expr )"><span class="secnum">8.4.3</span> SS: IsAnonymousFunctionDefinition ( <var>expr</var> )</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref" title="Static Semantics: IsIdentifierRef"><span class="secnum">8.4.4</span> SS: IsIdentifierRef</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" title="Runtime Semantics: NamedEvaluation"><span class="secnum">8.4.5</span> RS: NamedEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-contains" title="Contains"><span class="secnum">8.5</span> Contains</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-contains" title="Static Semantics: Contains"><span class="secnum">8.5.1</span> SS: Contains</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-computedpropertycontains" title="Static Semantics: ComputedPropertyContains"><span class="secnum">8.5.2</span> SS: ComputedPropertyContains</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-miscellaneous" title="Miscellaneous"><span class="secnum">8.6</span> Miscellaneous</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-instantiatefunctionobject" title="Runtime Semantics: InstantiateFunctionObject"><span class="secnum">8.6.1</span> RS: InstantiateFunctionObject</a></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-runtime-semantics-bindinginitialization" title="Runtime Semantics: BindingInitialization"><span class="secnum">8.6.2</span> RS: BindingInitialization</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-initializeboundname" title="InitializeBoundName ( name, value, environment )"><span class="secnum">8.6.2.1</span> InitializeBoundName ( <var>name</var>, <var>value</var>, <var>environment</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-iteratorbindinginitialization" title="Runtime Semantics: IteratorBindingInitialization"><span class="secnum">8.6.3</span> RS: IteratorBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype" title="Static Semantics: AssignmentTargetType"><span class="secnum">8.6.4</span> SS: AssignmentTargetType</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-propname" title="Static Semantics: PropName"><span class="secnum">8.6.5</span> SS: PropName</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-executable-code-and-execution-contexts" title="Executable Code and Execution Contexts"><span class="secnum">9</span> Executable Code and Execution Contexts</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-environment-records" title="Environment Records"><span class="secnum">9.1</span> Environment Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-the-environment-record-type-hierarchy" title="The Environment Record Type Hierarchy"><span class="secnum">9.1.1</span> The Environment Record Type Hierarchy</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records" title="Declarative Environment Records"><span class="secnum">9.1.1.1</span> Declarative Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.1.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.1.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.1.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.1.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.1.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.1.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.1.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.1.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.1.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.1.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.1.11</span> WithBaseObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records" title="Object Environment Records"><span class="secnum">9.1.1.2</span> Object Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.2.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.2.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.2.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.2.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.2.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.2.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.2.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.2.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.2.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.2.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.2.11</span> WithBaseObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records" title="Function Environment Records"><span class="secnum">9.1.1.3</span> Function Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-bindthisvalue" title="BindThisValue ( envRec, V )"><span class="secnum">9.1.1.3.1</span> BindThisValue ( <var>envRec</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.3.2</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.3.3</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.3.4</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getsuperbase" title="GetSuperBase ( envRec )"><span class="secnum">9.1.1.3.5</span> GetSuperBase ( <var>envRec</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records" title="Global Environment Records"><span class="secnum">9.1.1.4</span> Global Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.4.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.4.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.4.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.4.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.4.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.4.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.4.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.4.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.4.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.4.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.4.11</span> WithBaseObject ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-haslexicaldeclaration" title="HasLexicalDeclaration ( envRec, N )"><span class="secnum">9.1.1.4.12</span> HasLexicalDeclaration ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hasrestrictedglobalproperty" title="HasRestrictedGlobalProperty ( envRec, N )"><span class="secnum">9.1.1.4.13</span> HasRestrictedGlobalProperty ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalvar" title="CanDeclareGlobalVar ( envRec, N )"><span class="secnum">9.1.1.4.14</span> CanDeclareGlobalVar ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalfunction" title="CanDeclareGlobalFunction ( envRec, N )"><span class="secnum">9.1.1.4.15</span> CanDeclareGlobalFunction ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createglobalvarbinding" title="CreateGlobalVarBinding ( envRec, N, D )"><span class="secnum">9.1.1.4.16</span> CreateGlobalVarBinding ( <var>envRec</var>, <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createglobalfunctionbinding" title="CreateGlobalFunctionBinding ( envRec, N, V, D )"><span class="secnum">9.1.1.4.17</span> CreateGlobalFunctionBinding ( <var>envRec</var>, <var>N</var>, <var>V</var>, <var>D</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records" title="Module Environment Records"><span class="secnum">9.1.1.5</span> Module Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.5.1</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.5.2</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.5.3</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.5.4</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createimportbinding" title="CreateImportBinding ( envRec, N, M, N2 )"><span class="secnum">9.1.1.5.5</span> CreateImportBinding ( <var>envRec</var>, <var>N</var>, <var>M</var>, <var>N2</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-environment-record-operations" title="Environment Record Operations"><span class="secnum">9.1.2</span> Environment Record Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getidentifierreference" title="GetIdentifierReference ( env, name, strict )"><span class="secnum">9.1.2.1</span> GetIdentifierReference ( <var>env</var>, <var>name</var>, <var>strict</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment" title="NewDeclarativeEnvironment ( E )"><span class="secnum">9.1.2.2</span> NewDeclarativeEnvironment ( <var>E</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newobjectenvironment" title="NewObjectEnvironment ( O, W, E )"><span class="secnum">9.1.2.3</span> NewObjectEnvironment ( <var>O</var>, <var>W</var>, <var>E</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newfunctionenvironment" title="NewFunctionEnvironment ( F, newTarget )"><span class="secnum">9.1.2.4</span> NewFunctionEnvironment ( <var>F</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newglobalenvironment" title="NewGlobalEnvironment ( G, thisValue )"><span class="secnum">9.1.2.5</span> NewGlobalEnvironment ( <var>G</var>, <var>thisValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newmoduleenvironment" title="NewModuleEnvironment ( E )"><span class="secnum">9.1.2.6</span> NewModuleEnvironment ( <var>E</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-privateenvironment-records" title="PrivateEnvironment Records"><span class="secnum">9.2</span> PrivateEnvironment Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-privateenvironment-record-operations" title="PrivateEnvironment Record Operations"><span class="secnum">9.2.1</span> PrivateEnvironment Record Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newprivateenvironment" title="NewPrivateEnvironment ( outerPrivateEnv )"><span class="secnum">9.2.1.1</span> NewPrivateEnvironment ( <var>outerPrivateEnv</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolve-private-identifier" title="ResolvePrivateIdentifier ( privateEnv, identifier )"><span class="secnum">9.2.1.2</span> ResolvePrivateIdentifier ( <var>privateEnv</var>, <var>identifier</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-code-realms" title="Realms"><span class="secnum">9.3</span> Realms</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-initializehostdefinedrealm" title="InitializeHostDefinedRealm ( )"><span class="secnum">9.3.1</span> InitializeHostDefinedRealm ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createintrinsics" title="CreateIntrinsics ( realmRec )"><span class="secnum">9.3.2</span> CreateIntrinsics ( <var>realmRec</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-setdefaultglobalbindings" title="SetDefaultGlobalBindings ( realmRec )"><span class="secnum">9.3.3</span> SetDefaultGlobalBindings ( <var>realmRec</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-execution-contexts" title="Execution Contexts"><span class="secnum">9.4</span> Execution Contexts</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getactivescriptormodule" title="GetActiveScriptOrModule ( )"><span class="secnum">9.4.1</span> GetActiveScriptOrModule ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolvebinding" title="ResolveBinding ( name [ , env ] )"><span class="secnum">9.4.2</span> ResolveBinding ( <var>name</var> [ , <var>env</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getthisenvironment" title="GetThisEnvironment ( )"><span class="secnum">9.4.3</span> GetThisEnvironment ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolvethisbinding" title="ResolveThisBinding ( )"><span class="secnum">9.4.4</span> ResolveThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getnewtarget" title="GetNewTarget ( )"><span class="secnum">9.4.5</span> GetNewTarget ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getglobalobject" title="GetGlobalObject ( )"><span class="secnum">9.4.6</span> GetGlobalObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-jobs" title="Jobs and Host Operations to Enqueue Jobs"><span class="secnum">9.5</span> Jobs and Host Operations to Enqueue Jobs</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-jobcallback-records" title="JobCallback Records"><span class="secnum">9.5.1</span> JobCallback Records</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostmakejobcallback" title="HostMakeJobCallback ( callback )"><span class="secnum">9.5.2</span> HostMakeJobCallback ( <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostcalljobcallback" title="HostCallJobCallback ( jobCallback, V, argumentsList )"><span class="secnum">9.5.3</span> HostCallJobCallback ( <var>jobCallback</var>, <var>V</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuegenericjob" title="HostEnqueueGenericJob ( job, realm )"><span class="secnum">9.5.4</span> HostEnqueueGenericJob ( <var>job</var>, <var>realm</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuepromisejob" title="HostEnqueuePromiseJob ( job, realm )"><span class="secnum">9.5.5</span> HostEnqueuePromiseJob ( <var>job</var>, <var>realm</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuetimeoutjob" title="HostEnqueueTimeoutJob ( timeoutJob, realm, milliseconds )"><span class="secnum">9.5.6</span> HostEnqueueTimeoutJob ( <var>timeoutJob</var>, <var>realm</var>, <var>milliseconds</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-agents" title="Agents"><span class="secnum">9.6</span> Agents</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agentsignifier" title="AgentSignifier ( )"><span class="secnum">9.6.1</span> AgentSignifier ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agentcansuspend" title="AgentCanSuspend ( )"><span class="secnum">9.6.2</span> AgentCanSuspend ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-IncrementModuleAsyncEvaluationCount" title="IncrementModuleAsyncEvaluationCount ( )"><span class="secnum">9.6.3</span> IncrementModuleAsyncEvaluationCount ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agent-clusters" title="Agent Clusters"><span class="secnum">9.7</span> Agent Clusters</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-forward-progress" title="Forward Progress"><span class="secnum">9.8</span> Forward Progress</a></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-weakref-processing-model" title="Processing Model of WeakRef and FinalizationRegistry Targets"><span class="secnum">9.9</span> Processing Model of WeakRef and FinalizationRegistry Targets</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-weakref-invariants" title="Objectives"><span class="secnum">9.9.1</span> Objectives</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-liveness" title="Liveness"><span class="secnum">9.9.2</span> Liveness</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-weakref-execution" title="Execution"><span class="secnum">9.9.3</span> Execution</a></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-weakref-host-hooks" title="Host Hooks"><span class="secnum">9.9.4</span> Host Hooks</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-host-cleanup-finalization-registry" title="HostEnqueueFinalizationRegistryCleanupJob ( finalizationRegistry )"><span class="secnum">9.9.4.1</span> HostEnqueueFinalizationRegistryCleanupJob ( <var>finalizationRegistry</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-clear-kept-objects" title="ClearKeptObjects ( )"><span class="secnum">9.10</span> ClearKeptObjects ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-addtokeptobjects" title="AddToKeptObjects ( value )"><span class="secnum">9.11</span> AddToKeptObjects ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-cleanup-finalization-registry" title="CleanupFinalizationRegistry ( finalizationRegistry )"><span class="secnum">9.12</span> CleanupFinalizationRegistry ( <var>finalizationRegistry</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-canbeheldweakly" title="CanBeHeldWeakly ( v )"><span class="secnum">9.13</span> CanBeHeldWeakly ( <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-and-exotic-objects-behaviours" title="Ordinary and Exotic Objects Behaviours"><span class="secnum">10</span> Ordinary and Exotic Objects Behaviours</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots" title="Ordinary Object Internal Methods and Internal Slots"><span class="secnum">10.1</span> Ordinary Object Internal Methods and Internal Slots</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.1.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetprototypeof" title="OrdinaryGetPrototypeOf ( O )"><span class="secnum">10.1.1.1</span> OrdinaryGetPrototypeOf ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.1.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarysetprototypeof" title="OrdinarySetPrototypeOf ( O, V )"><span class="secnum">10.1.2.1</span> OrdinarySetPrototypeOf ( <var>O</var>, <var>V</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.1.3</span> <var class="field">[[IsExtensible]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryisextensible" title="OrdinaryIsExtensible ( O )"><span class="secnum">10.1.3.1</span> OrdinaryIsExtensible ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.1.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarypreventextensions" title="OrdinaryPreventExtensions ( O )"><span class="secnum">10.1.4.1</span> OrdinaryPreventExtensions ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.1.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty" title="OrdinaryGetOwnProperty ( O, P )"><span class="secnum">10.1.5.1</span> OrdinaryGetOwnProperty ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.1.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty" title="OrdinaryDefineOwnProperty ( O, P, Desc )"><span class="secnum">10.1.6.1</span> OrdinaryDefineOwnProperty ( <var>O</var>, <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-iscompatiblepropertydescriptor" title="IsCompatiblePropertyDescriptor ( Extensible, Desc, Current )"><span class="secnum">10.1.6.2</span> IsCompatiblePropertyDescriptor ( <var>Extensible</var>, <var>Desc</var>, <var>Current</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-validateandapplypropertydescriptor" title="ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )"><span class="secnum">10.1.6.3</span> ValidateAndApplyPropertyDescriptor ( <var>O</var>, <var>P</var>, <var>extensible</var>, <var>Desc</var>, <var>current</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.1.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryhasproperty" title="OrdinaryHasProperty ( O, P )"><span class="secnum">10.1.7.1</span> OrdinaryHasProperty ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.1.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryget" title="OrdinaryGet ( O, P, Receiver )"><span class="secnum">10.1.8.1</span> OrdinaryGet ( <var>O</var>, <var>P</var>, <var>Receiver</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.1.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryset" title="OrdinarySet ( O, P, V, Receiver )"><span class="secnum">10.1.9.1</span> OrdinarySet ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarysetwithowndescriptor" title="OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )"><span class="secnum">10.1.9.2</span> OrdinarySetWithOwnDescriptor ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>, <var>ownDesc</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.1.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydelete" title="OrdinaryDelete ( O, P )"><span class="secnum">10.1.10.1</span> OrdinaryDelete ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.1.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryownpropertykeys" title="OrdinaryOwnPropertyKeys ( O )"><span class="secnum">10.1.11.1</span> OrdinaryOwnPropertyKeys ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate" title="OrdinaryObjectCreate ( proto [ , additionalInternalSlotsList ] )"><span class="secnum">10.1.12</span> OrdinaryObjectCreate ( <var>proto</var> [ , <var>additionalInternalSlotsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycreatefromconstructor" title="OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )"><span class="secnum">10.1.13</span> OrdinaryCreateFromConstructor ( <var>constructor</var>, <var>intrinsicDefaultProto</var> [ , <var>internalSlotsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-getprototypefromconstructor" title="GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )"><span class="secnum">10.1.14</span> GetPrototypeFromConstructor ( <var>constructor</var>, <var>intrinsicDefaultProto</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-requireinternalslot" title="RequireInternalSlot ( O, internalSlot )"><span class="secnum">10.1.15</span> RequireInternalSlot ( <var>O</var>, <var>internalSlot</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects" title="ECMAScript Function Objects"><span class="secnum">10.2</span> ECMAScript Function Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.2.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-prepareforordinarycall" title="PrepareForOrdinaryCall ( F, newTarget )"><span class="secnum">10.2.1.1</span> PrepareForOrdinaryCall ( <var>F</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallbindthis" title="OrdinaryCallBindThis ( F, calleeContext, thisArgument )"><span class="secnum">10.2.1.2</span> OrdinaryCallBindThis ( <var>F</var>, <var>calleeContext</var>, <var>thisArgument</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-runtime-semantics-evaluatebody" title="Runtime Semantics: EvaluateBody"><span class="secnum">10.2.1.3</span> RS: EvaluateBody</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallevaluatebody" title="OrdinaryCallEvaluateBody ( F, argumentsList )"><span class="secnum">10.2.1.4</span> OrdinaryCallEvaluateBody ( <var>F</var>, <var>argumentsList</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.2.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate" title="OrdinaryFunctionCreate ( functionPrototype, sourceText, ParameterList, Body, thisMode, env, privateEnv )"><span class="secnum">10.2.3</span> OrdinaryFunctionCreate ( <var>functionPrototype</var>, <var>sourceText</var>, <var>ParameterList</var>, <var>Body</var>, <var>thisMode</var>, <var>env</var>, <var>privateEnv</var> )</a></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-addrestrictedfunctionproperties" title="AddRestrictedFunctionProperties ( F, realm )"><span class="secnum">10.2.4</span> AddRestrictedFunctionProperties ( <var>F</var>, <var>realm</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-%throwtypeerror%" title="%ThrowTypeError% ( )"><span class="secnum">10.2.4.1</span> %ThrowTypeError% ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor" title="MakeConstructor ( F [ , writablePrototype [ , prototype ] ] )"><span class="secnum">10.2.5</span> MakeConstructor ( <var>F</var> [ , <var>writablePrototype</var> [ , <var>prototype</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeclassconstructor" title="MakeClassConstructor ( F )"><span class="secnum">10.2.6</span> MakeClassConstructor ( <var>F</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod" title="MakeMethod ( F, homeObject )"><span class="secnum">10.2.7</span> MakeMethod ( <var>F</var>, <var>homeObject</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-definemethodproperty" title="DefineMethodProperty ( homeObject, key, closure, enumerable )"><span class="secnum">10.2.8</span> DefineMethodProperty ( <var>homeObject</var>, <var>key</var>, <var>closure</var>, <var>enumerable</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname" title="SetFunctionName ( F, name [ , prefix ] )"><span class="secnum">10.2.9</span> SetFunctionName ( <var>F</var>, <var>name</var> [ , <var>prefix</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionlength" title="SetFunctionLength ( F, length )"><span class="secnum">10.2.10</span> SetFunctionLength ( <var>F</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" title="FunctionDeclarationInstantiation ( func, argumentsList )"><span class="secnum">10.2.11</span> FunctionDeclarationInstantiation ( <var>func</var>, <var>argumentsList</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects" title="Built-in Function Objects"><span class="secnum">10.3</span> Built-in Function Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.3.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.3.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-builtincallorconstruct" title="BuiltinCallOrConstruct ( F, thisArgument, argumentsList, newTarget )"><span class="secnum">10.3.3</span> BuiltinCallOrConstruct ( <var>F</var>, <var>thisArgument</var>, <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction" title="CreateBuiltinFunction ( behaviour, length, name, additionalInternalSlotsList [ , realm [ , prototype [ , prefix [ , async ] ] ] ] )"><span class="secnum">10.3.4</span> CreateBuiltinFunction ( <var>behaviour</var>, <var>length</var>, <var>name</var>, <var>additionalInternalSlotsList</var> [ , <var>realm</var> [ , <var>prototype</var> [ , <var>prefix</var> [ , <var>async</var> ] ] ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-exotic-object-internal-methods-and-slots" title="Built-in Exotic Object Internal Methods and Slots"><span class="secnum">10.4</span> Built-in Exotic Object Internal Methods and Slots</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects" title="Bound Function Exotic Objects"><span class="secnum">10.4.1</span> Bound Function Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.4.1.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.4.1.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-boundfunctioncreate" title="BoundFunctionCreate ( targetFunction, boundThis, boundArgs )"><span class="secnum">10.4.1.3</span> BoundFunctionCreate ( <var>targetFunction</var>, <var>boundThis</var>, <var>boundArgs</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-array-exotic-objects" title="Array Exotic Objects"><span class="secnum">10.4.2</span> Array Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-array-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.2.1</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate" title="ArrayCreate ( length [ , proto ] )"><span class="secnum">10.4.2.2</span> ArrayCreate ( <var>length</var> [ , <var>proto</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arrayspeciescreate" title="ArraySpeciesCreate ( originalArray, length )"><span class="secnum">10.4.2.3</span> ArraySpeciesCreate ( <var>originalArray</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraysetlength" title="ArraySetLength ( A, Desc )"><span class="secnum">10.4.2.4</span> ArraySetLength ( <var>A</var>, <var>Desc</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects" title="String Exotic Objects"><span class="secnum">10.4.3</span> String Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.3.1</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.3.2</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.3.3</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringcreate" title="StringCreate ( value, prototype )"><span class="secnum">10.4.3.4</span> StringCreate ( <var>value</var>, <var>prototype</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringgetownproperty" title="StringGetOwnProperty ( S, P )"><span class="secnum">10.4.3.5</span> StringGetOwnProperty ( <var>S</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects" title="Arguments Exotic Objects"><span class="secnum">10.4.4</span> Arguments Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.4.1</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.4.2</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.4.3</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.4.4</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.4.4.5</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createunmappedargumentsobject" title="CreateUnmappedArgumentsObject ( argumentsList )"><span class="secnum">10.4.4.6</span> CreateUnmappedArgumentsObject ( <var>argumentsList</var> )</a></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createmappedargumentsobject" title="CreateMappedArgumentsObject ( func, formals, argumentsList, env )"><span class="secnum">10.4.4.7</span> CreateMappedArgumentsObject ( <var>func</var>, <var>formals</var>, <var>argumentsList</var>, <var>env</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makearggetter" title="MakeArgGetter ( name, env )"><span class="secnum">10.4.4.7.1</span> MakeArgGetter ( <var>name</var>, <var>env</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeargsetter" title="MakeArgSetter ( name, env )"><span class="secnum">10.4.4.7.2</span> MakeArgSetter ( <var>name</var>, <var>env</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-exotic-objects" title="TypedArray Exotic Objects"><span class="secnum">10.4.5</span> TypedArray Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.4.5.1</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-getownproperty" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.5.2</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-hasproperty" title="[[HasProperty]] ( P )"><span class="secnum">10.4.5.3</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-defineownproperty" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.5.4</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-get" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.5.5</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-set" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.5.6</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-delete" title="[[Delete]] ( P )"><span class="secnum">10.4.5.7</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.5.8</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records" title="TypedArray With Buffer Witness Records"><span class="secnum">10.4.5.9</span> TypedArray With Buffer Witness Records</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-maketypedarraywithbufferwitnessrecord" title="MakeTypedArrayWithBufferWitnessRecord ( obj, order )"><span class="secnum">10.4.5.10</span> MakeTypedArrayWithBufferWitnessRecord ( <var>obj</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraycreate" title="TypedArrayCreate ( prototype )"><span class="secnum">10.4.5.11</span> TypedArrayCreate ( <var>prototype</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraybytelength" title="TypedArrayByteLength ( taRecord )"><span class="secnum">10.4.5.12</span> TypedArrayByteLength ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraylength" title="TypedArrayLength ( taRecord )"><span class="secnum">10.4.5.13</span> TypedArrayLength ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayoutofbounds" title="IsTypedArrayOutOfBounds ( taRecord )"><span class="secnum">10.4.5.14</span> IsTypedArrayOutOfBounds ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayfixedlength" title="IsTypedArrayFixedLength ( O )"><span class="secnum">10.4.5.15</span> IsTypedArrayFixedLength ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex" title="IsValidIntegerIndex ( O, index )"><span class="secnum">10.4.5.16</span> IsValidIntegerIndex ( <var>O</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraygetelement" title="TypedArrayGetElement ( O, index )"><span class="secnum">10.4.5.17</span> TypedArrayGetElement ( <var>O</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraysetelement" title="TypedArraySetElement ( O, index, value )"><span class="secnum">10.4.5.18</span> TypedArraySetElement ( <var>O</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-isarraybufferviewoutofbounds" title="IsArrayBufferViewOutOfBounds ( O )"><span class="secnum">10.4.5.19</span> IsArrayBufferViewOutOfBounds ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects" title="Module Namespace Exotic Objects"><span class="secnum">10.4.6</span> Module Namespace Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.4.6.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.4.6.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.4.6.3</span> <var class="field">[[IsExtensible]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.4.6.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.6.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.6.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.4.6.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.6.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.6.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.4.6.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.6.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-modulenamespacecreate" title="ModuleNamespaceCreate ( module, exports )"><span class="secnum">10.4.6.12</span> ModuleNamespaceCreate ( <var>module</var>, <var>exports</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-immutable-prototype-exotic-objects" title="Immutable Prototype Exotic Objects"><span class="secnum">10.4.7</span> Immutable Prototype Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-immutable-prototype-exotic-objects-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.4.7.1</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-set-immutable-prototype" title="SetImmutablePrototype ( O, V )"><span class="secnum">10.4.7.2</span> SetImmutablePrototype ( <var>O</var>, <var>V</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots" title="Proxy Object Internal Methods and Internal Slots"><span class="secnum">10.5</span> Proxy Object Internal Methods and Internal Slots</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.5.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.5.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.5.3</span> <var class="field">[[IsExtensible]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.5.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.5.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.5.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.5.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.5.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.5.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.5.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.5.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.5.12</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.5.13</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy" title="ValidateNonRevokedProxy ( proxy )"><span class="secnum">10.5.14</span> ValidateNonRevokedProxy ( <var>proxy</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxycreate" title="ProxyCreate ( target, handler )"><span class="secnum">10.5.15</span> ProxyCreate ( <var>target</var>, <var>handler</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-ecmascript-language-source-code" title="ECMAScript Language: Source Text"><span class="secnum">11</span> ECMAScript Language: Source Text</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-source-text" title="Source Text"><span class="secnum">11.1</span> Source Text</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-utf16encodecodepoint" title="Static Semantics: UTF16EncodeCodePoint ( cp )"><span class="secnum">11.1.1</span> SS: UTF16EncodeCodePoint ( <var>cp</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-codepointstostring" title="Static Semantics: CodePointsToString ( text )"><span class="secnum">11.1.2</span> SS: CodePointsToString ( <var>text</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-utf16decodesurrogatepair" title="Static Semantics: UTF16SurrogatePairToCodePoint ( lead, trail )"><span class="secnum">11.1.3</span> SS: UTF16SurrogatePairToCodePoint ( <var>lead</var>, <var>trail</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-codepointat" title="Static Semantics: CodePointAt ( string, position )"><span class="secnum">11.1.4</span> SS: CodePointAt ( <var>string</var>, <var>position</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-stringtocodepoints" title="Static Semantics: StringToCodePoints ( string )"><span class="secnum">11.1.5</span> SS: StringToCodePoints ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-parsetext" title="Static Semantics: ParseText ( sourceText, goalSymbol )"><span class="secnum">11.1.6</span> SS: ParseText ( <var>sourceText</var>, <var>goalSymbol</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-types-of-source-code" title="Types of Source Code"><span class="secnum">11.2</span> Types of Source Code</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-directive-prologues-and-the-use-strict-directive" title="Directive Prologues and the Use Strict Directive"><span class="secnum">11.2.1</span> Directive Prologues and the Use Strict Directive</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-strict-mode-code" title="Strict Mode Code"><span class="secnum">11.2.2</span> Strict Mode Code</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-isstrict" title="Static Semantics: IsStrict ( node )"><span class="secnum">11.2.2.1</span> SS: IsStrict ( <var>node</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-non-ecmascript-functions" title="Non-ECMAScript Functions"><span class="secnum">11.2.3</span> Non-ECMAScript Functions</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-ecmascript-language-lexical-grammar" title="ECMAScript Language: Lexical Grammar"><span class="secnum">12</span> ECMAScript Language: Lexical Grammar</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-unicode-format-control-characters" title="Unicode Format-Control Characters"><span class="secnum">12.1</span> Unicode Format-Control Characters</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-white-space" title="White Space"><span class="secnum">12.2</span> White Space</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-line-terminators" title="Line Terminators"><span class="secnum">12.3</span> Line Terminators</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-comments" title="Comments"><span class="secnum">12.4</span> Comments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-hashbang" title="Hashbang Comments"><span class="secnum">12.5</span> Hashbang Comments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-tokens" title="Tokens"><span class="secnum">12.6</span> Tokens</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-names-and-keywords" title="Names and Keywords"><span class="secnum">12.7</span> Names and Keywords</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-identifier-names" title="Identifier Names"><span class="secnum">12.7.1</span> Identifier Names</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifier-names-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.7.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifiercodepoints" title="Static Semantics: IdentifierCodePoints"><span class="secnum">12.7.1.2</span> SS: IdentifierCodePoints</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifiercodepoint" title="Static Semantics: IdentifierCodePoint"><span class="secnum">12.7.1.3</span> SS: IdentifierCodePoint</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-keywords-and-reserved-words" title="Keywords and Reserved Words"><span class="secnum">12.7.2</span> Keywords and Reserved Words</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-punctuators" title="Punctuators"><span class="secnum">12.8</span> Punctuators</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-ecmascript-language-lexical-grammar-literals" title="Literals"><span class="secnum">12.9</span> Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-null-literals" title="Null Literals"><span class="secnum">12.9.1</span> Null Literals</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-boolean-literals" title="Boolean Literals"><span class="secnum">12.9.2</span> Boolean Literals</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-numeric-literals" title="Numeric Literals"><span class="secnum">12.9.3</span> Numeric Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-numeric-literals-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.9.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-mv" title="Static Semantics: MV"><span class="secnum">12.9.3.2</span> SS: MV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-numericvalue" title="Static Semantics: NumericValue"><span class="secnum">12.9.3.3</span> SS: NumericValue</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-string-literals" title="String Literals"><span class="secnum">12.9.4</span> String Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-string-literals-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.9.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv" title="Static Semantics: SV"><span class="secnum">12.9.4.2</span> SS: SV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-string-literals-static-semantics-mv" title="Static Semantics: MV"><span class="secnum">12.9.4.3</span> SS: MV</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-regular-expression-literals" title="Regular Expression Literals"><span class="secnum">12.9.5</span> Regular Expression Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-bodytext" title="Static Semantics: BodyText"><span class="secnum">12.9.5.1</span> SS: BodyText</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-flagtext" title="Static Semantics: FlagText"><span class="secnum">12.9.5.2</span> SS: FlagText</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components" title="Template Literal Lexical Components"><span class="secnum">12.9.6</span> Template Literal Lexical Components</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv" title="Static Semantics: TV"><span class="secnum">12.9.6.1</span> SS: TV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-trv" title="Static Semantics: TRV"><span class="secnum">12.9.6.2</span> SS: TRV</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-automatic-semicolon-insertion" title="Automatic Semicolon Insertion"><span class="secnum">12.10</span> Automatic Semicolon Insertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-rules-of-automatic-semicolon-insertion" title="Rules of Automatic Semicolon Insertion"><span class="secnum">12.10.1</span> Rules of Automatic Semicolon Insertion</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-examples-of-automatic-semicolon-insertion" title="Examples of Automatic Semicolon Insertion"><span class="secnum">12.10.2</span> Examples of Automatic Semicolon Insertion</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-interesting-cases-of-automatic-semicolon-insertion" title="Interesting Cases of Automatic Semicolon Insertion"><span class="secnum">12.10.3</span> Interesting Cases of Automatic Semicolon Insertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-asi-interesting-cases-in-statement-lists" title="Interesting Cases of Automatic Semicolon Insertion in Statement Lists"><span class="secnum">12.10.3.1</span> Interesting Cases of Automatic Semicolon Insertion in Statement Lists</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-asi-cases-with-no-lineterminator-here" title="Cases of Automatic Semicolon Insertion and “[no LineTerminator here]”"><span class="secnum">12.10.3.2</span> Cases of Automatic Semicolon Insertion and “[no <emu-nt>LineTerminator</emu-nt> here]”</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-no-lineterminator-here-automatic-semicolon-insertion-list" title="List of Grammar Productions with Optional Operands and “[no LineTerminator here]”"><span class="secnum">12.10.3.2.1</span> List of Grammar Productions with Optional Operands and “[no <emu-nt>LineTerminator</emu-nt> here]”</a></li></ol></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-ecmascript-language-expressions" title="ECMAScript Language: Expressions"><span class="secnum">13</span> ECMAScript Language: Expressions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-identifiers" title="Identifiers"><span class="secnum">13.1</span> Identifiers</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifiers-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue" title="Static Semantics: StringValue"><span class="secnum">13.1.2</span> SS: StringValue</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifiers-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.1.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression" title="Primary Expression"><span class="secnum">13.2</span> Primary Expression</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-this-keyword" title="The this Keyword"><span class="secnum">13.2.1</span> The <code>this</code> Keyword</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-this-keyword-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifier-reference" title="Identifier Reference"><span class="secnum">13.2.2</span> Identifier Reference</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression-literals" title="Literals"><span class="secnum">13.2.3</span> Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-array-initializer" title="Array Initializer"><span class="secnum">13.2.4</span> Array Initializer</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" title="Runtime Semantics: ArrayAccumulation"><span class="secnum">13.2.4.1</span> RS: ArrayAccumulation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-array-initializer-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.4.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-object-initializer" title="Object Initializer"><span class="secnum">13.2.5</span> Object Initializer</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-object-initializer-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-iscomputedpropertykey" title="Static Semantics: IsComputedPropertyKey"><span class="secnum">13.2.5.2</span> SS: IsComputedPropertyKey</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-propertynamelist" title="Static Semantics: PropertyNameList"><span class="secnum">13.2.5.3</span> SS: PropertyNameList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-object-initializer-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.5.4</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydefinitionevaluation" title="Runtime Semantics: PropertyDefinitionEvaluation"><span class="secnum">13.2.5.5</span> RS: PropertyDefinitionEvaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-function-defining-expressions" title="Function Defining Expressions"><span class="secnum">13.2.6</span> Function Defining Expressions</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression-regular-expression-literals" title="Regular Expression Literals"><span class="secnum">13.2.7</span> Regular Expression Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-primary-expression-regular-expression-literals-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.7.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-isvalidregularexpressionliteral" title="Static Semantics: IsValidRegularExpressionLiteral ( literal )"><span class="secnum">13.2.7.2</span> SS: IsValidRegularExpressionLiteral ( <var>literal</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-regular-expression-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.7.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-template-literals" title="Template Literals"><span class="secnum">13.2.8</span> Template Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-template-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings" title="Static Semantics: TemplateStrings"><span class="secnum">13.2.8.2</span> SS: TemplateStrings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-templatestring" title="Static Semantics: TemplateString ( templateToken, raw )"><span class="secnum">13.2.8.3</span> SS: TemplateString ( <var>templateToken</var>, <var>raw</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-gettemplateobject" title="GetTemplateObject ( templateLiteral )"><span class="secnum">13.2.8.4</span> GetTemplateObject ( <var>templateLiteral</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-substitutionevaluation" title="Runtime Semantics: SubstitutionEvaluation"><span class="secnum">13.2.8.5</span> RS: SubstitutionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-template-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.8.6</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-grouping-operator" title="The Grouping Operator"><span class="secnum">13.2.9</span> The Grouping Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-grouping-operator-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-grouping-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.9.2</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-left-hand-side-expressions" title="Left-Hand-Side Expressions"><span class="secnum">13.3</span> Left-Hand-Side Expressions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-static-semantics" title="Static Semantics"><span class="secnum">13.3.1</span> Static Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-left-hand-side-expressions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.3.1.1</span> SS: Early Errors</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-property-accessors" title="Property Accessors"><span class="secnum">13.3.2</span> Property Accessors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-property-accessors-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-expression-key" title="EvaluatePropertyAccessWithExpressionKey ( baseValue, expression, strict )"><span class="secnum">13.3.3</span> EvaluatePropertyAccessWithExpressionKey ( <var>baseValue</var>, <var>expression</var>, <var>strict</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-identifier-key" title="EvaluatePropertyAccessWithIdentifierKey ( baseValue, identifierName, strict )"><span class="secnum">13.3.4</span> EvaluatePropertyAccessWithIdentifierKey ( <var>baseValue</var>, <var>identifierName</var>, <var>strict</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-new-operator" title="The new Operator"><span class="secnum">13.3.5</span> The <code>new</code> Operator</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-new-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.5.1</span> RS: Evaluation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatenew" title="EvaluateNew ( constructExpr, arguments )"><span class="secnum">13.3.5.1.1</span> EvaluateNew ( <var>constructExpr</var>, <var>arguments</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-function-calls" title="Function Calls"><span class="secnum">13.3.6</span> Function Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.6.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatecall" title="EvaluateCall ( func, ref, arguments, tailPosition )"><span class="secnum">13.3.6.2</span> EvaluateCall ( <var>func</var>, <var>ref</var>, <var>arguments</var>, <var>tailPosition</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-super-keyword" title="The super Keyword"><span class="secnum">13.3.7</span> The <code>super</code> Keyword</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-super-keyword-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.7.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-getsuperconstructor" title="GetSuperConstructor ( )"><span class="secnum">13.3.7.2</span> GetSuperConstructor ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-makesuperpropertyreference" title="MakeSuperPropertyReference ( actualThis, propertyKey, strict )"><span class="secnum">13.3.7.3</span> MakeSuperPropertyReference ( <var>actualThis</var>, <var>propertyKey</var>, <var>strict</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-argument-lists" title="Argument Lists"><span class="secnum">13.3.8</span> Argument Lists</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" title="Runtime Semantics: ArgumentListEvaluation"><span class="secnum">13.3.8.1</span> RS: ArgumentListEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-optional-chains" title="Optional Chains"><span class="secnum">13.3.9</span> Optional Chains</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-optional-chaining-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.9.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" title="Runtime Semantics: ChainEvaluation"><span class="secnum">13.3.9.2</span> RS: ChainEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-import-calls" title="Import Calls"><span class="secnum">13.3.10</span> Import Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-import-call-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.10.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-import-call" title="EvaluateImportCall ( specifierExpression [ , optionsExpression ] )"><span class="secnum">13.3.10.2</span> EvaluateImportCall ( <var>specifierExpression</var> [ , <var>optionsExpression</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-ContinueDynamicImport" title="ContinueDynamicImport ( promiseCapability, moduleCompletion )"><span class="secnum">13.3.10.3</span> ContinueDynamicImport ( <var>promiseCapability</var>, <var>moduleCompletion</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-tagged-templates" title="Tagged Templates"><span class="secnum">13.3.11</span> Tagged Templates</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-tagged-templates-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.11.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-meta-properties" title="Meta Properties"><span class="secnum">13.3.12</span> Meta Properties</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-meta-properties-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.12.1</span> RS: Evaluation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-hostgetimportmetaproperties" title="HostGetImportMetaProperties ( moduleRecord )"><span class="secnum">13.3.12.1.1</span> HostGetImportMetaProperties ( <var>moduleRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-hostfinalizeimportmeta" title="HostFinalizeImportMeta ( importMeta, moduleRecord )"><span class="secnum">13.3.12.1.2</span> HostFinalizeImportMeta ( <var>importMeta</var>, <var>moduleRecord</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-update-expressions" title="Update Expressions"><span class="secnum">13.4</span> Update Expressions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-update-expressions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-postfix-increment-operator" title="Postfix Increment Operator"><span class="secnum">13.4.2</span> Postfix Increment Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-postfix-increment-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-postfix-decrement-operator" title="Postfix Decrement Operator"><span class="secnum">13.4.3</span> Postfix Decrement Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-postfix-decrement-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-prefix-increment-operator" title="Prefix Increment Operator"><span class="secnum">13.4.4</span> Prefix Increment Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-prefix-increment-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-prefix-decrement-operator" title="Prefix Decrement Operator"><span class="secnum">13.4.5</span> Prefix Decrement Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-prefix-decrement-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.5.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-operators" title="Unary Operators"><span class="secnum">13.5</span> Unary Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-delete-operator" title="The delete Operator"><span class="secnum">13.5.1</span> The <code>delete</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-delete-operator-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.5.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-delete-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.1.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-void-operator" title="The void Operator"><span class="secnum">13.5.2</span> The <code>void</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-void-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-typeof-operator" title="The typeof Operator"><span class="secnum">13.5.3</span> The <code>typeof</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-typeof-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-plus-operator" title="Unary + Operator"><span class="secnum">13.5.4</span> Unary <code>+</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unary-plus-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-minus-operator" title="Unary - Operator"><span class="secnum">13.5.5</span> Unary <code>-</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unary-minus-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.5.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-bitwise-not-operator" title="Bitwise NOT Operator ( ~ )"><span class="secnum">13.5.6</span> Bitwise NOT Operator ( <code>~</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-bitwise-not-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.6.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-logical-not-operator" title="Logical NOT Operator ( ! )"><span class="secnum">13.5.7</span> Logical NOT Operator ( <code>!</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-logical-not-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.7.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-exp-operator" title="Exponentiation Operator"><span class="secnum">13.6</span> Exponentiation Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-exp-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.6.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-multiplicative-operators" title="Multiplicative Operators"><span class="secnum">13.7</span> Multiplicative Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-multiplicative-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.7.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-additive-operators" title="Additive Operators"><span class="secnum">13.8</span> Additive Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-addition-operator-plus" title="The Addition Operator ( + )"><span class="secnum">13.8.1</span> The Addition Operator ( <code>+</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-addition-operator-plus-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.8.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-subtraction-operator-minus" title="The Subtraction Operator ( - )"><span class="secnum">13.8.2</span> The Subtraction Operator ( <code>-</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-subtraction-operator-minus-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.8.2.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-bitwise-shift-operators" title="Bitwise Shift Operators"><span class="secnum">13.9</span> Bitwise Shift Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-left-shift-operator" title="The Left Shift Operator ( << )"><span class="secnum">13.9.1</span> The Left Shift Operator ( <code><<</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-left-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-signed-right-shift-operator" title="The Signed Right Shift Operator ( >> )"><span class="secnum">13.9.2</span> The Signed Right Shift Operator ( <code>>></code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-signed-right-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unsigned-right-shift-operator" title="The Unsigned Right Shift Operator ( >>> )"><span class="secnum">13.9.3</span> The Unsigned Right Shift Operator ( <code>>>></code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unsigned-right-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.3.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-relational-operators" title="Relational Operators"><span class="secnum">13.10</span> Relational Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-relational-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.10.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-instanceofoperator" title="InstanceofOperator ( V, target )"><span class="secnum">13.10.2</span> InstanceofOperator ( <var>V</var>, <var>target</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-equality-operators" title="Equality Operators"><span class="secnum">13.11</span> Equality Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-equality-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.11.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-binary-bitwise-operators" title="Binary Bitwise Operators"><span class="secnum">13.12</span> Binary Bitwise Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-binary-bitwise-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.12.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-binary-logical-operators" title="Binary Logical Operators"><span class="secnum">13.13</span> Binary Logical Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-binary-logical-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.13.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-conditional-operator" title="Conditional Operator ( ? : )"><span class="secnum">13.14</span> Conditional Operator ( <code>? :</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-conditional-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.14.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-assignment-operators" title="Assignment Operators"><span class="secnum">13.15</span> Assignment Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-assignment-operators-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.15.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-assignment-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.15.2</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-applystringornumericbinaryoperator" title="ApplyStringOrNumericBinaryOperator ( lVal, opText, rVal )"><span class="secnum">13.15.3</span> ApplyStringOrNumericBinaryOperator ( <var>lVal</var>, <var>opText</var>, <var>rVal</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" title="EvaluateStringOrNumericBinaryExpression ( leftOperand, opText, rightOperand )"><span class="secnum">13.15.4</span> EvaluateStringOrNumericBinaryExpression ( <var>leftOperand</var>, <var>opText</var>, <var>rightOperand</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-destructuring-assignment" title="Destructuring Assignment"><span class="secnum">13.15.5</span> Destructuring Assignment</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-destructuring-assignment-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.15.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-destructuringassignmentevaluation" title="Runtime Semantics: DestructuringAssignmentEvaluation"><span class="secnum">13.15.5.2</span> RS: DestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydestructuringassignmentevaluation" title="Runtime Semantics: PropertyDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.3</span> RS: PropertyDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-restdestructuringassignmentevaluation" title="Runtime Semantics: RestDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.4</span> RS: RestDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" title="Runtime Semantics: IteratorDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.5</span> RS: IteratorDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-keyeddestructuringassignmentevaluation" title="Runtime Semantics: KeyedDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.6</span> RS: KeyedDestructuringAssignmentEvaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-comma-operator" title="Comma Operator ( , )"><span class="secnum">13.16</span> Comma Operator ( <code>,</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-comma-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.16.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-ecmascript-language-statements-and-declarations" title="ECMAScript Language: Statements and Declarations"><span class="secnum">14</span> ECMAScript Language: Statements and Declarations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-statement-semantics" title="Statement Semantics"><span class="secnum">14.1</span> Statement Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-statement-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-block" title="Block"><span class="secnum">14.2</span> Block</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-block-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-block-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.2.2</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-blockdeclarationinstantiation" title="BlockDeclarationInstantiation ( code, env )"><span class="secnum">14.2.3</span> BlockDeclarationInstantiation ( <var>code</var>, <var>env</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-declarations-and-the-variable-statement" title="Declarations and the Variable Statement"><span class="secnum">14.3</span> Declarations and the Variable Statement</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations" title="Let and Const Declarations"><span class="secnum">14.3.1</span> Let and Const Declarations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.3.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.3.1.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-variable-statement" title="Variable Statement"><span class="secnum">14.3.2</span> Variable Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-variable-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.3.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns" title="Destructuring Binding Patterns"><span class="secnum">14.3.3</span> Destructuring Binding Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns-runtime-semantics-propertybindinginitialization" title="Runtime Semantics: PropertyBindingInitialization"><span class="secnum">14.3.3.1</span> RS: PropertyBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns-runtime-semantics-restbindinginitialization" title="Runtime Semantics: RestBindingInitialization"><span class="secnum">14.3.3.2</span> RS: RestBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-keyedbindinginitialization" title="Runtime Semantics: KeyedBindingInitialization"><span class="secnum">14.3.3.3</span> RS: KeyedBindingInitialization</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-empty-statement" title="Empty Statement"><span class="secnum">14.4</span> Empty Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-empty-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-expression-statement" title="Expression Statement"><span class="secnum">14.5</span> Expression Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-expression-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.5.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement" title="The if Statement"><span class="secnum">14.6</span> The <code>if</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.6.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.6.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-iteration-statements" title="Iteration Statements"><span class="secnum">14.7</span> Iteration Statements</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-iteration-statements-semantics" title="Semantics"><span class="secnum">14.7.1</span> Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-loopcontinues" title="LoopContinues ( completion, labelSet )"><span class="secnum">14.7.1.1</span> LoopContinues ( <var>completion</var>, <var>labelSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-loopevaluation" title="Runtime Semantics: LoopEvaluation"><span class="secnum">14.7.1.2</span> RS: LoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-do-while-statement" title="The do-while Statement"><span class="secnum">14.7.2</span> The <code>do</code>-<code>while</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-do-while-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-dowhileloopevaluation" title="Runtime Semantics: DoWhileLoopEvaluation"><span class="secnum">14.7.2.2</span> RS: DoWhileLoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-while-statement" title="The while Statement"><span class="secnum">14.7.3</span> The <code>while</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-while-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-whileloopevaluation" title="Runtime Semantics: WhileLoopEvaluation"><span class="secnum">14.7.3.2</span> RS: WhileLoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-statement" title="The for Statement"><span class="secnum">14.7.4</span> The <code>for</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forloopevaluation" title="Runtime Semantics: ForLoopEvaluation"><span class="secnum">14.7.4.2</span> RS: ForLoopEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-forbodyevaluation" title="ForBodyEvaluation ( test, increment, stmt, perIterationBindings, labelSet )"><span class="secnum">14.7.4.3</span> ForBodyEvaluation ( <var>test</var>, <var>increment</var>, <var>stmt</var>, <var>perIterationBindings</var>, <var>labelSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-createperiterationenvironment" title="CreatePerIterationEnvironment ( perIterationBindings )"><span class="secnum">14.7.4.4</span> CreatePerIterationEnvironment ( <var>perIterationBindings</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements" title="The for-in, for-of, and for-await-of Statements"><span class="secnum">14.7.5</span> The <code>for</code>-<code>in</code>, <code>for</code>-<code>of</code>, and <code>for</code>-<code>await</code>-<code>of</code> Statements</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-static-semantics-isdestructuring" title="Static Semantics: IsDestructuring"><span class="secnum">14.7.5.2</span> SS: IsDestructuring</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-fordeclarationbindinginitialization" title="Runtime Semantics: ForDeclarationBindingInitialization"><span class="secnum">14.7.5.3</span> RS: ForDeclarationBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-fordeclarationbindinginstantiation" title="Runtime Semantics: ForDeclarationBindingInstantiation"><span class="secnum">14.7.5.4</span> RS: ForDeclarationBindingInstantiation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forinofloopevaluation" title="Runtime Semantics: ForInOfLoopEvaluation"><span class="secnum">14.7.5.5</span> RS: ForInOfLoopEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forinofheadevaluation" title="ForIn/OfHeadEvaluation ( uninitializedBoundNames, expr, iterationKind )"><span class="secnum">14.7.5.6</span> ForIn/OfHeadEvaluation ( <var>uninitializedBoundNames</var>, <var>expr</var>, <var>iterationKind</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset" title="ForIn/OfBodyEvaluation ( lhs, stmt, iteratorRecord, iterationKind, lhsKind, labelSet [ , iteratorKind ] )"><span class="secnum">14.7.5.7</span> ForIn/OfBodyEvaluation ( <var>lhs</var>, <var>stmt</var>, <var>iteratorRecord</var>, <var>iterationKind</var>, <var>lhsKind</var>, <var>labelSet</var> [ , <var>iteratorKind</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.7.5.8</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-enumerate-object-properties" title="EnumerateObjectProperties ( O )"><span class="secnum">14.7.5.9</span> EnumerateObjectProperties ( <var>O</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-iterator-objects" title="For-In Iterator Objects"><span class="secnum">14.7.5.10</span> For-In Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-createforiniterator" title="CreateForInIterator ( object )"><span class="secnum">14.7.5.10.1</span> CreateForInIterator ( <var>object</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-%foriniteratorprototype%-object" title="The %ForInIteratorPrototype% Object"><span class="secnum">14.7.5.10.2</span> The %ForInIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-%foriniteratorprototype%.next" title="%ForInIteratorPrototype%.next ( )"><span class="secnum">14.7.5.10.2.1</span> %ForInIteratorPrototype%.next ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-properties-of-for-in-iterator-instances" title="Properties of For-In Iterator Instances"><span class="secnum">14.7.5.10.3</span> Properties of For-In Iterator Instances</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement" title="The continue Statement"><span class="secnum">14.8</span> The <code>continue</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.8.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement" title="The break Statement"><span class="secnum">14.9</span> The <code>break</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.9.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-return-statement" title="The return Statement"><span class="secnum">14.10</span> The <code>return</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-return-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.10.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement" title="The with Statement"><span class="secnum">14.11</span> The <code>with</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.11.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.11.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement" title="The switch Statement"><span class="secnum">14.12</span> The <code>switch</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.12.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-caseblockevaluation" title="Runtime Semantics: CaseBlockEvaluation"><span class="secnum">14.12.2</span> RS: CaseBlockEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-caseclauseisselected" title="CaseClauseIsSelected ( C, input )"><span class="secnum">14.12.3</span> CaseClauseIsSelected ( <var>C</var>, <var>input</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.12.4</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements" title="Labelled Statements"><span class="secnum">14.13</span> Labelled Statements</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.13.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-islabelledfunction" title="Static Semantics: IsLabelledFunction ( stmt )"><span class="secnum">14.13.2</span> SS: IsLabelledFunction ( <var>stmt</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.13.3</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-labelledevaluation" title="Runtime Semantics: LabelledEvaluation"><span class="secnum">14.13.4</span> RS: LabelledEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-throw-statement" title="The throw Statement"><span class="secnum">14.14</span> The <code>throw</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-throw-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.14.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement" title="The try Statement"><span class="secnum">14.15</span> The <code>try</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.15.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-catchclauseevaluation" title="Runtime Semantics: CatchClauseEvaluation"><span class="secnum">14.15.2</span> RS: CatchClauseEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.15.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-debugger-statement" title="The debugger Statement"><span class="secnum">14.16</span> The <code>debugger</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-debugger-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.16.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-ecmascript-language-functions-and-classes" title="ECMAScript Language: Functions and Classes"><span class="secnum">15</span> ECMAScript Language: Functions and Classes</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-parameter-lists" title="Parameter Lists"><span class="secnum">15.1</span> Parameter Lists</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-parameter-lists-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression" title="Static Semantics: ContainsExpression"><span class="secnum">15.1.2</span> SS: ContainsExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist" title="Static Semantics: IsSimpleParameterList"><span class="secnum">15.1.3</span> SS: IsSimpleParameterList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer" title="Static Semantics: HasInitializer"><span class="secnum">15.1.4</span> SS: HasInitializer</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-expectedargumentcount" title="Static Semantics: ExpectedArgumentCount"><span class="secnum">15.1.5</span> SS: ExpectedArgumentCount</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions" title="Function Definitions"><span class="secnum">15.2</span> Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict" title="Static Semantics: FunctionBodyContainsUseStrict"><span class="secnum">15.2.2</span> SS: FunctionBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluatefunctionbody" title="Runtime Semantics: EvaluateFunctionBody"><span class="secnum">15.2.3</span> RS: EvaluateFunctionBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateordinaryfunctionobject" title="Runtime Semantics: InstantiateOrdinaryFunctionObject"><span class="secnum">15.2.4</span> RS: InstantiateOrdinaryFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateordinaryfunctionexpression" title="Runtime Semantics: InstantiateOrdinaryFunctionExpression"><span class="secnum">15.2.5</span> RS: InstantiateOrdinaryFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.2.6</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions" title="Arrow Function Definitions"><span class="secnum">15.3</span> Arrow Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-concisebodycontainsusestrict" title="Static Semantics: ConciseBodyContainsUseStrict"><span class="secnum">15.3.2</span> SS: ConciseBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateconcisebody" title="Runtime Semantics: EvaluateConciseBody"><span class="secnum">15.3.3</span> RS: EvaluateConciseBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiatearrowfunctionexpression" title="Runtime Semantics: InstantiateArrowFunctionExpression"><span class="secnum">15.3.4</span> RS: InstantiateArrowFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.3.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-method-definitions" title="Method Definitions"><span class="secnum">15.4</span> Method Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-method-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper" title="Static Semantics: HasDirectSuper"><span class="secnum">15.4.2</span> SS: HasDirectSuper</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-specialmethod" title="Static Semantics: SpecialMethod"><span class="secnum">15.4.3</span> SS: SpecialMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-definemethod" title="Runtime Semantics: DefineMethod"><span class="secnum">15.4.4</span> RS: DefineMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-methoddefinitionevaluation" title="Runtime Semantics: MethodDefinitionEvaluation"><span class="secnum">15.4.5</span> RS: MethodDefinitionEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions" title="Generator Function Definitions"><span class="secnum">15.5</span> Generator Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluategeneratorbody" title="Runtime Semantics: EvaluateGeneratorBody"><span class="secnum">15.5.2</span> RS: EvaluateGeneratorBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiategeneratorfunctionobject" title="Runtime Semantics: InstantiateGeneratorFunctionObject"><span class="secnum">15.5.3</span> RS: InstantiateGeneratorFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiategeneratorfunctionexpression" title="Runtime Semantics: InstantiateGeneratorFunctionExpression"><span class="secnum">15.5.4</span> RS: InstantiateGeneratorFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.5.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-generator-function-definitions" title="Async Generator Function Definitions"><span class="secnum">15.6</span> Async Generator Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-generator-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.6.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncgeneratorbody" title="Runtime Semantics: EvaluateAsyncGeneratorBody"><span class="secnum">15.6.2</span> RS: EvaluateAsyncGeneratorBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncgeneratorfunctionobject" title="Runtime Semantics: InstantiateAsyncGeneratorFunctionObject"><span class="secnum">15.6.3</span> RS: InstantiateAsyncGeneratorFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncgeneratorfunctionexpression" title="Runtime Semantics: InstantiateAsyncGeneratorFunctionExpression"><span class="secnum">15.6.4</span> RS: InstantiateAsyncGeneratorFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-asyncgenerator-definitions-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.6.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions" title="Class Definitions"><span class="secnum">15.7</span> Class Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.7.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementkind" title="Static Semantics: ClassElementKind"><span class="secnum">15.7.2</span> SS: ClassElementKind</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-constructormethod" title="Static Semantics: ConstructorMethod"><span class="secnum">15.7.3</span> SS: ConstructorMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-isstatic" title="Static Semantics: IsStatic"><span class="secnum">15.7.4</span> SS: IsStatic</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-nonconstructorelements" title="Static Semantics: NonConstructorElements"><span class="secnum">15.7.5</span> SS: NonConstructorElements</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-prototypepropertynamelist" title="Static Semantics: PrototypePropertyNameList"><span class="secnum">15.7.6</span> SS: PrototypePropertyNameList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid" title="Static Semantics: AllPrivateIdentifiersValid"><span class="secnum">15.7.7</span> SS: AllPrivateIdentifiersValid</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers" title="Static Semantics: PrivateBoundIdentifiers"><span class="secnum">15.7.8</span> SS: PrivateBoundIdentifiers</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsarguments" title="Static Semantics: ContainsArguments"><span class="secnum">15.7.9</span> SS: ContainsArguments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classfielddefinitionevaluation" title="Runtime Semantics: ClassFieldDefinitionEvaluation"><span class="secnum">15.7.10</span> RS: ClassFieldDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classstaticblockdefinitionevaluation" title="Runtime Semantics: ClassStaticBlockDefinitionEvaluation"><span class="secnum">15.7.11</span> RS: ClassStaticBlockDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateclassstaticblockbody" title="Runtime Semantics: EvaluateClassStaticBlockBody"><span class="secnum">15.7.12</span> RS: EvaluateClassStaticBlockBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementevaluation" title="Runtime Semantics: ClassElementEvaluation"><span class="secnum">15.7.13</span> RS: ClassElementEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classdefinitionevaluation" title="Runtime Semantics: ClassDefinitionEvaluation"><span class="secnum">15.7.14</span> RS: ClassDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-bindingclassdeclarationevaluation" title="Runtime Semantics: BindingClassDeclarationEvaluation"><span class="secnum">15.7.15</span> RS: BindingClassDeclarationEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.7.16</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions" title="Async Function Definitions"><span class="secnum">15.8</span> Async Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncfunctionobject" title="Runtime Semantics: InstantiateAsyncFunctionObject"><span class="secnum">15.8.2</span> RS: InstantiateAsyncFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncfunctionexpression" title="Runtime Semantics: InstantiateAsyncFunctionExpression"><span class="secnum">15.8.3</span> RS: InstantiateAsyncFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncfunctionbody" title="Runtime Semantics: EvaluateAsyncFunctionBody"><span class="secnum">15.8.4</span> RS: EvaluateAsyncFunctionBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.8.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions" title="Async Arrow Function Definitions"><span class="secnum">15.9</span> Async Arrow Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-asyncconcisebodycontainsusestrict" title="Static Semantics: AsyncConciseBodyContainsUseStrict"><span class="secnum">15.9.2</span> SS: AsyncConciseBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncconcisebody" title="Runtime Semantics: EvaluateAsyncConciseBody"><span class="secnum">15.9.3</span> RS: EvaluateAsyncConciseBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncarrowfunctionexpression" title="Runtime Semantics: InstantiateAsyncArrowFunctionExpression"><span class="secnum">15.9.4</span> RS: InstantiateAsyncArrowFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.9.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-tail-position-calls" title="Tail Position Calls"><span class="secnum">15.10</span> Tail Position Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition" title="Static Semantics: IsInTailPosition ( call )"><span class="secnum">15.10.1</span> SS: IsInTailPosition ( <var>call</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition" title="Static Semantics: HasCallInTailPosition"><span class="secnum">15.10.2</span> SS: HasCallInTailPosition</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-preparefortailcall" title="PrepareForTailCall ( )"><span class="secnum">15.10.3</span> PrepareForTailCall ( )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-ecmascript-language-scripts-and-modules" title="ECMAScript Language: Scripts and Modules"><span class="secnum">16</span> ECMAScript Language: Scripts and Modules</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-scripts" title="Scripts"><span class="secnum">16.1</span> Scripts</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-scripts-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-scriptisstrict" title="Static Semantics: ScriptIsStrict"><span class="secnum">16.1.2</span> SS: ScriptIsStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-script-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.1.3</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-script-records" title="Script Records"><span class="secnum">16.1.4</span> Script Records</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parse-script" title="ParseScript ( sourceText, realm, hostDefined )"><span class="secnum">16.1.5</span> ParseScript ( <var>sourceText</var>, <var>realm</var>, <var>hostDefined</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-runtime-semantics-scriptevaluation" title="ScriptEvaluation ( scriptRecord )"><span class="secnum">16.1.6</span> ScriptEvaluation ( <var>scriptRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-globaldeclarationinstantiation" title="GlobalDeclarationInstantiation ( script, env )"><span class="secnum">16.1.7</span> GlobalDeclarationInstantiation ( <var>script</var>, <var>env</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-modules" title="Modules"><span class="secnum">16.2</span> Modules</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics" title="Module Semantics"><span class="secnum">16.2.1</span> Module Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-importedlocalnames" title="Static Semantics: ImportedLocalNames ( importEntries )"><span class="secnum">16.2.1.2</span> SS: ImportedLocalNames ( <var>importEntries</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-modulerequest-record" title="ModuleRequest Records"><span class="secnum">16.2.1.3</span> ModuleRequest Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual" title="ModuleRequestsEqual ( left, right )"><span class="secnum">16.2.1.3.1</span> ModuleRequestsEqual ( <var>left</var>, <var>right</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests" title="Static Semantics: ModuleRequests"><span class="secnum">16.2.1.4</span> SS: ModuleRequests</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records" title="Abstract Module Records"><span class="secnum">16.2.1.5</span> Abstract Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-EvaluateModuleSync" title="EvaluateModuleSync ( module )"><span class="secnum">16.2.1.5.1</span> EvaluateModuleSync ( <var>module</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-cyclic-module-records" title="Cyclic Module Records"><span class="secnum">16.2.1.6</span> Cyclic Module Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-cyclic-module-record-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.6.1</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-LoadRequestedModules" title="LoadRequestedModules ( [ hostDefined ] )"><span class="secnum">16.2.1.6.1.1</span> LoadRequestedModules ( [ <var>hostDefined</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading" title="InnerModuleLoading ( state, module )"><span class="secnum">16.2.1.6.1.1.1</span> InnerModuleLoading ( <var>state</var>, <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-ContinueModuleLoading" title="ContinueModuleLoading ( state, moduleCompletion )"><span class="secnum">16.2.1.6.1.1.2</span> ContinueModuleLoading ( <var>state</var>, <var>moduleCompletion</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-moduledeclarationlinking" title="Link ( )"><span class="secnum">16.2.1.6.1.2</span> Link ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking" title="InnerModuleLinking ( module, stack, index )"><span class="secnum">16.2.1.6.1.2.1</span> InnerModuleLinking ( <var>module</var>, <var>stack</var>, <var>index</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-moduleevaluation" title="Evaluate ( )"><span class="secnum">16.2.1.6.1.3</span> Evaluate ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation" title="InnerModuleEvaluation ( module, stack, index )"><span class="secnum">16.2.1.6.1.3.1</span> InnerModuleEvaluation ( <var>module</var>, <var>stack</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module" title="ExecuteAsyncModule ( module )"><span class="secnum">16.2.1.6.1.3.2</span> ExecuteAsyncModule ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-gather-available-ancestors" title="GatherAvailableAncestors ( module, execList )"><span class="secnum">16.2.1.6.1.3.3</span> GatherAvailableAncestors ( <var>module</var>, <var>execList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled" title="AsyncModuleExecutionFulfilled ( module )"><span class="secnum">16.2.1.6.1.3.4</span> AsyncModuleExecutionFulfilled ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected" title="AsyncModuleExecutionRejected ( module, error )"><span class="secnum">16.2.1.6.1.3.5</span> AsyncModuleExecutionRejected ( <var>module</var>, <var>error</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-example-cyclic-module-record-graphs" title="Example Cyclic Module Record Graphs"><span class="secnum">16.2.1.6.2</span> Example Cyclic Module Record Graphs</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-records" title="Source Text Module Records"><span class="secnum">16.2.1.7</span> Source Text Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parsemodule" title="ParseModule ( sourceText, realm, hostDefined )"><span class="secnum">16.2.1.7.1</span> ParseModule ( <var>sourceText</var>, <var>realm</var>, <var>hostDefined</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.7.2</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-getexportednames" title="GetExportedNames ( [ exportStarSet ] )"><span class="secnum">16.2.1.7.2.1</span> GetExportedNames ( [ <var>exportStarSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-resolveexport" title="ResolveExport ( exportName [ , resolveSet ] )"><span class="secnum">16.2.1.7.2.2</span> ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-cyclic-module-record-methods" title="Implementation of Cyclic Module Record Abstract Methods"><span class="secnum">16.2.1.7.3</span> Implementation of Cyclic Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-initialize-environment" title="InitializeEnvironment ( )"><span class="secnum">16.2.1.7.3.1</span> InitializeEnvironment ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-execute-module" title="ExecuteModule ( [ capability ] )"><span class="secnum">16.2.1.7.3.2</span> ExecuteModule ( [ <var>capability</var> ] )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records" title="Synthetic Module Records"><span class="secnum">16.2.1.8</span> Synthetic Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-create-default-export-synthetic-module" title="CreateDefaultExportSyntheticModule ( defaultExport )"><span class="secnum">16.2.1.8.1</span> CreateDefaultExportSyntheticModule ( <var>defaultExport</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parse-json-module" title="ParseJSONModule ( source )"><span class="secnum">16.2.1.8.2</span> ParseJSONModule ( <var>source</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-setsyntheticmoduleexport" title="SetSyntheticModuleExport ( module, exportName, exportValue )"><span class="secnum">16.2.1.8.3</span> SetSyntheticModuleExport ( <var>module</var>, <var>exportName</var>, <var>exportValue</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.8.4</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-LoadRequestedModules" title="LoadRequestedModules ( [ hostDefined ] )"><span class="secnum">16.2.1.8.4.1</span> LoadRequestedModules ( [ <var>hostDefined</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-getexportednames" title="GetExportedNames ( [ exportStarSet ] )"><span class="secnum">16.2.1.8.4.2</span> GetExportedNames ( [ <var>exportStarSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-resolveexport" title="ResolveExport ( exportName [ , resolveSet ] )"><span class="secnum">16.2.1.8.4.3</span> ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-Link" title="Link ( )"><span class="secnum">16.2.1.8.4.4</span> Link ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-Evaluate" title="Evaluate ( )"><span class="secnum">16.2.1.8.4.5</span> Evaluate ( )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule" title="GetImportedModule ( referrer, request )"><span class="secnum">16.2.1.9</span> GetImportedModule ( <var>referrer</var>, <var>request</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule" title="HostLoadImportedModule ( referrer, moduleRequest, hostDefined, payload )"><span class="secnum">16.2.1.10</span> HostLoadImportedModule ( <var>referrer</var>, <var>moduleRequest</var>, <var>hostDefined</var>, <var>payload</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule" title="FinishLoadingImportedModule ( referrer, moduleRequest, payload, result )"><span class="secnum">16.2.1.11</span> FinishLoadingImportedModule ( <var>referrer</var>, <var>moduleRequest</var>, <var>payload</var>, <var>result</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-AllImportAttributesSupported" title="AllImportAttributesSupported ( attributes )"><span class="secnum">16.2.1.12</span> AllImportAttributesSupported ( <var>attributes</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-hostgetsupportedimportattributes" title="HostGetSupportedImportAttributes ( )"><span class="secnum">16.2.1.12.1</span> HostGetSupportedImportAttributes ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-getmodulenamespace" title="GetModuleNamespace ( module )"><span class="secnum">16.2.1.13</span> GetModuleNamespace ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.2.1.14</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-imports" title="Imports"><span class="secnum">16.2.2</span> Imports</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-imports-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentries" title="Static Semantics: ImportEntries"><span class="secnum">16.2.2.2</span> SS: ImportEntries</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule" title="Static Semantics: ImportEntriesForModule"><span class="secnum">16.2.2.3</span> SS: ImportEntriesForModule</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes" title="Static Semantics: WithClauseToAttributes"><span class="secnum">16.2.2.4</span> SS: WithClauseToAttributes</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-exports" title="Exports"><span class="secnum">16.2.3</span> Exports</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-exports-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings" title="Static Semantics: ExportedBindings"><span class="secnum">16.2.3.2</span> SS: ExportedBindings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames" title="Static Semantics: ExportedNames"><span class="secnum">16.2.3.3</span> SS: ExportedNames</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentries" title="Static Semantics: ExportEntries"><span class="secnum">16.2.3.4</span> SS: ExportEntries</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentriesformodule" title="Static Semantics: ExportEntriesForModule"><span class="secnum">16.2.3.5</span> SS: ExportEntriesForModule</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings" title="Static Semantics: ReferencedBindings"><span class="secnum">16.2.3.6</span> SS: ReferencedBindings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-exports-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.2.3.7</span> RS: Evaluation</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="error-handling-and-language-extensions.html#sec-error-handling-and-language-extensions" title="Error Handling and Language Extensions"><span class="secnum">17</span> Error Handling and Language Extensions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="error-handling-and-language-extensions.html#sec-forbidden-extensions" title="Forbidden Extensions"><span class="secnum">17.1</span> Forbidden Extensions</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-standard-built-in-objects.html#sec-ecmascript-standard-built-in-objects" title="ECMAScript Standard Built-in Objects"><span class="secnum">18</span> ECMAScript Standard Built-in Objects</a></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-global-object" title="The Global Object"><span class="secnum">19</span> The Global Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="global-object.html#sec-value-properties-of-the-global-object" title="Value Properties of the Global Object"><span class="secnum">19.1</span> Value Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-globalthis" title="globalThis"><span class="secnum">19.1.1</span> globalThis</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-value-properties-of-the-global-object-infinity" title="Infinity"><span class="secnum">19.1.2</span> Infinity</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-value-properties-of-the-global-object-nan" title="NaN"><span class="secnum">19.1.3</span> NaN</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-undefined" title="undefined"><span class="secnum">19.1.4</span> undefined</a></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-function-properties-of-the-global-object" title="Function Properties of the Global Object"><span class="secnum">19.2</span> Function Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="global-object.html#sec-eval-x" title="eval ( x )"><span class="secnum">19.2.1</span> eval ( <var>x</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-performeval" title="PerformEval ( x, strictCaller, direct )"><span class="secnum">19.2.1.1</span> PerformEval ( <var>x</var>, <var>strictCaller</var>, <var>direct</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-hostensurecancompilestrings" title="HostEnsureCanCompileStrings ( calleeRealm, parameterStrings, bodyString, direct )"><span class="secnum">19.2.1.2</span> HostEnsureCanCompileStrings ( <var>calleeRealm</var>, <var>parameterStrings</var>, <var>bodyString</var>, <var>direct</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-evaldeclarationinstantiation" title="EvalDeclarationInstantiation ( body, varEnv, lexEnv, privateEnv, strict )"><span class="secnum">19.2.1.3</span> EvalDeclarationInstantiation ( <var>body</var>, <var>varEnv</var>, <var>lexEnv</var>, <var>privateEnv</var>, <var>strict</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-isfinite-number" title="isFinite ( number )"><span class="secnum">19.2.2</span> isFinite ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-isnan-number" title="isNaN ( number )"><span class="secnum">19.2.3</span> isNaN ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parsefloat-string" title="parseFloat ( string )"><span class="secnum">19.2.4</span> parseFloat ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parseint-string-radix" title="parseInt ( string, radix )"><span class="secnum">19.2.5</span> parseInt ( <var>string</var>, <var>radix</var> )</a></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-uri-handling-functions" title="URI Handling Functions"><span class="secnum">19.2.6</span> URI Handling Functions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decodeuri-encodeduri" title="decodeURI ( encodedURI )"><span class="secnum">19.2.6.1</span> decodeURI ( <var>encodedURI</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decodeuricomponent-encodeduricomponent" title="decodeURIComponent ( encodedURIComponent )"><span class="secnum">19.2.6.2</span> decodeURIComponent ( <var>encodedURIComponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encodeuri-uri" title="encodeURI ( uri )"><span class="secnum">19.2.6.3</span> encodeURI ( <var>uri</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encodeuricomponent-uricomponent" title="encodeURIComponent ( uriComponent )"><span class="secnum">19.2.6.4</span> encodeURIComponent ( <var>uriComponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encode" title="Encode ( string, extraUnescaped )"><span class="secnum">19.2.6.5</span> Encode ( <var>string</var>, <var>extraUnescaped</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decode" title="Decode ( string, preserveEscapeSet )"><span class="secnum">19.2.6.6</span> Decode ( <var>string</var>, <var>preserveEscapeSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parsehexoctet" title="ParseHexOctet ( string, position )"><span class="secnum">19.2.6.7</span> ParseHexOctet ( <var>string</var>, <var>position</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-constructor-properties-of-the-global-object" title="Constructor Properties of the Global Object"><span class="secnum">19.3</span> Constructor Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-aggregate-error" title="AggregateError ( . . . )"><span class="secnum">19.3.1</span> AggregateError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-array" title="Array ( . . . )"><span class="secnum">19.3.2</span> Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-arraybuffer" title="ArrayBuffer ( . . . )"><span class="secnum">19.3.3</span> ArrayBuffer ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-bigint" title="BigInt ( . . . )"><span class="secnum">19.3.4</span> BigInt ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-bigint64array" title="BigInt64Array ( . . . )"><span class="secnum">19.3.5</span> BigInt64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-biguint64array" title="BigUint64Array ( . . . )"><span class="secnum">19.3.6</span> BigUint64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-boolean" title="Boolean ( . . . )"><span class="secnum">19.3.7</span> Boolean ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-dataview" title="DataView ( . . . )"><span class="secnum">19.3.8</span> DataView ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-date" title="Date ( . . . )"><span class="secnum">19.3.9</span> Date ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-error" title="Error ( . . . )"><span class="secnum">19.3.10</span> Error ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-evalerror" title="EvalError ( . . . )"><span class="secnum">19.3.11</span> EvalError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-finalization-registry" title="FinalizationRegistry ( . . . )"><span class="secnum">19.3.12</span> FinalizationRegistry ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float16array" title="Float16Array ( . . . )"><span class="secnum">19.3.13</span> Float16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float32array" title="Float32Array ( . . . )"><span class="secnum">19.3.14</span> Float32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float64array" title="Float64Array ( . . . )"><span class="secnum">19.3.15</span> Float64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-function" title="Function ( . . . )"><span class="secnum">19.3.16</span> Function ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int8array" title="Int8Array ( . . . )"><span class="secnum">19.3.17</span> Int8Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int16array" title="Int16Array ( . . . )"><span class="secnum">19.3.18</span> Int16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int32array" title="Int32Array ( . . . )"><span class="secnum">19.3.19</span> Int32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-iterator" title="Iterator ( . . . )"><span class="secnum">19.3.20</span> Iterator ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-map" title="Map ( . . . )"><span class="secnum">19.3.21</span> Map ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-number" title="Number ( . . . )"><span class="secnum">19.3.22</span> Number ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-object" title="Object ( . . . )"><span class="secnum">19.3.23</span> Object ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-promise" title="Promise ( . . . )"><span class="secnum">19.3.24</span> Promise ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-proxy" title="Proxy ( . . . )"><span class="secnum">19.3.25</span> Proxy ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-rangeerror" title="RangeError ( . . . )"><span class="secnum">19.3.26</span> RangeError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-referenceerror" title="ReferenceError ( . . . )"><span class="secnum">19.3.27</span> ReferenceError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-regexp" title="RegExp ( . . . )"><span class="secnum">19.3.28</span> RegExp ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-set" title="Set ( . . . )"><span class="secnum">19.3.29</span> Set ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-sharedarraybuffer" title="SharedArrayBuffer ( . . . )"><span class="secnum">19.3.30</span> SharedArrayBuffer ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-string" title="String ( . . . )"><span class="secnum">19.3.31</span> String ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-symbol" title="Symbol ( . . . )"><span class="secnum">19.3.32</span> Symbol ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-syntaxerror" title="SyntaxError ( . . . )"><span class="secnum">19.3.33</span> SyntaxError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-typeerror" title="TypeError ( . . . )"><span class="secnum">19.3.34</span> TypeError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-uint8array" title="Uint8Array ( . . . )"><span class="secnum">19.3.35</span> Uint8Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint8clampedarray" title="Uint8ClampedArray ( . . . )"><span class="secnum">19.3.36</span> Uint8ClampedArray ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint16array" title="Uint16Array ( . . . )"><span class="secnum">19.3.37</span> Uint16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint32array" title="Uint32Array ( . . . )"><span class="secnum">19.3.38</span> Uint32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-urierror" title="URIError ( . . . )"><span class="secnum">19.3.39</span> URIError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakmap" title="WeakMap ( . . . )"><span class="secnum">19.3.40</span> WeakMap ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakref" title="WeakRef ( . . . )"><span class="secnum">19.3.41</span> WeakRef ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakset" title="WeakSet ( . . . )"><span class="secnum">19.3.42</span> WeakSet ( . . . )</a></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-other-properties-of-the-global-object" title="Other Properties of the Global Object"><span class="secnum">19.4</span> Other Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-atomics" title="Atomics"><span class="secnum">19.4.1</span> Atomics</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-json" title="JSON"><span class="secnum">19.4.2</span> JSON</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-math" title="Math"><span class="secnum">19.4.3</span> Math</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-reflect" title="Reflect"><span class="secnum">19.4.4</span> Reflect</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-fundamental-objects" title="Fundamental Objects"><span class="secnum">20</span> Fundamental Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object-objects" title="Object Objects"><span class="secnum">20.1</span> Object Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object-constructor" title="The Object Constructor"><span class="secnum">20.1.1</span> The Object Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object-value" title="Object ( value )"><span class="secnum">20.1.1.1</span> Object ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-object-constructor" title="Properties of the Object Constructor"><span class="secnum">20.1.2</span> Properties of the Object Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.assign" title="Object.assign ( target, ...sources )"><span class="secnum">20.1.2.1</span> Object.assign ( <var>target</var>, ...<var>sources</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.create" title="Object.create ( O, Properties )"><span class="secnum">20.1.2.2</span> Object.create ( <var>O</var>, <var>Properties</var> )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.defineproperties" title="Object.defineProperties ( O, Properties )"><span class="secnum">20.1.2.3</span> Object.defineProperties ( <var>O</var>, <var>Properties</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-objectdefineproperties" title="ObjectDefineProperties ( O, Properties )"><span class="secnum">20.1.2.3.1</span> ObjectDefineProperties ( <var>O</var>, <var>Properties</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.defineproperty" title="Object.defineProperty ( O, P, Attributes )"><span class="secnum">20.1.2.4</span> Object.defineProperty ( <var>O</var>, <var>P</var>, <var>Attributes</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.entries" title="Object.entries ( O )"><span class="secnum">20.1.2.5</span> Object.entries ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.freeze" title="Object.freeze ( O )"><span class="secnum">20.1.2.6</span> Object.freeze ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.fromentries" title="Object.fromEntries ( iterable )"><span class="secnum">20.1.2.7</span> Object.fromEntries ( <var>iterable</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertydescriptor" title="Object.getOwnPropertyDescriptor ( O, P )"><span class="secnum">20.1.2.8</span> Object.getOwnPropertyDescriptor ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertydescriptors" title="Object.getOwnPropertyDescriptors ( O )"><span class="secnum">20.1.2.9</span> Object.getOwnPropertyDescriptors ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertynames" title="Object.getOwnPropertyNames ( O )"><span class="secnum">20.1.2.10</span> Object.getOwnPropertyNames ( <var>O</var> )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.getownpropertysymbols" title="Object.getOwnPropertySymbols ( O )"><span class="secnum">20.1.2.11</span> Object.getOwnPropertySymbols ( <var>O</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-getownpropertykeys" title="GetOwnPropertyKeys ( O, type )"><span class="secnum">20.1.2.11.1</span> GetOwnPropertyKeys ( <var>O</var>, <var>type</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getprototypeof" title="Object.getPrototypeOf ( O )"><span class="secnum">20.1.2.12</span> Object.getPrototypeOf ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.groupby" title="Object.groupBy ( items, callback )"><span class="secnum">20.1.2.13</span> Object.groupBy ( <var>items</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.hasown" title="Object.hasOwn ( O, P )"><span class="secnum">20.1.2.14</span> Object.hasOwn ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.is" title="Object.is ( value1, value2 )"><span class="secnum">20.1.2.15</span> Object.is ( <var>value1</var>, <var>value2</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.isextensible" title="Object.isExtensible ( O )"><span class="secnum">20.1.2.16</span> Object.isExtensible ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.isfrozen" title="Object.isFrozen ( O )"><span class="secnum">20.1.2.17</span> Object.isFrozen ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.issealed" title="Object.isSealed ( O )"><span class="secnum">20.1.2.18</span> Object.isSealed ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.keys" title="Object.keys ( O )"><span class="secnum">20.1.2.19</span> Object.keys ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.preventextensions" title="Object.preventExtensions ( O )"><span class="secnum">20.1.2.20</span> Object.preventExtensions ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype" title="Object.prototype"><span class="secnum">20.1.2.21</span> Object.prototype</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.seal" title="Object.seal ( O )"><span class="secnum">20.1.2.22</span> Object.seal ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.setprototypeof" title="Object.setPrototypeOf ( O, proto )"><span class="secnum">20.1.2.23</span> Object.setPrototypeOf ( <var>O</var>, <var>proto</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.values" title="Object.values ( O )"><span class="secnum">20.1.2.24</span> Object.values ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object" title="Properties of the Object Prototype Object"><span class="secnum">20.1.3</span> Properties of the Object Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.constructor" title="Object.prototype.constructor"><span class="secnum">20.1.3.1</span> Object.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.hasownproperty" title="Object.prototype.hasOwnProperty ( V )"><span class="secnum">20.1.3.2</span> Object.prototype.hasOwnProperty ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.isprototypeof" title="Object.prototype.isPrototypeOf ( V )"><span class="secnum">20.1.3.3</span> Object.prototype.isPrototypeOf ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.propertyisenumerable" title="Object.prototype.propertyIsEnumerable ( V )"><span class="secnum">20.1.3.4</span> Object.prototype.propertyIsEnumerable ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.tolocalestring" title="Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">20.1.3.5</span> Object.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.tostring" title="Object.prototype.toString ( )"><span class="secnum">20.1.3.6</span> Object.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.valueof" title="Object.prototype.valueOf ( )"><span class="secnum">20.1.3.7</span> Object.prototype.valueOf ( )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.prototype.__proto__" title="Object.prototype.__proto__"><span class="secnum">20.1.3.8</span> Object.prototype.__proto__</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-get-object.prototype.__proto__" title="get Object.prototype.__proto__"><span class="secnum">20.1.3.8.1</span> get Object.prototype.__proto__</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-set-object.prototype.__proto__" title="set Object.prototype.__proto__"><span class="secnum">20.1.3.8.2</span> set Object.prototype.__proto__</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.prototype-legacy-accessor-methods" title="Legacy Object.prototype Accessor Methods"><span class="secnum">20.1.3.9</span> Legacy Object.prototype Accessor Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__defineGetter__" title="Object.prototype.__defineGetter__ ( P, getter )"><span class="secnum">20.1.3.9.1</span> Object.prototype.__defineGetter__ ( <var>P</var>, <var>getter</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__defineSetter__" title="Object.prototype.__defineSetter__ ( P, setter )"><span class="secnum">20.1.3.9.2</span> Object.prototype.__defineSetter__ ( <var>P</var>, <var>setter</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__lookupGetter__" title="Object.prototype.__lookupGetter__ ( P )"><span class="secnum">20.1.3.9.3</span> Object.prototype.__lookupGetter__ ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__lookupSetter__" title="Object.prototype.__lookupSetter__ ( P )"><span class="secnum">20.1.3.9.4</span> Object.prototype.__lookupSetter__ ( <var>P</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-object-instances" title="Properties of Object Instances"><span class="secnum">20.1.4</span> Properties of Object Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-objects" title="Function Objects"><span class="secnum">20.2</span> Function Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-constructor" title="The Function Constructor"><span class="secnum">20.2.1</span> The Function Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-p1-p2-pn-body" title="Function ( ...parameterArgs, bodyArg )"><span class="secnum">20.2.1.1</span> Function ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-createdynamicfunction" title="CreateDynamicFunction ( constructor, newTarget, kind, parameterArgs, bodyArg )"><span class="secnum">20.2.1.1.1</span> CreateDynamicFunction ( <var>constructor</var>, <var>newTarget</var>, <var>kind</var>, <var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-function-constructor" title="Properties of the Function Constructor"><span class="secnum">20.2.2</span> Properties of the Function Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype" title="Function.prototype"><span class="secnum">20.2.2.1</span> Function.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object" title="Properties of the Function Prototype Object"><span class="secnum">20.2.3</span> Properties of the Function Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.apply" title="Function.prototype.apply ( thisArg, argArray )"><span class="secnum">20.2.3.1</span> Function.prototype.apply ( <var>thisArg</var>, <var>argArray</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.bind" title="Function.prototype.bind ( thisArg, ...args )"><span class="secnum">20.2.3.2</span> Function.prototype.bind ( <var>thisArg</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.call" title="Function.prototype.call ( thisArg, ...args )"><span class="secnum">20.2.3.3</span> Function.prototype.call ( <var>thisArg</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.constructor" title="Function.prototype.constructor"><span class="secnum">20.2.3.4</span> Function.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.tostring" title="Function.prototype.toString ( )"><span class="secnum">20.2.3.5</span> Function.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype-%symbol.hasinstance%" title="Function.prototype [ %Symbol.hasInstance% ] ( V )"><span class="secnum">20.2.3.6</span> Function.prototype [ %Symbol.hasInstance% ] ( <var>V</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-instances" title="Function Instances"><span class="secnum">20.2.4</span> Function Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-length" title="length"><span class="secnum">20.2.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-name" title="name"><span class="secnum">20.2.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-prototype" title="prototype"><span class="secnum">20.2.4.3</span> prototype</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-hosthassourcetextavailable" title="HostHasSourceTextAvailable ( func )"><span class="secnum">20.2.5</span> HostHasSourceTextAvailable ( <var>func</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean-objects" title="Boolean Objects"><span class="secnum">20.3</span> Boolean Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean-constructor" title="The Boolean Constructor"><span class="secnum">20.3.1</span> The Boolean Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean-constructor-boolean-value" title="Boolean ( value )"><span class="secnum">20.3.1.1</span> Boolean ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-boolean-constructor" title="Properties of the Boolean Constructor"><span class="secnum">20.3.2</span> Properties of the Boolean Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype" title="Boolean.prototype"><span class="secnum">20.3.2.1</span> Boolean.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-boolean-prototype-object" title="Properties of the Boolean Prototype Object"><span class="secnum">20.3.3</span> Properties of the Boolean Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype.constructor" title="Boolean.prototype.constructor"><span class="secnum">20.3.3.1</span> Boolean.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype.tostring" title="Boolean.prototype.toString ( )"><span class="secnum">20.3.3.2</span> Boolean.prototype.toString ( )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean.prototype.valueof" title="Boolean.prototype.valueOf ( )"><span class="secnum">20.3.3.3</span> Boolean.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-thisbooleanvalue" title="ThisBooleanValue ( value )"><span class="secnum">20.3.3.3.1</span> ThisBooleanValue ( <var>value</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-boolean-instances" title="Properties of Boolean Instances"><span class="secnum">20.3.4</span> Properties of Boolean Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol-objects" title="Symbol Objects"><span class="secnum">20.4</span> Symbol Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol-constructor" title="The Symbol Constructor"><span class="secnum">20.4.1</span> The Symbol Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol-description" title="Symbol ( [ description ] )"><span class="secnum">20.4.1.1</span> Symbol ( [ <var>description</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-symbol-constructor" title="Properties of the Symbol Constructor"><span class="secnum">20.4.2</span> Properties of the Symbol Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.asynciterator" title="Symbol.asyncIterator"><span class="secnum">20.4.2.1</span> Symbol.asyncIterator</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.for" title="Symbol.for ( key )"><span class="secnum">20.4.2.2</span> Symbol.for ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.hasinstance" title="Symbol.hasInstance"><span class="secnum">20.4.2.3</span> Symbol.hasInstance</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.isconcatspreadable" title="Symbol.isConcatSpreadable"><span class="secnum">20.4.2.4</span> Symbol.isConcatSpreadable</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.iterator" title="Symbol.iterator"><span class="secnum">20.4.2.5</span> Symbol.iterator</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.keyfor" title="Symbol.keyFor ( sym )"><span class="secnum">20.4.2.6</span> Symbol.keyFor ( <var>sym</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.match" title="Symbol.match"><span class="secnum">20.4.2.7</span> Symbol.match</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.matchall" title="Symbol.matchAll"><span class="secnum">20.4.2.8</span> Symbol.matchAll</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype" title="Symbol.prototype"><span class="secnum">20.4.2.9</span> Symbol.prototype</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.replace" title="Symbol.replace"><span class="secnum">20.4.2.10</span> Symbol.replace</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.search" title="Symbol.search"><span class="secnum">20.4.2.11</span> Symbol.search</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.species" title="Symbol.species"><span class="secnum">20.4.2.12</span> Symbol.species</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.split" title="Symbol.split"><span class="secnum">20.4.2.13</span> Symbol.split</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.toprimitive" title="Symbol.toPrimitive"><span class="secnum">20.4.2.14</span> Symbol.toPrimitive</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.tostringtag" title="Symbol.toStringTag"><span class="secnum">20.4.2.15</span> Symbol.toStringTag</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.unscopables" title="Symbol.unscopables"><span class="secnum">20.4.2.16</span> Symbol.unscopables</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-symbol-prototype-object" title="Properties of the Symbol Prototype Object"><span class="secnum">20.4.3</span> Properties of the Symbol Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype.constructor" title="Symbol.prototype.constructor"><span class="secnum">20.4.3.1</span> Symbol.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype.description" title="get Symbol.prototype.description"><span class="secnum">20.4.3.2</span> get Symbol.prototype.description</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol.prototype.tostring" title="Symbol.prototype.toString ( )"><span class="secnum">20.4.3.3</span> Symbol.prototype.toString ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symboldescriptivestring" title="SymbolDescriptiveString ( sym )"><span class="secnum">20.4.3.3.1</span> SymbolDescriptiveString ( <var>sym</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol.prototype.valueof" title="Symbol.prototype.valueOf ( )"><span class="secnum">20.4.3.4</span> Symbol.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-thissymbolvalue" title="ThisSymbolValue ( value )"><span class="secnum">20.4.3.4.1</span> ThisSymbolValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype-%symbol.toprimitive%" title="Symbol.prototype [ %Symbol.toPrimitive% ] ( hint )"><span class="secnum">20.4.3.5</span> Symbol.prototype [ %Symbol.toPrimitive% ] ( <var>hint</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype-%symbol.tostringtag%" title="Symbol.prototype [ %Symbol.toStringTag% ]"><span class="secnum">20.4.3.6</span> Symbol.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-symbol-instances" title="Properties of Symbol Instances"><span class="secnum">20.4.4</span> Properties of Symbol Instances</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-abstract-operations-for-symbols" title="Abstract Operations for Symbols"><span class="secnum">20.4.5</span> Abstract Operations for Symbols</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-keyforsymbol" title="KeyForSymbol ( sym )"><span class="secnum">20.4.5.1</span> KeyForSymbol ( <var>sym</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-error-objects" title="Error Objects"><span class="secnum">20.5</span> Error Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-error-constructor" title="The Error Constructor"><span class="secnum">20.5.1</span> The Error Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error-message" title="Error ( message [ , options ] )"><span class="secnum">20.5.1.1</span> Error ( <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-error-constructor" title="Properties of the Error Constructor"><span class="secnum">20.5.2</span> Properties of the Error Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.iserror" title="Error.isError ( arg )"><span class="secnum">20.5.2.1</span> Error.isError ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype" title="Error.prototype"><span class="secnum">20.5.2.2</span> Error.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-error-prototype-object" title="Properties of the Error Prototype Object"><span class="secnum">20.5.3</span> Properties of the Error Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.constructor" title="Error.prototype.constructor"><span class="secnum">20.5.3.1</span> Error.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.message" title="Error.prototype.message"><span class="secnum">20.5.3.2</span> Error.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.name" title="Error.prototype.name"><span class="secnum">20.5.3.3</span> Error.prototype.name</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.tostring" title="Error.prototype.toString ( )"><span class="secnum">20.5.3.4</span> Error.prototype.toString ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-error-instances" title="Properties of Error Instances"><span class="secnum">20.5.4</span> Properties of Error Instances</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard" title="Native Error Types Used in This Standard"><span class="secnum">20.5.5</span> Native Error Types Used in This Standard</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-evalerror" title="EvalError"><span class="secnum">20.5.5.1</span> EvalError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-rangeerror" title="RangeError"><span class="secnum">20.5.5.2</span> RangeError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-referenceerror" title="ReferenceError"><span class="secnum">20.5.5.3</span> ReferenceError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-syntaxerror" title="SyntaxError"><span class="secnum">20.5.5.4</span> SyntaxError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-typeerror" title="TypeError"><span class="secnum">20.5.5.5</span> TypeError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-urierror" title="URIError"><span class="secnum">20.5.5.6</span> URIError</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-nativeerror-object-structure" title="NativeError Object Structure"><span class="secnum">20.5.6</span> <var>NativeError</var> Object Structure</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-nativeerror-constructors" title="The NativeError Constructors"><span class="secnum">20.5.6.1</span> The <var>NativeError</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror" title="NativeError ( message [ , options ] )"><span class="secnum">20.5.6.1.1</span> <var>NativeError</var> ( <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-nativeerror-constructors" title="Properties of the NativeError Constructors"><span class="secnum">20.5.6.2</span> Properties of the <var>NativeError</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype" title="NativeError.prototype"><span class="secnum">20.5.6.2.1</span> <var>NativeError</var>.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-nativeerror-prototype-objects" title="Properties of the NativeError Prototype Objects"><span class="secnum">20.5.6.3</span> Properties of the <var>NativeError</var> Prototype Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.constructor" title="NativeError.prototype.constructor"><span class="secnum">20.5.6.3.1</span> <var>NativeError</var>.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.message" title="NativeError.prototype.message"><span class="secnum">20.5.6.3.2</span> <var>NativeError</var>.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.name" title="NativeError.prototype.name"><span class="secnum">20.5.6.3.3</span> <var>NativeError</var>.prototype.name</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-nativeerror-instances" title="Properties of NativeError Instances"><span class="secnum">20.5.6.4</span> Properties of <var>NativeError</var> Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-aggregate-error-objects" title="AggregateError Objects"><span class="secnum">20.5.7</span> AggregateError Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-aggregate-error-constructor" title="The AggregateError Constructor"><span class="secnum">20.5.7.1</span> The AggregateError Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error" title="AggregateError ( errors, message [ , options ] )"><span class="secnum">20.5.7.1.1</span> AggregateError ( <var>errors</var>, <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-aggregate-error-constructors" title="Properties of the AggregateError Constructor"><span class="secnum">20.5.7.2</span> Properties of the AggregateError Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype" title="AggregateError.prototype"><span class="secnum">20.5.7.2.1</span> AggregateError.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-aggregate-error-prototype-objects" title="Properties of the AggregateError Prototype Object"><span class="secnum">20.5.7.3</span> Properties of the AggregateError Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.constructor" title="AggregateError.prototype.constructor"><span class="secnum">20.5.7.3.1</span> AggregateError.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.message" title="AggregateError.prototype.message"><span class="secnum">20.5.7.3.2</span> AggregateError.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.name" title="AggregateError.prototype.name"><span class="secnum">20.5.7.3.3</span> AggregateError.prototype.name</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-aggregate-error-instances" title="Properties of AggregateError Instances"><span class="secnum">20.5.7.4</span> Properties of AggregateError Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-abstract-operations-for-error-objects" title="Abstract Operations for Error Objects"><span class="secnum">20.5.8</span> Abstract Operations for Error Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-installerrorcause" title="InstallErrorCause ( O, options )"><span class="secnum">20.5.8.1</span> InstallErrorCause ( <var>O</var>, <var>options</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-numbers-and-dates" title="Numbers and Dates"><span class="secnum">21</span> Numbers and Dates</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number-objects" title="Number Objects"><span class="secnum">21.1</span> Number Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number-constructor" title="The Number Constructor"><span class="secnum">21.1.1</span> The Number Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number-constructor-number-value" title="Number ( value )"><span class="secnum">21.1.1.1</span> Number ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-number-constructor" title="Properties of the Number Constructor"><span class="secnum">21.1.2</span> Properties of the Number Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.epsilon" title="Number.EPSILON"><span class="secnum">21.1.2.1</span> Number.EPSILON</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isfinite" title="Number.isFinite ( number )"><span class="secnum">21.1.2.2</span> Number.isFinite ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isinteger" title="Number.isInteger ( number )"><span class="secnum">21.1.2.3</span> Number.isInteger ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isnan" title="Number.isNaN ( number )"><span class="secnum">21.1.2.4</span> Number.isNaN ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.issafeinteger" title="Number.isSafeInteger ( number )"><span class="secnum">21.1.2.5</span> Number.isSafeInteger ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.max_safe_integer" title="Number.MAX_SAFE_INTEGER"><span class="secnum">21.1.2.6</span> Number.MAX_SAFE_INTEGER</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.max_value" title="Number.MAX_VALUE"><span class="secnum">21.1.2.7</span> Number.MAX_VALUE</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.min_safe_integer" title="Number.MIN_SAFE_INTEGER"><span class="secnum">21.1.2.8</span> Number.MIN_SAFE_INTEGER</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.min_value" title="Number.MIN_VALUE"><span class="secnum">21.1.2.9</span> Number.MIN_VALUE</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.nan" title="Number.NaN"><span class="secnum">21.1.2.10</span> Number.NaN</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.negative_infinity" title="Number.NEGATIVE_INFINITY"><span class="secnum">21.1.2.11</span> Number.NEGATIVE_INFINITY</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.parsefloat" title="Number.parseFloat ( string )"><span class="secnum">21.1.2.12</span> Number.parseFloat ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.parseint" title="Number.parseInt ( string, radix )"><span class="secnum">21.1.2.13</span> Number.parseInt ( <var>string</var>, <var>radix</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.positive_infinity" title="Number.POSITIVE_INFINITY"><span class="secnum">21.1.2.14</span> Number.POSITIVE_INFINITY</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype" title="Number.prototype"><span class="secnum">21.1.2.15</span> Number.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-number-prototype-object" title="Properties of the Number Prototype Object"><span class="secnum">21.1.3</span> Properties of the Number Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.constructor" title="Number.prototype.constructor"><span class="secnum">21.1.3.1</span> Number.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.toexponential" title="Number.prototype.toExponential ( fractionDigits )"><span class="secnum">21.1.3.2</span> Number.prototype.toExponential ( <var>fractionDigits</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tofixed" title="Number.prototype.toFixed ( fractionDigits )"><span class="secnum">21.1.3.3</span> Number.prototype.toFixed ( <var>fractionDigits</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tolocalestring" title="Number.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.1.3.4</span> Number.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.toprecision" title="Number.prototype.toPrecision ( precision )"><span class="secnum">21.1.3.5</span> Number.prototype.toPrecision ( <var>precision</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tostring" title="Number.prototype.toString ( [ radix ] )"><span class="secnum">21.1.3.6</span> Number.prototype.toString ( [ <var>radix</var> ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number.prototype.valueof" title="Number.prototype.valueOf ( )"><span class="secnum">21.1.3.7</span> Number.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-thisnumbervalue" title="ThisNumberValue ( value )"><span class="secnum">21.1.3.7.1</span> ThisNumberValue ( <var>value</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-number-instances" title="Properties of Number Instances"><span class="secnum">21.1.4</span> Properties of Number Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-objects" title="BigInt Objects"><span class="secnum">21.2</span> BigInt Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-constructor" title="The BigInt Constructor"><span class="secnum">21.2.1</span> The BigInt Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-constructor-number-value" title="BigInt ( value )"><span class="secnum">21.2.1.1</span> BigInt ( <var>value</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-numbertobigint" title="NumberToBigInt ( number )"><span class="secnum">21.2.1.1.1</span> NumberToBigInt ( <var>number</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-bigint-constructor" title="Properties of the BigInt Constructor"><span class="secnum">21.2.2</span> Properties of the BigInt Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.asintn" title="BigInt.asIntN ( bits, bigint )"><span class="secnum">21.2.2.1</span> BigInt.asIntN ( <var>bits</var>, <var>bigint</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.asuintn" title="BigInt.asUintN ( bits, bigint )"><span class="secnum">21.2.2.2</span> BigInt.asUintN ( <var>bits</var>, <var>bigint</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype" title="BigInt.prototype"><span class="secnum">21.2.2.3</span> BigInt.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-bigint-prototype-object" title="Properties of the BigInt Prototype Object"><span class="secnum">21.2.3</span> Properties of the BigInt Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.constructor" title="BigInt.prototype.constructor"><span class="secnum">21.2.3.1</span> BigInt.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.tolocalestring" title="BigInt.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.2.3.2</span> BigInt.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.tostring" title="BigInt.prototype.toString ( [ radix ] )"><span class="secnum">21.2.3.3</span> BigInt.prototype.toString ( [ <var>radix</var> ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint.prototype.valueof" title="BigInt.prototype.valueOf ( )"><span class="secnum">21.2.3.4</span> BigInt.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-thisbigintvalue" title="ThisBigIntValue ( value )"><span class="secnum">21.2.3.4.1</span> ThisBigIntValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype-%symbol.tostringtag%" title="BigInt.prototype [ %Symbol.toStringTag% ]"><span class="secnum">21.2.3.5</span> BigInt.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-bigint-instances" title="Properties of BigInt Instances"><span class="secnum">21.2.4</span> Properties of BigInt Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-math-object" title="The Math Object"><span class="secnum">21.3</span> The Math Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-value-properties-of-the-math-object" title="Value Properties of the Math Object"><span class="secnum">21.3.1</span> Value Properties of the Math Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.e" title="Math.E"><span class="secnum">21.3.1.1</span> Math.E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ln10" title="Math.LN10"><span class="secnum">21.3.1.2</span> Math.LN10</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ln2" title="Math.LN2"><span class="secnum">21.3.1.3</span> Math.LN2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log10e" title="Math.LOG10E"><span class="secnum">21.3.1.4</span> Math.LOG10E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log2e" title="Math.LOG2E"><span class="secnum">21.3.1.5</span> Math.LOG2E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.pi" title="Math.PI"><span class="secnum">21.3.1.6</span> Math.PI</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt1_2" title="Math.SQRT1_2"><span class="secnum">21.3.1.7</span> Math.SQRT1_2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt2" title="Math.SQRT2"><span class="secnum">21.3.1.8</span> Math.SQRT2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math-%symbol.tostringtag%" title="Math [ %Symbol.toStringTag% ]"><span class="secnum">21.3.1.9</span> Math [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-function-properties-of-the-math-object" title="Function Properties of the Math Object"><span class="secnum">21.3.2</span> Function Properties of the Math Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.abs" title="Math.abs ( x )"><span class="secnum">21.3.2.1</span> Math.abs ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.acos" title="Math.acos ( x )"><span class="secnum">21.3.2.2</span> Math.acos ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.acosh" title="Math.acosh ( x )"><span class="secnum">21.3.2.3</span> Math.acosh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.asin" title="Math.asin ( x )"><span class="secnum">21.3.2.4</span> Math.asin ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.asinh" title="Math.asinh ( x )"><span class="secnum">21.3.2.5</span> Math.asinh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atan" title="Math.atan ( x )"><span class="secnum">21.3.2.6</span> Math.atan ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atanh" title="Math.atanh ( x )"><span class="secnum">21.3.2.7</span> Math.atanh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atan2" title="Math.atan2 ( y, x )"><span class="secnum">21.3.2.8</span> Math.atan2 ( <var>y</var>, <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cbrt" title="Math.cbrt ( x )"><span class="secnum">21.3.2.9</span> Math.cbrt ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ceil" title="Math.ceil ( x )"><span class="secnum">21.3.2.10</span> Math.ceil ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.clz32" title="Math.clz32 ( x )"><span class="secnum">21.3.2.11</span> Math.clz32 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cos" title="Math.cos ( x )"><span class="secnum">21.3.2.12</span> Math.cos ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cosh" title="Math.cosh ( x )"><span class="secnum">21.3.2.13</span> Math.cosh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.exp" title="Math.exp ( x )"><span class="secnum">21.3.2.14</span> Math.exp ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.expm1" title="Math.expm1 ( x )"><span class="secnum">21.3.2.15</span> Math.expm1 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.floor" title="Math.floor ( x )"><span class="secnum">21.3.2.16</span> Math.floor ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.fround" title="Math.fround ( x )"><span class="secnum">21.3.2.17</span> Math.fround ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.f16round" title="Math.f16round ( x )"><span class="secnum">21.3.2.18</span> Math.f16round ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.hypot" title="Math.hypot ( ...args )"><span class="secnum">21.3.2.19</span> Math.hypot ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.imul" title="Math.imul ( x, y )"><span class="secnum">21.3.2.20</span> Math.imul ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log" title="Math.log ( x )"><span class="secnum">21.3.2.21</span> Math.log ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log1p" title="Math.log1p ( x )"><span class="secnum">21.3.2.22</span> Math.log1p ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log10" title="Math.log10 ( x )"><span class="secnum">21.3.2.23</span> Math.log10 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log2" title="Math.log2 ( x )"><span class="secnum">21.3.2.24</span> Math.log2 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.max" title="Math.max ( ...args )"><span class="secnum">21.3.2.25</span> Math.max ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.min" title="Math.min ( ...args )"><span class="secnum">21.3.2.26</span> Math.min ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.pow" title="Math.pow ( base, exponent )"><span class="secnum">21.3.2.27</span> Math.pow ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.random" title="Math.random ( )"><span class="secnum">21.3.2.28</span> Math.random ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.round" title="Math.round ( x )"><span class="secnum">21.3.2.29</span> Math.round ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sign" title="Math.sign ( x )"><span class="secnum">21.3.2.30</span> Math.sign ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sin" title="Math.sin ( x )"><span class="secnum">21.3.2.31</span> Math.sin ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sinh" title="Math.sinh ( x )"><span class="secnum">21.3.2.32</span> Math.sinh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt" title="Math.sqrt ( x )"><span class="secnum">21.3.2.33</span> Math.sqrt ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sumprecise" title="Math.sumPrecise ( items )"><span class="secnum">21.3.2.34</span> Math.sumPrecise ( <var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.tan" title="Math.tan ( x )"><span class="secnum">21.3.2.35</span> Math.tan ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.tanh" title="Math.tanh ( x )"><span class="secnum">21.3.2.36</span> Math.tanh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.trunc" title="Math.trunc ( x )"><span class="secnum">21.3.2.37</span> Math.trunc ( <var>x</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-objects" title="Date Objects"><span class="secnum">21.4</span> Date Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-overview-of-date-objects-and-definitions-of-abstract-operations" title="Overview of Date Objects and Definitions of Abstract Operations"><span class="secnum">21.4.1</span> Overview of Date Objects and Definitions of Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-values-and-time-range" title="Time Values and Time Range"><span class="secnum">21.4.1.1</span> Time Values and Time Range</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-related-constants" title="Time-related Constants"><span class="secnum">21.4.1.2</span> Time-related Constants</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-day" title="Day ( t )"><span class="secnum">21.4.1.3</span> Day ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timewithinday" title="TimeWithinDay ( t )"><span class="secnum">21.4.1.4</span> TimeWithinDay ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-daysinyear" title="DaysInYear ( y )"><span class="secnum">21.4.1.5</span> DaysInYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-dayfromyear" title="DayFromYear ( y )"><span class="secnum">21.4.1.6</span> DayFromYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timefromyear" title="TimeFromYear ( y )"><span class="secnum">21.4.1.7</span> TimeFromYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-yearfromtime" title="YearFromTime ( t )"><span class="secnum">21.4.1.8</span> YearFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-daywithinyear" title="DayWithinYear ( t )"><span class="secnum">21.4.1.9</span> DayWithinYear ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-inleapyear" title="InLeapYear ( t )"><span class="secnum">21.4.1.10</span> InLeapYear ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-monthfromtime" title="MonthFromTime ( t )"><span class="secnum">21.4.1.11</span> MonthFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-datefromtime" title="DateFromTime ( t )"><span class="secnum">21.4.1.12</span> DateFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-weekday" title="WeekDay ( t )"><span class="secnum">21.4.1.13</span> WeekDay ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-hourfromtime" title="HourFromTime ( t )"><span class="secnum">21.4.1.14</span> HourFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-minfromtime" title="MinFromTime ( t )"><span class="secnum">21.4.1.15</span> MinFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-secfromtime" title="SecFromTime ( t )"><span class="secnum">21.4.1.16</span> SecFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-msfromtime" title="msFromTime ( t )"><span class="secnum">21.4.1.17</span> msFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getutcepochnanoseconds" title="GetUTCEpochNanoseconds ( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )"><span class="secnum">21.4.1.18</span> GetUTCEpochNanoseconds ( <var>year</var>, <var>month</var>, <var>day</var>, <var>hour</var>, <var>minute</var>, <var>second</var>, <var>millisecond</var>, <var>microsecond</var>, <var>nanosecond</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-zone-identifiers" title="Time Zone Identifiers"><span class="secnum">21.4.1.19</span> Time Zone Identifiers</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getnamedtimezoneepochnanoseconds" title="GetNamedTimeZoneEpochNanoseconds ( timeZoneIdentifier, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )"><span class="secnum">21.4.1.20</span> GetNamedTimeZoneEpochNanoseconds ( <var>timeZoneIdentifier</var>, <var>year</var>, <var>month</var>, <var>day</var>, <var>hour</var>, <var>minute</var>, <var>second</var>, <var>millisecond</var>, <var>microsecond</var>, <var>nanosecond</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getnamedtimezoneoffsetnanoseconds" title="GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds )"><span class="secnum">21.4.1.21</span> GetNamedTimeZoneOffsetNanoseconds ( <var>timeZoneIdentifier</var>, <var>epochNanoseconds</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-zone-identifier-record" title="Time Zone Identifier Record"><span class="secnum">21.4.1.22</span> Time Zone Identifier Record</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-availablenamedtimezoneidentifiers" title="AvailableNamedTimeZoneIdentifiers ( )"><span class="secnum">21.4.1.23</span> AvailableNamedTimeZoneIdentifiers ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-systemtimezoneidentifier" title="SystemTimeZoneIdentifier ( )"><span class="secnum">21.4.1.24</span> SystemTimeZoneIdentifier ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-localtime" title="LocalTime ( t )"><span class="secnum">21.4.1.25</span> LocalTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-utc-t" title="UTC ( t )"><span class="secnum">21.4.1.26</span> UTC ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-maketime" title="MakeTime ( hour, min, sec, ms )"><span class="secnum">21.4.1.27</span> MakeTime ( <var>hour</var>, <var>min</var>, <var>sec</var>, <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makeday" title="MakeDay ( year, month, date )"><span class="secnum">21.4.1.28</span> MakeDay ( <var>year</var>, <var>month</var>, <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makedate" title="MakeDate ( day, time )"><span class="secnum">21.4.1.29</span> MakeDate ( <var>day</var>, <var>time</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makefullyear" title="MakeFullYear ( year )"><span class="secnum">21.4.1.30</span> MakeFullYear ( <var>year</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timeclip" title="TimeClip ( time )"><span class="secnum">21.4.1.31</span> TimeClip ( <var>time</var> )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-time-string-format" title="Date Time String Format"><span class="secnum">21.4.1.32</span> Date Time String Format</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-expanded-years" title="Expanded Years"><span class="secnum">21.4.1.32.1</span> Expanded Years</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-time-zone-offset-strings" title="Time Zone Offset String Format"><span class="secnum">21.4.1.33</span> Time Zone Offset String Format</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-istimezoneoffsetstring" title="IsTimeZoneOffsetString ( offsetString )"><span class="secnum">21.4.1.33.1</span> IsTimeZoneOffsetString ( <var>offsetString</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-parsetimezoneoffsetstring" title="ParseTimeZoneOffsetString ( offsetString )"><span class="secnum">21.4.1.33.2</span> ParseTimeZoneOffsetString ( <var>offsetString</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-constructor" title="The Date Constructor"><span class="secnum">21.4.2</span> The Date Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date" title="Date ( ...values )"><span class="secnum">21.4.2.1</span> Date ( ...<var>values</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-date-constructor" title="Properties of the Date Constructor"><span class="secnum">21.4.3</span> Properties of the Date Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.now" title="Date.now ( )"><span class="secnum">21.4.3.1</span> Date.now ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.parse" title="Date.parse ( string )"><span class="secnum">21.4.3.2</span> Date.parse ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype" title="Date.prototype"><span class="secnum">21.4.3.3</span> Date.prototype</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.utc" title="Date.UTC ( year [ , month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] ] )"><span class="secnum">21.4.3.4</span> Date.UTC ( <var>year</var> [ , <var>month</var> [ , <var>date</var> [ , <var>hours</var> [ , <var>minutes</var> [ , <var>seconds</var> [ , <var>ms</var> ] ] ] ] ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-date-prototype-object" title="Properties of the Date Prototype Object"><span class="secnum">21.4.4</span> Properties of the Date Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.constructor" title="Date.prototype.constructor"><span class="secnum">21.4.4.1</span> Date.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getdate" title="Date.prototype.getDate ( )"><span class="secnum">21.4.4.2</span> Date.prototype.getDate ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getday" title="Date.prototype.getDay ( )"><span class="secnum">21.4.4.3</span> Date.prototype.getDay ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getfullyear" title="Date.prototype.getFullYear ( )"><span class="secnum">21.4.4.4</span> Date.prototype.getFullYear ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gethours" title="Date.prototype.getHours ( )"><span class="secnum">21.4.4.5</span> Date.prototype.getHours ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getmilliseconds" title="Date.prototype.getMilliseconds ( )"><span class="secnum">21.4.4.6</span> Date.prototype.getMilliseconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getminutes" title="Date.prototype.getMinutes ( )"><span class="secnum">21.4.4.7</span> Date.prototype.getMinutes ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getmonth" title="Date.prototype.getMonth ( )"><span class="secnum">21.4.4.8</span> Date.prototype.getMonth ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getseconds" title="Date.prototype.getSeconds ( )"><span class="secnum">21.4.4.9</span> Date.prototype.getSeconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gettime" title="Date.prototype.getTime ( )"><span class="secnum">21.4.4.10</span> Date.prototype.getTime ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gettimezoneoffset" title="Date.prototype.getTimezoneOffset ( )"><span class="secnum">21.4.4.11</span> Date.prototype.getTimezoneOffset ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcdate" title="Date.prototype.getUTCDate ( )"><span class="secnum">21.4.4.12</span> Date.prototype.getUTCDate ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcday" title="Date.prototype.getUTCDay ( )"><span class="secnum">21.4.4.13</span> Date.prototype.getUTCDay ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcfullyear" title="Date.prototype.getUTCFullYear ( )"><span class="secnum">21.4.4.14</span> Date.prototype.getUTCFullYear ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutchours" title="Date.prototype.getUTCHours ( )"><span class="secnum">21.4.4.15</span> Date.prototype.getUTCHours ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcmilliseconds" title="Date.prototype.getUTCMilliseconds ( )"><span class="secnum">21.4.4.16</span> Date.prototype.getUTCMilliseconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcminutes" title="Date.prototype.getUTCMinutes ( )"><span class="secnum">21.4.4.17</span> Date.prototype.getUTCMinutes ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcmonth" title="Date.prototype.getUTCMonth ( )"><span class="secnum">21.4.4.18</span> Date.prototype.getUTCMonth ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcseconds" title="Date.prototype.getUTCSeconds ( )"><span class="secnum">21.4.4.19</span> Date.prototype.getUTCSeconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setdate" title="Date.prototype.setDate ( date )"><span class="secnum">21.4.4.20</span> Date.prototype.setDate ( <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setfullyear" title="Date.prototype.setFullYear ( year [ , month [ , date ] ] )"><span class="secnum">21.4.4.21</span> Date.prototype.setFullYear ( <var>year</var> [ , <var>month</var> [ , <var>date</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.sethours" title="Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )"><span class="secnum">21.4.4.22</span> Date.prototype.setHours ( <var>hour</var> [ , <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setmilliseconds" title="Date.prototype.setMilliseconds ( ms )"><span class="secnum">21.4.4.23</span> Date.prototype.setMilliseconds ( <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setminutes" title="Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )"><span class="secnum">21.4.4.24</span> Date.prototype.setMinutes ( <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setmonth" title="Date.prototype.setMonth ( month [ , date ] )"><span class="secnum">21.4.4.25</span> Date.prototype.setMonth ( <var>month</var> [ , <var>date</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setseconds" title="Date.prototype.setSeconds ( sec [ , ms ] )"><span class="secnum">21.4.4.26</span> Date.prototype.setSeconds ( <var>sec</var> [ , <var>ms</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.settime" title="Date.prototype.setTime ( time )"><span class="secnum">21.4.4.27</span> Date.prototype.setTime ( <var>time</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcdate" title="Date.prototype.setUTCDate ( date )"><span class="secnum">21.4.4.28</span> Date.prototype.setUTCDate ( <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcfullyear" title="Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )"><span class="secnum">21.4.4.29</span> Date.prototype.setUTCFullYear ( <var>year</var> [ , <var>month</var> [ , <var>date</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutchours" title="Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )"><span class="secnum">21.4.4.30</span> Date.prototype.setUTCHours ( <var>hour</var> [ , <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcmilliseconds" title="Date.prototype.setUTCMilliseconds ( ms )"><span class="secnum">21.4.4.31</span> Date.prototype.setUTCMilliseconds ( <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcminutes" title="Date.prototype.setUTCMinutes ( min [ , sec [ , ms ] ] )"><span class="secnum">21.4.4.32</span> Date.prototype.setUTCMinutes ( <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcmonth" title="Date.prototype.setUTCMonth ( month [ , date ] )"><span class="secnum">21.4.4.33</span> Date.prototype.setUTCMonth ( <var>month</var> [ , <var>date</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcseconds" title="Date.prototype.setUTCSeconds ( sec [ , ms ] )"><span class="secnum">21.4.4.34</span> Date.prototype.setUTCSeconds ( <var>sec</var> [ , <var>ms</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.todatestring" title="Date.prototype.toDateString ( )"><span class="secnum">21.4.4.35</span> Date.prototype.toDateString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.toisostring" title="Date.prototype.toISOString ( )"><span class="secnum">21.4.4.36</span> Date.prototype.toISOString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tojson" title="Date.prototype.toJSON ( key )"><span class="secnum">21.4.4.37</span> Date.prototype.toJSON ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocaledatestring" title="Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.38</span> Date.prototype.toLocaleDateString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocalestring" title="Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.39</span> Date.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocaletimestring" title="Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.40</span> Date.prototype.toLocaleTimeString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date.prototype.tostring" title="Date.prototype.toString ( )"><span class="secnum">21.4.4.41</span> Date.prototype.toString ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timestring" title="TimeString ( tv )"><span class="secnum">21.4.4.41.1</span> TimeString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-datestring" title="DateString ( tv )"><span class="secnum">21.4.4.41.2</span> DateString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timezoneestring" title="TimeZoneString ( tv )"><span class="secnum">21.4.4.41.3</span> TimeZoneString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-todatestring" title="ToDateString ( tv )"><span class="secnum">21.4.4.41.4</span> ToDateString ( <var>tv</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.totimestring" title="Date.prototype.toTimeString ( )"><span class="secnum">21.4.4.42</span> Date.prototype.toTimeString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.toutcstring" title="Date.prototype.toUTCString ( )"><span class="secnum">21.4.4.43</span> Date.prototype.toUTCString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.valueof" title="Date.prototype.valueOf ( )"><span class="secnum">21.4.4.44</span> Date.prototype.valueOf ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype-%symbol.toprimitive%" title="Date.prototype [ %Symbol.toPrimitive% ] ( hint )"><span class="secnum">21.4.4.45</span> Date.prototype [ %Symbol.toPrimitive% ] ( <var>hint</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-date-instances" title="Properties of Date Instances"><span class="secnum">21.4.5</span> Properties of Date Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-text-processing" title="Text Processing"><span class="secnum">22</span> Text Processing</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-objects" title="String Objects"><span class="secnum">22.1</span> String Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-constructor" title="The String Constructor"><span class="secnum">22.1.1</span> The String Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string-constructor-string-value" title="String ( value )"><span class="secnum">22.1.1.1</span> String ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-string-constructor" title="Properties of the String Constructor"><span class="secnum">22.1.2</span> Properties of the String Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.fromcharcode" title="String.fromCharCode ( ...codeUnits )"><span class="secnum">22.1.2.1</span> String.fromCharCode ( ...<var>codeUnits</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.fromcodepoint" title="String.fromCodePoint ( ...codePoints )"><span class="secnum">22.1.2.2</span> String.fromCodePoint ( ...<var>codePoints</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype" title="String.prototype"><span class="secnum">22.1.2.3</span> String.prototype</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.raw" title="String.raw ( template, ...substitutions )"><span class="secnum">22.1.2.4</span> String.raw ( <var>template</var>, ...<var>substitutions</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-string-prototype-object" title="Properties of the String Prototype Object"><span class="secnum">22.1.3</span> Properties of the String Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.at" title="String.prototype.at ( index )"><span class="secnum">22.1.3.1</span> String.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.charat" title="String.prototype.charAt ( pos )"><span class="secnum">22.1.3.2</span> String.prototype.charAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.charcodeat" title="String.prototype.charCodeAt ( pos )"><span class="secnum">22.1.3.3</span> String.prototype.charCodeAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.codepointat" title="String.prototype.codePointAt ( pos )"><span class="secnum">22.1.3.4</span> String.prototype.codePointAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.concat" title="String.prototype.concat ( ...args )"><span class="secnum">22.1.3.5</span> String.prototype.concat ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.constructor" title="String.prototype.constructor"><span class="secnum">22.1.3.6</span> String.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.endswith" title="String.prototype.endsWith ( searchString [ , endPosition ] )"><span class="secnum">22.1.3.7</span> String.prototype.endsWith ( <var>searchString</var> [ , <var>endPosition</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.includes" title="String.prototype.includes ( searchString [ , position ] )"><span class="secnum">22.1.3.8</span> String.prototype.includes ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.indexof" title="String.prototype.indexOf ( searchString [ , position ] )"><span class="secnum">22.1.3.9</span> String.prototype.indexOf ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.iswellformed" title="String.prototype.isWellFormed ( )"><span class="secnum">22.1.3.10</span> String.prototype.isWellFormed ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.lastindexof" title="String.prototype.lastIndexOf ( searchString [ , position ] )"><span class="secnum">22.1.3.11</span> String.prototype.lastIndexOf ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.localecompare" title="String.prototype.localeCompare ( that [ , reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.12</span> String.prototype.localeCompare ( <var>that</var> [ , <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.match" title="String.prototype.match ( regexp )"><span class="secnum">22.1.3.13</span> String.prototype.match ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.matchall" title="String.prototype.matchAll ( regexp )"><span class="secnum">22.1.3.14</span> String.prototype.matchAll ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.normalize" title="String.prototype.normalize ( [ form ] )"><span class="secnum">22.1.3.15</span> String.prototype.normalize ( [ <var>form</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.padend" title="String.prototype.padEnd ( maxLength [ , fillString ] )"><span class="secnum">22.1.3.16</span> String.prototype.padEnd ( <var>maxLength</var> [ , <var>fillString</var> ] )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.padstart" title="String.prototype.padStart ( maxLength [ , fillString ] )"><span class="secnum">22.1.3.17</span> String.prototype.padStart ( <var>maxLength</var> [ , <var>fillString</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-stringpaddingbuiltinsimpl" title="StringPaddingBuiltinsImpl ( O, maxLength, fillString, placement )"><span class="secnum">22.1.3.17.1</span> StringPaddingBuiltinsImpl ( <var>O</var>, <var>maxLength</var>, <var>fillString</var>, <var>placement</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-stringpad" title="StringPad ( S, maxLength, fillString, placement )"><span class="secnum">22.1.3.17.2</span> StringPad ( <var>S</var>, <var>maxLength</var>, <var>fillString</var>, <var>placement</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-tozeropaddeddecimalstring" title="ToZeroPaddedDecimalString ( n, minLength )"><span class="secnum">22.1.3.17.3</span> ToZeroPaddedDecimalString ( <var>n</var>, <var>minLength</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.repeat" title="String.prototype.repeat ( count )"><span class="secnum">22.1.3.18</span> String.prototype.repeat ( <var>count</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.replace" title="String.prototype.replace ( searchValue, replaceValue )"><span class="secnum">22.1.3.19</span> String.prototype.replace ( <var>searchValue</var>, <var>replaceValue</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getsubstitution" title="GetSubstitution ( matched, str, position, captures, namedCaptures, replacementTemplate )"><span class="secnum">22.1.3.19.1</span> GetSubstitution ( <var>matched</var>, <var>str</var>, <var>position</var>, <var>captures</var>, <var>namedCaptures</var>, <var>replacementTemplate</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.replaceall" title="String.prototype.replaceAll ( searchValue, replaceValue )"><span class="secnum">22.1.3.20</span> String.prototype.replaceAll ( <var>searchValue</var>, <var>replaceValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.search" title="String.prototype.search ( regexp )"><span class="secnum">22.1.3.21</span> String.prototype.search ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.slice" title="String.prototype.slice ( start, end )"><span class="secnum">22.1.3.22</span> String.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.split" title="String.prototype.split ( separator, limit )"><span class="secnum">22.1.3.23</span> String.prototype.split ( <var>separator</var>, <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.startswith" title="String.prototype.startsWith ( searchString [ , position ] )"><span class="secnum">22.1.3.24</span> String.prototype.startsWith ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.substring" title="String.prototype.substring ( start, end )"><span class="secnum">22.1.3.25</span> String.prototype.substring ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolocalelowercase" title="String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.26</span> String.prototype.toLocaleLowerCase ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolocaleuppercase" title="String.prototype.toLocaleUpperCase ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.27</span> String.prototype.toLocaleUpperCase ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolowercase" title="String.prototype.toLowerCase ( )"><span class="secnum">22.1.3.28</span> String.prototype.toLowerCase ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tostring" title="String.prototype.toString ( )"><span class="secnum">22.1.3.29</span> String.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.touppercase" title="String.prototype.toUpperCase ( )"><span class="secnum">22.1.3.30</span> String.prototype.toUpperCase ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.towellformed" title="String.prototype.toWellFormed ( )"><span class="secnum">22.1.3.31</span> String.prototype.toWellFormed ( )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.trim" title="String.prototype.trim ( )"><span class="secnum">22.1.3.32</span> String.prototype.trim ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-trimstring" title="TrimString ( string, where )"><span class="secnum">22.1.3.32.1</span> TrimString ( <var>string</var>, <var>where</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.trimend" title="String.prototype.trimEnd ( )"><span class="secnum">22.1.3.33</span> String.prototype.trimEnd ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.trimstart" title="String.prototype.trimStart ( )"><span class="secnum">22.1.3.34</span> String.prototype.trimStart ( )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.valueof" title="String.prototype.valueOf ( )"><span class="secnum">22.1.3.35</span> String.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-thisstringvalue" title="ThisStringValue ( value )"><span class="secnum">22.1.3.35.1</span> ThisStringValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype-%symbol.iterator%" title="String.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">22.1.3.36</span> String.prototype [ %Symbol.iterator% ] ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-string-instances" title="Properties of String Instances"><span class="secnum">22.1.4</span> Properties of String Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-properties-of-string-instances-length" title="length"><span class="secnum">22.1.4.1</span> length</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-iterator-objects" title="String Iterator Objects"><span class="secnum">22.1.5</span> String Iterator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-%stringiteratorprototype%-object" title="The %StringIteratorPrototype% Object"><span class="secnum">22.1.5.1</span> The %StringIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%stringiteratorprototype%.next" title="%StringIteratorPrototype%.next ( )"><span class="secnum">22.1.5.1.1</span> %StringIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%stringiteratorprototype%-%symbol.tostringtag%" title="%StringIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">22.1.5.1.2</span> %StringIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-regular-expression-objects" title="RegExp (Regular Expression) Objects"><span class="secnum">22.2</span> RegExp (Regular Expression) Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-patterns" title="Patterns"><span class="secnum">22.2.1</span> Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">22.2.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-countleftcapturingparenswithin" title="Static Semantics: CountLeftCapturingParensWithin ( node )"><span class="secnum">22.2.1.2</span> SS: CountLeftCapturingParensWithin ( <var>node</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-countleftcapturingparensbefore" title="Static Semantics: CountLeftCapturingParensBefore ( node )"><span class="secnum">22.2.1.3</span> SS: CountLeftCapturingParensBefore ( <var>node</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-mightbothparticipate" title="Static Semantics: MightBothParticipate ( x, y )"><span class="secnum">22.2.1.4</span> SS: MightBothParticipate ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-capturing-group-number" title="Static Semantics: CapturingGroupNumber"><span class="secnum">22.2.1.5</span> SS: CapturingGroupNumber</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-is-character-class" title="Static Semantics: IsCharacterClass"><span class="secnum">22.2.1.6</span> SS: IsCharacterClass</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-character-value" title="Static Semantics: CharacterValue"><span class="secnum">22.2.1.7</span> SS: CharacterValue</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-static-semantics-maycontainstrings" title="Static Semantics: MayContainStrings"><span class="secnum">22.2.1.8</span> SS: MayContainStrings</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-groupspecifiersthatmatch" title="Static Semantics: GroupSpecifiersThatMatch ( thisGroupName )"><span class="secnum">22.2.1.9</span> SS: GroupSpecifiersThatMatch ( <var>thisGroupName</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-static-semantics-capturinggroupname" title="Static Semantics: CapturingGroupName"><span class="secnum">22.2.1.10</span> SS: CapturingGroupName</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpidentifiercodepoints" title="Static Semantics: RegExpIdentifierCodePoints"><span class="secnum">22.2.1.11</span> SS: RegExpIdentifierCodePoints</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpidentifiercodepoint" title="Static Semantics: RegExpIdentifierCodePoint"><span class="secnum">22.2.1.12</span> SS: RegExpIdentifierCodePoint</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-pattern-semantics" title="Pattern Semantics"><span class="secnum">22.2.2</span> Pattern Semantics</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-pattern-notation" title="Notation"><span class="secnum">22.2.2.1</span> Notation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-records" title="RegExp Records"><span class="secnum">22.2.2.1.1</span> RegExp Records</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilepattern" title="Runtime Semantics: CompilePattern"><span class="secnum">22.2.2.2</span> RS: CompilePattern</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compilesubpattern" title="Runtime Semantics: CompileSubpattern"><span class="secnum">22.2.2.3</span> RS: CompileSubpattern</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-repeatmatcher-abstract-operation" title="RepeatMatcher ( m, min, max, greedy, x, c, parenIndex, parenCount )"><span class="secnum">22.2.2.3.1</span> RepeatMatcher ( <var>m</var>, <var>min</var>, <var>max</var>, <var>greedy</var>, <var>x</var>, <var>c</var>, <var>parenIndex</var>, <var>parenCount</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-emptymatcher" title="EmptyMatcher ( )"><span class="secnum">22.2.2.3.2</span> EmptyMatcher ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-matchtwoalternatives" title="MatchTwoAlternatives ( m1, m2 )"><span class="secnum">22.2.2.3.3</span> MatchTwoAlternatives ( <var>m1</var>, <var>m2</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-matchsequence" title="MatchSequence ( m1, m2, direction )"><span class="secnum">22.2.2.3.4</span> MatchSequence ( <var>m1</var>, <var>m2</var>, <var>direction</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compileassertion" title="Runtime Semantics: CompileAssertion"><span class="secnum">22.2.2.4</span> RS: CompileAssertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-iswordchar-abstract-operation" title="IsWordChar ( rer, Input, e )"><span class="secnum">22.2.2.4.1</span> IsWordChar ( <var>rer</var>, <var>Input</var>, <var>e</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilequantifier" title="Runtime Semantics: CompileQuantifier"><span class="secnum">22.2.2.5</span> RS: CompileQuantifier</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilequantifierprefix" title="Runtime Semantics: CompileQuantifierPrefix"><span class="secnum">22.2.2.6</span> RS: CompileQuantifierPrefix</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compileatom" title="Runtime Semantics: CompileAtom"><span class="secnum">22.2.2.7</span> RS: CompileAtom</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation" title="CharacterSetMatcher ( rer, A, invert, direction )"><span class="secnum">22.2.2.7.1</span> CharacterSetMatcher ( <var>rer</var>, <var>A</var>, <var>invert</var>, <var>direction</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-backreference-matcher" title="BackreferenceMatcher ( rer, ns, direction )"><span class="secnum">22.2.2.7.2</span> BackreferenceMatcher ( <var>rer</var>, <var>ns</var>, <var>direction</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-canonicalize-ch" title="Canonicalize ( rer, ch )"><span class="secnum">22.2.2.7.3</span> Canonicalize ( <var>rer</var>, <var>ch</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-updatemodifiers" title="UpdateModifiers ( rer, add, remove )"><span class="secnum">22.2.2.7.4</span> UpdateModifiers ( <var>rer</var>, <var>add</var>, <var>remove</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilecharacterclass" title="Runtime Semantics: CompileCharacterClass"><span class="secnum">22.2.2.8</span> RS: CompileCharacterClass</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compiletocharset" title="Runtime Semantics: CompileToCharSet"><span class="secnum">22.2.2.9</span> RS: CompileToCharSet</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-characterrange-abstract-operation" title="CharacterRange ( A, B )"><span class="secnum">22.2.2.9.1</span> CharacterRange ( <var>A</var>, <var>B</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-haseitherunicodeflag-abstract-operation" title="HasEitherUnicodeFlag ( rer )"><span class="secnum">22.2.2.9.2</span> HasEitherUnicodeFlag ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-wordcharacters" title="WordCharacters ( rer )"><span class="secnum">22.2.2.9.3</span> WordCharacters ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-allcharacters" title="AllCharacters ( rer )"><span class="secnum">22.2.2.9.4</span> AllCharacters ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-maybesimplecasefolding" title="MaybeSimpleCaseFolding ( rer, A )"><span class="secnum">22.2.2.9.5</span> MaybeSimpleCaseFolding ( <var>rer</var>, <var>A</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-charactercomplement" title="CharacterComplement ( rer, S )"><span class="secnum">22.2.2.9.6</span> CharacterComplement ( <var>rer</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-unicodematchproperty-p" title="UnicodeMatchProperty ( rer, p )"><span class="secnum">22.2.2.9.7</span> UnicodeMatchProperty ( <var>rer</var>, <var>p</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-unicodematchpropertyvalue-p-v" title="UnicodeMatchPropertyValue ( p, v )"><span class="secnum">22.2.2.9.8</span> UnicodeMatchPropertyValue ( <var>p</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compileclasssetstring" title="Runtime Semantics: CompileClassSetString"><span class="secnum">22.2.2.10</span> RS: CompileClassSetString</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-abstract-operations-for-regexp-creation" title="Abstract Operations for RegExp Creation"><span class="secnum">22.2.3</span> Abstract Operations for RegExp Creation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpcreate" title="RegExpCreate ( P, F )"><span class="secnum">22.2.3.1</span> RegExpCreate ( <var>P</var>, <var>F</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpalloc" title="RegExpAlloc ( newTarget )"><span class="secnum">22.2.3.2</span> RegExpAlloc ( <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpinitialize" title="RegExpInitialize ( obj, pattern, flags )"><span class="secnum">22.2.3.3</span> RegExpInitialize ( <var>obj</var>, <var>pattern</var>, <var>flags</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-parsepattern" title="Static Semantics: ParsePattern ( patternText, u, v )"><span class="secnum">22.2.3.4</span> SS: ParsePattern ( <var>patternText</var>, <var>u</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-constructor" title="The RegExp Constructor"><span class="secnum">22.2.4</span> The RegExp Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-pattern-flags" title="RegExp ( pattern, flags )"><span class="secnum">22.2.4.1</span> RegExp ( <var>pattern</var>, <var>flags</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-regexp-constructor" title="Properties of the RegExp Constructor"><span class="secnum">22.2.5</span> Properties of the RegExp Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp.escape" title="RegExp.escape ( S )"><span class="secnum">22.2.5.1</span> RegExp.escape ( <var>S</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-encodeforregexpescape" title="EncodeForRegExpEscape ( cp )"><span class="secnum">22.2.5.1.1</span> EncodeForRegExpEscape ( <var>cp</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype" title="RegExp.prototype"><span class="secnum">22.2.5.2</span> RegExp.prototype</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp-%symbol.species%" title="get RegExp [ %Symbol.species% ]"><span class="secnum">22.2.5.3</span> get RegExp [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-regexp-prototype-object" title="Properties of the RegExp Prototype Object"><span class="secnum">22.2.6</span> Properties of the RegExp Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.constructor" title="RegExp.prototype.constructor"><span class="secnum">22.2.6.1</span> RegExp.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.exec" title="RegExp.prototype.exec ( string )"><span class="secnum">22.2.6.2</span> RegExp.prototype.exec ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.dotAll" title="get RegExp.prototype.dotAll"><span class="secnum">22.2.6.3</span> get RegExp.prototype.dotAll</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-get-regexp.prototype.flags" title="get RegExp.prototype.flags"><span class="secnum">22.2.6.4</span> get RegExp.prototype.flags</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexphasflag" title="RegExpHasFlag ( R, codeUnit )"><span class="secnum">22.2.6.4.1</span> RegExpHasFlag ( <var>R</var>, <var>codeUnit</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.global" title="get RegExp.prototype.global"><span class="secnum">22.2.6.5</span> get RegExp.prototype.global</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.hasIndices" title="get RegExp.prototype.hasIndices"><span class="secnum">22.2.6.6</span> get RegExp.prototype.hasIndices</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.ignorecase" title="get RegExp.prototype.ignoreCase"><span class="secnum">22.2.6.7</span> get RegExp.prototype.ignoreCase</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.match%" title="RegExp.prototype [ %Symbol.match% ] ( string )"><span class="secnum">22.2.6.8</span> RegExp.prototype [ %Symbol.match% ] ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-prototype-%symbol.matchall%" title="RegExp.prototype [ %Symbol.matchAll% ] ( string )"><span class="secnum">22.2.6.9</span> RegExp.prototype [ %Symbol.matchAll% ] ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.multiline" title="get RegExp.prototype.multiline"><span class="secnum">22.2.6.10</span> get RegExp.prototype.multiline</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.replace%" title="RegExp.prototype [ %Symbol.replace% ] ( string, replaceValue )"><span class="secnum">22.2.6.11</span> RegExp.prototype [ %Symbol.replace% ] ( <var>string</var>, <var>replaceValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.search%" title="RegExp.prototype [ %Symbol.search% ] ( string )"><span class="secnum">22.2.6.12</span> RegExp.prototype [ %Symbol.search% ] ( <var>string</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-get-regexp.prototype.source" title="get RegExp.prototype.source"><span class="secnum">22.2.6.13</span> get RegExp.prototype.source</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-escaperegexppattern" title="EscapeRegExpPattern ( P, F )"><span class="secnum">22.2.6.13.1</span> EscapeRegExpPattern ( <var>P</var>, <var>F</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.split%" title="RegExp.prototype [ %Symbol.split% ] ( string, limit )"><span class="secnum">22.2.6.14</span> RegExp.prototype [ %Symbol.split% ] ( <var>string</var>, <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.sticky" title="get RegExp.prototype.sticky"><span class="secnum">22.2.6.15</span> get RegExp.prototype.sticky</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.test" title="RegExp.prototype.test ( S )"><span class="secnum">22.2.6.16</span> RegExp.prototype.test ( <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.tostring" title="RegExp.prototype.toString ( )"><span class="secnum">22.2.6.17</span> RegExp.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.unicode" title="get RegExp.prototype.unicode"><span class="secnum">22.2.6.18</span> get RegExp.prototype.unicode</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.unicodesets" title="get RegExp.prototype.unicodeSets"><span class="secnum">22.2.6.19</span> get RegExp.prototype.unicodeSets</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-abstract-operations-for-regexp-matching" title="Abstract Operations for RegExp Matching"><span class="secnum">22.2.7</span> Abstract Operations for RegExp Matching</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpexec" title="RegExpExec ( R, S )"><span class="secnum">22.2.7.1</span> RegExpExec ( <var>R</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpbuiltinexec" title="RegExpBuiltinExec ( R, S )"><span class="secnum">22.2.7.2</span> RegExpBuiltinExec ( <var>R</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-advancestringindex" title="AdvanceStringIndex ( S, index, unicode )"><span class="secnum">22.2.7.3</span> AdvanceStringIndex ( <var>S</var>, <var>index</var>, <var>unicode</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getstringindex" title="GetStringIndex ( S, codePointIndex )"><span class="secnum">22.2.7.4</span> GetStringIndex ( <var>S</var>, <var>codePointIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-match-records" title="Match Records"><span class="secnum">22.2.7.5</span> Match Records</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getmatchstring" title="GetMatchString ( S, match )"><span class="secnum">22.2.7.6</span> GetMatchString ( <var>S</var>, <var>match</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getmatchindexpair" title="GetMatchIndexPair ( S, match )"><span class="secnum">22.2.7.7</span> GetMatchIndexPair ( <var>S</var>, <var>match</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-makematchindicesindexpairarray" title="MakeMatchIndicesIndexPairArray ( S, indices, groupNames, hasGroups )"><span class="secnum">22.2.7.8</span> MakeMatchIndicesIndexPairArray ( <var>S</var>, <var>indices</var>, <var>groupNames</var>, <var>hasGroups</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-regexp-instances" title="Properties of RegExp Instances"><span class="secnum">22.2.8</span> Properties of RegExp Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-lastindex" title="lastIndex"><span class="secnum">22.2.8.1</span> lastIndex</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-string-iterator-objects" title="RegExp String Iterator Objects"><span class="secnum">22.2.9</span> RegExp String Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-createregexpstringiterator" title="CreateRegExpStringIterator ( R, S, global, fullUnicode )"><span class="secnum">22.2.9.1</span> CreateRegExpStringIterator ( <var>R</var>, <var>S</var>, <var>global</var>, <var>fullUnicode</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-%regexpstringiteratorprototype%-object" title="The %RegExpStringIteratorPrototype% Object"><span class="secnum">22.2.9.2</span> The %RegExpStringIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%regexpstringiteratorprototype%.next" title="%RegExpStringIteratorPrototype%.next ( )"><span class="secnum">22.2.9.2.1</span> %RegExpStringIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%regexpstringiteratorprototype%-%symbol.tostringtag%" title="%RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">22.2.9.2.2</span> %RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-properties-of-regexp-string-iterator-instances" title="Properties of RegExp String Iterator Instances"><span class="secnum">22.2.9.3</span> Properties of RegExp String Iterator Instances</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-indexed-collections" title="Indexed Collections"><span class="secnum">23</span> Indexed Collections</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-objects" title="Array Objects"><span class="secnum">23.1</span> Array Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-constructor" title="The Array Constructor"><span class="secnum">23.1.1</span> The Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array" title="Array ( ...values )"><span class="secnum">23.1.1.1</span> Array ( ...<var>values</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-array-constructor" title="Properties of the Array Constructor"><span class="secnum">23.1.2</span> Properties of the Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.from" title="Array.from ( items [ , mapper [ , thisArg ] ] )"><span class="secnum">23.1.2.1</span> Array.from ( <var>items</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.fromasync" title="Array.fromAsync ( items [ , mapper [ , thisArg ] ] )"><span class="secnum">23.1.2.2</span> Array.fromAsync ( <var>items</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.isarray" title="Array.isArray ( arg )"><span class="secnum">23.1.2.3</span> Array.isArray ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.of" title="Array.of ( ...items )"><span class="secnum">23.1.2.4</span> Array.of ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype" title="Array.prototype"><span class="secnum">23.1.2.5</span> Array.prototype</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-array-%symbol.species%" title="get Array [ %Symbol.species% ]"><span class="secnum">23.1.2.6</span> get Array [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-array-prototype-object" title="Properties of the Array Prototype Object"><span class="secnum">23.1.3</span> Properties of the Array Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.at" title="Array.prototype.at ( index )"><span class="secnum">23.1.3.1</span> Array.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.concat" title="Array.prototype.concat ( ...items )"><span class="secnum">23.1.3.2</span> Array.prototype.concat ( ...<var>items</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-isconcatspreadable" title="IsConcatSpreadable ( O )"><span class="secnum">23.1.3.2.1</span> IsConcatSpreadable ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.constructor" title="Array.prototype.constructor"><span class="secnum">23.1.3.3</span> Array.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.copywithin" title="Array.prototype.copyWithin ( target, start [ , end ] )"><span class="secnum">23.1.3.4</span> Array.prototype.copyWithin ( <var>target</var>, <var>start</var> [ , <var>end</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.entries" title="Array.prototype.entries ( )"><span class="secnum">23.1.3.5</span> Array.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.every" title="Array.prototype.every ( callback [ , thisArg ] )"><span class="secnum">23.1.3.6</span> Array.prototype.every ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.fill" title="Array.prototype.fill ( value [ , start [ , end ] ] )"><span class="secnum">23.1.3.7</span> Array.prototype.fill ( <var>value</var> [ , <var>start</var> [ , <var>end</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.filter" title="Array.prototype.filter ( callback [ , thisArg ] )"><span class="secnum">23.1.3.8</span> Array.prototype.filter ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.find" title="Array.prototype.find ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.9</span> Array.prototype.find ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.findindex" title="Array.prototype.findIndex ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.10</span> Array.prototype.findIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.findlast" title="Array.prototype.findLast ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.11</span> Array.prototype.findLast ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.findlastindex" title="Array.prototype.findLastIndex ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.12</span> Array.prototype.findLastIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-findviapredicate" title="FindViaPredicate ( O, len, direction, predicate, thisArg )"><span class="secnum">23.1.3.12.1</span> FindViaPredicate ( <var>O</var>, <var>len</var>, <var>direction</var>, <var>predicate</var>, <var>thisArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.flat" title="Array.prototype.flat ( [ depth ] )"><span class="secnum">23.1.3.13</span> Array.prototype.flat ( [ <var>depth</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-flattenintoarray" title="FlattenIntoArray ( target, source, sourceLen, start, depth [ , mapperFunction [ , thisArg ] ] )"><span class="secnum">23.1.3.13.1</span> FlattenIntoArray ( <var>target</var>, <var>source</var>, <var>sourceLen</var>, <var>start</var>, <var>depth</var> [ , <var>mapperFunction</var> [ , <var>thisArg</var> ] ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.flatmap" title="Array.prototype.flatMap ( mapperFunction [ , thisArg ] )"><span class="secnum">23.1.3.14</span> Array.prototype.flatMap ( <var>mapperFunction</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.foreach" title="Array.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">23.1.3.15</span> Array.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.includes" title="Array.prototype.includes ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.16</span> Array.prototype.includes ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.indexof" title="Array.prototype.indexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.17</span> Array.prototype.indexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.join" title="Array.prototype.join ( separator )"><span class="secnum">23.1.3.18</span> Array.prototype.join ( <var>separator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.keys" title="Array.prototype.keys ( )"><span class="secnum">23.1.3.19</span> Array.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.lastindexof" title="Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.20</span> Array.prototype.lastIndexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.map" title="Array.prototype.map ( callback [ , thisArg ] )"><span class="secnum">23.1.3.21</span> Array.prototype.map ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.pop" title="Array.prototype.pop ( )"><span class="secnum">23.1.3.22</span> Array.prototype.pop ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.push" title="Array.prototype.push ( ...items )"><span class="secnum">23.1.3.23</span> Array.prototype.push ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reduce" title="Array.prototype.reduce ( callback [ , initialValue ] )"><span class="secnum">23.1.3.24</span> Array.prototype.reduce ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reduceright" title="Array.prototype.reduceRight ( callback [ , initialValue ] )"><span class="secnum">23.1.3.25</span> Array.prototype.reduceRight ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reverse" title="Array.prototype.reverse ( )"><span class="secnum">23.1.3.26</span> Array.prototype.reverse ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.shift" title="Array.prototype.shift ( )"><span class="secnum">23.1.3.27</span> Array.prototype.shift ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.slice" title="Array.prototype.slice ( start, end )"><span class="secnum">23.1.3.28</span> Array.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.some" title="Array.prototype.some ( callback [ , thisArg ] )"><span class="secnum">23.1.3.29</span> Array.prototype.some ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.sort" title="Array.prototype.sort ( comparator )"><span class="secnum">23.1.3.30</span> Array.prototype.sort ( <var>comparator</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-sortindexedproperties" title="SortIndexedProperties ( obj, len, SortCompare, holes )"><span class="secnum">23.1.3.30.1</span> SortIndexedProperties ( <var>obj</var>, <var>len</var>, <var>SortCompare</var>, <var>holes</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-comparearrayelements" title="CompareArrayElements ( x, y, comparator )"><span class="secnum">23.1.3.30.2</span> CompareArrayElements ( <var>x</var>, <var>y</var>, <var>comparator</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.splice" title="Array.prototype.splice ( start, deleteCount, ...items )"><span class="secnum">23.1.3.31</span> Array.prototype.splice ( <var>start</var>, <var>deleteCount</var>, ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tolocalestring" title="Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">23.1.3.32</span> Array.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.toreversed" title="Array.prototype.toReversed ( )"><span class="secnum">23.1.3.33</span> Array.prototype.toReversed ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tosorted" title="Array.prototype.toSorted ( comparator )"><span class="secnum">23.1.3.34</span> Array.prototype.toSorted ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tospliced" title="Array.prototype.toSpliced ( start, skipCount, ...items )"><span class="secnum">23.1.3.35</span> Array.prototype.toSpliced ( <var>start</var>, <var>skipCount</var>, ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tostring" title="Array.prototype.toString ( )"><span class="secnum">23.1.3.36</span> Array.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.unshift" title="Array.prototype.unshift ( ...items )"><span class="secnum">23.1.3.37</span> Array.prototype.unshift ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.values" title="Array.prototype.values ( )"><span class="secnum">23.1.3.38</span> Array.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.with" title="Array.prototype.with ( index, value )"><span class="secnum">23.1.3.39</span> Array.prototype.with ( <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype-%symbol.iterator%" title="Array.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">23.1.3.40</span> Array.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype-%symbol.unscopables%" title="Array.prototype [ %Symbol.unscopables% ]"><span class="secnum">23.1.3.41</span> Array.prototype [ %Symbol.unscopables% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-array-instances" title="Properties of Array Instances"><span class="secnum">23.1.4</span> Properties of Array Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-array-instances-length" title="length"><span class="secnum">23.1.4.1</span> length</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-iterator-objects" title="Array Iterator Objects"><span class="secnum">23.1.5</span> Array Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-createarrayiterator" title="CreateArrayIterator ( array, kind )"><span class="secnum">23.1.5.1</span> CreateArrayIterator ( <var>array</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%arrayiteratorprototype%-object" title="The %ArrayIteratorPrototype% Object"><span class="secnum">23.1.5.2</span> The %ArrayIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%arrayiteratorprototype%.next" title="%ArrayIteratorPrototype%.next ( )"><span class="secnum">23.1.5.2.1</span> %ArrayIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%arrayiteratorprototype%-%symbol.tostringtag%" title="%ArrayIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">23.1.5.2.2</span> %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-array-iterator-instances" title="Properties of Array Iterator Instances"><span class="secnum">23.1.5.3</span> Properties of Array Iterator Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray-objects" title="TypedArray Objects"><span class="secnum">23.2</span> TypedArray Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%typedarray%-intrinsic-object" title="The %TypedArray% Intrinsic Object"><span class="secnum">23.2.1</span> The %TypedArray% Intrinsic Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%" title="%TypedArray% ( )"><span class="secnum">23.2.1.1</span> %TypedArray% ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-%typedarray%-intrinsic-object" title="Properties of the %TypedArray% Intrinsic Object"><span class="secnum">23.2.2</span> Properties of the %TypedArray% Intrinsic Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.from" title="%TypedArray%.from ( source [ , mapper [ , thisArg ] ] )"><span class="secnum">23.2.2.1</span> %TypedArray%.from ( <var>source</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.of" title="%TypedArray%.of ( ...items )"><span class="secnum">23.2.2.2</span> %TypedArray%.of ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype" title="%TypedArray%.prototype"><span class="secnum">23.2.2.3</span> %TypedArray%.prototype</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%-%symbol.species%" title="get %TypedArray% [ %Symbol.species% ]"><span class="secnum">23.2.2.4</span> get %TypedArray% [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-%typedarrayprototype%-object" title="Properties of the %TypedArray% Prototype Object"><span class="secnum">23.2.3</span> Properties of the %TypedArray% Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.at" title="%TypedArray%.prototype.at ( index )"><span class="secnum">23.2.3.1</span> %TypedArray%.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.buffer" title="get %TypedArray%.prototype.buffer"><span class="secnum">23.2.3.2</span> get %TypedArray%.prototype.buffer</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.bytelength" title="get %TypedArray%.prototype.byteLength"><span class="secnum">23.2.3.3</span> get %TypedArray%.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.byteoffset" title="get %TypedArray%.prototype.byteOffset"><span class="secnum">23.2.3.4</span> get %TypedArray%.prototype.byteOffset</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.constructor" title="%TypedArray%.prototype.constructor"><span class="secnum">23.2.3.5</span> %TypedArray%.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.copywithin" title="%TypedArray%.prototype.copyWithin ( target, start [ , end ] )"><span class="secnum">23.2.3.6</span> %TypedArray%.prototype.copyWithin ( <var>target</var>, <var>start</var> [ , <var>end</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.entries" title="%TypedArray%.prototype.entries ( )"><span class="secnum">23.2.3.7</span> %TypedArray%.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.every" title="%TypedArray%.prototype.every ( callback [ , thisArg ] )"><span class="secnum">23.2.3.8</span> %TypedArray%.prototype.every ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.fill" title="%TypedArray%.prototype.fill ( value [ , start [ , end ] ] )"><span class="secnum">23.2.3.9</span> %TypedArray%.prototype.fill ( <var>value</var> [ , <var>start</var> [ , <var>end</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.filter" title="%TypedArray%.prototype.filter ( callback [ , thisArg ] )"><span class="secnum">23.2.3.10</span> %TypedArray%.prototype.filter ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.find" title="%TypedArray%.prototype.find ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.11</span> %TypedArray%.prototype.find ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findindex" title="%TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.12</span> %TypedArray%.prototype.findIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findlast" title="%TypedArray%.prototype.findLast ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.13</span> %TypedArray%.prototype.findLast ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findlastindex" title="%TypedArray%.prototype.findLastIndex ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.14</span> %TypedArray%.prototype.findLastIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.foreach" title="%TypedArray%.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">23.2.3.15</span> %TypedArray%.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.includes" title="%TypedArray%.prototype.includes ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.16</span> %TypedArray%.prototype.includes ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.indexof" title="%TypedArray%.prototype.indexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.17</span> %TypedArray%.prototype.indexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.join" title="%TypedArray%.prototype.join ( separator )"><span class="secnum">23.2.3.18</span> %TypedArray%.prototype.join ( <var>separator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.keys" title="%TypedArray%.prototype.keys ( )"><span class="secnum">23.2.3.19</span> %TypedArray%.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.lastindexof" title="%TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.20</span> %TypedArray%.prototype.lastIndexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.length" title="get %TypedArray%.prototype.length"><span class="secnum">23.2.3.21</span> get %TypedArray%.prototype.length</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.map" title="%TypedArray%.prototype.map ( callback [ , thisArg ] )"><span class="secnum">23.2.3.22</span> %TypedArray%.prototype.map ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reduce" title="%TypedArray%.prototype.reduce ( callback [ , initialValue ] )"><span class="secnum">23.2.3.23</span> %TypedArray%.prototype.reduce ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reduceright" title="%TypedArray%.prototype.reduceRight ( callback [ , initialValue ] )"><span class="secnum">23.2.3.24</span> %TypedArray%.prototype.reduceRight ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reverse" title="%TypedArray%.prototype.reverse ( )"><span class="secnum">23.2.3.25</span> %TypedArray%.prototype.reverse ( )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%typedarray%.prototype.set" title="%TypedArray%.prototype.set ( source [ , offset ] )"><span class="secnum">23.2.3.26</span> %TypedArray%.prototype.set ( <var>source</var> [ , <var>offset</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-settypedarrayfromarraylike" title="SetTypedArrayFromArrayLike ( target, targetOffset, source )"><span class="secnum">23.2.3.26.1</span> SetTypedArrayFromArrayLike ( <var>target</var>, <var>targetOffset</var>, <var>source</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-settypedarrayfromtypedarray" title="SetTypedArrayFromTypedArray ( target, targetOffset, source )"><span class="secnum">23.2.3.26.2</span> SetTypedArrayFromTypedArray ( <var>target</var>, <var>targetOffset</var>, <var>source</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.slice" title="%TypedArray%.prototype.slice ( start, end )"><span class="secnum">23.2.3.27</span> %TypedArray%.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.some" title="%TypedArray%.prototype.some ( callback [ , thisArg ] )"><span class="secnum">23.2.3.28</span> %TypedArray%.prototype.some ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.sort" title="%TypedArray%.prototype.sort ( comparator )"><span class="secnum">23.2.3.29</span> %TypedArray%.prototype.sort ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.subarray" title="%TypedArray%.prototype.subarray ( start, end )"><span class="secnum">23.2.3.30</span> %TypedArray%.prototype.subarray ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tolocalestring" title="%TypedArray%.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">23.2.3.31</span> %TypedArray%.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.toreversed" title="%TypedArray%.prototype.toReversed ( )"><span class="secnum">23.2.3.32</span> %TypedArray%.prototype.toReversed ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tosorted" title="%TypedArray%.prototype.toSorted ( comparator )"><span class="secnum">23.2.3.33</span> %TypedArray%.prototype.toSorted ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tostring" title="%TypedArray%.prototype.toString ( )"><span class="secnum">23.2.3.34</span> %TypedArray%.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.values" title="%TypedArray%.prototype.values ( )"><span class="secnum">23.2.3.35</span> %TypedArray%.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.with" title="%TypedArray%.prototype.with ( index, value )"><span class="secnum">23.2.3.36</span> %TypedArray%.prototype.with ( <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype-%symbol.iterator%" title="%TypedArray%.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">23.2.3.37</span> %TypedArray%.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype-%symbol.tostringtag%" title="get %TypedArray%.prototype [ %Symbol.toStringTag% ]"><span class="secnum">23.2.3.38</span> get %TypedArray%.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-abstract-operations-for-typedarray-objects" title="Abstract Operations for TypedArray Objects"><span class="secnum">23.2.4</span> Abstract Operations for TypedArray Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarraycreatefromconstructor" title="TypedArrayCreateFromConstructor ( constructor, argumentList )"><span class="secnum">23.2.4.1</span> TypedArrayCreateFromConstructor ( <var>constructor</var>, <var>argumentList</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray-create-same-type" title="TypedArrayCreateSameType ( exemplar, length )"><span class="secnum">23.2.4.2</span> TypedArrayCreateSameType ( <var>exemplar</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#typedarray-species-create" title="TypedArraySpeciesCreate ( exemplar, argumentList )"><span class="secnum">23.2.4.3</span> TypedArraySpeciesCreate ( <var>exemplar</var>, <var>argumentList</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-validatetypedarray" title="ValidateTypedArray ( O, order )"><span class="secnum">23.2.4.4</span> ValidateTypedArray ( <var>O</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarrayelementsize" title="TypedArrayElementSize ( O )"><span class="secnum">23.2.4.5</span> TypedArrayElementSize ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarrayelementtype" title="TypedArrayElementType ( O )"><span class="secnum">23.2.4.6</span> TypedArrayElementType ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-comparetypedarrayelements" title="CompareTypedArrayElements ( x, y, comparator )"><span class="secnum">23.2.4.7</span> CompareTypedArrayElements ( <var>x</var>, <var>y</var>, <var>comparator</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray-constructors" title="The TypedArray Constructors"><span class="secnum">23.2.5</span> The <var>TypedArray</var> Constructors</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray" title="TypedArray ( ...args )"><span class="secnum">23.2.5.1</span> <var>TypedArray</var> ( ...<var>args</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-allocatetypedarray" title="AllocateTypedArray ( constructorName, newTarget, defaultProto [ , length ] )"><span class="secnum">23.2.5.1.1</span> AllocateTypedArray ( <var>constructorName</var>, <var>newTarget</var>, <var>defaultProto</var> [ , <var>length</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromtypedarray" title="InitializeTypedArrayFromTypedArray ( O, srcArray )"><span class="secnum">23.2.5.1.2</span> InitializeTypedArrayFromTypedArray ( <var>O</var>, <var>srcArray</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromarraybuffer" title="InitializeTypedArrayFromArrayBuffer ( O, buffer, byteOffset, length )"><span class="secnum">23.2.5.1.3</span> InitializeTypedArrayFromArrayBuffer ( <var>O</var>, <var>buffer</var>, <var>byteOffset</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromlist" title="InitializeTypedArrayFromList ( O, values )"><span class="secnum">23.2.5.1.4</span> InitializeTypedArrayFromList ( <var>O</var>, <var>values</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromarraylike" title="InitializeTypedArrayFromArrayLike ( O, arrayLike )"><span class="secnum">23.2.5.1.5</span> InitializeTypedArrayFromArrayLike ( <var>O</var>, <var>arrayLike</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-allocatetypedarraybuffer" title="AllocateTypedArrayBuffer ( O, length )"><span class="secnum">23.2.5.1.6</span> AllocateTypedArrayBuffer ( <var>O</var>, <var>length</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-typedarray-constructors" title="Properties of the TypedArray Constructors"><span class="secnum">23.2.6</span> Properties of the <var>TypedArray</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.bytes_per_element" title="TypedArray.BYTES_PER_ELEMENT"><span class="secnum">23.2.6.1</span> <var>TypedArray</var>.BYTES_PER_ELEMENT</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype" title="TypedArray.prototype"><span class="secnum">23.2.6.2</span> <var>TypedArray</var>.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-typedarray-prototype-objects" title="Properties of the TypedArray Prototype Objects"><span class="secnum">23.2.7</span> Properties of the <var>TypedArray</var> Prototype Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype.bytes_per_element" title="TypedArray.prototype.BYTES_PER_ELEMENT"><span class="secnum">23.2.7.1</span> <var>TypedArray</var>.prototype.BYTES_PER_ELEMENT</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype.constructor" title="TypedArray.prototype.constructor"><span class="secnum">23.2.7.2</span> <var>TypedArray</var>.prototype.constructor</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-typedarray-instances" title="Properties of TypedArray Instances"><span class="secnum">23.2.8</span> Properties of <var>TypedArray</var> Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-uint8array" title="Uint8Array Objects"><span class="secnum">23.3</span> Uint8Array Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-additional-properties-of-the-uint8array-constructor" title="Additional Properties of the Uint8Array Constructor"><span class="secnum">23.3.1</span> Additional Properties of the Uint8Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.frombase64" title="Uint8Array.fromBase64 ( string [ , options ] )"><span class="secnum">23.3.1.1</span> Uint8Array.fromBase64 ( <var>string</var> [ , <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.fromhex" title="Uint8Array.fromHex ( string )"><span class="secnum">23.3.1.2</span> Uint8Array.fromHex ( <var>string</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-additional-properties-of-the-uint8array-prototype-object" title="Additional Properties of the Uint8Array Prototype Object"><span class="secnum">23.3.2</span> Additional Properties of the Uint8Array Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.setfrombase64" title="Uint8Array.prototype.setFromBase64 ( string [ , options ] )"><span class="secnum">23.3.2.1</span> Uint8Array.prototype.setFromBase64 ( <var>string</var> [ , <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.setfromhex" title="Uint8Array.prototype.setFromHex ( string )"><span class="secnum">23.3.2.2</span> Uint8Array.prototype.setFromHex ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.tobase64" title="Uint8Array.prototype.toBase64 ( [ options ] )"><span class="secnum">23.3.2.3</span> Uint8Array.prototype.toBase64 ( [ <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.tohex" title="Uint8Array.prototype.toHex ( )"><span class="secnum">23.3.2.4</span> Uint8Array.prototype.toHex ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-abstract-operations-for-uint8array-objects" title="Abstract Operations for Uint8Array Objects"><span class="secnum">23.3.3</span> Abstract Operations for Uint8Array Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-validateuint8array" title="ValidateUint8Array ( ta )"><span class="secnum">23.3.3.1</span> ValidateUint8Array ( <var>ta</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-getuint8arraybytes" title="GetUint8ArrayBytes ( ta )"><span class="secnum">23.3.3.2</span> GetUint8ArrayBytes ( <var>ta</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-setuint8arraybytes" title="SetUint8ArrayBytes ( into, bytes )"><span class="secnum">23.3.3.3</span> SetUint8ArrayBytes ( <var>into</var>, <var>bytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-skipasciiwhitespace" title="SkipAsciiWhitespace ( string, index )"><span class="secnum">23.3.3.4</span> SkipAsciiWhitespace ( <var>string</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-decodefinalbase64chunk" title="DecodeFinalBase64Chunk ( chunk, throwOnExtraBits )"><span class="secnum">23.3.3.5</span> DecodeFinalBase64Chunk ( <var>chunk</var>, <var>throwOnExtraBits</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-decodefulllengthbase64chunk" title="DecodeFullLengthBase64Chunk ( chunk )"><span class="secnum">23.3.3.6</span> DecodeFullLengthBase64Chunk ( <var>chunk</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-frombase64" title="FromBase64 ( string, alphabet, lastChunkHandling [ , maxLength ] )"><span class="secnum">23.3.3.7</span> FromBase64 ( <var>string</var>, <var>alphabet</var>, <var>lastChunkHandling</var> [ , <var>maxLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-fromhex" title="FromHex ( string [ , maxLength ] )"><span class="secnum">23.3.3.8</span> FromHex ( <var>string</var> [ , <var>maxLength</var> ] )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-keyed-collections" title="Keyed Collections"><span class="secnum">24</span> Keyed Collections</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-objects" title="Map Objects"><span class="secnum">24.1</span> Map Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-constructor" title="The Map Constructor"><span class="secnum">24.1.1</span> The Map Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map-iterable" title="Map ( [ iterable ] )"><span class="secnum">24.1.1.1</span> Map ( [ <var>iterable</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-add-entries-from-iterable" title="AddEntriesFromIterable ( target, iterable, adder )"><span class="secnum">24.1.1.2</span> AddEntriesFromIterable ( <var>target</var>, <var>iterable</var>, <var>adder</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-map-constructor" title="Properties of the Map Constructor"><span class="secnum">24.1.2</span> Properties of the Map Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.groupby" title="Map.groupBy ( items, callback )"><span class="secnum">24.1.2.1</span> Map.groupBy ( <var>items</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype" title="Map.prototype"><span class="secnum">24.1.2.2</span> Map.prototype</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-map-%symbol.species%" title="get Map [ %Symbol.species% ]"><span class="secnum">24.1.2.3</span> get Map [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-map-prototype-object" title="Properties of the Map Prototype Object"><span class="secnum">24.1.3</span> Properties of the Map Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.clear" title="Map.prototype.clear ( )"><span class="secnum">24.1.3.1</span> Map.prototype.clear ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.constructor" title="Map.prototype.constructor"><span class="secnum">24.1.3.2</span> Map.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.delete" title="Map.prototype.delete ( key )"><span class="secnum">24.1.3.3</span> Map.prototype.delete ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.entries" title="Map.prototype.entries ( )"><span class="secnum">24.1.3.4</span> Map.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.foreach" title="Map.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">24.1.3.5</span> Map.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.get" title="Map.prototype.get ( key )"><span class="secnum">24.1.3.6</span> Map.prototype.get ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.getorinsert" title="Map.prototype.getOrInsert ( key, value )"><span class="secnum">24.1.3.7</span> Map.prototype.getOrInsert ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.getorinsertcomputed" title="Map.prototype.getOrInsertComputed ( key, callback )"><span class="secnum">24.1.3.8</span> Map.prototype.getOrInsertComputed ( <var>key</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.has" title="Map.prototype.has ( key )"><span class="secnum">24.1.3.9</span> Map.prototype.has ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.keys" title="Map.prototype.keys ( )"><span class="secnum">24.1.3.10</span> Map.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.set" title="Map.prototype.set ( key, value )"><span class="secnum">24.1.3.11</span> Map.prototype.set ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-map.prototype.size" title="get Map.prototype.size"><span class="secnum">24.1.3.12</span> get Map.prototype.size</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.values" title="Map.prototype.values ( )"><span class="secnum">24.1.3.13</span> Map.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype-%symbol.iterator%" title="Map.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">24.1.3.14</span> Map.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype-%symbol.tostringtag%" title="Map.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.1.3.15</span> Map.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-map-instances" title="Properties of Map Instances"><span class="secnum">24.1.4</span> Properties of Map Instances</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-iterator-objects" title="Map Iterator Objects"><span class="secnum">24.1.5</span> Map Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-createmapiterator" title="CreateMapIterator ( map, kind )"><span class="secnum">24.1.5.1</span> CreateMapIterator ( <var>map</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-%mapiteratorprototype%-object" title="The %MapIteratorPrototype% Object"><span class="secnum">24.1.5.2</span> The %MapIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%mapiteratorprototype%.next" title="%MapIteratorPrototype%.next ( )"><span class="secnum">24.1.5.2.1</span> %MapIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%mapiteratorprototype%-%symbol.tostringtag%" title="%MapIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">24.1.5.2.2</span> %MapIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-objects" title="Set Objects"><span class="secnum">24.2</span> Set Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-abstract-operations-for-set-objects" title="Abstract Operations For Set Objects"><span class="secnum">24.2.1</span> Abstract Operations For Set Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set-records" title="Set Records"><span class="secnum">24.2.1.1</span> Set Records</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-getsetrecord" title="GetSetRecord ( obj )"><span class="secnum">24.2.1.2</span> GetSetRecord ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdatahas" title="SetDataHas ( setData, value )"><span class="secnum">24.2.1.3</span> SetDataHas ( <var>setData</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdataindex" title="SetDataIndex ( setData, value )"><span class="secnum">24.2.1.4</span> SetDataIndex ( <var>setData</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdatasize" title="SetDataSize ( setData )"><span class="secnum">24.2.1.5</span> SetDataSize ( <var>setData</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-constructor" title="The Set Constructor"><span class="secnum">24.2.2</span> The Set Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set-iterable" title="Set ( [ iterable ] )"><span class="secnum">24.2.2.1</span> Set ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-set-constructor" title="Properties of the Set Constructor"><span class="secnum">24.2.3</span> Properties of the Set Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype" title="Set.prototype"><span class="secnum">24.2.3.1</span> Set.prototype</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-set-%symbol.species%" title="get Set [ %Symbol.species% ]"><span class="secnum">24.2.3.2</span> get Set [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-set-prototype-object" title="Properties of the Set Prototype Object"><span class="secnum">24.2.4</span> Properties of the Set Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.add" title="Set.prototype.add ( value )"><span class="secnum">24.2.4.1</span> Set.prototype.add ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.clear" title="Set.prototype.clear ( )"><span class="secnum">24.2.4.2</span> Set.prototype.clear ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.constructor" title="Set.prototype.constructor"><span class="secnum">24.2.4.3</span> Set.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.delete" title="Set.prototype.delete ( value )"><span class="secnum">24.2.4.4</span> Set.prototype.delete ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.difference" title="Set.prototype.difference ( other )"><span class="secnum">24.2.4.5</span> Set.prototype.difference ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.entries" title="Set.prototype.entries ( )"><span class="secnum">24.2.4.6</span> Set.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.foreach" title="Set.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">24.2.4.7</span> Set.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.has" title="Set.prototype.has ( value )"><span class="secnum">24.2.4.8</span> Set.prototype.has ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.intersection" title="Set.prototype.intersection ( other )"><span class="secnum">24.2.4.9</span> Set.prototype.intersection ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.isdisjointfrom" title="Set.prototype.isDisjointFrom ( other )"><span class="secnum">24.2.4.10</span> Set.prototype.isDisjointFrom ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.issubsetof" title="Set.prototype.isSubsetOf ( other )"><span class="secnum">24.2.4.11</span> Set.prototype.isSubsetOf ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.issupersetof" title="Set.prototype.isSupersetOf ( other )"><span class="secnum">24.2.4.12</span> Set.prototype.isSupersetOf ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.keys" title="Set.prototype.keys ( )"><span class="secnum">24.2.4.13</span> Set.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-set.prototype.size" title="get Set.prototype.size"><span class="secnum">24.2.4.14</span> get Set.prototype.size</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.symmetricdifference" title="Set.prototype.symmetricDifference ( other )"><span class="secnum">24.2.4.15</span> Set.prototype.symmetricDifference ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.union" title="Set.prototype.union ( other )"><span class="secnum">24.2.4.16</span> Set.prototype.union ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.values" title="Set.prototype.values ( )"><span class="secnum">24.2.4.17</span> Set.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype-%symbol.iterator%" title="Set.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">24.2.4.18</span> Set.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype-%symbol.tostringtag%" title="Set.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.2.4.19</span> Set.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-set-instances" title="Properties of Set Instances"><span class="secnum">24.2.5</span> Properties of Set Instances</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-iterator-objects" title="Set Iterator Objects"><span class="secnum">24.2.6</span> Set Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-createsetiterator" title="CreateSetIterator ( set, kind )"><span class="secnum">24.2.6.1</span> CreateSetIterator ( <var>set</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-%setiteratorprototype%-object" title="The %SetIteratorPrototype% Object"><span class="secnum">24.2.6.2</span> The %SetIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%setiteratorprototype%.next" title="%SetIteratorPrototype%.next ( )"><span class="secnum">24.2.6.2.1</span> %SetIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%setiteratorprototype%-%symbol.tostringtag%" title="%SetIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">24.2.6.2.2</span> %SetIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakmap-objects" title="WeakMap Objects"><span class="secnum">24.3</span> WeakMap Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakmap-constructor" title="The WeakMap Constructor"><span class="secnum">24.3.1</span> The WeakMap Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap-iterable" title="WeakMap ( [ iterable ] )"><span class="secnum">24.3.1.1</span> WeakMap ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakmap-constructor" title="Properties of the WeakMap Constructor"><span class="secnum">24.3.2</span> Properties of the WeakMap Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype" title="WeakMap.prototype"><span class="secnum">24.3.2.1</span> WeakMap.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakmap-prototype-object" title="Properties of the WeakMap Prototype Object"><span class="secnum">24.3.3</span> Properties of the WeakMap Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.constructor" title="WeakMap.prototype.constructor"><span class="secnum">24.3.3.1</span> WeakMap.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.delete" title="WeakMap.prototype.delete ( key )"><span class="secnum">24.3.3.2</span> WeakMap.prototype.delete ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.get" title="WeakMap.prototype.get ( key )"><span class="secnum">24.3.3.3</span> WeakMap.prototype.get ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.getorinsert" title="WeakMap.prototype.getOrInsert ( key, value )"><span class="secnum">24.3.3.4</span> WeakMap.prototype.getOrInsert ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.getorinsertcomputed" title="WeakMap.prototype.getOrInsertComputed ( key, callback )"><span class="secnum">24.3.3.5</span> WeakMap.prototype.getOrInsertComputed ( <var>key</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.has" title="WeakMap.prototype.has ( key )"><span class="secnum">24.3.3.6</span> WeakMap.prototype.has ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.set" title="WeakMap.prototype.set ( key, value )"><span class="secnum">24.3.3.7</span> WeakMap.prototype.set ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype-%symbol.tostringtag%" title="WeakMap.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.3.3.8</span> WeakMap.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-weakmap-instances" title="Properties of WeakMap Instances"><span class="secnum">24.3.4</span> Properties of WeakMap Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakset-objects" title="WeakSet Objects"><span class="secnum">24.4</span> WeakSet Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakset-constructor" title="The WeakSet Constructor"><span class="secnum">24.4.1</span> The WeakSet Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset-iterable" title="WeakSet ( [ iterable ] )"><span class="secnum">24.4.1.1</span> WeakSet ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakset-constructor" title="Properties of the WeakSet Constructor"><span class="secnum">24.4.2</span> Properties of the WeakSet Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype" title="WeakSet.prototype"><span class="secnum">24.4.2.1</span> WeakSet.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakset-prototype-object" title="Properties of the WeakSet Prototype Object"><span class="secnum">24.4.3</span> Properties of the WeakSet Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.add" title="WeakSet.prototype.add ( value )"><span class="secnum">24.4.3.1</span> WeakSet.prototype.add ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.constructor" title="WeakSet.prototype.constructor"><span class="secnum">24.4.3.2</span> WeakSet.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.delete" title="WeakSet.prototype.delete ( value )"><span class="secnum">24.4.3.3</span> WeakSet.prototype.delete ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.has" title="WeakSet.prototype.has ( value )"><span class="secnum">24.4.3.4</span> WeakSet.prototype.has ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype-%symbol.tostringtag%" title="WeakSet.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.4.3.5</span> WeakSet.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-weakset-instances" title="Properties of WeakSet Instances"><span class="secnum">24.4.4</span> Properties of WeakSet Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-abstract-operations-for-keyed-collections" title="Abstract Operations for Keyed Collections"><span class="secnum">24.5</span> Abstract Operations for Keyed Collections</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-canonicalizekeyedcollectionkey" title="CanonicalizeKeyedCollectionKey ( key )"><span class="secnum">24.5.1</span> CanonicalizeKeyedCollectionKey ( <var>key</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-structured-data" title="Structured Data"><span class="secnum">25</span> Structured Data</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-arraybuffer-objects" title="ArrayBuffer Objects"><span class="secnum">25.1</span> ArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer-notation" title="Notation"><span class="secnum">25.1.1</span> Notation</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-fixed-length-and-resizable-arraybuffer-objects" title="Fixed-length and Resizable ArrayBuffer Objects"><span class="secnum">25.1.2</span> Fixed-length and Resizable ArrayBuffer Objects</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-arraybuffer-objects" title="Abstract Operations For ArrayBuffer Objects"><span class="secnum">25.1.3</span> Abstract Operations For ArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-allocatearraybuffer" title="AllocateArrayBuffer ( constructor, byteLength [ , maxByteLength ] )"><span class="secnum">25.1.3.1</span> AllocateArrayBuffer ( <var>constructor</var>, <var>byteLength</var> [ , <var>maxByteLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybufferbytelength" title="ArrayBufferByteLength ( arrayBuffer, order )"><span class="secnum">25.1.3.2</span> ArrayBufferByteLength ( <var>arrayBuffer</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffercopyanddetach" title="ArrayBufferCopyAndDetach ( arrayBuffer, newLength, preserveResizability )"><span class="secnum">25.1.3.3</span> ArrayBufferCopyAndDetach ( <var>arrayBuffer</var>, <var>newLength</var>, <var>preserveResizability</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isdetachedbuffer" title="IsDetachedBuffer ( arrayBuffer )"><span class="secnum">25.1.3.4</span> IsDetachedBuffer ( <var>arrayBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-detacharraybuffer" title="DetachArrayBuffer ( arrayBuffer [ , key ] )"><span class="secnum">25.1.3.5</span> DetachArrayBuffer ( <var>arrayBuffer</var> [ , <var>key</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-clonearraybuffer" title="CloneArrayBuffer ( srcBuffer, srcByteOffset, srcLength )"><span class="secnum">25.1.3.6</span> CloneArrayBuffer ( <var>srcBuffer</var>, <var>srcByteOffset</var>, <var>srcLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getarraybuffermaxbytelengthoption" title="GetArrayBufferMaxByteLengthOption ( options )"><span class="secnum">25.1.3.7</span> GetArrayBufferMaxByteLengthOption ( <var>options</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-hostresizearraybuffer" title="HostResizeArrayBuffer ( buffer, newByteLength )"><span class="secnum">25.1.3.8</span> HostResizeArrayBuffer ( <var>buffer</var>, <var>newByteLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isfixedlengtharraybuffer" title="IsFixedLengthArrayBuffer ( arrayBuffer )"><span class="secnum">25.1.3.9</span> IsFixedLengthArrayBuffer ( <var>arrayBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isunsignedelementtype" title="IsUnsignedElementType ( type )"><span class="secnum">25.1.3.10</span> IsUnsignedElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isunclampedintegerelementtype" title="IsUnclampedIntegerElementType ( type )"><span class="secnum">25.1.3.11</span> IsUnclampedIntegerElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isbigintelementtype" title="IsBigIntElementType ( type )"><span class="secnum">25.1.3.12</span> IsBigIntElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isnotearconfiguration" title="IsNoTearConfiguration ( type, order )"><span class="secnum">25.1.3.13</span> IsNoTearConfiguration ( <var>type</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-rawbytestonumeric" title="RawBytesToNumeric ( type, rawBytes, isLittleEndian )"><span class="secnum">25.1.3.14</span> RawBytesToNumeric ( <var>type</var>, <var>rawBytes</var>, <var>isLittleEndian</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getrawbytesfromsharedblock" title="GetRawBytesFromSharedBlock ( block, byteIndex, type, isTypedArray, order )"><span class="secnum">25.1.3.15</span> GetRawBytesFromSharedBlock ( <var>block</var>, <var>byteIndex</var>, <var>type</var>, <var>isTypedArray</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getvaluefrombuffer" title="GetValueFromBuffer ( arrayBuffer, byteIndex, type, isTypedArray, order [ , isLittleEndian ] )"><span class="secnum">25.1.3.16</span> GetValueFromBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>isTypedArray</var>, <var>order</var> [ , <var>isLittleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-numerictorawbytes" title="NumericToRawBytes ( type, value, isLittleEndian )"><span class="secnum">25.1.3.17</span> NumericToRawBytes ( <var>type</var>, <var>value</var>, <var>isLittleEndian</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-setvalueinbuffer" title="SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] )"><span class="secnum">25.1.3.18</span> SetValueInBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>value</var>, <var>isTypedArray</var>, <var>order</var> [ , <var>isLittleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getmodifysetvalueinbuffer" title="GetModifySetValueInBuffer ( arrayBuffer, byteIndex, type, value, op )"><span class="secnum">25.1.3.19</span> GetModifySetValueInBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>value</var>, <var>op</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-arraybuffer-constructor" title="The ArrayBuffer Constructor"><span class="secnum">25.1.4</span> The ArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer-length" title="ArrayBuffer ( length [ , options ] )"><span class="secnum">25.1.4.1</span> ArrayBuffer ( <var>length</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-arraybuffer-constructor" title="Properties of the ArrayBuffer Constructor"><span class="secnum">25.1.5</span> Properties of the ArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.isview" title="ArrayBuffer.isView ( arg )"><span class="secnum">25.1.5.1</span> ArrayBuffer.isView ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype" title="ArrayBuffer.prototype"><span class="secnum">25.1.5.2</span> ArrayBuffer.prototype</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer-%symbol.species%" title="get ArrayBuffer [ %Symbol.species% ]"><span class="secnum">25.1.5.3</span> get ArrayBuffer [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-arraybuffer-prototype-object" title="Properties of the ArrayBuffer Prototype Object"><span class="secnum">25.1.6</span> Properties of the ArrayBuffer Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.bytelength" title="get ArrayBuffer.prototype.byteLength"><span class="secnum">25.1.6.1</span> get ArrayBuffer.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.constructor" title="ArrayBuffer.prototype.constructor"><span class="secnum">25.1.6.2</span> ArrayBuffer.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.detached" title="get ArrayBuffer.prototype.detached"><span class="secnum">25.1.6.3</span> get ArrayBuffer.prototype.detached</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.maxbytelength" title="get ArrayBuffer.prototype.maxByteLength"><span class="secnum">25.1.6.4</span> get ArrayBuffer.prototype.maxByteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.resizable" title="get ArrayBuffer.prototype.resizable"><span class="secnum">25.1.6.5</span> get ArrayBuffer.prototype.resizable</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.resize" title="ArrayBuffer.prototype.resize ( newLength )"><span class="secnum">25.1.6.6</span> ArrayBuffer.prototype.resize ( <var>newLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.slice" title="ArrayBuffer.prototype.slice ( start, end )"><span class="secnum">25.1.6.7</span> ArrayBuffer.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.transfer" title="ArrayBuffer.prototype.transfer ( [ newLength ] )"><span class="secnum">25.1.6.8</span> ArrayBuffer.prototype.transfer ( [ <var>newLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.transfertofixedlength" title="ArrayBuffer.prototype.transferToFixedLength ( [ newLength ] )"><span class="secnum">25.1.6.9</span> ArrayBuffer.prototype.transferToFixedLength ( [ <var>newLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype-%symbol.tostringtag%" title="ArrayBuffer.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.1.6.10</span> ArrayBuffer.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-the-arraybuffer-instances" title="Properties of ArrayBuffer Instances"><span class="secnum">25.1.7</span> Properties of ArrayBuffer Instances</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-resizable-arraybuffer-guidelines" title="Resizable ArrayBuffer Guidelines"><span class="secnum">25.1.8</span> Resizable ArrayBuffer Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-sharedarraybuffer-objects" title="SharedArrayBuffer Objects"><span class="secnum">25.2</span> SharedArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-fixed-length-and-growable-sharedarraybuffer-objects" title="Fixed-length and Growable SharedArrayBuffer Objects"><span class="secnum">25.2.1</span> Fixed-length and Growable SharedArrayBuffer Objects</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-sharedarraybuffer-objects" title="Abstract Operations for SharedArrayBuffer Objects"><span class="secnum">25.2.2</span> Abstract Operations for SharedArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-allocatesharedarraybuffer" title="AllocateSharedArrayBuffer ( constructor, byteLength [ , maxByteLength ] )"><span class="secnum">25.2.2.1</span> AllocateSharedArrayBuffer ( <var>constructor</var>, <var>byteLength</var> [ , <var>maxByteLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-issharedarraybuffer" title="IsSharedArrayBuffer ( obj )"><span class="secnum">25.2.2.2</span> IsSharedArrayBuffer ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isgrowablesharedarraybuffer" title="IsGrowableSharedArrayBuffer ( obj )"><span class="secnum">25.2.2.3</span> IsGrowableSharedArrayBuffer ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-hostgrowsharedarraybuffer" title="HostGrowSharedArrayBuffer ( buffer, newByteLength )"><span class="secnum">25.2.2.4</span> HostGrowSharedArrayBuffer ( <var>buffer</var>, <var>newByteLength</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-sharedarraybuffer-constructor" title="The SharedArrayBuffer Constructor"><span class="secnum">25.2.3</span> The SharedArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer-length" title="SharedArrayBuffer ( length [ , options ] )"><span class="secnum">25.2.3.1</span> SharedArrayBuffer ( <var>length</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-constructor" title="Properties of the SharedArrayBuffer Constructor"><span class="secnum">25.2.4</span> Properties of the SharedArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype" title="SharedArrayBuffer.prototype"><span class="secnum">25.2.4.1</span> SharedArrayBuffer.prototype</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer-%symbol.species%" title="get SharedArrayBuffer [ %Symbol.species% ]"><span class="secnum">25.2.4.2</span> get SharedArrayBuffer [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-prototype-object" title="Properties of the SharedArrayBuffer Prototype Object"><span class="secnum">25.2.5</span> Properties of the SharedArrayBuffer Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.bytelength" title="get SharedArrayBuffer.prototype.byteLength"><span class="secnum">25.2.5.1</span> get SharedArrayBuffer.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.constructor" title="SharedArrayBuffer.prototype.constructor"><span class="secnum">25.2.5.2</span> SharedArrayBuffer.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.grow" title="SharedArrayBuffer.prototype.grow ( newLength )"><span class="secnum">25.2.5.3</span> SharedArrayBuffer.prototype.grow ( <var>newLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.growable" title="get SharedArrayBuffer.prototype.growable"><span class="secnum">25.2.5.4</span> get SharedArrayBuffer.prototype.growable</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.maxbytelength" title="get SharedArrayBuffer.prototype.maxByteLength"><span class="secnum">25.2.5.5</span> get SharedArrayBuffer.prototype.maxByteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.slice" title="SharedArrayBuffer.prototype.slice ( start, end )"><span class="secnum">25.2.5.6</span> SharedArrayBuffer.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype-%symbol.tostringtag%" title="SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.2.5.7</span> SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-instances" title="Properties of SharedArrayBuffer Instances"><span class="secnum">25.2.6</span> Properties of SharedArrayBuffer Instances</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-growable-sharedarraybuffer-guidelines" title="Growable SharedArrayBuffer Guidelines"><span class="secnum">25.2.7</span> Growable SharedArrayBuffer Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-dataview-objects" title="DataView Objects"><span class="secnum">25.3</span> DataView Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-dataview-objects" title="Abstract Operations For DataView Objects"><span class="secnum">25.3.1</span> Abstract Operations For DataView Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview-with-buffer-witness-records" title="DataView With Buffer Witness Records"><span class="secnum">25.3.1.1</span> DataView With Buffer Witness Records</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-makedataviewwithbufferwitnessrecord" title="MakeDataViewWithBufferWitnessRecord ( obj, order )"><span class="secnum">25.3.1.2</span> MakeDataViewWithBufferWitnessRecord ( <var>obj</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getviewbytelength" title="GetViewByteLength ( viewRecord )"><span class="secnum">25.3.1.3</span> GetViewByteLength ( <var>viewRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isviewoutofbounds" title="IsViewOutOfBounds ( viewRecord )"><span class="secnum">25.3.1.4</span> IsViewOutOfBounds ( <var>viewRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getviewvalue" title="GetViewValue ( view, requestIndex, isLittleEndian, type )"><span class="secnum">25.3.1.5</span> GetViewValue ( <var>view</var>, <var>requestIndex</var>, <var>isLittleEndian</var>, <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-setviewvalue" title="SetViewValue ( view, requestIndex, isLittleEndian, type, value )"><span class="secnum">25.3.1.6</span> SetViewValue ( <var>view</var>, <var>requestIndex</var>, <var>isLittleEndian</var>, <var>type</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-dataview-constructor" title="The DataView Constructor"><span class="secnum">25.3.2</span> The DataView Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview-buffer-byteoffset-bytelength" title="DataView ( buffer [ , byteOffset [ , byteLength ] ] )"><span class="secnum">25.3.2.1</span> DataView ( <var>buffer</var> [ , <var>byteOffset</var> [ , <var>byteLength</var> ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-dataview-constructor" title="Properties of the DataView Constructor"><span class="secnum">25.3.3</span> Properties of the DataView Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype" title="DataView.prototype"><span class="secnum">25.3.3.1</span> DataView.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-dataview-prototype-object" title="Properties of the DataView Prototype Object"><span class="secnum">25.3.4</span> Properties of the DataView Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.buffer" title="get DataView.prototype.buffer"><span class="secnum">25.3.4.1</span> get DataView.prototype.buffer</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.bytelength" title="get DataView.prototype.byteLength"><span class="secnum">25.3.4.2</span> get DataView.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.byteoffset" title="get DataView.prototype.byteOffset"><span class="secnum">25.3.4.3</span> get DataView.prototype.byteOffset</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.constructor" title="DataView.prototype.constructor"><span class="secnum">25.3.4.4</span> DataView.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getbigint64" title="DataView.prototype.getBigInt64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.5</span> DataView.prototype.getBigInt64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getbiguint64" title="DataView.prototype.getBigUint64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.6</span> DataView.prototype.getBigUint64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat16" title="DataView.prototype.getFloat16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.7</span> DataView.prototype.getFloat16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat32" title="DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.8</span> DataView.prototype.getFloat32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat64" title="DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.9</span> DataView.prototype.getFloat64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint8" title="DataView.prototype.getInt8 ( byteOffset )"><span class="secnum">25.3.4.10</span> DataView.prototype.getInt8 ( <var>byteOffset</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint16" title="DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.11</span> DataView.prototype.getInt16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint32" title="DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.12</span> DataView.prototype.getInt32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint8" title="DataView.prototype.getUint8 ( byteOffset )"><span class="secnum">25.3.4.13</span> DataView.prototype.getUint8 ( <var>byteOffset</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint16" title="DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.14</span> DataView.prototype.getUint16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint32" title="DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.15</span> DataView.prototype.getUint32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setbigint64" title="DataView.prototype.setBigInt64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.16</span> DataView.prototype.setBigInt64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setbiguint64" title="DataView.prototype.setBigUint64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.17</span> DataView.prototype.setBigUint64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat16" title="DataView.prototype.setFloat16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.18</span> DataView.prototype.setFloat16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat32" title="DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.19</span> DataView.prototype.setFloat32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat64" title="DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.20</span> DataView.prototype.setFloat64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint8" title="DataView.prototype.setInt8 ( byteOffset, value )"><span class="secnum">25.3.4.21</span> DataView.prototype.setInt8 ( <var>byteOffset</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint16" title="DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.22</span> DataView.prototype.setInt16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint32" title="DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.23</span> DataView.prototype.setInt32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint8" title="DataView.prototype.setUint8 ( byteOffset, value )"><span class="secnum">25.3.4.24</span> DataView.prototype.setUint8 ( <var>byteOffset</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint16" title="DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.25</span> DataView.prototype.setUint16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint32" title="DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.26</span> DataView.prototype.setUint32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype-%symbol.tostringtag%" title="DataView.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.3.4.27</span> DataView.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-dataview-instances" title="Properties of DataView Instances"><span class="secnum">25.3.5</span> Properties of DataView Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-atomics-object" title="The Atomics Object"><span class="secnum">25.4</span> The Atomics Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-waiter-record" title="Waiter Record"><span class="secnum">25.4.1</span> Waiter Record</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-waiterlist-records" title="WaiterList Records"><span class="secnum">25.4.2</span> WaiterList Records</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-atomics" title="Abstract Operations for Atomics"><span class="secnum">25.4.3</span> Abstract Operations for Atomics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateintegertypedarray" title="ValidateIntegerTypedArray ( typedArray, waitable )"><span class="secnum">25.4.3.1</span> ValidateIntegerTypedArray ( <var>typedArray</var>, <var>waitable</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateatomicaccess" title="ValidateAtomicAccess ( taRecord, requestIndex )"><span class="secnum">25.4.3.2</span> ValidateAtomicAccess ( <var>taRecord</var>, <var>requestIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateatomicaccessonintegertypedarray" title="ValidateAtomicAccessOnIntegerTypedArray ( typedArray, requestIndex )"><span class="secnum">25.4.3.3</span> ValidateAtomicAccessOnIntegerTypedArray ( <var>typedArray</var>, <var>requestIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-revalidateatomicaccess" title="RevalidateAtomicAccess ( typedArray, byteIndexInBuffer )"><span class="secnum">25.4.3.4</span> RevalidateAtomicAccess ( <var>typedArray</var>, <var>byteIndexInBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getwaiterlist" title="GetWaiterList ( block, i )"><span class="secnum">25.4.3.5</span> GetWaiterList ( <var>block</var>, <var>i</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-entercriticalsection" title="EnterCriticalSection ( WL )"><span class="secnum">25.4.3.6</span> EnterCriticalSection ( <var>WL</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-leavecriticalsection" title="LeaveCriticalSection ( WL )"><span class="secnum">25.4.3.7</span> LeaveCriticalSection ( <var>WL</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-addwaiter" title="AddWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.8</span> AddWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-removewaiter" title="RemoveWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.9</span> RemoveWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-removewaiters" title="RemoveWaiters ( WL, c )"><span class="secnum">25.4.3.10</span> RemoveWaiters ( <var>WL</var>, <var>c</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-suspendthisagent" title="SuspendThisAgent ( WL, waiterRecord )"><span class="secnum">25.4.3.11</span> SuspendThisAgent ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-notifywaiter" title="NotifyWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.12</span> NotifyWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-enqueueresolveinagentjob" title="EnqueueResolveInAgentJob ( agentSignifier, promiseCapability, resolution )"><span class="secnum">25.4.3.13</span> EnqueueResolveInAgentJob ( <var>agentSignifier</var>, <var>promiseCapability</var>, <var>resolution</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dowait" title="DoWait ( mode, typedArray, index, value, timeout )"><span class="secnum">25.4.3.14</span> DoWait ( <var>mode</var>, <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-enqueueatomicswaitasynctimeoutjob" title="EnqueueAtomicsWaitAsyncTimeoutJob ( WL, waiterRecord )"><span class="secnum">25.4.3.15</span> EnqueueAtomicsWaitAsyncTimeoutJob ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomiccompareexchangeinsharedblock" title="AtomicCompareExchangeInSharedBlock ( block, byteIndexInBuffer, elementSize, expectedBytes, replacementBytes )"><span class="secnum">25.4.3.16</span> AtomicCompareExchangeInSharedBlock ( <var>block</var>, <var>byteIndexInBuffer</var>, <var>elementSize</var>, <var>expectedBytes</var>, <var>replacementBytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomicreadmodifywrite" title="AtomicReadModifyWrite ( typedArray, index, value, op )"><span class="secnum">25.4.3.17</span> AtomicReadModifyWrite ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>op</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-bytelistbitwiseop" title="ByteListBitwiseOp ( op, xBytes, yBytes )"><span class="secnum">25.4.3.18</span> ByteListBitwiseOp ( <var>op</var>, <var>xBytes</var>, <var>yBytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-bytelistequal" title="ByteListEqual ( xBytes, yBytes )"><span class="secnum">25.4.3.19</span> ByteListEqual ( <var>xBytes</var>, <var>yBytes</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.add" title="Atomics.add ( typedArray, index, value )"><span class="secnum">25.4.4</span> Atomics.add ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.and" title="Atomics.and ( typedArray, index, value )"><span class="secnum">25.4.5</span> Atomics.and ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.compareexchange" title="Atomics.compareExchange ( typedArray, index, expectedValue, replacementValue )"><span class="secnum">25.4.6</span> Atomics.compareExchange ( <var>typedArray</var>, <var>index</var>, <var>expectedValue</var>, <var>replacementValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.exchange" title="Atomics.exchange ( typedArray, index, value )"><span class="secnum">25.4.7</span> Atomics.exchange ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.islockfree" title="Atomics.isLockFree ( size )"><span class="secnum">25.4.8</span> Atomics.isLockFree ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.load" title="Atomics.load ( typedArray, index )"><span class="secnum">25.4.9</span> Atomics.load ( <var>typedArray</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.or" title="Atomics.or ( typedArray, index, value )"><span class="secnum">25.4.10</span> Atomics.or ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.store" title="Atomics.store ( typedArray, index, value )"><span class="secnum">25.4.11</span> Atomics.store ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.sub" title="Atomics.sub ( typedArray, index, value )"><span class="secnum">25.4.12</span> Atomics.sub ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.wait" title="Atomics.wait ( typedArray, index, value, timeout )"><span class="secnum">25.4.13</span> Atomics.wait ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.waitasync" title="Atomics.waitAsync ( typedArray, index, value, timeout )"><span class="secnum">25.4.14</span> Atomics.waitAsync ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.notify" title="Atomics.notify ( typedArray, index, count )"><span class="secnum">25.4.15</span> Atomics.notify ( <var>typedArray</var>, <var>index</var>, <var>count</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.xor" title="Atomics.xor ( typedArray, index, value )"><span class="secnum">25.4.16</span> Atomics.xor ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics-%symbol.tostringtag%" title="Atomics [ %Symbol.toStringTag% ]"><span class="secnum">25.4.17</span> Atomics [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json-object" title="The JSON Object"><span class="secnum">25.5</span> The JSON Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json.parse" title="JSON.parse ( text [ , reviver ] )"><span class="secnum">25.5.1</span> JSON.parse ( <var>text</var> [ , <var>reviver</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-ParseJSON" title="ParseJSON ( text )"><span class="secnum">25.5.1.1</span> ParseJSON ( <var>text</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-internalizejsonproperty" title="InternalizeJSONProperty ( holder, name, reviver )"><span class="secnum">25.5.1.2</span> InternalizeJSONProperty ( <var>holder</var>, <var>name</var>, <var>reviver</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json.stringify" title="JSON.stringify ( value [ , replacer [ , space ] ] )"><span class="secnum">25.5.2</span> JSON.stringify ( <var>value</var> [ , <var>replacer</var> [ , <var>space</var> ] ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-json-serialization-record" title="JSON Serialization Record"><span class="secnum">25.5.2.1</span> JSON Serialization Record</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonproperty" title="SerializeJSONProperty ( state, key, holder )"><span class="secnum">25.5.2.2</span> SerializeJSONProperty ( <var>state</var>, <var>key</var>, <var>holder</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-quotejsonstring" title="QuoteJSONString ( value )"><span class="secnum">25.5.2.3</span> QuoteJSONString ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-unicodeescape" title="UnicodeEscape ( C )"><span class="secnum">25.5.2.4</span> UnicodeEscape ( <var>C</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonobject" title="SerializeJSONObject ( state, value )"><span class="secnum">25.5.2.5</span> SerializeJSONObject ( <var>state</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonarray" title="SerializeJSONArray ( state, value )"><span class="secnum">25.5.2.6</span> SerializeJSONArray ( <var>state</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-json-%symbol.tostringtag%" title="JSON [ %Symbol.toStringTag% ]"><span class="secnum">25.5.3</span> JSON [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-managing-memory" title="Managing Memory"><span class="secnum">26</span> Managing Memory</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weak-ref-objects" title="WeakRef Objects"><span class="secnum">26.1</span> WeakRef Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weak-ref-constructor" title="The WeakRef Constructor"><span class="secnum">26.1.1</span> The WeakRef Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref-target" title="WeakRef ( target )"><span class="secnum">26.1.1.1</span> WeakRef ( <var>target</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-weak-ref-constructor" title="Properties of the WeakRef Constructor"><span class="secnum">26.1.2</span> Properties of the WeakRef Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype" title="WeakRef.prototype"><span class="secnum">26.1.2.1</span> WeakRef.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-weak-ref-prototype-object" title="Properties of the WeakRef Prototype Object"><span class="secnum">26.1.3</span> Properties of the WeakRef Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype.constructor" title="WeakRef.prototype.constructor"><span class="secnum">26.1.3.1</span> WeakRef.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype.deref" title="WeakRef.prototype.deref ( )"><span class="secnum">26.1.3.2</span> WeakRef.prototype.deref ( )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype-%symbol.tostringtag%" title="WeakRef.prototype [ %Symbol.toStringTag% ]"><span class="secnum">26.1.3.3</span> WeakRef.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weakref-abstract-operations" title="WeakRef Abstract Operations"><span class="secnum">26.1.4</span> WeakRef Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weakrefderef" title="WeakRefDeref ( weakRef )"><span class="secnum">26.1.4.1</span> WeakRefDeref ( <var>weakRef</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-properties-of-weak-ref-instances" title="Properties of WeakRef Instances"><span class="secnum">26.1.5</span> Properties of WeakRef Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-finalization-registry-objects" title="FinalizationRegistry Objects"><span class="secnum">26.2</span> FinalizationRegistry Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-finalization-registry-constructor" title="The FinalizationRegistry Constructor"><span class="secnum">26.2.1</span> The FinalizationRegistry Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry-cleanup-callback" title="FinalizationRegistry ( cleanupCallback )"><span class="secnum">26.2.1.1</span> FinalizationRegistry ( <var>cleanupCallback</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-finalization-registry-constructor" title="Properties of the FinalizationRegistry Constructor"><span class="secnum">26.2.2</span> Properties of the FinalizationRegistry Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype" title="FinalizationRegistry.prototype"><span class="secnum">26.2.2.1</span> FinalizationRegistry.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-finalization-registry-prototype-object" title="Properties of the FinalizationRegistry Prototype Object"><span class="secnum">26.2.3</span> Properties of the FinalizationRegistry Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.constructor" title="FinalizationRegistry.prototype.constructor"><span class="secnum">26.2.3.1</span> FinalizationRegistry.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.register" title="FinalizationRegistry.prototype.register ( target, heldValue [ , unregisterToken ] )"><span class="secnum">26.2.3.2</span> FinalizationRegistry.prototype.register ( <var>target</var>, <var>heldValue</var> [ , <var>unregisterToken</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.unregister" title="FinalizationRegistry.prototype.unregister ( unregisterToken )"><span class="secnum">26.2.3.3</span> FinalizationRegistry.prototype.unregister ( <var>unregisterToken</var> )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype-%symbol.tostringtag%" title="FinalizationRegistry.prototype [ %Symbol.toStringTag% ]"><span class="secnum">26.2.3.4</span> FinalizationRegistry.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-properties-of-finalization-registry-instances" title="Properties of FinalizationRegistry Instances"><span class="secnum">26.2.4</span> Properties of FinalizationRegistry Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-control-abstraction-objects" title="Control Abstraction Objects"><span class="secnum">27</span> Control Abstraction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iteration" title="Iteration"><span class="secnum">27.1</span> Iteration</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-common-iteration-interfaces" title="Common Iteration Interfaces"><span class="secnum">27.1.1</span> Common Iteration Interfaces</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterable-interface" title="The Iterable Interface"><span class="secnum">27.1.1.1</span> The Iterable Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator-interface" title="The Iterator Interface"><span class="secnum">27.1.1.2</span> The Iterator Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asynciterable-interface" title="The Async Iterable Interface"><span class="secnum">27.1.1.3</span> The Async Iterable Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asynciterator-interface" title="The Async Iterator Interface"><span class="secnum">27.1.1.4</span> The Async Iterator Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iteratorresult-interface" title="The IteratorResult Interface"><span class="secnum">27.1.1.5</span> The IteratorResult Interface</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-helper-objects" title="Iterator Helper Objects"><span class="secnum">27.1.2</span> Iterator Helper Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%-object" title="The %IteratorHelperPrototype% Object"><span class="secnum">27.1.2.1</span> The %IteratorHelperPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%.next" title="%IteratorHelperPrototype%.next ( )"><span class="secnum">27.1.2.1.1</span> %IteratorHelperPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%.return" title="%IteratorHelperPrototype%.return ( )"><span class="secnum">27.1.2.1.2</span> %IteratorHelperPrototype%.return ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%-%symbol.tostringtag%" title="%IteratorHelperPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.1.2.1.3</span> %IteratorHelperPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-objects" title="Iterator Objects"><span class="secnum">27.1.3</span> Iterator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-constructor" title="The Iterator Constructor"><span class="secnum">27.1.3.1</span> The Iterator Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator" title="Iterator ( )"><span class="secnum">27.1.3.1.1</span> Iterator ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-iterator-constructor" title="Properties of the Iterator Constructor"><span class="secnum">27.1.3.2</span> Properties of the Iterator Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.concat" title="Iterator.concat ( ...items )"><span class="secnum">27.1.3.2.1</span> Iterator.concat ( ...<var>items</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.from" title="Iterator.from ( O )"><span class="secnum">27.1.3.2.2</span> Iterator.from ( <var>O</var> )</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%-object" title="The %WrapForValidIteratorPrototype% Object"><span class="secnum">27.1.3.2.2.1</span> The %WrapForValidIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%.next" title="%WrapForValidIteratorPrototype%.next ( )"><span class="secnum">27.1.3.2.2.1.1</span> %WrapForValidIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%.return" title="%WrapForValidIteratorPrototype%.return ( )"><span class="secnum">27.1.3.2.2.1.2</span> %WrapForValidIteratorPrototype%.return ( )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype" title="Iterator.prototype"><span class="secnum">27.1.3.2.3</span> Iterator.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%iterator.prototype%-object" title="Properties of the Iterator Prototype Object"><span class="secnum">27.1.3.3</span> Properties of the Iterator Prototype Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.prototype.constructor" title="Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1</span> Iterator.prototype.constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-iterator.prototype.constructor" title="get Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1.1</span> get Iterator.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-set-iterator.prototype.constructor" title="set Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1.2</span> set Iterator.prototype.constructor</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.drop" title="Iterator.prototype.drop ( limit )"><span class="secnum">27.1.3.3.2</span> Iterator.prototype.drop ( <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.every" title="Iterator.prototype.every ( predicate )"><span class="secnum">27.1.3.3.3</span> Iterator.prototype.every ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.filter" title="Iterator.prototype.filter ( predicate )"><span class="secnum">27.1.3.3.4</span> Iterator.prototype.filter ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.find" title="Iterator.prototype.find ( predicate )"><span class="secnum">27.1.3.3.5</span> Iterator.prototype.find ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.flatmap" title="Iterator.prototype.flatMap ( mapper )"><span class="secnum">27.1.3.3.6</span> Iterator.prototype.flatMap ( <var>mapper</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.foreach" title="Iterator.prototype.forEach ( procedure )"><span class="secnum">27.1.3.3.7</span> Iterator.prototype.forEach ( <var>procedure</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.map" title="Iterator.prototype.map ( mapper )"><span class="secnum">27.1.3.3.8</span> Iterator.prototype.map ( <var>mapper</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.reduce" title="Iterator.prototype.reduce ( reducer [ , initialValue ] )"><span class="secnum">27.1.3.3.9</span> Iterator.prototype.reduce ( <var>reducer</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.some" title="Iterator.prototype.some ( predicate )"><span class="secnum">27.1.3.3.10</span> Iterator.prototype.some ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.take" title="Iterator.prototype.take ( limit )"><span class="secnum">27.1.3.3.11</span> Iterator.prototype.take ( <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.toarray" title="Iterator.prototype.toArray ( )"><span class="secnum">27.1.3.3.12</span> Iterator.prototype.toArray ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype-%symbol.iterator%" title="Iterator.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">27.1.3.3.13</span> Iterator.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.prototype-%symbol.tostringtag%" title="Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14</span> Iterator.prototype [ %Symbol.toStringTag% ]</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-iterator.prototype-%symbol.tostringtag%" title="get Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14.1</span> get Iterator.prototype [ %Symbol.toStringTag% ]</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-set-iterator.prototype-%symbol.tostringtag%" title="set Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14.2</span> set Iterator.prototype [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asynciteratorprototype" title="The %AsyncIteratorPrototype% Object"><span class="secnum">27.1.4</span> The %AsyncIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asynciteratorprototype%-%symbol.asynciterator%" title="%AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )"><span class="secnum">27.1.4.1</span> %AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-from-sync-iterator-objects" title="Async-from-Sync Iterator Objects"><span class="secnum">27.1.5</span> Async-from-Sync Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createasyncfromsynciterator" title="CreateAsyncFromSyncIterator ( syncIteratorRecord )"><span class="secnum">27.1.5.1</span> CreateAsyncFromSyncIterator ( <var>syncIteratorRecord</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%-object" title="The %AsyncFromSyncIteratorPrototype% Object"><span class="secnum">27.1.5.2</span> The %AsyncFromSyncIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.next" title="%AsyncFromSyncIteratorPrototype%.next ( [ value ] )"><span class="secnum">27.1.5.2.1</span> %AsyncFromSyncIteratorPrototype%.next ( [ <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.return" title="%AsyncFromSyncIteratorPrototype%.return ( [ value ] )"><span class="secnum">27.1.5.2.2</span> %AsyncFromSyncIteratorPrototype%.return ( [ <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.throw" title="%AsyncFromSyncIteratorPrototype%.throw ( [ value ] )"><span class="secnum">27.1.5.2.3</span> %AsyncFromSyncIteratorPrototype%.throw ( [ <var>value</var> ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-async-from-sync-iterator-instances" title="Properties of Async-from-Sync Iterator Instances"><span class="secnum">27.1.5.3</span> Properties of Async-from-Sync Iterator Instances</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncfromsynciteratorcontinuation" title="AsyncFromSyncIteratorContinuation ( result, promiseCapability, syncIteratorRecord, closeOnRejection )"><span class="secnum">27.1.5.4</span> AsyncFromSyncIteratorContinuation ( <var>result</var>, <var>promiseCapability</var>, <var>syncIteratorRecord</var>, <var>closeOnRejection</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-objects" title="Promise Objects"><span class="secnum">27.2</span> Promise Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-abstract-operations" title="Promise Abstract Operations"><span class="secnum">27.2.1</span> Promise Abstract Operations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promisecapability-records" title="PromiseCapability Records"><span class="secnum">27.2.1.1</span> PromiseCapability Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-ifabruptrejectpromise" title="IfAbruptRejectPromise ( value, capability )"><span class="secnum">27.2.1.1.1</span> IfAbruptRejectPromise ( <var>value</var>, <var>capability</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promisereaction-records" title="PromiseReaction Records"><span class="secnum">27.2.1.2</span> PromiseReaction Records</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createresolvingfunctions" title="CreateResolvingFunctions ( toResolve )"><span class="secnum">27.2.1.3</span> CreateResolvingFunctions ( <var>toResolve</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-fulfillpromise" title="FulfillPromise ( promise, value )"><span class="secnum">27.2.1.4</span> FulfillPromise ( <var>promise</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromisecapability" title="NewPromiseCapability ( C )"><span class="secnum">27.2.1.5</span> NewPromiseCapability ( <var>C</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-ispromise" title="IsPromise ( x )"><span class="secnum">27.2.1.6</span> IsPromise ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-rejectpromise" title="RejectPromise ( promise, reason )"><span class="secnum">27.2.1.7</span> RejectPromise ( <var>promise</var>, <var>reason</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-triggerpromisereactions" title="TriggerPromiseReactions ( reactions, argument )"><span class="secnum">27.2.1.8</span> TriggerPromiseReactions ( <var>reactions</var>, <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-host-promise-rejection-tracker" title="HostPromiseRejectionTracker ( promise, operation )"><span class="secnum">27.2.1.9</span> HostPromiseRejectionTracker ( <var>promise</var>, <var>operation</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-jobs" title="Promise Jobs"><span class="secnum">27.2.2</span> Promise Jobs</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromisereactionjob" title="NewPromiseReactionJob ( reaction, argument )"><span class="secnum">27.2.2.1</span> NewPromiseReactionJob ( <var>reaction</var>, <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromiseresolvethenablejob" title="NewPromiseResolveThenableJob ( promiseToResolve, thenable, then )"><span class="secnum">27.2.2.2</span> NewPromiseResolveThenableJob ( <var>promiseToResolve</var>, <var>thenable</var>, <var>then</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-constructor" title="The Promise Constructor"><span class="secnum">27.2.3</span> The Promise Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise-executor" title="Promise ( executor )"><span class="secnum">27.2.3.1</span> Promise ( <var>executor</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-promise-constructor" title="Properties of the Promise Constructor"><span class="secnum">27.2.4</span> Properties of the Promise Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.all" title="Promise.all ( iterable )"><span class="secnum">27.2.4.1</span> Promise.all ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-getpromiseresolve" title="GetPromiseResolve ( promiseConstructor )"><span class="secnum">27.2.4.1.1</span> GetPromiseResolve ( <var>promiseConstructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseall" title="PerformPromiseAll ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.1.2</span> PerformPromiseAll ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.allsettled" title="Promise.allSettled ( iterable )"><span class="secnum">27.2.4.2</span> Promise.allSettled ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseallsettled" title="PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.2.1</span> PerformPromiseAllSettled ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.any" title="Promise.any ( iterable )"><span class="secnum">27.2.4.3</span> Promise.any ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseany" title="PerformPromiseAny ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.3.1</span> PerformPromiseAny ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype" title="Promise.prototype"><span class="secnum">27.2.4.4</span> Promise.prototype</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.race" title="Promise.race ( iterable )"><span class="secnum">27.2.4.5</span> Promise.race ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiserace" title="PerformPromiseRace ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.5.1</span> PerformPromiseRace ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.reject" title="Promise.reject ( r )"><span class="secnum">27.2.4.6</span> Promise.reject ( <var>r</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.resolve" title="Promise.resolve ( x )"><span class="secnum">27.2.4.7</span> Promise.resolve ( <var>x</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise-resolve" title="PromiseResolve ( C, x )"><span class="secnum">27.2.4.7.1</span> PromiseResolve ( <var>C</var>, <var>x</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.try" title="Promise.try ( callback, ...args )"><span class="secnum">27.2.4.8</span> Promise.try ( <var>callback</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.withResolvers" title="Promise.withResolvers ( )"><span class="secnum">27.2.4.9</span> Promise.withResolvers ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-promise-%symbol.species%" title="get Promise [ %Symbol.species% ]"><span class="secnum">27.2.4.10</span> get Promise [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-promise-prototype-object" title="Properties of the Promise Prototype Object"><span class="secnum">27.2.5</span> Properties of the Promise Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.catch" title="Promise.prototype.catch ( onRejected )"><span class="secnum">27.2.5.1</span> Promise.prototype.catch ( <var>onRejected</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.constructor" title="Promise.prototype.constructor"><span class="secnum">27.2.5.2</span> Promise.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.finally" title="Promise.prototype.finally ( onFinally )"><span class="secnum">27.2.5.3</span> Promise.prototype.finally ( <var>onFinally</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.prototype.then" title="Promise.prototype.then ( onFulfilled, onRejected )"><span class="secnum">27.2.5.4</span> Promise.prototype.then ( <var>onFulfilled</var>, <var>onRejected</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromisethen" title="PerformPromiseThen ( promise, onFulfilled, onRejected [ , resultCapability ] )"><span class="secnum">27.2.5.4.1</span> PerformPromiseThen ( <var>promise</var>, <var>onFulfilled</var>, <var>onRejected</var> [ , <var>resultCapability</var> ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype-%symbol.tostringtag%" title="Promise.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.2.5.5</span> Promise.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-promise-instances" title="Properties of Promise Instances"><span class="secnum">27.2.6</span> Properties of Promise Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-objects" title="GeneratorFunction Objects"><span class="secnum">27.3</span> GeneratorFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-constructor" title="The GeneratorFunction Constructor"><span class="secnum">27.3.1</span> The GeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction" title="GeneratorFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.3.1.1</span> GeneratorFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-constructor" title="Properties of the GeneratorFunction Constructor"><span class="secnum">27.3.2</span> Properties of the GeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype" title="GeneratorFunction.prototype"><span class="secnum">27.3.2.1</span> GeneratorFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-prototype-object" title="Properties of the GeneratorFunction Prototype Object"><span class="secnum">27.3.3</span> Properties of the GeneratorFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype.constructor" title="GeneratorFunction.prototype.constructor"><span class="secnum">27.3.3.1</span> GeneratorFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype.prototype" title="GeneratorFunction.prototype.prototype"><span class="secnum">27.3.3.2</span> GeneratorFunction.prototype.prototype</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype-%symbol.tostringtag%" title="GeneratorFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.3.3.3</span> GeneratorFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-instances" title="GeneratorFunction Instances"><span class="secnum">27.3.4</span> GeneratorFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-length" title="length"><span class="secnum">27.3.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-name" title="name"><span class="secnum">27.3.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-prototype" title="prototype"><span class="secnum">27.3.4.3</span> prototype</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-objects" title="AsyncGeneratorFunction Objects"><span class="secnum">27.4</span> AsyncGeneratorFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-constructor" title="The AsyncGeneratorFunction Constructor"><span class="secnum">27.4.1</span> The AsyncGeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction" title="AsyncGeneratorFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.4.1.1</span> AsyncGeneratorFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction" title="Properties of the AsyncGeneratorFunction Constructor"><span class="secnum">27.4.2</span> Properties of the AsyncGeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype" title="AsyncGeneratorFunction.prototype"><span class="secnum">27.4.2.1</span> AsyncGeneratorFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction-prototype" title="Properties of the AsyncGeneratorFunction Prototype Object"><span class="secnum">27.4.3</span> Properties of the AsyncGeneratorFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-constructor" title="AsyncGeneratorFunction.prototype.constructor"><span class="secnum">27.4.3.1</span> AsyncGeneratorFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-prototype" title="AsyncGeneratorFunction.prototype.prototype"><span class="secnum">27.4.3.2</span> AsyncGeneratorFunction.prototype.prototype</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-%symbol.tostringtag%" title="AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.4.3.3</span> AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instances" title="AsyncGeneratorFunction Instances"><span class="secnum">27.4.4</span> AsyncGeneratorFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-length" title="length"><span class="secnum">27.4.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-name" title="name"><span class="secnum">27.4.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-prototype" title="prototype"><span class="secnum">27.4.4.3</span> prototype</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generator-objects" title="Generator Objects"><span class="secnum">27.5</span> Generator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-generator-prototype" title="The %GeneratorPrototype% Object"><span class="secnum">27.5.1</span> The %GeneratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.constructor" title="%GeneratorPrototype%.constructor"><span class="secnum">27.5.1.1</span> %GeneratorPrototype%.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.next" title="%GeneratorPrototype%.next ( value )"><span class="secnum">27.5.1.2</span> %GeneratorPrototype%.next ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.return" title="%GeneratorPrototype%.return ( value )"><span class="secnum">27.5.1.3</span> %GeneratorPrototype%.return ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.throw" title="%GeneratorPrototype%.throw ( exception )"><span class="secnum">27.5.1.4</span> %GeneratorPrototype%.throw ( <var>exception</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype-%symbol.tostringtag%" title="%GeneratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.5.1.5</span> %GeneratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-generator-instances" title="Properties of Generator Instances"><span class="secnum">27.5.2</span> Properties of Generator Instances</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generator-abstract-operations" title="Generator Abstract Operations"><span class="secnum">27.5.3</span> Generator Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorstart" title="GeneratorStart ( generator, generatorBody )"><span class="secnum">27.5.3.1</span> GeneratorStart ( <var>generator</var>, <var>generatorBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorvalidate" title="GeneratorValidate ( generator, generatorBrand )"><span class="secnum">27.5.3.2</span> GeneratorValidate ( <var>generator</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorresume" title="GeneratorResume ( generator, value, generatorBrand )"><span class="secnum">27.5.3.3</span> GeneratorResume ( <var>generator</var>, <var>value</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorresumeabrupt" title="GeneratorResumeAbrupt ( generator, abruptCompletion, generatorBrand )"><span class="secnum">27.5.3.4</span> GeneratorResumeAbrupt ( <var>generator</var>, <var>abruptCompletion</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-getgeneratorkind" title="GetGeneratorKind ( )"><span class="secnum">27.5.3.5</span> GetGeneratorKind ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatoryield" title="GeneratorYield ( iteratorResult )"><span class="secnum">27.5.3.6</span> GeneratorYield ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-yield" title="Yield ( value )"><span class="secnum">27.5.3.7</span> Yield ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createiteratorfromclosure" title="CreateIteratorFromClosure ( closure, generatorBrand, generatorPrototype [ , extraSlots ] )"><span class="secnum">27.5.3.8</span> CreateIteratorFromClosure ( <var>closure</var>, <var>generatorBrand</var>, <var>generatorPrototype</var> [ , <var>extraSlots</var> ] )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgenerator-objects" title="AsyncGenerator Objects"><span class="secnum">27.6</span> AsyncGenerator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-prototype" title="The %AsyncGeneratorPrototype% Object"><span class="secnum">27.6.1</span> The %AsyncGeneratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-constructor" title="%AsyncGeneratorPrototype%.constructor"><span class="secnum">27.6.1.1</span> %AsyncGeneratorPrototype%.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-next" title="%AsyncGeneratorPrototype%.next ( value )"><span class="secnum">27.6.1.2</span> %AsyncGeneratorPrototype%.next ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-return" title="%AsyncGeneratorPrototype%.return ( value )"><span class="secnum">27.6.1.3</span> %AsyncGeneratorPrototype%.return ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-throw" title="%AsyncGeneratorPrototype%.throw ( exception )"><span class="secnum">27.6.1.4</span> %AsyncGeneratorPrototype%.throw ( <var>exception</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-%symbol.tostringtag%" title="%AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.6.1.5</span> %AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-intances" title="Properties of AsyncGenerator Instances"><span class="secnum">27.6.2</span> Properties of AsyncGenerator Instances</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgenerator-abstract-operations" title="AsyncGenerator Abstract Operations"><span class="secnum">27.6.3</span> AsyncGenerator Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorrequest-records" title="AsyncGeneratorRequest Records"><span class="secnum">27.6.3.1</span> AsyncGeneratorRequest Records</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorstart" title="AsyncGeneratorStart ( generator, generatorBody )"><span class="secnum">27.6.3.2</span> AsyncGeneratorStart ( <var>generator</var>, <var>generatorBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorvalidate" title="AsyncGeneratorValidate ( generator, generatorBrand )"><span class="secnum">27.6.3.3</span> AsyncGeneratorValidate ( <var>generator</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorenqueue" title="AsyncGeneratorEnqueue ( generator, completion, promiseCapability )"><span class="secnum">27.6.3.4</span> AsyncGeneratorEnqueue ( <var>generator</var>, <var>completion</var>, <var>promiseCapability</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorcompletestep" title="AsyncGeneratorCompleteStep ( generator, completion, done [ , realm ] )"><span class="secnum">27.6.3.5</span> AsyncGeneratorCompleteStep ( <var>generator</var>, <var>completion</var>, <var>done</var> [ , <var>realm</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorresume" title="AsyncGeneratorResume ( generator, completion )"><span class="secnum">27.6.3.6</span> AsyncGeneratorResume ( <var>generator</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorunwrapyieldresumption" title="AsyncGeneratorUnwrapYieldResumption ( resumptionValue )"><span class="secnum">27.6.3.7</span> AsyncGeneratorUnwrapYieldResumption ( <var>resumptionValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratoryield" title="AsyncGeneratorYield ( value )"><span class="secnum">27.6.3.8</span> AsyncGeneratorYield ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorawaitreturn" title="AsyncGeneratorAwaitReturn ( generator )"><span class="secnum">27.6.3.9</span> AsyncGeneratorAwaitReturn ( <var>generator</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratordrainqueue" title="AsyncGeneratorDrainQueue ( generator )"><span class="secnum">27.6.3.10</span> AsyncGeneratorDrainQueue ( <var>generator</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-objects" title="AsyncFunction Objects"><span class="secnum">27.7</span> AsyncFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-constructor" title="The AsyncFunction Constructor"><span class="secnum">27.7.1</span> The AsyncFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-constructor-arguments" title="AsyncFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.7.1.1</span> AsyncFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-constructor-properties" title="Properties of the AsyncFunction Constructor"><span class="secnum">27.7.2</span> Properties of the AsyncFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-constructor-prototype" title="AsyncFunction.prototype"><span class="secnum">27.7.2.1</span> AsyncFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-prototype-properties" title="Properties of the AsyncFunction Prototype Object"><span class="secnum">27.7.3</span> Properties of the AsyncFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-prototype-properties-constructor" title="AsyncFunction.prototype.constructor"><span class="secnum">27.7.3.1</span> AsyncFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-prototype-%symbol.tostringtag%" title="AsyncFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.7.3.2</span> AsyncFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-instances" title="AsyncFunction Instances"><span class="secnum">27.7.4</span> AsyncFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-instances-length" title="length"><span class="secnum">27.7.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-instances-name" title="name"><span class="secnum">27.7.4.2</span> name</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations" title="Async Functions Abstract Operations"><span class="secnum">27.7.5</span> Async Functions Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations-async-function-start" title="AsyncFunctionStart ( promiseCapability, asyncFunctionBody )"><span class="secnum">27.7.5.1</span> AsyncFunctionStart ( <var>promiseCapability</var>, <var>asyncFunctionBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncblockstart" title="AsyncBlockStart ( promiseCapability, asyncBody, asyncContext )"><span class="secnum">27.7.5.2</span> AsyncBlockStart ( <var>promiseCapability</var>, <var>asyncBody</var>, <var>asyncContext</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#await" title="Await ( value )"><span class="secnum">27.7.5.3</span> Await ( <var>value</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-reflection" title="Reflection"><span class="secnum">28</span> Reflection</a><ol class="toc"><li><span class="item-toggle">+</span><a href="reflection.html#sec-reflect-object" title="The Reflect Object"><span class="secnum">28.1</span> The Reflect Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.apply" title="Reflect.apply ( target, thisArgument, argumentsList )"><span class="secnum">28.1.1</span> Reflect.apply ( <var>target</var>, <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.construct" title="Reflect.construct ( target, argumentsList [ , newTarget ] )"><span class="secnum">28.1.2</span> Reflect.construct ( <var>target</var>, <var>argumentsList</var> [ , <var>newTarget</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.defineproperty" title="Reflect.defineProperty ( target, propertyKey, attributes )"><span class="secnum">28.1.3</span> Reflect.defineProperty ( <var>target</var>, <var>propertyKey</var>, <var>attributes</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.deleteproperty" title="Reflect.deleteProperty ( target, propertyKey )"><span class="secnum">28.1.4</span> Reflect.deleteProperty ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.get" title="Reflect.get ( target, propertyKey [ , receiver ] )"><span class="secnum">28.1.5</span> Reflect.get ( <var>target</var>, <var>propertyKey</var> [ , <var>receiver</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.getownpropertydescriptor" title="Reflect.getOwnPropertyDescriptor ( target, propertyKey )"><span class="secnum">28.1.6</span> Reflect.getOwnPropertyDescriptor ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.getprototypeof" title="Reflect.getPrototypeOf ( target )"><span class="secnum">28.1.7</span> Reflect.getPrototypeOf ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.has" title="Reflect.has ( target, propertyKey )"><span class="secnum">28.1.8</span> Reflect.has ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.isextensible" title="Reflect.isExtensible ( target )"><span class="secnum">28.1.9</span> Reflect.isExtensible ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.ownkeys" title="Reflect.ownKeys ( target )"><span class="secnum">28.1.10</span> Reflect.ownKeys ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.preventextensions" title="Reflect.preventExtensions ( target )"><span class="secnum">28.1.11</span> Reflect.preventExtensions ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.set" title="Reflect.set ( target, propertyKey, V [ , receiver ] )"><span class="secnum">28.1.12</span> Reflect.set ( <var>target</var>, <var>propertyKey</var>, <var>V</var> [ , <var>receiver</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.setprototypeof" title="Reflect.setPrototypeOf ( target, proto )"><span class="secnum">28.1.13</span> Reflect.setPrototypeOf ( <var>target</var>, <var>proto</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect-%symbol.tostringtag%" title="Reflect [ %Symbol.toStringTag% ]"><span class="secnum">28.1.14</span> Reflect [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-proxy-objects" title="Proxy Objects"><span class="secnum">28.2</span> Proxy Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="reflection.html#sec-proxy-constructor" title="The Proxy Constructor"><span class="secnum">28.2.1</span> The Proxy Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-proxy-target-handler" title="Proxy ( target, handler )"><span class="secnum">28.2.1.1</span> Proxy ( <var>target</var>, <var>handler</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-properties-of-the-proxy-constructor" title="Properties of the Proxy Constructor"><span class="secnum">28.2.2</span> Properties of the Proxy Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-proxy.revocable" title="Proxy.revocable ( target, handler )"><span class="secnum">28.2.2.1</span> Proxy.revocable ( <var>target</var>, <var>handler</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-module-namespace-objects" title="Module Namespace Objects"><span class="secnum">28.3</span> Module Namespace Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-%symbol.tostringtag%" title="%Symbol.toStringTag%"><span class="secnum">28.3.1</span> %Symbol.toStringTag%</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-memory-model" title="Memory Model"><span class="secnum">29</span> Memory Model</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-memory-model-fundamentals" title="Memory Model Fundamentals"><span class="secnum">29.1</span> Memory Model Fundamentals</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-agent-event-records" title="Agent Events Records"><span class="secnum">29.2</span> Agent Events Records</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-chosen-value-records" title="Chosen Value Records"><span class="secnum">29.3</span> Chosen Value Records</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-candidate-executions" title="Candidate Executions"><span class="secnum">29.4</span> Candidate Executions</a></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-abstract-operations-for-the-memory-model" title="Abstract Operations for the Memory Model"><span class="secnum">29.5</span> Abstract Operations for the Memory Model</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-event-set" title="EventSet ( execution )"><span class="secnum">29.5.1</span> EventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-sharedatablockeventset" title="SharedDataBlockEventSet ( execution )"><span class="secnum">29.5.2</span> SharedDataBlockEventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-hosteventset" title="HostEventSet ( execution )"><span class="secnum">29.5.3</span> HostEventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-composewriteeventbytes" title="ComposeWriteEventBytes ( execution, byteIndex, Ws )"><span class="secnum">29.5.4</span> ComposeWriteEventBytes ( <var>execution</var>, <var>byteIndex</var>, <var>Ws</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valueofreadevent" title="ValueOfReadEvent ( execution, R )"><span class="secnum">29.5.5</span> ValueOfReadEvent ( <var>execution</var>, <var>R</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-relations-of-candidate-executions" title="Relations of Candidate Executions"><span class="secnum">29.6</span> Relations of Candidate Executions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-agent-order" title="is-agent-order-before"><span class="secnum">29.6.1</span> is-agent-order-before</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-reads-bytes-from" title="reads-bytes-from"><span class="secnum">29.6.2</span> reads-bytes-from</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-reads-from" title="reads-from"><span class="secnum">29.6.3</span> reads-from</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-host-synchronizes-with" title="host-synchronizes-with"><span class="secnum">29.6.4</span> host-synchronizes-with</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-synchronizes-with" title="synchronizes-with"><span class="secnum">29.6.5</span> synchronizes-with</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-happens-before" title="happens-before"><span class="secnum">29.6.6</span> happens-before</a></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-properties-of-valid-executions" title="Properties of Valid Executions"><span class="secnum">29.7</span> Properties of Valid Executions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valid-chosen-reads" title="Valid Chosen Reads"><span class="secnum">29.7.1</span> Valid Chosen Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-coherent-reads" title="Coherent Reads"><span class="secnum">29.7.2</span> Coherent Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-tear-free-aligned-reads" title="Tear Free Reads"><span class="secnum">29.7.3</span> Tear Free Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-memory-order" title="Sequentially Consistent Atomics"><span class="secnum">29.7.4</span> Sequentially Consistent Atomics</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valid-executions" title="Valid Executions"><span class="secnum">29.7.5</span> Valid Executions</a></li></ol></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-races" title="Races"><span class="secnum">29.8</span> Races</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-data-races" title="Data Races"><span class="secnum">29.9</span> Data Races</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-data-race-freedom" title="Data Race Freedom"><span class="secnum">29.10</span> Data Race Freedom</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-shared-memory-guidelines" title="Shared Memory Guidelines"><span class="secnum">29.11</span> Shared Memory Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="grammar-summary.html#sec-grammar-summary" title="Grammar Summary"><span class="secnum">Annex A <span class="annex-kind">(informative)</span></span> Grammar Summary</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-lexical-grammar" title="Lexical Grammar"><span class="secnum">A.1</span> Lexical Grammar</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-expressions" title="Expressions"><span class="secnum">A.2</span> Expressions</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-statements" title="Statements"><span class="secnum">A.3</span> Statements</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-functions-and-classes" title="Functions and Classes"><span class="secnum">A.4</span> Functions and Classes</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-scripts-and-modules" title="Scripts and Modules"><span class="secnum">A.5</span> Scripts and Modules</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-number-conversions" title="Number Conversions"><span class="secnum">A.6</span> Number Conversions</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-time-zone-offset-string-format" title="Time Zone Offset String Format"><span class="secnum">A.7</span> Time Zone Offset String Format</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-regular-expressions" title="Regular Expressions"><span class="secnum">A.8</span> Regular Expressions</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-ecmascript-features-for-web-browsers" title="Additional ECMAScript Features for Web Browsers"><span class="secnum">Annex B <span class="annex-kind">(normative)</span></span> Additional ECMAScript Features for Web Browsers</a><ol class="toc"><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-syntax" title="Additional Syntax"><span class="secnum">B.1</span> Additional Syntax</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-html-like-comments" title="HTML-like Comments"><span class="secnum">B.1.1</span> HTML-like Comments</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-regular-expressions-patterns" title="Regular Expressions Patterns"><span class="secnum">B.1.2</span> Regular Expressions Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-early-errors-annexb" title="Static Semantics: Early Errors"><span class="secnum">B.1.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-countleftcapturingparens-annexb" title="Static Semantics: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore"><span class="secnum">B.1.2.2</span> SS: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-is-character-class-annexb" title="Static Semantics: IsCharacterClass"><span class="secnum">B.1.2.3</span> SS: IsCharacterClass</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-character-value-annexb" title="Static Semantics: CharacterValue"><span class="secnum">B.1.2.4</span> SS: CharacterValue</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compilesubpattern-annexb" title="Runtime Semantics: CompileSubpattern"><span class="secnum">B.1.2.5</span> RS: CompileSubpattern</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compileassertion-annexb" title="Runtime Semantics: CompileAssertion"><span class="secnum">B.1.2.6</span> RS: CompileAssertion</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compileatom-annexb" title="Runtime Semantics: CompileAtom"><span class="secnum">B.1.2.7</span> RS: CompileAtom</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compiletocharset-annexb" title="Runtime Semantics: CompileToCharSet"><span class="secnum">B.1.2.8</span> RS: CompileToCharSet</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-runtime-semantics-characterrangeorunion-abstract-operation" title="CharacterRangeOrUnion ( rer, A, B )"><span class="secnum">B.1.2.8.1</span> CharacterRangeOrUnion ( <var>rer</var>, <var>A</var>, <var>B</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-parsepattern-annexb" title="Static Semantics: ParsePattern ( patternText, u, v )"><span class="secnum">B.1.2.9</span> SS: ParsePattern ( <var>patternText</var>, <var>u</var>, <var>v</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-built-in-properties" title="Additional Built-in Properties"><span class="secnum">B.2</span> Additional Built-in Properties</a><ol class="toc"><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-global-object" title="Additional Properties of the Global Object"><span class="secnum">B.2.1</span> Additional Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-escape-string" title="escape ( string )"><span class="secnum">B.2.1.1</span> escape ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-unescape-string" title="unescape ( string )"><span class="secnum">B.2.1.2</span> unescape ( <var>string</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-string.prototype-object" title="Additional Properties of the String.prototype Object"><span class="secnum">B.2.2</span> Additional Properties of the String.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.substr" title="String.prototype.substr ( start, length )"><span class="secnum">B.2.2.1</span> String.prototype.substr ( <var>start</var>, <var>length</var> )</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.anchor" title="String.prototype.anchor ( name )"><span class="secnum">B.2.2.2</span> String.prototype.anchor ( <var>name</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-createhtml" title="CreateHTML ( string, tag, attribute, value )"><span class="secnum">B.2.2.2.1</span> CreateHTML ( <var>string</var>, <var>tag</var>, <var>attribute</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.big" title="String.prototype.big ( )"><span class="secnum">B.2.2.3</span> String.prototype.big ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.blink" title="String.prototype.blink ( )"><span class="secnum">B.2.2.4</span> String.prototype.blink ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.bold" title="String.prototype.bold ( )"><span class="secnum">B.2.2.5</span> String.prototype.bold ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fixed" title="String.prototype.fixed ( )"><span class="secnum">B.2.2.6</span> String.prototype.fixed ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fontcolor" title="String.prototype.fontcolor ( colour )"><span class="secnum">B.2.2.7</span> String.prototype.fontcolor ( <var>colour</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fontsize" title="String.prototype.fontsize ( size )"><span class="secnum">B.2.2.8</span> String.prototype.fontsize ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.italics" title="String.prototype.italics ( )"><span class="secnum">B.2.2.9</span> String.prototype.italics ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.link" title="String.prototype.link ( url )"><span class="secnum">B.2.2.10</span> String.prototype.link ( <var>url</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.small" title="String.prototype.small ( )"><span class="secnum">B.2.2.11</span> String.prototype.small ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.strike" title="String.prototype.strike ( )"><span class="secnum">B.2.2.12</span> String.prototype.strike ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.sub" title="String.prototype.sub ( )"><span class="secnum">B.2.2.13</span> String.prototype.sub ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.sup" title="String.prototype.sup ( )"><span class="secnum">B.2.2.14</span> String.prototype.sup ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#String.prototype.trimleft" title="String.prototype.trimLeft ( )"><span class="secnum">B.2.2.15</span> String.prototype.trimLeft ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#String.prototype.trimright" title="String.prototype.trimRight ( )"><span class="secnum">B.2.2.16</span> String.prototype.trimRight ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-date.prototype-object" title="Additional Properties of the Date.prototype Object"><span class="secnum">B.2.3</span> Additional Properties of the Date.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.getyear" title="Date.prototype.getYear ( )"><span class="secnum">B.2.3.1</span> Date.prototype.getYear ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.setyear" title="Date.prototype.setYear ( year )"><span class="secnum">B.2.3.2</span> Date.prototype.setYear ( <var>year</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.togmtstring" title="Date.prototype.toGMTString ( )"><span class="secnum">B.2.3.3</span> Date.prototype.toGMTString ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-regexp.prototype-object" title="Additional Properties of the RegExp.prototype Object"><span class="secnum">B.2.4</span> Additional Properties of the RegExp.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-regexp.prototype.compile" title="RegExp.prototype.compile ( pattern, flags )"><span class="secnum">B.2.4.1</span> RegExp.prototype.compile ( <var>pattern</var>, <var>flags</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-other-additional-features" title="Other Additional Features"><span class="secnum">B.3</span> Other Additional Features</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-labelled-function-declarations" title="Labelled Function Declarations"><span class="secnum">B.3.1</span> Labelled Function Declarations</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-block-level-function-declarations-web-legacy-compatibility-semantics" title="Block-Level Function Declarations Web Legacy Compatibility Semantics"><span class="secnum">B.3.2</span> Block-Level Function Declarations Web Legacy Compatibility Semantics</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-functiondeclarations-in-ifstatement-statement-clauses" title="FunctionDeclarations in IfStatement Statement Clauses"><span class="secnum">B.3.3</span> FunctionDeclarations in IfStatement Statement Clauses</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-variablestatements-in-catch-blocks" title="VariableStatements in Catch Blocks"><span class="secnum">B.3.4</span> VariableStatements in Catch Blocks</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-initializers-in-forin-statement-heads" title="Initializers in ForIn Statement Heads"><span class="secnum">B.3.5</span> Initializers in ForIn Statement Heads</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-IsHTMLDDA-internal-slot" title="The [[IsHTMLDDA]] Internal Slot"><span class="secnum">B.3.6</span> The <var class="field">[[IsHTMLDDA]]</var> Internal Slot</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-web-compat-host-make-job-callback" title="Non-default behaviour in HostMakeJobCallback"><span class="secnum">B.3.7</span> Non-default behaviour in HostMakeJobCallback</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-web-compat-host-ensure-can-add-private-field" title="Non-default behaviour in HostEnsureCanAddPrivateElement"><span class="secnum">B.3.8</span> Non-default behaviour in HostEnsureCanAddPrivateElement</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-runtime-errors-for-function-call-assignment-targets" title="Runtime Errors for Function Call Assignment Targets"><span class="secnum">B.3.9</span> Runtime Errors for Function Call Assignment Targets</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="strict-mode-of-ecmascript.html#sec-strict-mode-of-ecmascript" title="The Strict Mode of ECMAScript"><span class="secnum">Annex C <span class="annex-kind">(informative)</span></span> The Strict Mode of ECMAScript</a></li><li><span class="item-toggle">+</span><a href="host-layering-points.html#sec-host-layering-points" title="Host Layering Points"><span class="secnum">Annex D <span class="annex-kind">(informative)</span></span> Host Layering Points</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-hooks-summary" title="Host Hooks"><span class="secnum">D.1</span> Host Hooks</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-defined-fields-summary" title="Host-defined Fields"><span class="secnum">D.2</span> Host-defined Fields</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-defined-objects-summary" title="Host-defined Objects"><span class="secnum">D.3</span> Host-defined Objects</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-running-jobs" title="Running Jobs"><span class="secnum">D.4</span> Running Jobs</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-internal-methods-of-exotic-objects" title="Internal Methods of Exotic Objects"><span class="secnum">D.5</span> Internal Methods of Exotic Objects</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-built-in-objects-and-methods" title="Built-in Objects and Methods"><span class="secnum">D.6</span> Built-in Objects and Methods</a></li></ol></li><li><span class="item-toggle-none"></span><a href="corrections-and-clarifications-in-ecmascript-2015-with-possible-compatibility-impact.html#sec-corrections-and-clarifications-in-ecmascript-2015-with-possible-compatibility-impact" title="Corrections and Clarifications in ECMAScript 2015 with Possible Compatibility Impact"><span class="secnum">Annex E <span class="annex-kind">(informative)</span></span> Corrections and Clarifications in ECMAScript 2015 with Possible Compatibility Impact</a></li><li><span class="item-toggle-none"></span><a href="additions-and-changes-that-introduce-incompatibilities-with-prior-editions.html#sec-additions-and-changes-that-introduce-incompatibilities-with-prior-editions" title="Additions and Changes That Introduce Incompatibilities with Prior Editions"><span class="secnum">Annex F <span class="annex-kind">(informative)</span></span> Additions and Changes That Introduce Incompatibilities with Prior Editions</a></li><li><span class="item-toggle-none"></span><a href="bibliography.html#sec-bibliography" title="Bibliography">Bibliography</a></li><li><span class="item-toggle-none"></span><a href="colophon.html#sec-colophon" title="Colophon">Colophon</a></li><li><span class="item-toggle-none"></span><a href="copyright-and-software-license.html#sec-copyright-and-software-license" title="Copyright & Software License">Copyright & Software License</a></li></ol></div></div>
|
||
<div id="menu-spacer" class="menu-spacer"></div>
|
||
<div id="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" style="width:100%; height:100%; stroke:currentColor" viewBox="0 0 120 120" width="54" height="54">
|
||
<title>Menu</title>
|
||
<path stroke-width="10" stroke-linecap="round" d="M30,60 h60 M30,30 m0,5 h60 M30,90 m0,-5 h60"></path>
|
||
</svg></div>
|
||
<div id="shortcuts-help">
|
||
<ul>
|
||
<li><span>Toggle shortcuts help</span><code>?</code></li>
|
||
<li><span>Toggle "can call user code" annotations</span><code>u</code></li>
|
||
<li><span>Navigate to/from multipage</span><code>m</code></li>
|
||
<li><span>Jump to search box</span><code>/</code></li>
|
||
<li><span>Toggle pinning of the current clause</span><code>p</code></li>
|
||
<li><span>Jump to the <i>n</i><sup>th</sup> pin</span><code>1-9</code></li>
|
||
<li><span>Jump to the 10<sup>th</sup> pin</span><code>0</code></li>
|
||
<li><span>Jump to the most recent link target</span><code>`</code></li>
|
||
</ul></div><div id='spec-container'><emu-clause id="sec-text-processing">
|
||
<h1><span class="secnum">22</span> Text Processing</h1>
|
||
|
||
<emu-clause id="sec-string-objects">
|
||
<h1><span class="secnum">22.1</span> String Objects</h1>
|
||
|
||
<emu-clause id="sec-string-constructor">
|
||
<h1><span class="secnum">22.1.1</span> The String Constructor</h1>
|
||
<p>The String <emu-xref href="#constructor" id="_ref_11273"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>:</p>
|
||
<ul>
|
||
<li>is <dfn tabindex="-1">%String%</dfn>.</li>
|
||
<li>is the initial value of the <emu-val>"String"</emu-val> property of the <emu-xref href="#sec-global-object" id="_ref_11274"><a href="global-object.html#sec-global-object">global object</a></emu-xref>.</li>
|
||
<li>creates and initializes a new String object when called as a <emu-xref href="#constructor" id="_ref_11275"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>.</li>
|
||
<li>performs a type conversion when called as a function rather than as a <emu-xref href="#constructor" id="_ref_11276"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>.</li>
|
||
<li>may be used as the value of an <code>extends</code> clause of a class definition. Subclass <emu-xref href="#constructor" id="_ref_11277"><a href="ecmascript-data-types-and-values.html#constructor">constructors</a></emu-xref> that intend to inherit the specified String behaviour must include a <code>super</code> call to the String <emu-xref href="#constructor" id="_ref_11278"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> to create and initialize the subclass instance with a <var class="field">[[StringData]]</var> internal slot.</li>
|
||
</ul>
|
||
|
||
<emu-clause id="sec-string-constructor-string-value" type="built-in function">
|
||
<h1><span class="secnum">22.1.1.1</span> String ( <var>value</var> )</h1>
|
||
<p>This function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>value</var> is not present, then<ol><li>Let <var>s</var> be the empty String.</li></ol></li><li>Else,<ol><li>If NewTarget is <emu-val>undefined</emu-val> and <var>value</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_11279"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, return <emu-xref aoid="SymbolDescriptiveString" id="_ref_11280"><a href="fundamental-objects.html#sec-symboldescriptivestring">SymbolDescriptiveString</a></emu-xref>(<var>value</var>).</li><li>Let <var>s</var> be ? <emu-xref aoid="ToString" id="_ref_11281"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>value</var>).</li></ol></li><li>If NewTarget is <emu-val>undefined</emu-val>, return <var>s</var>.</li><li>Return <emu-xref aoid="StringCreate" id="_ref_11282"><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringcreate">StringCreate</a></emu-xref>(<var>s</var>, ? <emu-xref aoid="GetPrototypeFromConstructor" id="_ref_11283"><a href="ordinary-and-exotic-objects-behaviours.html#sec-getprototypefromconstructor" class="e-user-code">GetPrototypeFromConstructor</a></emu-xref>(NewTarget, <emu-val>"%String.prototype%"</emu-val>)).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-properties-of-the-string-constructor">
|
||
<h1><span class="secnum">22.1.2</span> Properties of the String Constructor</h1>
|
||
<p>The String <emu-xref href="#constructor" id="_ref_11284"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>:</p>
|
||
<ul>
|
||
<li>has a <var class="field">[[Prototype]]</var> internal slot whose value is <emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_11285"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>.</li>
|
||
<li>has the following properties:</li>
|
||
</ul>
|
||
|
||
<emu-clause id="sec-string.fromcharcode" type="built-in function">
|
||
<h1><span class="secnum">22.1.2.1</span> String.fromCharCode ( ...<var>codeUnits</var> )</h1>
|
||
<p>This function may be called with any number of arguments which form the rest parameter <var>codeUnits</var>.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>result</var> be the empty String.</li><li>For each element <var>next</var> of <var>codeUnits</var>, do<ol><li>Let <var>nextCU</var> be the code unit whose numeric value is <emu-xref aoid="ℝ" id="_ref_11286"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToUint16" id="_ref_11287"><a href="abstract-operations.html#sec-touint16" class="e-user-code">ToUint16</a></emu-xref>(<var>next</var>)).</li><li>Set <var>result</var> to the <emu-xref href="#string-concatenation" id="_ref_11288"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>result</var> and <var>nextCU</var>.</li></ol></li><li>Return <var>result</var>.</li></ol></emu-alg>
|
||
<p>The <emu-val>"length"</emu-val> property of this function is <emu-val>1</emu-val><sub>𝔽</sub>.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.fromcodepoint" type="built-in function">
|
||
<h1><span class="secnum">22.1.2.2</span> String.fromCodePoint ( ...<var>codePoints</var> )</h1>
|
||
<p>This function may be called with any number of arguments which form the rest parameter <var>codePoints</var>.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>result</var> be the empty String.</li><li>For each element <var>next</var> of <var>codePoints</var>, do<ol><li>Let <var>nextCP</var> be ? <emu-xref aoid="ToNumber" id="_ref_11289"><a href="abstract-operations.html#sec-tonumber" class="e-user-code">ToNumber</a></emu-xref>(<var>next</var>).</li><li>If <var>nextCP</var> is not an <emu-xref href="#integral-number" id="_ref_11290"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref>, throw a <emu-val>RangeError</emu-val> exception.</li><li>If <emu-xref aoid="ℝ" id="_ref_11291"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(<var>nextCP</var>) < 0 or <emu-xref aoid="ℝ" id="_ref_11292"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(<var>nextCP</var>) > 0x10FFFF, throw a <emu-val>RangeError</emu-val> exception.</li><li>Set <var>result</var> to the <emu-xref href="#string-concatenation" id="_ref_11293"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>result</var> and <emu-xref aoid="UTF16EncodeCodePoint" id="_ref_11294"><a href="ecmascript-language-source-code.html#sec-utf16encodecodepoint">UTF16EncodeCodePoint</a></emu-xref>(<emu-xref aoid="ℝ" id="_ref_11295"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(<var>nextCP</var>)).</li></ol></li><li><emu-xref href="#assert" id="_ref_11296"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: If <var>codePoints</var> is empty, then <var>result</var> is the empty String.</li><li>Return <var>result</var>.</li></ol></emu-alg>
|
||
<p>The <emu-val>"length"</emu-val> property of this function is <emu-val>1</emu-val><sub>𝔽</sub>.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype">
|
||
<h1><span class="secnum">22.1.2.3</span> String.prototype</h1>
|
||
<p>The initial value of <code>String.prototype</code> is the <emu-xref href="#sec-properties-of-the-string-prototype-object" id="_ref_11297"><a href="text-processing.html#sec-properties-of-the-string-prototype-object">String prototype object</a></emu-xref>.</p>
|
||
<p>This property has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.raw" type="built-in function">
|
||
<h1><span class="secnum">22.1.2.4</span> String.raw ( <var>template</var>, ...<var>substitutions</var> )</h1>
|
||
<p>This function may be called with a variable number of arguments. The first argument is <var>template</var> and the remainder of the arguments form the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11298"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> <var>substitutions</var>.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>substitutionCount</var> be the number of elements in <var>substitutions</var>.</li><li>Let <var>cooked</var> be ? <emu-xref aoid="ToObject" id="_ref_11299"><a href="abstract-operations.html#sec-toobject">ToObject</a></emu-xref>(<var>template</var>).</li><li>Let <var>literals</var> be ? <emu-xref aoid="ToObject" id="_ref_11300"><a href="abstract-operations.html#sec-toobject">ToObject</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_11301"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>cooked</var>, <emu-val>"raw"</emu-val>)).</li><li>Let <var>literalCount</var> be ? <emu-xref aoid="LengthOfArrayLike" id="_ref_11302"><a href="abstract-operations.html#sec-lengthofarraylike" class="e-user-code">LengthOfArrayLike</a></emu-xref>(<var>literals</var>).</li><li>If <var>literalCount</var> ≤ 0, return the empty String.</li><li>Let <var>R</var> be the empty String.</li><li>Let <var>nextIndex</var> be 0.</li><li>Repeat,<ol><li>Let <var>nextLiteralVal</var> be ? <emu-xref aoid="Get" id="_ref_11303"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>literals</var>, ! <emu-xref aoid="ToString" id="_ref_11304"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_11305"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>nextIndex</var>))).</li><li>Let <var>nextLiteral</var> be ? <emu-xref aoid="ToString" id="_ref_11306"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>nextLiteralVal</var>).</li><li>Set <var>R</var> to the <emu-xref href="#string-concatenation" id="_ref_11307"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>R</var> and <var>nextLiteral</var>.</li><li>If <var>nextIndex</var> + 1 = <var>literalCount</var>, return <var>R</var>.</li><li>If <var>nextIndex</var> < <var>substitutionCount</var>, then<ol><li>Let <var>nextSubVal</var> be <var>substitutions</var>[<var>nextIndex</var>].</li><li>Let <var>nextSub</var> be ? <emu-xref aoid="ToString" id="_ref_11308"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>nextSubVal</var>).</li><li>Set <var>R</var> to the <emu-xref href="#string-concatenation" id="_ref_11309"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>R</var> and <var>nextSub</var>.</li></ol></li><li>Set <var>nextIndex</var> to <var>nextIndex</var> + 1.</li></ol></li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This function is intended for use as a tag function of a Tagged Template (<emu-xref href="#sec-tagged-templates" id="_ref_660"><a href="ecmascript-language-expressions.html#sec-tagged-templates">13.3.11</a></emu-xref>). When called as such, the first argument will be a well formed template object and the rest parameter will contain the substitution values.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-properties-of-the-string-prototype-object">
|
||
<h1><span class="secnum">22.1.3</span> Properties of the String Prototype Object</h1>
|
||
<p>The <dfn tabindex="-1">String prototype object</dfn>:</p>
|
||
<ul>
|
||
<li>is <dfn tabindex="-1">%String.prototype%</dfn>.</li>
|
||
<li><emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11310"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> <emu-xref href="#exotic-object" id="_ref_11311"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> and has the internal methods specified for such objects.</li>
|
||
<li>has a <var class="field">[[StringData]]</var> internal slot whose value is the empty String.</li>
|
||
<li>has a <emu-val>"length"</emu-val> property whose initial value is <emu-val>+0</emu-val><sub>𝔽</sub> and whose attributes are { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }.</li>
|
||
<li>has a <var class="field">[[Prototype]]</var> internal slot whose value is <emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_11312"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>.</li>
|
||
</ul>
|
||
<p>Unless explicitly stated otherwise, the methods of the String prototype object defined below are not generic and the <emu-val>this</emu-val> value passed to them must be either a String value or an object that has a <var class="field">[[StringData]]</var> internal slot that has been initialized to a String value.</p>
|
||
|
||
<emu-clause id="sec-string.prototype.at" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.1</span> String.prototype.at ( <var>index</var> )</h1>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11313"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11314"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>Let <var>relativeIndex</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11315"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>index</var>).</li><li>If <var>relativeIndex</var> ≥ 0, then<ol><li>Let <var>k</var> be <var>relativeIndex</var>.</li></ol></li><li>Else,<ol><li>Let <var>k</var> be <var>len</var> + <var>relativeIndex</var>.</li></ol></li><li>If <var>k</var> < 0 or <var>k</var> ≥ <var>len</var>, return <emu-val>undefined</emu-val>.</li><li>Return the <emu-xref href="#substring" id="_ref_11316"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>k</var> to <var>k</var> + 1.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.charat" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.2</span> String.prototype.charAt ( <var>pos</var> )</h1>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This method returns a single element String containing the code unit at index <var>pos</var> within the String value resulting from converting this object to a String. If there is no element at that index, the result is the empty String. The result <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11317"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> value, not a String object.</p>
|
||
<p>If <code>pos</code> is an <emu-xref href="#integral-number" id="_ref_11318"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref>, then the result of <code>x.charAt(pos)</code> is equivalent to the result of <code>x.substring(pos, pos + 1)</code>.</p>
|
||
</div></emu-note>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11319"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11320"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>position</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11321"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>pos</var>).</li><li>Let <var>size</var> be the length of <var>S</var>.</li><li>If <var>position</var> < 0 or <var>position</var> ≥ <var>size</var>, return the empty String.</li><li>Return the <emu-xref href="#substring" id="_ref_11322"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>position</var> to <var>position</var> + 1.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.charcodeat" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.3</span> String.prototype.charCodeAt ( <var>pos</var> )</h1>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This method returns a Number (a non-negative <emu-xref href="#integral-number" id="_ref_11323"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref> less than 2<sup>16</sup>) that is the numeric value of the code unit at index <var>pos</var> within the String resulting from converting this object to a String. If there is no element at that index, the result is <emu-val>NaN</emu-val>.</p>
|
||
</div></emu-note>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11324"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11325"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>position</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11326"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>pos</var>).</li><li>Let <var>size</var> be the length of <var>S</var>.</li><li>If <var>position</var> < 0 or <var>position</var> ≥ <var>size</var>, return <emu-val>NaN</emu-val>.</li><li>Return the <emu-xref href="#number-value-for" id="_ref_11327"><a href="ecmascript-data-types-and-values.html#number-value-for">Number value for</a></emu-xref> the numeric value of the code unit at index <var>position</var> within the String <var>S</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.codepointat" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.4</span> String.prototype.codePointAt ( <var>pos</var> )</h1>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This method returns a non-negative <emu-xref href="#integral-number" id="_ref_11328"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref> less than or equal to <emu-val>0x10FFFF</emu-val><sub>𝔽</sub> that is the numeric value of the UTF-16 encoded code point (<emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_661"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>) starting at the string element at index <var>pos</var> within the String resulting from converting this object to a String. If there is no element at that index, the result is <emu-val>undefined</emu-val>. If a valid UTF-16 <emu-xref href="#surrogate-pair" id="_ref_11329"><a href="ecmascript-data-types-and-values.html#surrogate-pair">surrogate pair</a></emu-xref> does not begin at <var>pos</var>, the result is the code unit at <var>pos</var>.</p>
|
||
</div></emu-note>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11330"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11331"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>position</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11332"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>pos</var>).</li><li>Let <var>size</var> be the length of <var>S</var>.</li><li>If <var>position</var> < 0 or <var>position</var> ≥ <var>size</var>, return <emu-val>undefined</emu-val>.</li><li>Let <var>cp</var> be <emu-xref aoid="CodePointAt" id="_ref_11333"><a href="ecmascript-language-source-code.html#sec-codepointat">CodePointAt</a></emu-xref>(<var>S</var>, <var>position</var>).</li><li>Return <emu-xref aoid="𝔽" id="_ref_11334"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>cp</var>.<var class="field">[[CodePoint]]</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.concat" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.5</span> String.prototype.concat ( ...<var>args</var> )</h1>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>When this method is called it returns the String value consisting of the code units of the <emu-val>this</emu-val> value (converted to a String) followed by the code units of each of the arguments converted to a String. The result <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11335"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> value, not a String object.</p>
|
||
</div></emu-note>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11336"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11337"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>R</var> be <var>S</var>.</li><li>For each element <var>next</var> of <var>args</var>, do<ol><li>Let <var>nextString</var> be ? <emu-xref aoid="ToString" id="_ref_11338"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>next</var>).</li><li>Set <var>R</var> to the <emu-xref href="#string-concatenation" id="_ref_11339"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>R</var> and <var>nextString</var>.</li></ol></li><li>Return <var>R</var>.</li></ol></emu-alg>
|
||
<p>The <emu-val>"length"</emu-val> property of this method is <emu-val>1</emu-val><sub>𝔽</sub>.</p>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.constructor">
|
||
<h1><span class="secnum">22.1.3.6</span> String.prototype.constructor</h1>
|
||
<p>The initial value of <code>String.prototype.constructor</code> is <emu-xref href="#sec-string-constructor" id="_ref_11340"><a href="text-processing.html#sec-string-constructor">%String%</a></emu-xref>.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.endswith" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.7</span> String.prototype.endsWith ( <var>searchString</var> [ , <var>endPosition</var> ] )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11341"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11342"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>isRegExp</var> be ? <emu-xref aoid="IsRegExp" id="_ref_11343"><a href="abstract-operations.html#sec-isregexp" class="e-user-code">IsRegExp</a></emu-xref>(<var>searchString</var>).</li><li>If <var>isRegExp</var> is <emu-val>true</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>searchStr</var> be ? <emu-xref aoid="ToString" id="_ref_11344"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>searchString</var>).</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>If <var>endPosition</var> is <emu-val>undefined</emu-val>, let <var>pos</var> be <var>len</var>; else let <var>pos</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11345"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>endPosition</var>).</li><li>Let <var>end</var> be the result of <emu-xref href="#clamping" id="_ref_11346"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>pos</var> between 0 and <var>len</var>.</li><li>Let <var>searchLength</var> be the length of <var>searchStr</var>.</li><li>If <var>searchLength</var> = 0, return <emu-val>true</emu-val>.</li><li>Let <var>start</var> be <var>end</var> - <var>searchLength</var>.</li><li>If <var>start</var> < 0, return <emu-val>false</emu-val>.</li><li>Let <var>substring</var> be the <emu-xref href="#substring" id="_ref_11347"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>start</var> to <var>end</var>.</li><li>If <var>substring</var> is <var>searchStr</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This method returns <emu-val>true</emu-val> if the sequence of code units of <var>searchString</var> converted to a String is the same as the corresponding code units of this object (converted to a String) starting at <var>endPosition</var> - length(this). Otherwise it returns <emu-val>false</emu-val>.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>Throwing an exception if the first argument is a RegExp is specified in order to allow future editions to define extensions that allow such argument values.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.includes" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.8</span> String.prototype.includes ( <var>searchString</var> [ , <var>position</var> ] )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11348"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11349"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>isRegExp</var> be ? <emu-xref aoid="IsRegExp" id="_ref_11350"><a href="abstract-operations.html#sec-isregexp" class="e-user-code">IsRegExp</a></emu-xref>(<var>searchString</var>).</li><li>If <var>isRegExp</var> is <emu-val>true</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>searchStr</var> be ? <emu-xref aoid="ToString" id="_ref_11351"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>searchString</var>).</li><li>Let <var>pos</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11352"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>position</var>).</li><li><emu-xref href="#assert" id="_ref_11353"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: If <var>position</var> is <emu-val>undefined</emu-val>, then <var>pos</var> is 0.</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>Let <var>start</var> be the result of <emu-xref href="#clamping" id="_ref_11354"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>pos</var> between 0 and <var>len</var>.</li><li>Let <var>index</var> be <emu-xref aoid="StringIndexOf" id="_ref_11355"><a href="ecmascript-data-types-and-values.html#sec-stringindexof">StringIndexOf</a></emu-xref>(<var>S</var>, <var>searchStr</var>, <var>start</var>).</li><li>If <var>index</var> is <emu-const>not-found</emu-const>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>If <var>searchString</var> appears as a <emu-not-ref>substring</emu-not-ref> of the result of converting this object to a String, at one or more indices that are greater than or equal to <var>position</var>, this function returns <emu-val>true</emu-val>; otherwise, it returns <emu-val>false</emu-val>. If <var>position</var> is <emu-val>undefined</emu-val>, 0 is assumed, so as to search all of the String.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>Throwing an exception if the first argument is a RegExp is specified in order to allow future editions to define extensions that allow such argument values.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.indexof" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.9</span> String.prototype.indexOf ( <var>searchString</var> [ , <var>position</var> ] )</h1>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>If <var>searchString</var> appears as a <emu-not-ref>substring</emu-not-ref> of the result of converting this object to a String, at one or more indices that are greater than or equal to <var>position</var>, then the smallest such index is returned; otherwise, <emu-val>-1</emu-val><sub>𝔽</sub> is returned. If <var>position</var> is <emu-val>undefined</emu-val>, <emu-val>+0</emu-val><sub>𝔽</sub> is assumed, so as to search all of the String.</p>
|
||
</div></emu-note>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11356"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11357"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>searchStr</var> be ? <emu-xref aoid="ToString" id="_ref_11358"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>searchString</var>).</li><li>Let <var>pos</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11359"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>position</var>).</li><li><emu-xref href="#assert" id="_ref_11360"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: If <var>position</var> is <emu-val>undefined</emu-val>, then <var>pos</var> is 0.</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>Let <var>start</var> be the result of <emu-xref href="#clamping" id="_ref_11361"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>pos</var> between 0 and <var>len</var>.</li><li>Let <var>result</var> be <emu-xref aoid="StringIndexOf" id="_ref_11362"><a href="ecmascript-data-types-and-values.html#sec-stringindexof">StringIndexOf</a></emu-xref>(<var>S</var>, <var>searchStr</var>, <var>start</var>).</li><li>If <var>result</var> is <emu-const>not-found</emu-const>, return <emu-val>-1</emu-val><sub>𝔽</sub>.</li><li>Return <emu-xref aoid="𝔽" id="_ref_11363"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>result</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.iswellformed" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.10</span> String.prototype.isWellFormed ( )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11364"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11365"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Return <emu-xref aoid="IsStringWellFormedUnicode" id="_ref_11366"><a href="abstract-operations.html#sec-isstringwellformedunicode">IsStringWellFormedUnicode</a></emu-xref>(<var>S</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.lastindexof" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.11</span> String.prototype.lastIndexOf ( <var>searchString</var> [ , <var>position</var> ] )</h1>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>If <var>searchString</var> appears as a <emu-not-ref>substring</emu-not-ref> of the result of converting this object to a String at one or more indices that are smaller than or equal to <var>position</var>, then the greatest such index is returned; otherwise, <emu-val>-1</emu-val><sub>𝔽</sub> is returned. If <var>position</var> is <emu-val>undefined</emu-val>, the length of the String value is assumed, so as to search all of the String.</p>
|
||
</div></emu-note>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11367"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11368"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>searchStr</var> be ? <emu-xref aoid="ToString" id="_ref_11369"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>searchString</var>).</li><li>Let <var>numPos</var> be ? <emu-xref aoid="ToNumber" id="_ref_11370"><a href="abstract-operations.html#sec-tonumber" class="e-user-code">ToNumber</a></emu-xref>(<var>position</var>).</li><li><emu-xref href="#assert" id="_ref_11371"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: If <var>position</var> is <emu-val>undefined</emu-val>, then <var>numPos</var> is <emu-val>NaN</emu-val>.</li><li>If <var>numPos</var> is <emu-val>NaN</emu-val>, let <var>pos</var> be +∞; else let <var>pos</var> be ! <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11372"><a href="abstract-operations.html#sec-tointegerorinfinity">ToIntegerOrInfinity</a></emu-xref>(<var>numPos</var>).</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>Let <var>searchLen</var> be the length of <var>searchStr</var>.</li><li>If <var>len</var> < <var>searchLen</var>, return <emu-val>-1</emu-val><sub>𝔽</sub>.</li><li>Let <var>start</var> be the result of <emu-xref href="#clamping" id="_ref_11373"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>pos</var> between 0 and <var>len</var> - <var>searchLen</var>.</li><li>Let <var>result</var> be <emu-xref aoid="StringLastIndexOf" id="_ref_11374"><a href="ecmascript-data-types-and-values.html#sec-stringlastindexof">StringLastIndexOf</a></emu-xref>(<var>S</var>, <var>searchStr</var>, <var>start</var>).</li><li>If <var>result</var> is <emu-const>not-found</emu-const>, return <emu-val>-1</emu-val><sub>𝔽</sub>.</li><li>Return <emu-xref aoid="𝔽" id="_ref_11375"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>result</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.localecompare" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.12</span> String.prototype.localeCompare ( <var>that</var> [ , <var>reserved1</var> [ , <var>reserved2</var> ] ] )</h1>
|
||
<p>An ECMAScript implementation that includes the ECMA-402 Internationalization API must implement this method as specified in the ECMA-402 specification. If an ECMAScript implementation does not include the ECMA-402 API the following specification of this method is used:</p>
|
||
<p>This method returns a Number other than <emu-val>NaN</emu-val> representing the result of an <emu-xref href="#implementation-defined" id="_ref_11376"><a href="overview.html#implementation-defined">implementation-defined</a></emu-xref> locale-sensitive String comparison of the <emu-val>this</emu-val> value (converted to a String <var>S</var>) with <var>that</var> (converted to a String <var>thatValue</var>). The result is intended to correspond with a <emu-xref href="#sort-order" id="_ref_11377"><a href="indexed-collections.html#sort-order">sort order</a></emu-xref> of String values according to conventions of the <emu-xref href="#host-environment" id="_ref_11378"><a href="overview.html#host-environment">host environment</a></emu-xref>'s current locale, and will be negative when <var>S</var> is ordered before <var>thatValue</var>, positive when <var>S</var> is ordered after <var>thatValue</var>, and zero in all other cases (representing no relative ordering between <var>S</var> and <var>thatValue</var>).</p>
|
||
<p>Before performing the comparisons, this method performs the following steps to prepare the Strings:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11379"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11380"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>thatValue</var> be ? <emu-xref aoid="ToString" id="_ref_11381"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>that</var>).</li></ol></emu-alg>
|
||
<p>The meaning of the optional second and third parameters to this method are defined in the ECMA-402 specification; implementations that do not include ECMA-402 support must not assign any other interpretation to those parameter positions.</p>
|
||
<p>The actual return values are <emu-xref href="#implementation-defined" id="_ref_11382"><a href="overview.html#implementation-defined">implementation-defined</a></emu-xref> to permit encoding additional information in them, but this method, when considered as a method of two arguments, is required to be a <emu-xref href="#consistent-comparator" id="_ref_11383"><a href="indexed-collections.html#consistent-comparator">consistent comparator</a></emu-xref> defining a total ordering on the set of all Strings. This method is also required to recognize and honour canonical equivalence according to the Unicode Standard, including returning <emu-val>+0</emu-val><sub>𝔽</sub> when comparing distinguishable Strings that are canonically equivalent.</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This method itself is not directly suitable as an argument to <code>Array.prototype.sort</code> because the latter requires a function of two arguments.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method may rely on whatever language- and/or locale-sensitive comparison functionality is available to the ECMAScript environment from the <emu-xref href="#host-environment" id="_ref_11384"><a href="overview.html#host-environment">host environment</a></emu-xref>, and is intended to compare according to the conventions of the <emu-xref href="#host-environment" id="_ref_11385"><a href="overview.html#host-environment">host environment</a></emu-xref>'s current locale. However, regardless of comparison capabilities, this method must recognize and honour canonical equivalence according to the Unicode Standard—for example, the following comparisons must all return <emu-val>+0</emu-val><sub>𝔽</sub>:</p>
|
||
<pre><code class="javascript hljs"><span class="hljs-comment">// Å ANGSTROM SIGN vs.</span>
|
||
<span class="hljs-comment">// Å LATIN CAPITAL LETTER A + COMBINING RING ABOVE</span>
|
||
<span class="hljs-string">"\u212B"</span>.<span class="hljs-title function_">localeCompare</span>(<span class="hljs-string">"A\u030A"</span>)
|
||
|
||
<span class="hljs-comment">// Ω OHM SIGN vs.</span>
|
||
<span class="hljs-comment">// Ω GREEK CAPITAL LETTER OMEGA</span>
|
||
<span class="hljs-string">"\u2126"</span>.<span class="hljs-title function_">localeCompare</span>(<span class="hljs-string">"\u03A9"</span>)
|
||
|
||
<span class="hljs-comment">// ṩ LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE vs.</span>
|
||
<span class="hljs-comment">// ṩ LATIN SMALL LETTER S + COMBINING DOT ABOVE + COMBINING DOT BELOW</span>
|
||
<span class="hljs-string">"\u1E69"</span>.<span class="hljs-title function_">localeCompare</span>(<span class="hljs-string">"s\u0307\u0323"</span>)
|
||
|
||
<span class="hljs-comment">// ḍ̇ LATIN SMALL LETTER D WITH DOT ABOVE + COMBINING DOT BELOW vs.</span>
|
||
<span class="hljs-comment">// ḍ̇ LATIN SMALL LETTER D WITH DOT BELOW + COMBINING DOT ABOVE</span>
|
||
<span class="hljs-string">"\u1E0B\u0323"</span>.<span class="hljs-title function_">localeCompare</span>(<span class="hljs-string">"\u1E0D\u0307"</span>)
|
||
|
||
<span class="hljs-comment">// 가 HANGUL CHOSEONG KIYEOK + HANGUL JUNGSEONG A vs.</span>
|
||
<span class="hljs-comment">// 가 HANGUL SYLLABLE GA</span>
|
||
<span class="hljs-string">"\u1100\u1161"</span>.<span class="hljs-title function_">localeCompare</span>(<span class="hljs-string">"\uAC00"</span>)</code></pre>
|
||
<p>For a definition and discussion of canonical equivalence see the Unicode Standard, chapters 2 and 3, as well as <a href="https://unicode.org/reports/tr15/">Unicode Standard Annex #15, Unicode Normalization Forms</a> and <a href="https://unicode.org/notes/tn5/">Unicode Technical Note #5, Canonical Equivalence in Applications</a>. Also see <a href="https://unicode.org/reports/tr10/">Unicode Technical Standard #10, Unicode Collation Algorithm</a>.</p>
|
||
<p>It is recommended that this method should not honour Unicode compatibility equivalents or compatibility decompositions as defined in the Unicode Standard, chapter 3, section 3.7.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.match" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.13</span> String.prototype.match ( <var>regexp</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11386"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>If <var>regexp</var> <emu-xref href="#sec-object-type" id="_ref_11387"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>, then<ol><li>Let <var>matcher</var> be ? <emu-xref aoid="GetMethod" id="_ref_11388"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>regexp</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11389"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.match%</a></emu-xref>).</li><li>If <var>matcher</var> is not <emu-val>undefined</emu-val>, then<ol><li>Return ? <emu-xref aoid="Call" id="_ref_11390"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>matcher</var>, <var>regexp</var>, « <var>O</var> »).</li></ol></li></ol></li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11391"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>rx</var> be ? <emu-xref aoid="RegExpCreate" id="_ref_11392"><a href="text-processing.html#sec-regexpcreate" class="e-user-code">RegExpCreate</a></emu-xref>(<var>regexp</var>, <emu-val>undefined</emu-val>).</li><li>Return ? <emu-xref aoid="Invoke" id="_ref_11393"><a href="abstract-operations.html#sec-invoke" class="e-user-code">Invoke</a></emu-xref>(<var>rx</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11394"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.match%</a></emu-xref>, « <var>S</var> »).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.matchall" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.14</span> String.prototype.matchAll ( <var>regexp</var> )</h1>
|
||
<p>This method performs a regular expression match of the String representing the <emu-val>this</emu-val> value against <var>regexp</var> and returns an <emu-xref href="#sec-iterator-interface" id="_ref_11395"><a href="control-abstraction-objects.html#sec-iterator-interface">iterator</a></emu-xref> that yields match results. Each match result is an Array containing the matched portion of the String as the first element, followed by the portions matched by any capturing groups. If the regular expression never matches, the returned <emu-xref href="#sec-iterator-interface" id="_ref_11396"><a href="control-abstraction-objects.html#sec-iterator-interface">iterator</a></emu-xref> does not yield any match results.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11397"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>If <var>regexp</var> <emu-xref href="#sec-object-type" id="_ref_11398"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>, then<ol><li>Let <var>isRegExp</var> be ? <emu-xref aoid="IsRegExp" id="_ref_11399"><a href="abstract-operations.html#sec-isregexp" class="e-user-code">IsRegExp</a></emu-xref>(<var>regexp</var>).</li><li>If <var>isRegExp</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>flags</var> be ? <emu-xref aoid="Get" id="_ref_11400"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>regexp</var>, <emu-val>"flags"</emu-val>).</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11401"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>flags</var>).</li><li>If ? <emu-xref aoid="ToString" id="_ref_11402"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>flags</var>) does not contain <emu-val>"g"</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>Let <var>matcher</var> be ? <emu-xref aoid="GetMethod" id="_ref_11403"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>regexp</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11404"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.matchAll%</a></emu-xref>).</li><li>If <var>matcher</var> is not <emu-val>undefined</emu-val>, then<ol><li>Return ? <emu-xref aoid="Call" id="_ref_11405"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>matcher</var>, <var>regexp</var>, « <var>O</var> »).</li></ol></li></ol></li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11406"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>rx</var> be ? <emu-xref aoid="RegExpCreate" id="_ref_11407"><a href="text-processing.html#sec-regexpcreate" class="e-user-code">RegExpCreate</a></emu-xref>(<var>regexp</var>, <emu-val>"g"</emu-val>).</li><li>Return ? <emu-xref aoid="Invoke" id="_ref_11408"><a href="abstract-operations.html#sec-invoke" class="e-user-code">Invoke</a></emu-xref>(<var>rx</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11409"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.matchAll%</a></emu-xref>, « <var>S</var> »).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">This method is intentionally generic, it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">Similarly to <code>String.prototype.split</code>, <code>String.prototype.matchAll</code> is designed to typically act without mutating its inputs.</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.normalize" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.15</span> String.prototype.normalize ( [ <var>form</var> ] )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11410"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11411"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>If <var>form</var> is <emu-val>undefined</emu-val>, let <var>f</var> be <emu-val>"NFC"</emu-val>.</li><li>Else, let <var>f</var> be ? <emu-xref aoid="ToString" id="_ref_11412"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>form</var>).</li><li>If <var>f</var> is not one of <emu-val>"NFC"</emu-val>, <emu-val>"NFD"</emu-val>, <emu-val>"NFKC"</emu-val>, or <emu-val>"NFKD"</emu-val>, throw a <emu-val>RangeError</emu-val> exception.</li><li>Let <var>ns</var> be the String value that is the result of normalizing <var>S</var> into the normalization form named by <var>f</var> as specified in <a href="https://www.unicode.org/versions/latest/ch03.pdf">the latest Unicode Standard, Normalization Forms</a>.</li><li>Return <var>ns</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.padend" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.16</span> String.prototype.padEnd ( <var>maxLength</var> [ , <var>fillString</var> ] )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11413"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Return ? <emu-xref aoid="StringPaddingBuiltinsImpl" id="_ref_11414"><a href="text-processing.html#sec-stringpaddingbuiltinsimpl" class="e-user-code">StringPaddingBuiltinsImpl</a></emu-xref>(<var>O</var>, <var>maxLength</var>, <var>fillString</var>, <emu-const>end</emu-const>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.padstart" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.17</span> String.prototype.padStart ( <var>maxLength</var> [ , <var>fillString</var> ] )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11415"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Return ? <emu-xref aoid="StringPaddingBuiltinsImpl" id="_ref_11416"><a href="text-processing.html#sec-stringpaddingbuiltinsimpl" class="e-user-code">StringPaddingBuiltinsImpl</a></emu-xref>(<var>O</var>, <var>maxLength</var>, <var>fillString</var>, <emu-const>start</emu-const>).</li></ol></emu-alg>
|
||
|
||
<emu-clause id="sec-stringpaddingbuiltinsimpl" type="abstract operation" aoid="StringPaddingBuiltinsImpl">
|
||
<h1><span class="secnum">22.1.3.17.1</span> StringPaddingBuiltinsImpl ( <var>O</var>, <var>maxLength</var>, <var>fillString</var>, <var>placement</var> )</h1>
|
||
<p>The abstract operation StringPaddingBuiltinsImpl takes arguments <var>O</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_11417"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), <var>maxLength</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_11418"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), <var>fillString</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_11419"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>placement</var> (<emu-const>start</emu-const> or <emu-const>end</emu-const>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_11420"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a String or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_11421"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11422"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>intMaxLength</var> be <emu-xref aoid="ℝ" id="_ref_11423"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToLength" id="_ref_11424"><a href="abstract-operations.html#sec-tolength" class="e-user-code">ToLength</a></emu-xref>(<var>maxLength</var>)).</li><li>Let <var>stringLength</var> be the length of <var>S</var>.</li><li>If <var>intMaxLength</var> ≤ <var>stringLength</var>, return <var>S</var>.</li><li>If <var>fillString</var> is <emu-val>undefined</emu-val>, set <var>fillString</var> to the String value consisting solely of the code unit 0x0020 (SPACE).</li><li>Else, set <var>fillString</var> to ? <emu-xref aoid="ToString" id="_ref_11425"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>fillString</var>).</li><li>Return <emu-xref aoid="StringPad" id="_ref_11426"><a href="text-processing.html#sec-stringpad">StringPad</a></emu-xref>(<var>S</var>, <var>intMaxLength</var>, <var>fillString</var>, <var>placement</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-stringpad" type="abstract operation" aoid="StringPad">
|
||
<h1><span class="secnum">22.1.3.17.2</span> StringPad ( <var>S</var>, <var>maxLength</var>, <var>fillString</var>, <var>placement</var> )</h1>
|
||
<p>The abstract operation StringPad takes arguments <var>S</var> (a String), <var>maxLength</var> (a non-negative <emu-xref href="#integer" id="_ref_11427"><a href="notational-conventions.html#integer">integer</a></emu-xref>), <var>fillString</var> (a String), and <var>placement</var> (<emu-const>start</emu-const> or <emu-const>end</emu-const>) and returns a String. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>stringLength</var> be the length of <var>S</var>.</li><li>If <var>maxLength</var> ≤ <var>stringLength</var>, return <var>S</var>.</li><li>If <var>fillString</var> is the empty String, return <var>S</var>.</li><li>Let <var>fillLen</var> be <var>maxLength</var> - <var>stringLength</var>.</li><li>Let <var>truncatedStringFiller</var> be the String value consisting of repeated concatenations of <var>fillString</var> truncated to length <var>fillLen</var>.</li><li>If <var>placement</var> is <emu-const>start</emu-const>, return the <emu-xref href="#string-concatenation" id="_ref_11428"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>truncatedStringFiller</var> and <var>S</var>.</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_11429"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>S</var> and <var>truncatedStringFiller</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>The argument <var>maxLength</var> will be clamped such that it can be no smaller than the length of <var>S</var>.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>The argument <var>fillString</var> defaults to <emu-val>" "</emu-val> (the String value consisting of the code unit 0x0020 SPACE).</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-tozeropaddeddecimalstring" type="abstract operation" aoid="ToZeroPaddedDecimalString">
|
||
<h1><span class="secnum">22.1.3.17.3</span> ToZeroPaddedDecimalString ( <var>n</var>, <var>minLength</var> )</h1>
|
||
<p>The abstract operation ToZeroPaddedDecimalString takes arguments <var>n</var> (a non-negative <emu-xref href="#integer" id="_ref_11430"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and <var>minLength</var> (a non-negative <emu-xref href="#integer" id="_ref_11431"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and returns a String. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>S</var> be the String representation of <var>n</var>, formatted as a decimal number.</li><li>Return <emu-xref aoid="StringPad" id="_ref_11432"><a href="text-processing.html#sec-stringpad">StringPad</a></emu-xref>(<var>S</var>, <var>minLength</var>, <emu-val>"0"</emu-val>, <emu-const>start</emu-const>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.repeat" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.18</span> String.prototype.repeat ( <var>count</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11433"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11434"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>n</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11435"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>count</var>).</li><li>If <var>n</var> < 0 or <var>n</var> = +∞, throw a <emu-val>RangeError</emu-val> exception.</li><li>If <var>n</var> = 0, return the empty String.</li><li>Return the String value that is made from <var>n</var> copies of <var>S</var> appended together.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This method creates the String value consisting of the code units of the <emu-val>this</emu-val> value (converted to String) repeated <var>count</var> times.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.replace" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.19</span> String.prototype.replace ( <var>searchValue</var>, <var>replaceValue</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11436"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>If <var>searchValue</var> <emu-xref href="#sec-object-type" id="_ref_11437"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>, then<ol><li>Let <var>replacer</var> be ? <emu-xref aoid="GetMethod" id="_ref_11438"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>searchValue</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11439"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.replace%</a></emu-xref>).</li><li>If <var>replacer</var> is not <emu-val>undefined</emu-val>, then<ol><li>Return ? <emu-xref aoid="Call" id="_ref_11440"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>replacer</var>, <var>searchValue</var>, « <var>O</var>, <var>replaceValue</var> »).</li></ol></li></ol></li><li>Let <var>string</var> be ? <emu-xref aoid="ToString" id="_ref_11441"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>searchString</var> be ? <emu-xref aoid="ToString" id="_ref_11442"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>searchValue</var>).</li><li>Let <var>functionalReplace</var> be <emu-xref aoid="IsCallable" id="_ref_11443"><a href="abstract-operations.html#sec-iscallable">IsCallable</a></emu-xref>(<var>replaceValue</var>).</li><li>If <var>functionalReplace</var> is <emu-val>false</emu-val>, then<ol><li>Set <var>replaceValue</var> to ? <emu-xref aoid="ToString" id="_ref_11444"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>replaceValue</var>).</li></ol></li><li>Let <var>searchLength</var> be the length of <var>searchString</var>.</li><li>Let <var>position</var> be <emu-xref aoid="StringIndexOf" id="_ref_11445"><a href="ecmascript-data-types-and-values.html#sec-stringindexof">StringIndexOf</a></emu-xref>(<var>string</var>, <var>searchString</var>, 0).</li><li>If <var>position</var> is <emu-const>not-found</emu-const>, return <var>string</var>.</li><li>Let <var>preceding</var> be the <emu-xref href="#substring" id="_ref_11446"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>string</var> from 0 to <var>position</var>.</li><li>Let <var>following</var> be the <emu-xref href="#substring" id="_ref_11447"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>string</var> from <var>position</var> + <var>searchLength</var>.</li><li>If <var>functionalReplace</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>replacement</var> be ? <emu-xref aoid="ToString" id="_ref_11448"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_11449"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>replaceValue</var>, <emu-val>undefined</emu-val>, « <var>searchString</var>, <emu-xref aoid="𝔽" id="_ref_11450"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>position</var>), <var>string</var> »)).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_11451"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>replaceValue</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11452"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>.</li><li>Let <var>captures</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11453"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>replacement</var> be ! <emu-xref aoid="GetSubstitution" id="_ref_11454"><a href="text-processing.html#sec-getsubstitution">GetSubstitution</a></emu-xref>(<var>searchString</var>, <var>string</var>, <var>position</var>, <var>captures</var>, <emu-val>undefined</emu-val>, <var>replaceValue</var>).</li></ol></li><li>Return the <emu-xref href="#string-concatenation" id="_ref_11455"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>preceding</var>, <var>replacement</var>, and <var>following</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
|
||
<emu-clause id="sec-getsubstitution" type="abstract operation" oldids="table-replacement-text-symbol-substitutions,table-45" aoid="GetSubstitution"><span id="table-45"></span><span id="table-replacement-text-symbol-substitutions"></span>
|
||
<h1><span class="secnum">22.1.3.19.1</span> GetSubstitution ( <var>matched</var>, <var>str</var>, <var>position</var>, <var>captures</var>, <var>namedCaptures</var>, <var>replacementTemplate</var> )</h1>
|
||
<p>The abstract operation GetSubstitution takes arguments <var>matched</var> (a String), <var>str</var> (a String), <var>position</var> (a non-negative <emu-xref href="#integer" id="_ref_11456"><a href="notational-conventions.html#integer">integer</a></emu-xref>), <var>captures</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11457"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of either Strings or <emu-val>undefined</emu-val>), <var>namedCaptures</var> (an Object or <emu-val>undefined</emu-val>), and <var>replacementTemplate</var> (a String) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_11458"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a String or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_11459"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. For the purposes of this abstract operation, a <em>decimal digit</em> is a code unit in the <emu-xref href="#inclusive-interval" id="_ref_11460"><a href="notational-conventions.html#inclusive-interval">inclusive interval</a></emu-xref> from 0x0030 (DIGIT ZERO) to 0x0039 (DIGIT NINE). It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>stringLength</var> be the length of <var>str</var>.</li><li><emu-xref href="#assert" id="_ref_11461"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>position</var> ≤ <var>stringLength</var>.</li><li>Let <var>result</var> be the empty String.</li><li>Let <var>templateRemainder</var> be <var>replacementTemplate</var>.</li><li>Repeat, while <var>templateRemainder</var> is not the empty String,<ol><li declared="ref,refReplacement">NOTE: The following steps isolate <var>ref</var> (a prefix of <var>templateRemainder</var>), determine <var>refReplacement</var> (its replacement), and then append that replacement to <var>result</var>.</li><li>If <var>templateRemainder</var> starts with <emu-val>"$$"</emu-val>, then<ol><li>Let <var>ref</var> be <emu-val>"$$"</emu-val>.</li><li>Let <var>refReplacement</var> be <emu-val>"$"</emu-val>.</li></ol></li><li>Else if <var>templateRemainder</var> starts with <emu-val>"$`"</emu-val>, then<ol><li>Let <var>ref</var> be <emu-val>"$`"</emu-val>.</li><li>Let <var>refReplacement</var> be the <emu-xref href="#substring" id="_ref_11462"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>str</var> from 0 to <var>position</var>.</li></ol></li><li>Else if <var>templateRemainder</var> starts with <emu-val>"$&"</emu-val>, then<ol><li>Let <var>ref</var> be <emu-val>"$&"</emu-val>.</li><li>Let <var>refReplacement</var> be <var>matched</var>.</li></ol></li><li>Else if <var>templateRemainder</var> starts with <emu-val>"$'"</emu-val> (0x0024 (DOLLAR SIGN) followed by 0x0027 (APOSTROPHE)), then<ol><li>Let <var>ref</var> be <emu-val>"$'"</emu-val>.</li><li>Let <var>matchLength</var> be the length of <var>matched</var>.</li><li>Let <var>tailPos</var> be <var>position</var> + <var>matchLength</var>.</li><li>Let <var>refReplacement</var> be the <emu-xref href="#substring" id="_ref_11463"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>str</var> from <emu-xref aoid="min" id="_ref_11464"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>tailPos</var>, <var>stringLength</var>).</li><li>NOTE: <var>tailPos</var> can exceed <var>stringLength</var> only if this abstract operation was invoked by a call to the intrinsic <emu-xref href="#sec-well-known-symbols" id="_ref_11465"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.replace%</a></emu-xref> method of <emu-xref href="#sec-properties-of-the-regexp-prototype-object" id="_ref_11466"><a href="text-processing.html#sec-properties-of-the-regexp-prototype-object">%RegExp.prototype%</a></emu-xref> on an object whose <emu-val>"exec"</emu-val> property is not the intrinsic %RegExp.prototype.exec%.</li></ol></li><li>Else if <var>templateRemainder</var> starts with <emu-val>"$"</emu-val> followed by 1 or more decimal digits, then<ol><li>If <var>templateRemainder</var> starts with <emu-val>"$"</emu-val> followed by 2 or more decimal digits, let <var>digitCount</var> be 2; else let <var>digitCount</var> be 1.</li><li>Let <var>digits</var> be the <emu-xref href="#substring" id="_ref_11467"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>templateRemainder</var> from 1 to 1 + <var>digitCount</var>.</li><li>Let <var>index</var> be <emu-xref aoid="ℝ" id="_ref_11468"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(<emu-xref aoid="StringToNumber" id="_ref_11469"><a href="abstract-operations.html#sec-stringtonumber">StringToNumber</a></emu-xref>(<var>digits</var>)).</li><li><emu-xref href="#assert" id="_ref_11470"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: 0 ≤ <var>index</var> ≤ 99.</li><li>Let <var>captureLen</var> be the number of elements in <var>captures</var>.</li><li>If <var>index</var> > <var>captureLen</var> and <var>digitCount</var> = 2, then<ol><li>NOTE: When a two-digit replacement pattern specifies an index exceeding the count of capturing groups, it is treated as a one-digit replacement pattern followed by a literal digit.</li><li>Set <var>digitCount</var> to 1.</li><li>Set <var>digits</var> to the <emu-xref href="#substring" id="_ref_11471"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>digits</var> from 0 to 1.</li><li>Set <var>index</var> to <emu-xref aoid="ℝ" id="_ref_11472"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(<emu-xref aoid="StringToNumber" id="_ref_11473"><a href="abstract-operations.html#sec-stringtonumber">StringToNumber</a></emu-xref>(<var>digits</var>)).</li></ol></li><li>Let <var>ref</var> be the <emu-xref href="#substring" id="_ref_11474"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>templateRemainder</var> from 0 to 1 + <var>digitCount</var>.</li><li>If 1 ≤ <var>index</var> ≤ <var>captureLen</var>, then<ol><li>Let <var>capture</var> be <var>captures</var>[<var>index</var> - 1].</li><li>If <var>capture</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>refReplacement</var> be the empty String.</li></ol></li><li>Else,<ol><li>Let <var>refReplacement</var> be <var>capture</var>.</li></ol></li></ol></li><li>Else,<ol><li>Let <var>refReplacement</var> be <var>ref</var>.</li></ol></li></ol></li><li>Else if <var>templateRemainder</var> starts with <emu-val>"$<"</emu-val>, then<ol><li>Let <var>gtPos</var> be <emu-xref aoid="StringIndexOf" id="_ref_11475"><a href="ecmascript-data-types-and-values.html#sec-stringindexof">StringIndexOf</a></emu-xref>(<var>templateRemainder</var>, <emu-val>">"</emu-val>, 0).</li><li>If <var>gtPos</var> is <emu-const>not-found</emu-const> or <var>namedCaptures</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>ref</var> be <emu-val>"$<"</emu-val>.</li><li>Let <var>refReplacement</var> be <var>ref</var>.</li></ol></li><li>Else,<ol><li>Let <var>ref</var> be the <emu-xref href="#substring" id="_ref_11476"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>templateRemainder</var> from 0 to <var>gtPos</var> + 1.</li><li>Let <var>groupName</var> be the <emu-xref href="#substring" id="_ref_11477"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>templateRemainder</var> from 2 to <var>gtPos</var>.</li><li><emu-xref href="#assert" id="_ref_11478"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>namedCaptures</var> <emu-xref href="#sec-object-type" id="_ref_11479"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>capture</var> be ? <emu-xref aoid="Get" id="_ref_11480"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>namedCaptures</var>, <var>groupName</var>).</li><li>If <var>capture</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>refReplacement</var> be the empty String.</li></ol></li><li>Else,<ol><li>Let <var>refReplacement</var> be ? <emu-xref aoid="ToString" id="_ref_11481"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>capture</var>).</li></ol></li></ol></li></ol></li><li>Else,<ol><li>Let <var>ref</var> be the <emu-xref href="#substring" id="_ref_11482"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>templateRemainder</var> from 0 to 1.</li><li>Let <var>refReplacement</var> be <var>ref</var>.</li></ol></li><li>Let <var>refLength</var> be the length of <var>ref</var>.</li><li>Set <var>templateRemainder</var> to the <emu-xref href="#substring" id="_ref_11483"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>templateRemainder</var> from <var>refLength</var>.</li><li>Set <var>result</var> to the <emu-xref href="#string-concatenation" id="_ref_11484"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>result</var> and <var>refReplacement</var>.</li></ol></li><li>Return <var>result</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.replaceall" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.20</span> String.prototype.replaceAll ( <var>searchValue</var>, <var>replaceValue</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11485"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>If <var>searchValue</var> <emu-xref href="#sec-object-type" id="_ref_11486"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>, then<ol><li>Let <var>isRegExp</var> be ? <emu-xref aoid="IsRegExp" id="_ref_11487"><a href="abstract-operations.html#sec-isregexp" class="e-user-code">IsRegExp</a></emu-xref>(<var>searchValue</var>).</li><li>If <var>isRegExp</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>flags</var> be ? <emu-xref aoid="Get" id="_ref_11488"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>searchValue</var>, <emu-val>"flags"</emu-val>).</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11489"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>flags</var>).</li><li>If ? <emu-xref aoid="ToString" id="_ref_11490"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>flags</var>) does not contain <emu-val>"g"</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>Let <var>replacer</var> be ? <emu-xref aoid="GetMethod" id="_ref_11491"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>searchValue</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11492"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.replace%</a></emu-xref>).</li><li>If <var>replacer</var> is not <emu-val>undefined</emu-val>, then<ol><li>Return ? <emu-xref aoid="Call" id="_ref_11493"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>replacer</var>, <var>searchValue</var>, « <var>O</var>, <var>replaceValue</var> »).</li></ol></li></ol></li><li>Let <var>string</var> be ? <emu-xref aoid="ToString" id="_ref_11494"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>searchString</var> be ? <emu-xref aoid="ToString" id="_ref_11495"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>searchValue</var>).</li><li>Let <var>functionalReplace</var> be <emu-xref aoid="IsCallable" id="_ref_11496"><a href="abstract-operations.html#sec-iscallable">IsCallable</a></emu-xref>(<var>replaceValue</var>).</li><li>If <var>functionalReplace</var> is <emu-val>false</emu-val>, then<ol><li>Set <var>replaceValue</var> to ? <emu-xref aoid="ToString" id="_ref_11497"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>replaceValue</var>).</li></ol></li><li>Let <var>searchLength</var> be the length of <var>searchString</var>.</li><li>Let <var>advanceBy</var> be <emu-xref aoid="max" id="_ref_11498"><a href="notational-conventions.html#eqn-max">max</a></emu-xref>(1, <var>searchLength</var>).</li><li>Let <var>matchPositions</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11499"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>position</var> be <emu-xref aoid="StringIndexOf" id="_ref_11500"><a href="ecmascript-data-types-and-values.html#sec-stringindexof">StringIndexOf</a></emu-xref>(<var>string</var>, <var>searchString</var>, 0).</li><li>Repeat, while <var>position</var> is not <emu-const>not-found</emu-const>,<ol><li>Append <var>position</var> to <var>matchPositions</var>.</li><li>Set <var>position</var> to <emu-xref aoid="StringIndexOf" id="_ref_11501"><a href="ecmascript-data-types-and-values.html#sec-stringindexof">StringIndexOf</a></emu-xref>(<var>string</var>, <var>searchString</var>, <var>position</var> + <var>advanceBy</var>).</li></ol></li><li>Let <var>endOfLastMatch</var> be 0.</li><li>Let <var>result</var> be the empty String.</li><li>For each element <var>p</var> of <var>matchPositions</var>, do<ol><li>Let <var>preserved</var> be the <emu-xref href="#substring" id="_ref_11502"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>string</var> from <var>endOfLastMatch</var> to <var>p</var>.</li><li>If <var>functionalReplace</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>replacement</var> be ? <emu-xref aoid="ToString" id="_ref_11503"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_11504"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>replaceValue</var>, <emu-val>undefined</emu-val>, « <var>searchString</var>, <emu-xref aoid="𝔽" id="_ref_11505"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>p</var>), <var>string</var> »)).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_11506"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>replaceValue</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11507"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>.</li><li>Let <var>captures</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11508"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>replacement</var> be ! <emu-xref aoid="GetSubstitution" id="_ref_11509"><a href="text-processing.html#sec-getsubstitution">GetSubstitution</a></emu-xref>(<var>searchString</var>, <var>string</var>, <var>p</var>, <var>captures</var>, <emu-val>undefined</emu-val>, <var>replaceValue</var>).</li></ol></li><li>Set <var>result</var> to the <emu-xref href="#string-concatenation" id="_ref_11510"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>result</var>, <var>preserved</var>, and <var>replacement</var>.</li><li>Set <var>endOfLastMatch</var> to <var>p</var> + <var>searchLength</var>.</li></ol></li><li>If <var>endOfLastMatch</var> < the length of <var>string</var>, then<ol><li>Set <var>result</var> to the <emu-xref href="#string-concatenation" id="_ref_11511"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>result</var> and the <emu-xref href="#substring" id="_ref_11512"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>string</var> from <var>endOfLastMatch</var>.</li></ol></li><li>Return <var>result</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.search" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.21</span> String.prototype.search ( <var>regexp</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11513"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>If <var>regexp</var> <emu-xref href="#sec-object-type" id="_ref_11514"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>, then<ol><li>Let <var>searcher</var> be ? <emu-xref aoid="GetMethod" id="_ref_11515"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>regexp</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11516"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.search%</a></emu-xref>).</li><li>If <var>searcher</var> is not <emu-val>undefined</emu-val>, then<ol><li>Return ? <emu-xref aoid="Call" id="_ref_11517"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>searcher</var>, <var>regexp</var>, « <var>O</var> »).</li></ol></li></ol></li><li>Let <var>string</var> be ? <emu-xref aoid="ToString" id="_ref_11518"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>rx</var> be ? <emu-xref aoid="RegExpCreate" id="_ref_11519"><a href="text-processing.html#sec-regexpcreate" class="e-user-code">RegExpCreate</a></emu-xref>(<var>regexp</var>, <emu-val>undefined</emu-val>).</li><li>Return ? <emu-xref aoid="Invoke" id="_ref_11520"><a href="abstract-operations.html#sec-invoke" class="e-user-code">Invoke</a></emu-xref>(<var>rx</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11521"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.search%</a></emu-xref>, « <var>string</var> »).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.slice" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.22</span> String.prototype.slice ( <var>start</var>, <var>end</var> )</h1>
|
||
<p>This method returns a <emu-not-ref>substring</emu-not-ref> of the result of converting this object to a String, starting from index <var>start</var> and running to, but not including, index <var>end</var> (or through the end of the String if <var>end</var> is <emu-val>undefined</emu-val>). If <var>start</var> is negative, it is treated as <emu-eqn class="inline"><var>sourceLength</var> + <var>start</var></emu-eqn> where <var>sourceLength</var> is the length of the String. If <var>end</var> is negative, it is treated as <emu-eqn class="inline"><var>sourceLength</var> + <var>end</var></emu-eqn> where <var>sourceLength</var> is the length of the String. The result <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11522"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> value, not a String object.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11523"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11524"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>Let <var>intStart</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11525"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>start</var>).</li><li>If <var>intStart</var> = -∞, let <var>from</var> be 0.</li><li>Else if <var>intStart</var> < 0, let <var>from</var> be <emu-xref aoid="max" id="_ref_11526"><a href="notational-conventions.html#eqn-max">max</a></emu-xref>(<var>len</var> + <var>intStart</var>, 0).</li><li>Else, let <var>from</var> be <emu-xref aoid="min" id="_ref_11527"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>intStart</var>, <var>len</var>).</li><li>If <var>end</var> is <emu-val>undefined</emu-val>, let <var>intEnd</var> be <var>len</var>; else let <var>intEnd</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11528"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>end</var>).</li><li>If <var>intEnd</var> = -∞, let <var>to</var> be 0.</li><li>Else if <var>intEnd</var> < 0, let <var>to</var> be <emu-xref aoid="max" id="_ref_11529"><a href="notational-conventions.html#eqn-max">max</a></emu-xref>(<var>len</var> + <var>intEnd</var>, 0).</li><li>Else, let <var>to</var> be <emu-xref aoid="min" id="_ref_11530"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>intEnd</var>, <var>len</var>).</li><li>If <var>from</var> ≥ <var>to</var>, return the empty String.</li><li>Return the <emu-xref href="#substring" id="_ref_11531"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>from</var> to <var>to</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.split" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.23</span> String.prototype.split ( <var>separator</var>, <var>limit</var> )</h1>
|
||
<p>This method returns an Array into which substrings of the result of converting this object to a String have been stored. The substrings are determined by searching from left to right for occurrences of <var>separator</var>; these occurrences are not part of any String in the returned array, but serve to divide up the String value. The value of <var>separator</var> may be a String of any length or it may be an object, such as a RegExp, that has a <emu-xref href="#sec-well-known-symbols" id="_ref_11532"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.split%</a></emu-xref> method.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11533"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>If <var>separator</var> <emu-xref href="#sec-object-type" id="_ref_11534"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>, then<ol><li>Let <var>splitter</var> be ? <emu-xref aoid="GetMethod" id="_ref_11535"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>separator</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_11536"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.split%</a></emu-xref>).</li><li>If <var>splitter</var> is not <emu-val>undefined</emu-val>, then<ol><li>Return ? <emu-xref aoid="Call" id="_ref_11537"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>splitter</var>, <var>separator</var>, « <var>O</var>, <var>limit</var> »).</li></ol></li></ol></li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11538"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>If <var>limit</var> is <emu-val>undefined</emu-val>, let <var>lim</var> be 2<sup>32</sup> - 1; else let <var>lim</var> be <emu-xref aoid="ℝ" id="_ref_11539"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToUint32" id="_ref_11540"><a href="abstract-operations.html#sec-touint32" class="e-user-code">ToUint32</a></emu-xref>(<var>limit</var>)).</li><li>Let <var>R</var> be ? <emu-xref aoid="ToString" id="_ref_11541"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>separator</var>).</li><li>If <var>lim</var> = 0, then<ol><li>Return <emu-xref aoid="CreateArrayFromList" id="_ref_11542"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(« »).</li></ol></li><li>If <var>separator</var> is <emu-val>undefined</emu-val>, then<ol><li>Return <emu-xref aoid="CreateArrayFromList" id="_ref_11543"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(« <var>S</var> »).</li></ol></li><li>Let <var>separatorLength</var> be the length of <var>R</var>.</li><li>If <var>separatorLength</var> = 0, then<ol><li>Let <var>strLen</var> be the length of <var>S</var>.</li><li>Let <var>outLen</var> be the result of <emu-xref href="#clamping" id="_ref_11544"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>lim</var> between 0 and <var>strLen</var>.</li><li>Let <var>head</var> be the <emu-xref href="#substring" id="_ref_11545"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from 0 to <var>outLen</var>.</li><li>Let <var>codeUnits</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11546"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> consisting of the sequence of code units that are the elements of <var>head</var>.</li><li>Return <emu-xref aoid="CreateArrayFromList" id="_ref_11547"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(<var>codeUnits</var>).</li></ol></li><li>If <var>S</var> is the empty String, return <emu-xref aoid="CreateArrayFromList" id="_ref_11548"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(« <var>S</var> »).</li><li>Let <var>substrings</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11549"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>i</var> be 0.</li><li>Let <var>j</var> be <emu-xref aoid="StringIndexOf" id="_ref_11550"><a href="ecmascript-data-types-and-values.html#sec-stringindexof">StringIndexOf</a></emu-xref>(<var>S</var>, <var>R</var>, 0).</li><li>Repeat, while <var>j</var> is not <emu-const>not-found</emu-const>,<ol><li>Let <var>T</var> be the <emu-xref href="#substring" id="_ref_11551"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>i</var> to <var>j</var>.</li><li>Append <var>T</var> to <var>substrings</var>.</li><li>If the number of elements in <var>substrings</var> is <var>lim</var>, return <emu-xref aoid="CreateArrayFromList" id="_ref_11552"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(<var>substrings</var>).</li><li>Set <var>i</var> to <var>j</var> + <var>separatorLength</var>.</li><li>Set <var>j</var> to <emu-xref aoid="StringIndexOf" id="_ref_11553"><a href="ecmascript-data-types-and-values.html#sec-stringindexof">StringIndexOf</a></emu-xref>(<var>S</var>, <var>R</var>, <var>i</var>).</li></ol></li><li>Let <var>T</var> be the <emu-xref href="#substring" id="_ref_11554"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>i</var>.</li><li>Append <var>T</var> to <var>substrings</var>.</li><li>Return <emu-xref aoid="CreateArrayFromList" id="_ref_11555"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(<var>substrings</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>The value of <var>separator</var> may be an empty String. In this case, <var>separator</var> does not match the empty <emu-not-ref>substring</emu-not-ref> at the beginning or end of the input String, nor does it match the empty <emu-not-ref>substring</emu-not-ref> at the end of the previous separator match. If <var>separator</var> is the empty String, the String is split up into individual code unit elements; the length of the result array equals the length of the String, and each <emu-not-ref>substring</emu-not-ref> contains one code unit.</p>
|
||
<p>If the <emu-val>this</emu-val> value is (or converts to) the empty String, the result depends on whether <var>separator</var> can match the empty String. If it can, the result array contains no elements. Otherwise, the result array contains one element, which is the empty String.</p>
|
||
<p>If <var>separator</var> is <emu-val>undefined</emu-val>, then the result array contains just one String, which is the <emu-val>this</emu-val> value (converted to a String). If <var>limit</var> is not <emu-val>undefined</emu-val>, then the output array is truncated so that it contains no more than <var>limit</var> elements.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.startswith" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.24</span> String.prototype.startsWith ( <var>searchString</var> [ , <var>position</var> ] )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11556"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11557"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>isRegExp</var> be ? <emu-xref aoid="IsRegExp" id="_ref_11558"><a href="abstract-operations.html#sec-isregexp" class="e-user-code">IsRegExp</a></emu-xref>(<var>searchString</var>).</li><li>If <var>isRegExp</var> is <emu-val>true</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>searchStr</var> be ? <emu-xref aoid="ToString" id="_ref_11559"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>searchString</var>).</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>If <var>position</var> is <emu-val>undefined</emu-val>, let <var>pos</var> be 0; else let <var>pos</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11560"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>position</var>).</li><li>Let <var>start</var> be the result of <emu-xref href="#clamping" id="_ref_11561"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>pos</var> between 0 and <var>len</var>.</li><li>Let <var>searchLength</var> be the length of <var>searchStr</var>.</li><li>If <var>searchLength</var> = 0, return <emu-val>true</emu-val>.</li><li>Let <var>end</var> be <var>start</var> + <var>searchLength</var>.</li><li>If <var>end</var> > <var>len</var>, return <emu-val>false</emu-val>.</li><li>Let <var>substring</var> be the <emu-xref href="#substring" id="_ref_11562"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>start</var> to <var>end</var>.</li><li>If <var>substring</var> is <var>searchStr</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This method returns <emu-val>true</emu-val> if the sequence of code units of <var>searchString</var> converted to a String is the same as the corresponding code units of this object (converted to a String) starting at index <var>position</var>. Otherwise it returns <emu-val>false</emu-val>.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>Throwing an exception if the first argument is a RegExp is specified in order to allow future editions to define extensions that allow such argument values.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.substring" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.25</span> String.prototype.substring ( <var>start</var>, <var>end</var> )</h1>
|
||
<p>This method returns a <emu-not-ref>substring</emu-not-ref> of the result of converting this object to a String, starting from index <var>start</var> and running to, but not including, index <var>end</var> of the String (or through the end of the String if <var>end</var> is <emu-val>undefined</emu-val>). The result <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11563"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> value, not a String object.</p>
|
||
<p>If either argument is <emu-val>NaN</emu-val> or negative, it is replaced with zero; if either argument is strictly greater than the length of the String, it is replaced with the length of the String.</p>
|
||
<p>If <var>start</var> is strictly greater than <var>end</var>, they are swapped.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11564"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11565"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>Let <var>intStart</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11566"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>start</var>).</li><li>If <var>end</var> is <emu-val>undefined</emu-val>, let <var>intEnd</var> be <var>len</var>; else let <var>intEnd</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_11567"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>end</var>).</li><li>Let <var>finalStart</var> be the result of <emu-xref href="#clamping" id="_ref_11568"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>intStart</var> between 0 and <var>len</var>.</li><li>Let <var>finalEnd</var> be the result of <emu-xref href="#clamping" id="_ref_11569"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>intEnd</var> between 0 and <var>len</var>.</li><li>Let <var>from</var> be <emu-xref aoid="min" id="_ref_11570"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>finalStart</var>, <var>finalEnd</var>).</li><li>Let <var>to</var> be <emu-xref aoid="max" id="_ref_11571"><a href="notational-conventions.html#eqn-max">max</a></emu-xref>(<var>finalStart</var>, <var>finalEnd</var>).</li><li>Return the <emu-xref href="#substring" id="_ref_11572"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>from</var> to <var>to</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.tolocalelowercase" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.26</span> String.prototype.toLocaleLowerCase ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</h1>
|
||
<p>An ECMAScript implementation that includes the ECMA-402 Internationalization API must implement this method as specified in the ECMA-402 specification. If an ECMAScript implementation does not include the ECMA-402 API the following specification of this method is used:</p>
|
||
<p>This method interprets a String value as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_662"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>.</p>
|
||
<p>It works exactly the same as <code>toLowerCase</code> except that it is intended to yield a locale-sensitive result corresponding with conventions of the <emu-xref href="#host-environment" id="_ref_11573"><a href="overview.html#host-environment">host environment</a></emu-xref>'s current locale. There will only be a difference in the few cases (such as Turkish) where the rules for that language conflict with the regular Unicode case mappings.</p>
|
||
<p>The meaning of the optional parameters to this method are defined in the ECMA-402 specification; implementations that do not include ECMA-402 support must not use those parameter positions for anything else.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.tolocaleuppercase" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.27</span> String.prototype.toLocaleUpperCase ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</h1>
|
||
<p>An ECMAScript implementation that includes the ECMA-402 Internationalization API must implement this method as specified in the ECMA-402 specification. If an ECMAScript implementation does not include the ECMA-402 API the following specification of this method is used:</p>
|
||
<p>This method interprets a String value as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_663"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>.</p>
|
||
<p>It works exactly the same as <code>toUpperCase</code> except that it is intended to yield a locale-sensitive result corresponding with conventions of the <emu-xref href="#host-environment" id="_ref_11574"><a href="overview.html#host-environment">host environment</a></emu-xref>'s current locale. There will only be a difference in the few cases (such as Turkish) where the rules for that language conflict with the regular Unicode case mappings.</p>
|
||
<p>The meaning of the optional parameters to this method are defined in the ECMA-402 specification; implementations that do not include ECMA-402 support must not use those parameter positions for anything else.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.tolowercase" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.28</span> String.prototype.toLowerCase ( )</h1>
|
||
<p>This method interprets a String value as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_664"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11575"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11576"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>sText</var> be <emu-xref aoid="StringToCodePoints" id="_ref_11577"><a href="ecmascript-language-source-code.html#sec-stringtocodepoints">StringToCodePoints</a></emu-xref>(<var>S</var>).</li><li>Let <var>lowerText</var> be toLowercase(<var>sText</var>), according to the Unicode Default Case Conversion algorithm.</li><li>Let <var>L</var> be <emu-xref aoid="CodePointsToString" id="_ref_11578"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<var>lowerText</var>).</li><li>Return <var>L</var>.</li></ol></emu-alg>
|
||
<p>The result must be derived according to the locale-insensitive case mappings in the Unicode Character Database (this explicitly includes not only the file <a href="https://unicode.org/Public/UCD/latest/ucd/UnicodeData.txt"><code>UnicodeData.txt</code></a>, but also all locale-insensitive mappings in the file <a href="https://unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt"><code>SpecialCasing.txt</code></a> that accompanies it).</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>The case mapping of some code points may produce multiple code points. In this case the result String may not be the same length as the source String. Because both <code>toUpperCase</code> and <code>toLowerCase</code> have context-sensitive behaviour, the methods are not symmetrical. In other words, <code>s.toUpperCase().toLowerCase()</code> is not necessarily equal to <code>s.toLowerCase()</code>.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.tostring" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.29</span> String.prototype.toString ( )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Return ? <emu-xref aoid="ThisStringValue" id="_ref_11579"><a href="text-processing.html#sec-thisstringvalue">ThisStringValue</a></emu-xref>(<emu-val>this</emu-val> value).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>For a String object, this method happens to return the same thing as the <code>valueOf</code> method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.touppercase" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.30</span> String.prototype.toUpperCase ( )</h1>
|
||
<p>This method interprets a String value as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_665"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>.</p>
|
||
<p>It behaves in exactly the same way as <code>String.prototype.toLowerCase</code>, except that the String is mapped using the toUppercase algorithm of the Unicode Default Case Conversion.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.towellformed" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.31</span> String.prototype.toWellFormed ( )</h1>
|
||
<p>This method returns a String representation of this object with all <emu-xref href="#leading-surrogate" id="_ref_11580"><a href="ecmascript-data-types-and-values.html#leading-surrogate">leading surrogates</a></emu-xref> and <emu-xref href="#trailing-surrogate" id="_ref_11581"><a href="ecmascript-data-types-and-values.html#trailing-surrogate">trailing surrogates</a></emu-xref> that are not part of a <emu-xref href="#surrogate-pair" id="_ref_11582"><a href="ecmascript-data-types-and-values.html#surrogate-pair">surrogate pair</a></emu-xref> replaced with U+FFFD (REPLACEMENT CHARACTER).</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11583"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11584"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>strLen</var> be the length of <var>S</var>.</li><li>Let <var>k</var> be 0.</li><li>Let <var>result</var> be the empty String.</li><li>Repeat, while <var>k</var> < <var>strLen</var>,<ol><li>Let <var>cp</var> be <emu-xref aoid="CodePointAt" id="_ref_11585"><a href="ecmascript-language-source-code.html#sec-codepointat">CodePointAt</a></emu-xref>(<var>S</var>, <var>k</var>).</li><li>If <var>cp</var>.<var class="field">[[IsUnpairedSurrogate]]</var> is <emu-val>true</emu-val>, then<ol><li>Set <var>result</var> to the <emu-xref href="#string-concatenation" id="_ref_11586"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>result</var> and 0xFFFD (REPLACEMENT CHARACTER).</li></ol></li><li>Else,<ol><li>Set <var>result</var> to the <emu-xref href="#string-concatenation" id="_ref_11587"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>result</var> and <emu-xref aoid="UTF16EncodeCodePoint" id="_ref_11588"><a href="ecmascript-language-source-code.html#sec-utf16encodecodepoint">UTF16EncodeCodePoint</a></emu-xref>(<var>cp</var>.<var class="field">[[CodePoint]]</var>).</li></ol></li><li>Set <var>k</var> to <var>k</var> + <var>cp</var>.<var class="field">[[CodeUnitCount]]</var>.</li></ol></li><li>Return <var>result</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.trim" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.32</span> String.prototype.trim ( )</h1>
|
||
<p>This method interprets a String value as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_666"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>S</var> be the <emu-val>this</emu-val> value.</li><li>Return ? <emu-xref aoid="TrimString" id="_ref_11589"><a href="text-processing.html#sec-trimstring" class="e-user-code">TrimString</a></emu-xref>(<var>S</var>, <emu-const>start+end</emu-const>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
|
||
<emu-clause id="sec-trimstring" type="abstract operation" aoid="TrimString">
|
||
<h1><span class="secnum">22.1.3.32.1</span> TrimString ( <var>string</var>, <var>where</var> )</h1>
|
||
<p>The abstract operation TrimString takes arguments <var>string</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_11590"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>where</var> (<emu-const>start</emu-const>, <emu-const>end</emu-const>, or <emu-const>start+end</emu-const>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_11591"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a String or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_11592"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It interprets <var>string</var> as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_667"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11593"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>string</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_11594"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>string</var>).</li><li>If <var>where</var> is <emu-const>start</emu-const>, then<ol><li>Let <var>T</var> be the String value that is a copy of <var>S</var> with leading white space removed.</li></ol></li><li>Else if <var>where</var> is <emu-const>end</emu-const>, then<ol><li>Let <var>T</var> be the String value that is a copy of <var>S</var> with trailing white space removed.</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_11595"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>where</var> is <emu-const>start+end</emu-const>.</li><li>Let <var>T</var> be the String value that is a copy of <var>S</var> with both leading and trailing white space removed.</li></ol></li><li>Return <var>T</var>.</li></ol></emu-alg>
|
||
<p>The definition of white space is the union of <emu-nt id="_ref_23935"><a href="ecmascript-language-lexical-grammar.html#prod-WhiteSpace">WhiteSpace</a></emu-nt> and <emu-nt id="_ref_23936"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt>. When determining whether a Unicode code point is in Unicode general category “Space_Separator” (“Zs”), code unit sequences are interpreted as UTF-16 encoded code point sequences as specified in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_668"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>.</p>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.trimend" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.33</span> String.prototype.trimEnd ( )</h1>
|
||
<p>This method interprets a String value as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_669"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>S</var> be the <emu-val>this</emu-val> value.</li><li>Return ? <emu-xref aoid="TrimString" id="_ref_11596"><a href="text-processing.html#sec-trimstring" class="e-user-code">TrimString</a></emu-xref>(<var>S</var>, <emu-const>end</emu-const>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.trimstart" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.34</span> String.prototype.trimStart ( )</h1>
|
||
<p>This method interprets a String value as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_670"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>S</var> be the <emu-val>this</emu-val> value.</li><li>Return ? <emu-xref aoid="TrimString" id="_ref_11597"><a href="text-processing.html#sec-trimstring" class="e-user-code">TrimString</a></emu-xref>(<var>S</var>, <emu-const>start</emu-const>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This method is intentionally generic; it does not require that its <emu-val>this</emu-val> value be a String object. Therefore, it can be transferred to other kinds of objects for use as a method.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype.valueof" type="built-in function">
|
||
<h1><span class="secnum">22.1.3.35</span> String.prototype.valueOf ( )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Return ? <emu-xref aoid="ThisStringValue" id="_ref_11598"><a href="text-processing.html#sec-thisstringvalue">ThisStringValue</a></emu-xref>(<emu-val>this</emu-val> value).</li></ol></emu-alg>
|
||
|
||
<emu-clause id="sec-thisstringvalue" type="abstract operation" oldids="thisstringvalue" aoid="ThisStringValue"><span id="thisstringvalue"></span>
|
||
<h1><span class="secnum">22.1.3.35.1</span> ThisStringValue ( <var>value</var> )</h1>
|
||
<p>The abstract operation ThisStringValue takes argument <var>value</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_11599"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_11600"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a String or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_11601"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>value</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11602"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>, return <var>value</var>.</li><li>If <var>value</var> <emu-xref href="#sec-object-type" id="_ref_11603"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref> and <var>value</var> has a <var class="field">[[StringData]]</var> internal slot, then<ol><li>Let <var>s</var> be <var>value</var>.<var class="field">[[StringData]]</var>.</li><li><emu-xref href="#assert" id="_ref_11604"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>s</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11605"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>.</li><li>Return <var>s</var>.</li></ol></li><li>Throw a <emu-val>TypeError</emu-val> exception.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string.prototype-%symbol.iterator%" oldids="sec-string.prototype-@@iterator,sec-createstringiterator,sec-properties-of-string-iterator-instances,table-46,table-internal-slots-of-string-iterator-instances" type="built-in function"><span id="table-internal-slots-of-string-iterator-instances"></span><span id="table-46"></span><span id="sec-properties-of-string-iterator-instances"></span><span id="sec-createstringiterator"></span><span id="sec-string.prototype-@@iterator"></span>
|
||
<h1><span class="secnum">22.1.3.36</span> String.prototype [ %Symbol.iterator% ] ( )</h1>
|
||
<p>This method returns an <emu-xref href="#sec-iterator-interface" id="_ref_11606"><a href="control-abstraction-objects.html#sec-iterator-interface">iterator object</a></emu-xref> that iterates over the code points of a String value, returning each code point as a String value.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireObjectCoercible" id="_ref_11607"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>O</var>).</li><li>Let <var>s</var> be ? <emu-xref aoid="ToString" id="_ref_11608"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>O</var>).</li><li>Let <var>closure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_11609"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with no parameters that captures <var>s</var> and performs the following steps when called:<ol><li>Let <var>len</var> be the length of <var>s</var>.</li><li>Let <var>position</var> be 0.</li><li>Repeat, while <var>position</var> < <var>len</var>,<ol><li>Let <var>cp</var> be <emu-xref aoid="CodePointAt" id="_ref_11610"><a href="ecmascript-language-source-code.html#sec-codepointat">CodePointAt</a></emu-xref>(<var>s</var>, <var>position</var>).</li><li>Let <var>nextIndex</var> be <var>position</var> + <var>cp</var>.<var class="field">[[CodeUnitCount]]</var>.</li><li>Let <var>resultString</var> be the <emu-xref href="#substring" id="_ref_11611"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>s</var> from <var>position</var> to <var>nextIndex</var>.</li><li>Set <var>position</var> to <var>nextIndex</var>.</li><li>Perform ? <emu-xref aoid="GeneratorYield" id="_ref_11612"><a href="control-abstraction-objects.html#sec-generatoryield">GeneratorYield</a></emu-xref>(<emu-xref aoid="CreateIteratorResultObject" id="_ref_11613"><a href="abstract-operations.html#sec-createiterresultobject">CreateIteratorResultObject</a></emu-xref>(<var>resultString</var>, <emu-val>false</emu-val>)).</li></ol></li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_11614"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-const>unused</emu-const>).</li></ol></li><li>Return <emu-xref aoid="CreateIteratorFromClosure" id="_ref_11615"><a href="control-abstraction-objects.html#sec-createiteratorfromclosure">CreateIteratorFromClosure</a></emu-xref>(<var>closure</var>, <emu-val>"%StringIteratorPrototype%"</emu-val>, <emu-xref href="#sec-%stringiteratorprototype%-object" id="_ref_11616"><a href="text-processing.html#sec-%stringiteratorprototype%-object">%StringIteratorPrototype%</a></emu-xref>).</li></ol></emu-alg>
|
||
<p>The value of the <emu-val>"name"</emu-val> property of this method is <emu-val>"[Symbol.iterator]"</emu-val>.</p>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-properties-of-string-instances">
|
||
<h1><span class="secnum">22.1.4</span> Properties of String Instances</h1>
|
||
<p>String instances are <emu-xref href="#string-exotic-object" id="_ref_11617"><a href="ordinary-and-exotic-objects-behaviours.html#string-exotic-object">String exotic objects</a></emu-xref> and have the internal methods specified for such objects. String instances inherit properties from the <emu-xref href="#sec-properties-of-the-string-prototype-object" id="_ref_11618"><a href="text-processing.html#sec-properties-of-the-string-prototype-object">String prototype object</a></emu-xref>. String instances also have a <var class="field">[[StringData]]</var> internal slot. The <var class="field">[[StringData]]</var> internal slot is the String value represented by this String object.</p>
|
||
<p>String instances have a <emu-val>"length"</emu-val> property, and a set of enumerable properties with <emu-xref href="#integer-index" id="_ref_11619"><a href="ecmascript-data-types-and-values.html#integer-index">integer-indexed</a></emu-xref> names.</p>
|
||
|
||
<emu-clause id="sec-properties-of-string-instances-length">
|
||
<h1><span class="secnum">22.1.4.1</span> length</h1>
|
||
<p>The number of elements in the String value represented by this String object.</p>
|
||
<p>Once a String object is initialized, this property is unchanging. It has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }.</p>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-string-iterator-objects">
|
||
<h1><span class="secnum">22.1.5</span> String Iterator Objects</h1>
|
||
<p>A <dfn variants="String Iterators,String Iterator object,String Iterator objects" tabindex="-1">String Iterator</dfn> is an object that represents a specific iteration over some specific String instance object. There is not a named <emu-xref href="#constructor" id="_ref_11620"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> for String Iterator objects. Instead, String Iterator objects are created by calling certain methods of String instance objects.</p>
|
||
|
||
<emu-clause id="sec-%stringiteratorprototype%-object">
|
||
<h1><span class="secnum">22.1.5.1</span> The %StringIteratorPrototype% Object</h1>
|
||
<p>The <dfn tabindex="-1">%StringIteratorPrototype%</dfn> object:</p>
|
||
<ul>
|
||
<li>has properties that are inherited by all <emu-xref href="#sec-string-iterator-objects" id="_ref_11621"><a href="text-processing.html#sec-string-iterator-objects">String Iterator objects</a></emu-xref>.</li>
|
||
<li>is an <emu-xref href="#ordinary-object" id="_ref_11622"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>.</li>
|
||
<li>has a <var class="field">[[Prototype]]</var> internal slot whose value is <emu-xref href="#sec-%iterator.prototype%-object" id="_ref_11623"><a href="control-abstraction-objects.html#sec-%iterator.prototype%-object">%Iterator.prototype%</a></emu-xref>.</li>
|
||
<li>has the following properties:</li>
|
||
</ul>
|
||
|
||
<emu-clause id="sec-%stringiteratorprototype%.next" type="built-in function">
|
||
<h1><span class="secnum">22.1.5.1.1</span> %StringIteratorPrototype%.next ( )</h1>
|
||
<emu-alg><ol><li>Return ? <emu-xref aoid="GeneratorResume" id="_ref_11624"><a href="control-abstraction-objects.html#sec-generatorresume">GeneratorResume</a></emu-xref>(<emu-val>this</emu-val> value, <emu-const>empty</emu-const>, <emu-val>"%StringIteratorPrototype%"</emu-val>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause oldids="sec-%stringiteratorprototype%-@@tostringtag" id="sec-%stringiteratorprototype%-%symbol.tostringtag%"><span id="sec-%stringiteratorprototype%-@@tostringtag"></span>
|
||
<h1><span class="secnum">22.1.5.1.2</span> %StringIteratorPrototype% [ %Symbol.toStringTag% ]</h1>
|
||
<p>The initial value of the <emu-xref href="#sec-well-known-symbols" id="_ref_11625"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.toStringTag%</a></emu-xref> property is the String value <emu-val>"String Iterator"</emu-val>.</p>
|
||
<p>This property has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val> }.</p>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexp-regular-expression-objects">
|
||
<h1><span class="secnum">22.2</span> RegExp (Regular Expression) Objects</h1>
|
||
<p>A RegExp object contains a regular expression and the associated flags.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>The form and functionality of regular expressions is modelled after the regular expression facility in the Perl 5 programming language.</p>
|
||
</div></emu-note>
|
||
|
||
<emu-clause id="sec-patterns">
|
||
<h1><span class="secnum">22.2.1</span> Patterns</h1>
|
||
<p>The RegExp <emu-xref href="#constructor" id="_ref_11626"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> applies the following grammar to the input pattern String. An error occurs if the grammar cannot interpret the String as an expansion of <emu-nt id="_ref_23937"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt>.</p>
|
||
<h2>Syntax</h2>
|
||
<emu-grammar type="definition"><emu-production name="Pattern" params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups" type="lexical" id="prod-Pattern">
|
||
<emu-nt params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups"><a href="text-processing.html#prod-Pattern">Pattern</a><emu-mods><emu-params>[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="qykacx9h" id="prod-B7AwVhmt">
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23938"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="Disjunction" params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups" type="lexical" id="prod-Disjunction">
|
||
<emu-nt params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="4qtdrfbm">
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23939"><a href="text-processing.html#prod-Alternative">Alternative</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="tuo0qrl_" id="prod-MCRqOZOt">
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23940"><a href="text-processing.html#prod-Alternative">Alternative</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>|</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23941"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="Alternative" params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups" type="lexical" id="prod-Alternative">
|
||
<emu-nt params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups"><a href="text-processing.html#prod-Alternative">Alternative</a><emu-mods><emu-params>[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb" id="prod-59aIYYAE">
|
||
<emu-gann>[empty]</emu-gann>
|
||
</emu-rhs>
|
||
<emu-rhs a="tjzxuhbg" id="prod-AWMX5oRX">
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23942"><a href="text-processing.html#prod-Alternative">Alternative</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23943"><a href="text-processing.html#prod-Term">Term</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="Term" params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups" type="lexical" id="prod-Term">
|
||
<emu-nt params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups"><a href="text-processing.html#prod-Term">Term</a><emu-mods><emu-params>[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="csnnrw7w" id="prod-R1uQAeY_">
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23944"><a href="text-processing.html#prod-Assertion">Assertion</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="xwd77nef" id="prod-j_jePxdh">
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23945"><a href="text-processing.html#prod-Atom">Atom</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="b5sq7xbb" id="prod-FwIStaHw">
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23946"><a href="text-processing.html#prod-Atom">Atom</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-nt id="_ref_23947"><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="Assertion" params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups" type="lexical" id="prod-Assertion">
|
||
<emu-nt params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups"><a href="text-processing.html#prod-Assertion">Assertion</a><emu-mods><emu-params>[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="5yeieuod" id="prod--UK1vL-o">
|
||
<emu-t>^</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="emlmkqfm" id="prod-2McWu3FN">
|
||
<emu-t>$</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="axxsqknu" id="prod-YjbmHFUC">
|
||
<emu-t>\b</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="lnx_opbv" id="prod-gShCnTuF">
|
||
<emu-t>\B</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="hftgdk-r" id="prod-xKW9miPx">
|
||
<emu-t>(?=</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23948"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="6jphpcfp" id="prod-vTbSFHd1">
|
||
<emu-t>(?!</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23949"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="mvzyfsps" id="prod-Xp1qSNTG">
|
||
<emu-t>(?<=</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23950"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="i9jfixsb" id="prod-UtOyozI6">
|
||
<emu-t>(?<!</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23951"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="Quantifier" type="lexical" id="prod-Quantifier">
|
||
<emu-nt><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="dlini2nj" id="prod-tUDOOFuV">
|
||
<emu-nt id="_ref_23952"><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="cwtuervy" id="prod-GZavMceB">
|
||
<emu-nt id="_ref_23953"><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt>
|
||
<emu-t>?</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="QuantifierPrefix" type="lexical" id="prod-QuantifierPrefix">
|
||
<emu-nt><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="sb5ztei-" id="prod-vLv9dnb5">
|
||
<emu-t>*</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="4dclbrwl" id="prod-UgDebVXB">
|
||
<emu-t>+</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="iy1xym7h" id="prod-N4RBWkLM">
|
||
<emu-t>?</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="qn2ibvok" id="prod-kgxh0ghk">
|
||
<emu-t>{</emu-t>
|
||
<emu-nt params="~Sep" id="_ref_23954"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a><emu-mods><emu-params>[~Sep]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="tij_jhmn" id="prod-FM-pL4Gj">
|
||
<emu-t>{</emu-t>
|
||
<emu-nt params="~Sep" id="_ref_23955"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a><emu-mods><emu-params>[~Sep]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>,}</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="bthfi5pb" id="prod-bLgfIwO4">
|
||
<emu-t>{</emu-t>
|
||
<emu-nt params="~Sep" id="_ref_23956"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a><emu-mods><emu-params>[~Sep]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>,</emu-t>
|
||
<emu-nt params="~Sep" id="_ref_23957"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a><emu-mods><emu-params>[~Sep]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="Atom" params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups" type="lexical" id="prod-Atom">
|
||
<emu-nt params="UnicodeMode, UnicodeSetsMode, NamedCaptureGroups"><a href="text-processing.html#prod-Atom">Atom</a><emu-mods><emu-params>[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="vv9sxhyc" id="prod-hYVkAeML">
|
||
<emu-nt id="_ref_23958"><a href="text-processing.html#prod-PatternCharacter">PatternCharacter</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="lljkc4zd" id="prod-6UeGTTDU">
|
||
<emu-t>.</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="jhiwossb">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?NamedCaptureGroups" id="_ref_23959"><a href="text-processing.html#prod-AtomEscape">AtomEscape</a><emu-mods><emu-params>[?UnicodeMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="00eq8hij" id="prod-gdPiaYp4">
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode" id="_ref_23960"><a href="text-processing.html#prod-CharacterClass">CharacterClass</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="kqlb6ij4" id="prod-XC-6aJgH">
|
||
<emu-t>(</emu-t>
|
||
<emu-nt params="?UnicodeMode" optional="" id="_ref_23961"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a><emu-mods><emu-params>[?UnicodeMode]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23962"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="veose2ut" id="prod-pz1sJFAi">
|
||
<emu-t>(?</emu-t>
|
||
<emu-nt id="_ref_23963"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>:</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23964"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="2rhyberh" id="prod-kBLGeTWR">
|
||
<emu-t>(?</emu-t>
|
||
<emu-nt id="_ref_23965"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_23966"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>:</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups" id="_ref_23967"><a href="text-processing.html#prod-Disjunction">Disjunction</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="RegularExpressionModifiers" type="lexical" id="prod-RegularExpressionModifiers">
|
||
<emu-nt><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb">
|
||
<emu-gann>[empty]</emu-gann>
|
||
</emu-rhs>
|
||
<emu-rhs a="qehgnqhb">
|
||
<emu-nt id="_ref_23968"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-nt id="_ref_23969"><a href="text-processing.html#prod-RegularExpressionModifier">RegularExpressionModifier</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="RegularExpressionModifier" type="lexical" oneof="" id="prod-RegularExpressionModifier">
|
||
<emu-nt><a href="text-processing.html#prod-RegularExpressionModifier">RegularExpressionModifier</a></emu-nt> <emu-geq>::</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>i</emu-t> <emu-t>m</emu-t> <emu-t>s</emu-t></emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="SyntaxCharacter" type="lexical" oneof="" id="prod-SyntaxCharacter">
|
||
<emu-nt><a href="text-processing.html#prod-SyntaxCharacter">SyntaxCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>^</emu-t> <emu-t>$</emu-t> <emu-t>\</emu-t> <emu-t>.</emu-t> <emu-t>*</emu-t> <emu-t>+</emu-t> <emu-t>?</emu-t> <emu-t>(</emu-t> <emu-t>)</emu-t> <emu-t>[</emu-t> <emu-t>]</emu-t> <emu-t>{</emu-t> <emu-t>}</emu-t> <emu-t>|</emu-t></emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="PatternCharacter" type="lexical" id="prod-PatternCharacter">
|
||
<emu-nt><a href="text-processing.html#prod-PatternCharacter">PatternCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="uu1noe--">
|
||
<emu-nt id="_ref_23970"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_23971"><a href="text-processing.html#prod-SyntaxCharacter">SyntaxCharacter</a></emu-nt></emu-gmod>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="AtomEscape" params="UnicodeMode, NamedCaptureGroups" type="lexical" id="prod-AtomEscape">
|
||
<emu-nt params="UnicodeMode, NamedCaptureGroups"><a href="text-processing.html#prod-AtomEscape">AtomEscape</a><emu-mods><emu-params>[UnicodeMode, NamedCaptureGroups]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="fr_5bnut" id="prod-2qcgA24q">
|
||
<emu-nt id="_ref_23972"><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="1dlni0cs" id="prod-QZtCcvYH">
|
||
<emu-nt params="?UnicodeMode" id="_ref_23973"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="i4ceewqb" id="prod-sBosbs9Q">
|
||
<emu-nt params="?UnicodeMode" id="_ref_23974"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="jsb3w65g" constraints="+NamedCaptureGroups" id="prod-YgRCIQFy"><emu-constraints>[+NamedCaptureGroups]</emu-constraints>
|
||
<emu-t>k</emu-t>
|
||
<emu-nt params="?UnicodeMode" id="_ref_23975"><a href="text-processing.html#prod-GroupName">GroupName</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="CharacterEscape" params="UnicodeMode" type="lexical" id="prod-CharacterEscape">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="-i5xcal8" id="prod-q4aq35sO">
|
||
<emu-nt id="_ref_23976"><a href="text-processing.html#prod-ControlEscape">ControlEscape</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="lf4h7vn-" id="prod-lMmOF-9c">
|
||
<emu-t>c</emu-t>
|
||
<emu-nt id="_ref_23977"><a href="ecmascript-language-lexical-grammar.html#prod-AsciiLetter">AsciiLetter</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="br2d94cy" id="prod-oPPhk0pZ">
|
||
<emu-t>0</emu-t>
|
||
<emu-gann>[lookahead ∉ <emu-nt id="_ref_23978"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigit">DecimalDigit</a></emu-nt>]</emu-gann>
|
||
</emu-rhs>
|
||
<emu-rhs a="qacbhaps" id="prod-CrHLbIYs">
|
||
<emu-nt id="_ref_23979"><a href="ecmascript-language-lexical-grammar.html#prod-HexEscapeSequence">HexEscapeSequence</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="swcse7so">
|
||
<emu-nt params="?UnicodeMode" id="_ref_23980"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="6_pkjcjw" id="prod-VtjEN4lt">
|
||
<emu-nt params="?UnicodeMode" id="_ref_23981"><a href="text-processing.html#prod-IdentityEscape">IdentityEscape</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ControlEscape" type="lexical" oneof="" id="prod-ControlEscape">
|
||
<emu-nt><a href="text-processing.html#prod-ControlEscape">ControlEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>f</emu-t> <emu-t>n</emu-t> <emu-t>r</emu-t> <emu-t>t</emu-t> <emu-t>v</emu-t></emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="GroupSpecifier" params="UnicodeMode" type="lexical" id="prod-GroupSpecifier">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="unyz_r7p">
|
||
<emu-t>?</emu-t>
|
||
<emu-nt params="?UnicodeMode" id="_ref_23982"><a href="text-processing.html#prod-GroupName">GroupName</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="GroupName" params="UnicodeMode" type="lexical" id="prod-GroupName">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-GroupName">GroupName</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="bbvxam1q" id="prod-CieYjAI6">
|
||
<emu-t><</emu-t>
|
||
<emu-nt params="?UnicodeMode" id="_ref_23983"><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>></emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="RegExpIdentifierName" params="UnicodeMode" type="lexical" id="prod-RegExpIdentifierName">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="epjtohg4" id="prod-UEFofPmM">
|
||
<emu-nt params="?UnicodeMode" id="_ref_23984"><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="5ujdxycq" id="prod-Wlj6DCQi">
|
||
<emu-nt params="?UnicodeMode" id="_ref_23985"><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-nt params="?UnicodeMode" id="_ref_23986"><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="RegExpIdentifierStart" params="UnicodeMode" type="lexical" id="prod-RegExpIdentifierStart">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="scjzw6a_" id="prod-ChPpokvC">
|
||
<emu-nt id="_ref_23987"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierStartChar">IdentifierStartChar</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="ho0qxsau" id="prod-gHtf4gFI">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt params="+UnicodeMode" id="_ref_23988"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a><emu-mods><emu-params>[+UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="fpn-h6zn" constraints="~UnicodeMode" id="prod-WBQHipLA"><emu-constraints>[~UnicodeMode]</emu-constraints>
|
||
<emu-nt id="_ref_23989"><a href="text-processing.html#prod-UnicodeLeadSurrogate">UnicodeLeadSurrogate</a></emu-nt>
|
||
<emu-nt id="_ref_23990"><a href="text-processing.html#prod-UnicodeTrailSurrogate">UnicodeTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="RegExpIdentifierPart" params="UnicodeMode" type="lexical" id="prod-RegExpIdentifierPart">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="q3hdl-qt" id="prod-QEKJWJ5I">
|
||
<emu-nt id="_ref_23991"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierPartChar">IdentifierPartChar</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="ho0qxsau" id="prod-tb_1J4i8">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt params="+UnicodeMode" id="_ref_23992"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a><emu-mods><emu-params>[+UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="fpn-h6zn" constraints="~UnicodeMode" id="prod-NsruFaTJ"><emu-constraints>[~UnicodeMode]</emu-constraints>
|
||
<emu-nt id="_ref_23993"><a href="text-processing.html#prod-UnicodeLeadSurrogate">UnicodeLeadSurrogate</a></emu-nt>
|
||
<emu-nt id="_ref_23994"><a href="text-processing.html#prod-UnicodeTrailSurrogate">UnicodeTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="RegExpUnicodeEscapeSequence" params="UnicodeMode" type="lexical" id="prod-RegExpUnicodeEscapeSequence">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="waogc0qp" constraints="+UnicodeMode" id="prod-8GU45ufS"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>u</emu-t>
|
||
<emu-nt id="_ref_23995"><a href="text-processing.html#prod-HexLeadSurrogate">HexLeadSurrogate</a></emu-nt>
|
||
<emu-t>\u</emu-t>
|
||
<emu-nt id="_ref_23996"><a href="text-processing.html#prod-HexTrailSurrogate">HexTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="hhq0f7ab" constraints="+UnicodeMode"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>u</emu-t>
|
||
<emu-nt id="_ref_23997"><a href="text-processing.html#prod-HexLeadSurrogate">HexLeadSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="k3exmx9t" constraints="+UnicodeMode"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>u</emu-t>
|
||
<emu-nt id="_ref_23998"><a href="text-processing.html#prod-HexTrailSurrogate">HexTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="gun22eck" constraints="+UnicodeMode"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>u</emu-t>
|
||
<emu-nt id="_ref_23999"><a href="text-processing.html#prod-HexNonSurrogate">HexNonSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="k_zr1roh" constraints="~UnicodeMode" id="prod-5oXd8wzV"><emu-constraints>[~UnicodeMode]</emu-constraints>
|
||
<emu-t>u</emu-t>
|
||
<emu-nt id="_ref_24000"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="42_-y9-i" constraints="+UnicodeMode" id="prod-CzkVQCuc"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>u{</emu-t>
|
||
<emu-nt id="_ref_24001"><a href="ecmascript-language-lexical-grammar.html#prod-CodePoint">CodePoint</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodeLeadSurrogate" type="lexical" id="prod-UnicodeLeadSurrogate">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodeLeadSurrogate">UnicodeLeadSurrogate</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="qq83i09m">
|
||
<emu-gprose>any Unicode code point in the inclusive interval from U+D800 to U+DBFF</emu-gprose>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodeTrailSurrogate" type="lexical" id="prod-UnicodeTrailSurrogate">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodeTrailSurrogate">UnicodeTrailSurrogate</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ivnwxcbc">
|
||
<emu-gprose>any Unicode code point in the inclusive interval from U+DC00 to U+DFFF</emu-gprose>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<p>Each <code>\u</code> <emu-nt id="_ref_24002"><a href="text-processing.html#prod-HexTrailSurrogate">HexTrailSurrogate</a></emu-nt> for which the choice of associated <code>u</code> <emu-nt id="_ref_24003"><a href="text-processing.html#prod-HexLeadSurrogate">HexLeadSurrogate</a></emu-nt> is ambiguous shall be associated with the nearest possible <code>u</code> <emu-nt id="_ref_24004"><a href="text-processing.html#prod-HexLeadSurrogate">HexLeadSurrogate</a></emu-nt> that would otherwise have no corresponding <code>\u</code> <emu-nt id="_ref_24005"><a href="text-processing.html#prod-HexTrailSurrogate">HexTrailSurrogate</a></emu-nt>.</p>
|
||
<emu-grammar type="definition"><emu-production name="HexLeadSurrogate" type="lexical" id="prod-HexLeadSurrogate">
|
||
<emu-nt><a href="text-processing.html#prod-HexLeadSurrogate">HexLeadSurrogate</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="cblftfpk" id="prod-AEZ_iyDC">
|
||
<emu-nt id="_ref_24006"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt>
|
||
<emu-gmod>but only if the MV of <emu-nt id="_ref_24007"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt> is in the <emu-xref href="#inclusive-interval" id="_ref_11627"><a href="notational-conventions.html#inclusive-interval">inclusive interval</a></emu-xref> from 0xD800 to 0xDBFF</emu-gmod>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="HexTrailSurrogate" type="lexical" id="prod-HexTrailSurrogate">
|
||
<emu-nt><a href="text-processing.html#prod-HexTrailSurrogate">HexTrailSurrogate</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="xh8lnnlz" id="prod-aZFqSbDx">
|
||
<emu-nt id="_ref_24008"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt>
|
||
<emu-gmod>but only if the MV of <emu-nt id="_ref_24009"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt> is in the <emu-xref href="#inclusive-interval" id="_ref_11628"><a href="notational-conventions.html#inclusive-interval">inclusive interval</a></emu-xref> from 0xDC00 to 0xDFFF</emu-gmod>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="HexNonSurrogate" type="lexical" id="prod-HexNonSurrogate">
|
||
<emu-nt><a href="text-processing.html#prod-HexNonSurrogate">HexNonSurrogate</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="dwn60mjo" id="prod-YFxZ-zB2">
|
||
<emu-nt id="_ref_24010"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt>
|
||
<emu-gmod>but only if the MV of <emu-nt id="_ref_24011"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt> is not in the <emu-xref href="#inclusive-interval" id="_ref_11629"><a href="notational-conventions.html#inclusive-interval">inclusive interval</a></emu-xref> from 0xD800 to 0xDFFF</emu-gmod>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="IdentityEscape" params="UnicodeMode" type="lexical" id="prod-IdentityEscape">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-IdentityEscape">IdentityEscape</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="_sxoisew" constraints="+UnicodeMode"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-nt id="_ref_24012"><a href="text-processing.html#prod-SyntaxCharacter">SyntaxCharacter</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="iiubx3hh" constraints="+UnicodeMode"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>/</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="kxdkcwd_" constraints="~UnicodeMode"><emu-constraints>[~UnicodeMode]</emu-constraints>
|
||
<emu-nt id="_ref_24013"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_24014"><a href="ecmascript-language-lexical-grammar.html#prod-UnicodeIDContinue">UnicodeIDContinue</a></emu-nt></emu-gmod>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="DecimalEscape" type="lexical" id="prod-DecimalEscape">
|
||
<emu-nt><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="1ajrj4io" id="prod-PUMw6WxS">
|
||
<emu-nt id="_ref_24015"><a href="ecmascript-language-lexical-grammar.html#prod-NonZeroDigit">NonZeroDigit</a></emu-nt>
|
||
<emu-nt params="~Sep" optional="" id="_ref_24016"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a><emu-mods><emu-params>[~Sep]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
<emu-gann>[lookahead ∉ <emu-nt id="_ref_24017"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigit">DecimalDigit</a></emu-nt>]</emu-gann>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="CharacterClassEscape" params="UnicodeMode" type="lexical" id="prod-CharacterClassEscape">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="8pmnkw2i" id="prod-SeTTaRwS">
|
||
<emu-t>d</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="kzsugx0d" id="prod-JQe22hGV">
|
||
<emu-t>D</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="w5xsbsk3" id="prod-Ba3BrqMI">
|
||
<emu-t>s</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="avlpsekd" id="prod-mC3Wqo02">
|
||
<emu-t>S</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="lytism1a" id="prod-uRZ9YD5P">
|
||
<emu-t>w</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="rhxouzu-" id="prod-tSKKQe8i">
|
||
<emu-t>W</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="qowxggfi" constraints="+UnicodeMode" id="prod-5iubKlkQ"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>p{</emu-t>
|
||
<emu-nt id="_ref_24018"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="ufkccifh" constraints="+UnicodeMode" id="prod-LRNY7pYO"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>P{</emu-t>
|
||
<emu-nt id="_ref_24019"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodePropertyValueExpression" type="lexical" id="prod-UnicodePropertyValueExpression">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="sr3kbwzj" id="prod-wlk0gl-x">
|
||
<emu-nt id="_ref_24020"><a href="text-processing.html#prod-UnicodePropertyName">UnicodePropertyName</a></emu-nt>
|
||
<emu-t>=</emu-t>
|
||
<emu-nt id="_ref_24021"><a href="text-processing.html#prod-UnicodePropertyValue">UnicodePropertyValue</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="jdlbklv9" id="prod-jMQ5xe2C">
|
||
<emu-nt id="_ref_24022"><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodePropertyName" type="lexical" id="prod-UnicodePropertyName">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyName">UnicodePropertyName</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="wmjhn5yf">
|
||
<emu-nt id="_ref_24023"><a href="text-processing.html#prod-UnicodePropertyNameCharacters">UnicodePropertyNameCharacters</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodePropertyNameCharacters" type="lexical" id="prod-UnicodePropertyNameCharacters">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyNameCharacters">UnicodePropertyNameCharacters</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="wsr_rirg">
|
||
<emu-nt id="_ref_24024"><a href="text-processing.html#prod-UnicodePropertyNameCharacter">UnicodePropertyNameCharacter</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24025"><a href="text-processing.html#prod-UnicodePropertyNameCharacters">UnicodePropertyNameCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodePropertyValue" type="lexical" id="prod-UnicodePropertyValue">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValue">UnicodePropertyValue</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="umqrcndj">
|
||
<emu-nt id="_ref_24026"><a href="text-processing.html#prod-UnicodePropertyValueCharacters">UnicodePropertyValueCharacters</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="LoneUnicodePropertyNameOrValue" type="lexical" id="prod-LoneUnicodePropertyNameOrValue">
|
||
<emu-nt><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="umqrcndj">
|
||
<emu-nt id="_ref_24027"><a href="text-processing.html#prod-UnicodePropertyValueCharacters">UnicodePropertyValueCharacters</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodePropertyValueCharacters" type="lexical" id="prod-UnicodePropertyValueCharacters">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueCharacters">UnicodePropertyValueCharacters</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="wickoffg">
|
||
<emu-nt id="_ref_24028"><a href="text-processing.html#prod-UnicodePropertyValueCharacter">UnicodePropertyValueCharacter</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24029"><a href="text-processing.html#prod-UnicodePropertyValueCharacters">UnicodePropertyValueCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodePropertyValueCharacter" type="lexical" id="prod-UnicodePropertyValueCharacter">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueCharacter">UnicodePropertyValueCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="uxjuzani">
|
||
<emu-nt id="_ref_24030"><a href="text-processing.html#prod-UnicodePropertyNameCharacter">UnicodePropertyNameCharacter</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="s4me4hlz">
|
||
<emu-nt id="_ref_24031"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigit">DecimalDigit</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodePropertyNameCharacter" type="lexical" id="prod-UnicodePropertyNameCharacter">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyNameCharacter">UnicodePropertyNameCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="7q8tumk4">
|
||
<emu-nt id="_ref_24032"><a href="ecmascript-language-lexical-grammar.html#prod-AsciiLetter">AsciiLetter</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="b1zllonv">
|
||
<emu-t>_</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="CharacterClass" params="UnicodeMode, UnicodeSetsMode" type="lexical" id="prod-CharacterClass">
|
||
<emu-nt params="UnicodeMode, UnicodeSetsMode"><a href="text-processing.html#prod-CharacterClass">CharacterClass</a><emu-mods><emu-params>[UnicodeMode, UnicodeSetsMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="7jlltzv-" id="prod-XeZ8wReK">
|
||
<emu-t>[</emu-t>
|
||
<emu-gann>[lookahead ≠ <emu-t>^</emu-t>]</emu-gann>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode" id="_ref_24033"><a href="text-processing.html#prod-ClassContents">ClassContents</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="8cldojko" id="prod-BR9Nw5Gp">
|
||
<emu-t>[^</emu-t>
|
||
<emu-nt params="?UnicodeMode, ?UnicodeSetsMode" id="_ref_24034"><a href="text-processing.html#prod-ClassContents">ClassContents</a><emu-mods><emu-params>[?UnicodeMode, ?UnicodeSetsMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassContents" params="UnicodeMode, UnicodeSetsMode" type="lexical" id="prod-ClassContents">
|
||
<emu-nt params="UnicodeMode, UnicodeSetsMode"><a href="text-processing.html#prod-ClassContents">ClassContents</a><emu-mods><emu-params>[UnicodeMode, UnicodeSetsMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb" id="prod-7oNDq70_">
|
||
<emu-gann>[empty]</emu-gann>
|
||
</emu-rhs>
|
||
<emu-rhs a="n1dm9hk1" constraints="~UnicodeSetsMode" id="prod-Qe2Av6B8"><emu-constraints>[~UnicodeSetsMode]</emu-constraints>
|
||
<emu-nt params="?UnicodeMode" id="_ref_24035"><a href="text-processing.html#prod-NonemptyClassRanges">NonemptyClassRanges</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="mn83sbuj" constraints="+UnicodeSetsMode"><emu-constraints>[+UnicodeSetsMode]</emu-constraints>
|
||
<emu-nt id="_ref_24036"><a href="text-processing.html#prod-ClassSetExpression">ClassSetExpression</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="NonemptyClassRanges" params="UnicodeMode" type="lexical" id="prod-NonemptyClassRanges">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-NonemptyClassRanges">NonemptyClassRanges</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="p14hei32">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24037"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="-_prw338" id="prod-8-K7AdXe">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24038"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-nt params="?UnicodeMode" id="_ref_24039"><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="1ikw0jm6" id="prod--cKKVMsq">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24040"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt params="?UnicodeMode" id="_ref_24041"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-nt params="?UnicodeMode, ~UnicodeSetsMode" id="_ref_24042"><a href="text-processing.html#prod-ClassContents">ClassContents</a><emu-mods><emu-params>[?UnicodeMode, ~UnicodeSetsMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="NonemptyClassRangesNoDash" params="UnicodeMode" type="lexical" id="prod-NonemptyClassRangesNoDash">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="p14hei32">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24043"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="tfcxdhcb" id="prod-MjoVem1x">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24044"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-nt params="?UnicodeMode" id="_ref_24045"><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="boblwo2h" id="prod-AN4eyFTZ">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24046"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt params="?UnicodeMode" id="_ref_24047"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-nt params="?UnicodeMode, ~UnicodeSetsMode" id="_ref_24048"><a href="text-processing.html#prod-ClassContents">ClassContents</a><emu-mods><emu-params>[?UnicodeMode, ~UnicodeSetsMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassAtom" params="UnicodeMode" type="lexical" id="prod-ClassAtom">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="byslh4l8" id="prod-ee-3CYw6">
|
||
<emu-t>-</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="nglojpbu">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24049"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassAtomNoDash" params="UnicodeMode" type="lexical" id="prod-ClassAtomNoDash">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="7n5ukjeb" id="prod-DSKNclKY">
|
||
<emu-nt id="_ref_24050"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not one of <emu-t>\</emu-t> or <emu-t>]</emu-t> or <emu-t>-</emu-t></emu-gmod>
|
||
</emu-rhs>
|
||
<emu-rhs a="8qgkzxcd">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt params="?UnicodeMode" id="_ref_24051"><a href="text-processing.html#prod-ClassEscape">ClassEscape</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassEscape" params="UnicodeMode" type="lexical" id="prod-ClassEscape">
|
||
<emu-nt params="UnicodeMode"><a href="text-processing.html#prod-ClassEscape">ClassEscape</a><emu-mods><emu-params>[UnicodeMode]</emu-params></emu-mods></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ayxoiyyq" id="prod-MZvj9Dzw">
|
||
<emu-t>b</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="7_g4l0lw" constraints="+UnicodeMode" id="prod-A6KLgGNK"><emu-constraints>[+UnicodeMode]</emu-constraints>
|
||
<emu-t>-</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="1dlni0cs" id="prod-pRiuVk3t">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24052"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="i4ceewqb" id="prod-NKSKjwBB">
|
||
<emu-nt params="?UnicodeMode" id="_ref_24053"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a><emu-mods><emu-params>[?UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassSetExpression" type="lexical" id="prod-ClassSetExpression">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetExpression">ClassSetExpression</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="3kf_tbjz">
|
||
<emu-nt id="_ref_24054"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="iwshmigm">
|
||
<emu-nt id="_ref_24055"><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="xyhgeqif">
|
||
<emu-nt id="_ref_24056"><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassUnion" type="lexical" id="prod-ClassUnion">
|
||
<emu-nt><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lvavyv54" id="prod-g_C-vqXS">
|
||
<emu-nt id="_ref_24057"><a href="text-processing.html#prod-ClassSetRange">ClassSetRange</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24058"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="ga57bqew" id="prod-x32ygNst">
|
||
<emu-nt id="_ref_24059"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24060"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassIntersection" type="lexical" id="prod-ClassIntersection">
|
||
<emu-nt><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="7h6yrwnx" id="prod-pPEC03dD">
|
||
<emu-nt id="_ref_24061"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-t>&&</emu-t>
|
||
<emu-gann>[lookahead ≠ <emu-t>&</emu-t>]</emu-gann>
|
||
<emu-nt id="_ref_24062"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="havb7zmx" id="prod-t1FOWCCV">
|
||
<emu-nt id="_ref_24063"><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt>
|
||
<emu-t>&&</emu-t>
|
||
<emu-gann>[lookahead ≠ <emu-t>&</emu-t>]</emu-gann>
|
||
<emu-nt id="_ref_24064"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassSubtraction" type="lexical" id="prod-ClassSubtraction">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="0iwjxoz1" id="prod-ET7TxN9I">
|
||
<emu-nt id="_ref_24065"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-t>--</emu-t>
|
||
<emu-nt id="_ref_24066"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="pdtgdxpo" id="prod-EEppnL8M">
|
||
<emu-nt id="_ref_24067"><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt>
|
||
<emu-t>--</emu-t>
|
||
<emu-nt id="_ref_24068"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassSetRange" type="lexical" id="prod-ClassSetRange">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetRange">ClassSetRange</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="olq8_w1t" id="prod-uyCI4Vm7">
|
||
<emu-nt id="_ref_24069"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24070"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassSetOperand" type="lexical" id="prod-ClassSetOperand">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="bz00qqkp" id="prod-j3hqQEKY">
|
||
<emu-nt id="_ref_24071"><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="gmk8rsml" id="prod-0J8lXMFz">
|
||
<emu-nt id="_ref_24072"><a href="text-processing.html#prod-ClassStringDisjunction">ClassStringDisjunction</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="pbrz9y58" id="prod-lqRWpy0s">
|
||
<emu-nt id="_ref_24073"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="NestedClass" type="lexical" id="prod-NestedClass">
|
||
<emu-nt><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="tupozqhe" id="prod-gbvVygeq">
|
||
<emu-t>[</emu-t>
|
||
<emu-gann>[lookahead ≠ <emu-t>^</emu-t>]</emu-gann>
|
||
<emu-nt params="+UnicodeMode, +UnicodeSetsMode" id="_ref_24074"><a href="text-processing.html#prod-ClassContents">ClassContents</a><emu-mods><emu-params>[+UnicodeMode, +UnicodeSetsMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="t8lra7ts" id="prod-9Q7EpkJI">
|
||
<emu-t>[^</emu-t>
|
||
<emu-nt params="+UnicodeMode, +UnicodeSetsMode" id="_ref_24075"><a href="text-processing.html#prod-ClassContents">ClassContents</a><emu-mods><emu-params>[+UnicodeMode, +UnicodeSetsMode]</emu-params></emu-mods></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="27fjovie" id="prod-NSfZaxtj">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt params="+UnicodeMode" id="_ref_24076"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a><emu-mods><emu-params>[+UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>The first two lines here are equivalent to CharacterClass.</p>
|
||
</div></emu-note>
|
||
<emu-grammar type="definition"><emu-production name="ClassStringDisjunction" type="lexical" id="prod-ClassStringDisjunction">
|
||
<emu-nt><a href="text-processing.html#prod-ClassStringDisjunction">ClassStringDisjunction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="kjbhn6ad" id="prod-OWA-RIEl">
|
||
<emu-t>\q{</emu-t>
|
||
<emu-nt id="_ref_24077"><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassStringDisjunctionContents" type="lexical" id="prod-ClassStringDisjunctionContents">
|
||
<emu-nt><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="-skvesn5" id="prod-4o44xqjO">
|
||
<emu-nt id="_ref_24078"><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="bsmwgovm" id="prod-RLq9E3c7">
|
||
<emu-nt id="_ref_24079"><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt>
|
||
<emu-t>|</emu-t>
|
||
<emu-nt id="_ref_24080"><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassString" type="lexical" id="prod-ClassString">
|
||
<emu-nt><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb" id="prod-wlHjT_uF">
|
||
<emu-gann>[empty]</emu-gann>
|
||
</emu-rhs>
|
||
<emu-rhs a="zzzearnw" id="prod-R19M_TTI">
|
||
<emu-nt id="_ref_24081"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="NonEmptyClassString" type="lexical" id="prod-NonEmptyClassString">
|
||
<emu-nt><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="g-kpie7v" id="prod-u7ZJYYBQ">
|
||
<emu-nt id="_ref_24082"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24083"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassSetCharacter" type="lexical" id="prod-ClassSetCharacter">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="i1yszfyw" id="prod-aYRGZPo4">
|
||
<emu-gann>[lookahead ∉ <emu-nt id="_ref_24084"><a href="text-processing.html#prod-ClassSetReservedDoublePunctuator">ClassSetReservedDoublePunctuator</a></emu-nt>]</emu-gann>
|
||
<emu-nt id="_ref_24085"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_24086"><a href="text-processing.html#prod-ClassSetSyntaxCharacter">ClassSetSyntaxCharacter</a></emu-nt></emu-gmod>
|
||
</emu-rhs>
|
||
<emu-rhs a="ytjgggtw" id="prod-K7v_V3OY">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt params="+UnicodeMode" id="_ref_24087"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a><emu-mods><emu-params>[+UnicodeMode]</emu-params></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="xyoixwqd" id="prod-wURb2FX1">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24088"><a href="text-processing.html#prod-ClassSetReservedPunctuator">ClassSetReservedPunctuator</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="axxsqknu" id="prod-3EeamNn_">
|
||
<emu-t>\b</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassSetReservedDoublePunctuator" type="lexical" oneof="" id="prod-ClassSetReservedDoublePunctuator">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetReservedDoublePunctuator">ClassSetReservedDoublePunctuator</a></emu-nt> <emu-geq>::</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>&&</emu-t> <emu-t>!!</emu-t> <emu-t>##</emu-t> <emu-t>$$</emu-t> <emu-t>%%</emu-t> <emu-t>**</emu-t> <emu-t>++</emu-t> <emu-t>,,</emu-t> <emu-t>..</emu-t> <emu-t>::</emu-t> <emu-t>;;</emu-t> <emu-t><<</emu-t> <emu-t>==</emu-t> <emu-t>>></emu-t> <emu-t>??</emu-t> <emu-t>@@</emu-t> <emu-t>^^</emu-t> <emu-t>``</emu-t> <emu-t>~~</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-grammar type="definition"><emu-production name="ClassSetSyntaxCharacter" type="lexical" oneof="" id="prod-ClassSetSyntaxCharacter">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetSyntaxCharacter">ClassSetSyntaxCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>(</emu-t> <emu-t>)</emu-t> <emu-t>[</emu-t> <emu-t>]</emu-t> <emu-t>{</emu-t> <emu-t>}</emu-t> <emu-t>/</emu-t> <emu-t>-</emu-t> <emu-t>\</emu-t> <emu-t>|</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-grammar type="definition"><emu-production name="ClassSetReservedPunctuator" type="lexical" oneof="" id="prod-ClassSetReservedPunctuator">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetReservedPunctuator">ClassSetReservedPunctuator</a></emu-nt> <emu-geq>::</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>&</emu-t> <emu-t>-</emu-t> <emu-t>!</emu-t> <emu-t>#</emu-t> <emu-t>%</emu-t> <emu-t>,</emu-t> <emu-t>:</emu-t> <emu-t>;</emu-t> <emu-t><</emu-t> <emu-t>=</emu-t> <emu-t>></emu-t> <emu-t>@</emu-t> <emu-t>`</emu-t> <emu-t>~</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>A number of productions in this section are given alternative definitions in section <emu-xref href="#sec-regular-expressions-patterns" id="_ref_671"><a href="additional-ecmascript-features-for-web-browsers.html#sec-regular-expressions-patterns">B.1.2</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
|
||
<emu-clause id="sec-patterns-static-semantics-early-errors">
|
||
<h1><span class="secnum">22.2.1.1</span> Static Semantics: Early Errors</h1>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-patterns-static-semantics-early-errors-annexb" id="_ref_672"><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-early-errors-annexb">B.1.2.1</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
<emu-grammar><emu-production name="Pattern" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="eaw70mcy"><emu-nt id="_ref_24089"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="CountLeftCapturingParensWithin" id="_ref_11630"><a href="text-processing.html#sec-countleftcapturingparenswithin">CountLeftCapturingParensWithin</a></emu-xref>(<emu-nt id="_ref_24090"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt>) ≥ 2<sup>32</sup> - 1.
|
||
</li>
|
||
<li>
|
||
It is a Syntax Error if <emu-nt id="_ref_24091"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> contains two distinct <emu-nt id="_ref_24092"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a></emu-nt>s <var>x</var> and <var>y</var> such that the <emu-xref aoid="CapturingGroupName" id="_ref_11631"><a href="text-processing.html#sec-static-semantics-capturinggroupname">CapturingGroupName</a></emu-xref> of <var>x</var> is the <emu-xref aoid="CapturingGroupName" id="_ref_11632"><a href="text-processing.html#sec-static-semantics-capturinggroupname">CapturingGroupName</a></emu-xref> of <var>y</var> and such that <emu-xref aoid="MightBothParticipate" id="_ref_11633"><a href="text-processing.html#sec-mightbothparticipate">MightBothParticipate</a></emu-xref>(<var>x</var>, <var>y</var>) is <emu-val>true</emu-val>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="QuantifierPrefix" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="9hgpwdk0">
|
||
<emu-t>{</emu-t>
|
||
<emu-nt id="_ref_24093"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>
|
||
<emu-t>,</emu-t>
|
||
<emu-nt id="_ref_24094"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the MV of the first <emu-nt id="_ref_24095"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt> is strictly greater than the MV of the second <emu-nt id="_ref_24096"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="Atom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="a-bf9noz">
|
||
<emu-t>(?</emu-t>
|
||
<emu-nt id="_ref_24097"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>:</emu-t>
|
||
<emu-nt id="_ref_24098"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11634"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24099"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt> contains the same code point more than once.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="Atom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="qocvabie">
|
||
<emu-t>(?</emu-t>
|
||
<emu-nt id="_ref_24100"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24101"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>:</emu-t>
|
||
<emu-nt id="_ref_24102"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11635"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> the first <emu-nt id="_ref_24103"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt> and the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11636"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> the second <emu-nt id="_ref_24104"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt> are both empty.
|
||
</li>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11637"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> the first <emu-nt id="_ref_24105"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt> contains the same code point more than once.
|
||
</li>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11638"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> the second <emu-nt id="_ref_24106"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt> contains the same code point more than once.
|
||
</li>
|
||
<li>
|
||
It is a Syntax Error if any code point in the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11639"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> the first <emu-nt id="_ref_24107"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt> is also contained in the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11640"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> the second <emu-nt id="_ref_24108"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="AtomEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-AtomEscape">AtomEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="dd_xjonr">
|
||
<emu-t>k</emu-t>
|
||
<emu-nt id="_ref_24109"><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="GroupSpecifiersThatMatch" id="_ref_11641"><a href="text-processing.html#sec-groupspecifiersthatmatch">GroupSpecifiersThatMatch</a></emu-xref>(<emu-nt id="_ref_24110"><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt>) is empty.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="AtomEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-AtomEscape">AtomEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="fr_5bnut"><emu-nt id="_ref_24111"><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref aoid="CapturingGroupNumber" id="_ref_11642"><a href="text-processing.html#sec-patterns-static-semantics-capturing-group-number">CapturingGroupNumber</a></emu-xref> of <emu-nt id="_ref_24112"><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt> is strictly greater than <emu-xref aoid="CountLeftCapturingParensWithin" id="_ref_11643"><a href="text-processing.html#sec-countleftcapturingparenswithin">CountLeftCapturingParensWithin</a></emu-xref>(the <emu-nt id="_ref_24113"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> containing <emu-nt id="_ref_24114"><a href="text-processing.html#prod-AtomEscape">AtomEscape</a></emu-nt>).
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="NonemptyClassRanges" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NonemptyClassRanges">NonemptyClassRanges</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="2bs-sw8o">
|
||
<emu-nt id="_ref_24115"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24116"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>
|
||
<emu-nt id="_ref_24117"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="IsCharacterClass" id="_ref_11644"><a href="text-processing.html#sec-patterns-static-semantics-is-character-class">IsCharacterClass</a></emu-xref> of the first <emu-nt id="_ref_24118"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> is <emu-val>true</emu-val> or <emu-xref aoid="IsCharacterClass" id="_ref_11645"><a href="text-processing.html#sec-patterns-static-semantics-is-character-class">IsCharacterClass</a></emu-xref> of the second <emu-nt id="_ref_24119"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> is <emu-val>true</emu-val>.
|
||
</li>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="IsCharacterClass" id="_ref_11646"><a href="text-processing.html#sec-patterns-static-semantics-is-character-class">IsCharacterClass</a></emu-xref> of the first <emu-nt id="_ref_24120"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> is <emu-val>false</emu-val>, <emu-xref aoid="IsCharacterClass" id="_ref_11647"><a href="text-processing.html#sec-patterns-static-semantics-is-character-class">IsCharacterClass</a></emu-xref> of the second <emu-nt id="_ref_24121"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> is <emu-val>false</emu-val>, and the <emu-xref aoid="CharacterValue" id="_ref_11648"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of the first <emu-nt id="_ref_24122"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> is strictly greater than the <emu-xref aoid="CharacterValue" id="_ref_11649"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of the second <emu-nt id="_ref_24123"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="NonemptyClassRangesNoDash" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="udwlha-v">
|
||
<emu-nt id="_ref_24124"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24125"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>
|
||
<emu-nt id="_ref_24126"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="IsCharacterClass" id="_ref_11650"><a href="text-processing.html#sec-patterns-static-semantics-is-character-class">IsCharacterClass</a></emu-xref> of <emu-nt id="_ref_24127"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt> is <emu-val>true</emu-val> or <emu-xref aoid="IsCharacterClass" id="_ref_11651"><a href="text-processing.html#sec-patterns-static-semantics-is-character-class">IsCharacterClass</a></emu-xref> of <emu-nt id="_ref_24128"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> is <emu-val>true</emu-val>.
|
||
</li>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="IsCharacterClass" id="_ref_11652"><a href="text-processing.html#sec-patterns-static-semantics-is-character-class">IsCharacterClass</a></emu-xref> of <emu-nt id="_ref_24129"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt> is <emu-val>false</emu-val>, <emu-xref aoid="IsCharacterClass" id="_ref_11653"><a href="text-processing.html#sec-patterns-static-semantics-is-character-class">IsCharacterClass</a></emu-xref> of <emu-nt id="_ref_24130"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> is <emu-val>false</emu-val>, and the <emu-xref aoid="CharacterValue" id="_ref_11654"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of <emu-nt id="_ref_24131"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt> is strictly greater than the <emu-xref aoid="CharacterValue" id="_ref_11655"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of <emu-nt id="_ref_24132"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="RegExpIdentifierStart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="vkfrbm2v">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24133"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref aoid="CharacterValue" id="_ref_11656"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of <emu-nt id="_ref_24134"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt> is not the numeric value of some code point matched by the <emu-nt id="_ref_24135"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierStartChar">IdentifierStartChar</a></emu-nt> lexical grammar production.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="RegExpIdentifierStart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="-hbnr2gv">
|
||
<emu-nt id="_ref_24136"><a href="text-processing.html#prod-UnicodeLeadSurrogate">UnicodeLeadSurrogate</a></emu-nt>
|
||
<emu-nt id="_ref_24137"><a href="text-processing.html#prod-UnicodeTrailSurrogate">UnicodeTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref aoid="RegExpIdentifierCodePoint" id="_ref_11657"><a href="text-processing.html#sec-regexpidentifiercodepoint">RegExpIdentifierCodePoint</a></emu-xref> of <emu-nt id="_ref_24138"><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a></emu-nt> is not matched by the <emu-nt id="_ref_24139"><a href="ecmascript-language-lexical-grammar.html#prod-UnicodeIDStart">UnicodeIDStart</a></emu-nt> lexical grammar production.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="RegExpIdentifierPart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="vkfrbm2v">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24140"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref aoid="CharacterValue" id="_ref_11658"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of <emu-nt id="_ref_24141"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt> is not the numeric value of some code point matched by the <emu-nt id="_ref_24142"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierPartChar">IdentifierPartChar</a></emu-nt> lexical grammar production.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="RegExpIdentifierPart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="-hbnr2gv">
|
||
<emu-nt id="_ref_24143"><a href="text-processing.html#prod-UnicodeLeadSurrogate">UnicodeLeadSurrogate</a></emu-nt>
|
||
<emu-nt id="_ref_24144"><a href="text-processing.html#prod-UnicodeTrailSurrogate">UnicodeTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref aoid="RegExpIdentifierCodePoint" id="_ref_11659"><a href="text-processing.html#sec-regexpidentifiercodepoint">RegExpIdentifierCodePoint</a></emu-xref> of <emu-nt id="_ref_24145"><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a></emu-nt> is not matched by the <emu-nt id="_ref_24146"><a href="ecmascript-language-lexical-grammar.html#prod-UnicodeIDContinue">UnicodeIDContinue</a></emu-nt> lexical grammar production.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="UnicodePropertyValueExpression" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="sr3kbwzj">
|
||
<emu-nt id="_ref_24147"><a href="text-processing.html#prod-UnicodePropertyName">UnicodePropertyName</a></emu-nt>
|
||
<emu-t>=</emu-t>
|
||
<emu-nt id="_ref_24148"><a href="text-processing.html#prod-UnicodePropertyValue">UnicodePropertyValue</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11660"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24149"><a href="text-processing.html#prod-UnicodePropertyName">UnicodePropertyName</a></emu-nt> is not a <emu-not-ref>Unicode property name</emu-not-ref> or property alias listed in the “<emu-not-ref>Property name and aliases</emu-not-ref>” column of <emu-xref href="#table-nonbinary-unicode-properties" id="_ref_673"><a href="text-processing.html#table-nonbinary-unicode-properties">Table 64</a></emu-xref>.
|
||
</li>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11661"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24150"><a href="text-processing.html#prod-UnicodePropertyValue">UnicodePropertyValue</a></emu-nt> is not a property value or property value alias for the Unicode property or property alias given by the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11662"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24151"><a href="text-processing.html#prod-UnicodePropertyName">UnicodePropertyName</a></emu-nt> listed in <a href="https://unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt"><code>PropertyValueAliases.txt</code></a>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="UnicodePropertyValueExpression" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="jdlbklv9"><emu-nt id="_ref_24152"><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11663"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24153"><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt> is not a Unicode property value or property value alias for the General_Category (gc) property listed in <a href="https://unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt"><code>PropertyValueAliases.txt</code></a>, nor a binary property or binary property alias listed in the “<emu-not-ref>Property name and aliases</emu-not-ref>” column of <emu-xref href="#table-binary-unicode-properties" id="_ref_674"><a href="text-processing.html#table-binary-unicode-properties">Table 65</a></emu-xref>, nor a binary property of strings listed in the “<emu-not-ref>Property name</emu-not-ref>” column of <emu-xref href="#table-binary-unicode-properties-of-strings" id="_ref_675"><a href="text-processing.html#table-binary-unicode-properties-of-strings">Table 66</a></emu-xref>.
|
||
</li>
|
||
<li>
|
||
It is a Syntax Error if the enclosing <emu-nt id="_ref_24154"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> does not have a <sub>[UnicodeSetsMode]</sub> parameter and the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11664"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24155"><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt> is a binary property of strings listed in the “<emu-not-ref>Property name</emu-not-ref>” column of <emu-xref href="#table-binary-unicode-properties-of-strings" id="_ref_676"><a href="text-processing.html#table-binary-unicode-properties-of-strings">Table 66</a></emu-xref>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="4og7ke5v">
|
||
<emu-t>P{</emu-t>
|
||
<emu-nt id="_ref_24156"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="MayContainStrings" id="_ref_11665"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24157"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> is <emu-val>true</emu-val>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="CharacterClass" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClass">CharacterClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="d-swr39f">
|
||
<emu-t>[^</emu-t>
|
||
<emu-nt id="_ref_24158"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="MayContainStrings" id="_ref_11666"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24159"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> is <emu-val>true</emu-val>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="NestedClass" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="d-swr39f">
|
||
<emu-t>[^</emu-t>
|
||
<emu-nt id="_ref_24160"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if <emu-xref aoid="MayContainStrings" id="_ref_11667"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24161"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> is <emu-val>true</emu-val>.
|
||
</li>
|
||
</ul>
|
||
<emu-grammar><emu-production name="ClassSetRange" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetRange">ClassSetRange</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="olq8_w1t">
|
||
<emu-nt id="_ref_24162"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24163"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<ul>
|
||
<li>
|
||
It is a Syntax Error if the <emu-xref aoid="CharacterValue" id="_ref_11668"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of the first <emu-nt id="_ref_24164"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> is strictly greater than the <emu-xref aoid="CharacterValue" id="_ref_11669"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of the second <emu-nt id="_ref_24165"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>.
|
||
</li>
|
||
</ul>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-countleftcapturingparenswithin" type="abstract operation" aoid="CountLeftCapturingParensWithin">
|
||
<h1><span class="secnum">22.2.1.2</span> Static Semantics: CountLeftCapturingParensWithin ( <var>node</var> )</h1>
|
||
<p>The abstract operation CountLeftCapturingParensWithin takes argument <var>node</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_11670"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns a non-negative <emu-xref href="#integer" id="_ref_11671"><a href="notational-conventions.html#integer">integer</a></emu-xref>. It returns the number of left-capturing parentheses in <var>node</var>. A <dfn variants="left-capturing parentheses" tabindex="-1">left-capturing parenthesis</dfn> is any <code>(</code> pattern character that is matched by the <code>(</code> terminal of the <emu-grammar><emu-production name="Atom" type="lexical" collapsed="" class=" inline">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lnltxn63">
|
||
<emu-t>(</emu-t>
|
||
<emu-nt optional="" id="_ref_24166"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
<emu-nt id="_ref_24167"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar> production.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-countleftcapturingparens-annexb" id="_ref_677"><a href="additional-ecmascript-features-for-web-browsers.html#sec-countleftcapturingparens-annexb">B.1.2.2</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_11672"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>node</var> is an instance of a production in <emu-xref href="#sec-patterns" id="_ref_678"><a href="text-processing.html#sec-patterns">the RegExp Pattern grammar</a></emu-xref>.</li><li>Return the number of <emu-grammar><emu-production name="Atom" type="lexical" collapsed="" class=" inline">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lnltxn63">
|
||
<emu-t>(</emu-t>
|
||
<emu-nt optional="" id="_ref_24168"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
<emu-nt id="_ref_24169"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar> <emu-xref href="#sec-syntactic-grammar" id="_ref_11673"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Nodes</a></emu-xref> contained within <var>node</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-countleftcapturingparensbefore" type="abstract operation" aoid="CountLeftCapturingParensBefore">
|
||
<h1><span class="secnum">22.2.1.3</span> Static Semantics: CountLeftCapturingParensBefore ( <var>node</var> )</h1>
|
||
<p>The abstract operation CountLeftCapturingParensBefore takes argument <var>node</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_11674"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns a non-negative <emu-xref href="#integer" id="_ref_11675"><a href="notational-conventions.html#integer">integer</a></emu-xref>. It returns the number of <emu-xref href="#sec-countleftcapturingparenswithin" id="_ref_11676"><a href="text-processing.html#sec-countleftcapturingparenswithin">left-capturing parentheses</a></emu-xref> within the enclosing pattern that occur to the left of <var>node</var>.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-countleftcapturingparens-annexb" id="_ref_679"><a href="additional-ecmascript-features-for-web-browsers.html#sec-countleftcapturingparens-annexb">B.1.2.2</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_11677"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>node</var> is an instance of a production in <emu-xref href="#sec-patterns" id="_ref_680"><a href="text-processing.html#sec-patterns">the RegExp Pattern grammar</a></emu-xref>.</li><li>Let <var>pattern</var> be the <emu-nt id="_ref_24170"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> containing <var>node</var>.</li><li>Return the number of <emu-grammar><emu-production name="Atom" type="lexical" collapsed="" class=" inline">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lnltxn63">
|
||
<emu-t>(</emu-t>
|
||
<emu-nt optional="" id="_ref_24171"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
<emu-nt id="_ref_24172"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar> <emu-xref href="#sec-syntactic-grammar" id="_ref_11678"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Nodes</a></emu-xref> contained within <var>pattern</var> that either occur before <var>node</var> or contain <var>node</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-mightbothparticipate" type="abstract operation" aoid="MightBothParticipate">
|
||
<h1><span class="secnum">22.2.1.4</span> Static Semantics: MightBothParticipate ( <var>x</var>, <var>y</var> )</h1>
|
||
<p>The abstract operation MightBothParticipate takes arguments <var>x</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_11679"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and <var>y</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_11680"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns a Boolean. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_11681"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> and <var>y</var> have the same enclosing <emu-nt id="_ref_24173"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt>.</li><li>If the enclosing <emu-nt id="_ref_24174"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> contains a <emu-grammar><emu-production name="Disjunction" type="lexical" collapsed="" class=" inline">
|
||
<emu-nt><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="jt2lba_1">
|
||
<emu-nt id="_ref_24175"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>
|
||
<emu-t>|</emu-t>
|
||
<emu-nt id="_ref_24176"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar> <emu-xref href="#sec-syntactic-grammar" id="_ref_11682"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref> such that either <var>x</var> is contained within the <emu-nt id="_ref_24177"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt> and <var>y</var> is contained within the derived <emu-nt id="_ref_24178"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>, or <var>x</var> is contained within the derived <emu-nt id="_ref_24179"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> and <var>y</var> is contained within the <emu-nt id="_ref_24180"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-patterns-static-semantics-capturing-group-number" type="sdo" aoid="CapturingGroupNumber">
|
||
<h1><span class="secnum">22.2.1.5</span> Static Semantics: CapturingGroupNumber</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11683"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CapturingGroupNumber takes no arguments and returns a positive <emu-xref href="#integer" id="_ref_11684"><a href="notational-conventions.html#integer">integer</a></emu-xref>.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-patterns-static-semantics-early-errors-annexb" id="_ref_681"><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-early-errors-annexb">B.1.2.1</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
<p>It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="DecimalEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="1mot5ut_" id="prod-xT1sXsIe"><emu-nt id="_ref_24181"><a href="ecmascript-language-lexical-grammar.html#prod-NonZeroDigit">NonZeroDigit</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the MV of <emu-nt id="_ref_24182"><a href="ecmascript-language-lexical-grammar.html#prod-NonZeroDigit">NonZeroDigit</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="DecimalEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="p0svd-i2" id="prod-lKRUpdJ5">
|
||
<emu-nt id="_ref_24183"><a href="ecmascript-language-lexical-grammar.html#prod-NonZeroDigit">NonZeroDigit</a></emu-nt>
|
||
<emu-nt id="_ref_24184"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>n</var> be the number of code points in <emu-nt id="_ref_24185"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>.</li><li>Return (the MV of <emu-nt id="_ref_24186"><a href="ecmascript-language-lexical-grammar.html#prod-NonZeroDigit">NonZeroDigit</a></emu-nt> × 10<sup><var>n</var></sup> plus the MV of <emu-nt id="_ref_24187"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>).</li></ol></emu-alg>
|
||
<p>The definitions of “the MV of <emu-nt id="_ref_24188"><a href="ecmascript-language-lexical-grammar.html#prod-NonZeroDigit">NonZeroDigit</a></emu-nt>” and “the MV of <emu-nt id="_ref_24189"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>” are in <emu-xref href="#sec-literals-numeric-literals" id="_ref_682"><a href="ecmascript-language-lexical-grammar.html#sec-literals-numeric-literals">12.9.3</a></emu-xref>.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-patterns-static-semantics-is-character-class" type="sdo" aoid="IsCharacterClass">
|
||
<h1><span class="secnum">22.2.1.6</span> Static Semantics: IsCharacterClass</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11685"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> IsCharacterClass takes no arguments and returns a Boolean.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-patterns-static-semantics-is-character-class-annexb" id="_ref_683"><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-is-character-class-annexb">B.1.2.3</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
<p>It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="ClassAtom" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="byslh4l8" id="prod-G-2_KzF0">
|
||
<emu-t>-</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassAtomNoDash" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="7n5ukjeb" id="prod-c9Gs2CyN">
|
||
<emu-nt id="_ref_24190"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not one of <emu-t>\</emu-t> or <emu-t>]</emu-t> or <emu-t>-</emu-t></emu-gmod>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassEscape" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-ClassEscape">ClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ayxoiyyq" id="prod-CyWYzaiY">
|
||
<emu-t>b</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="byslh4l8" id="prod-_jzYJMTx">
|
||
<emu-t>-</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="fjarvpc8" id="prod-Z3nmWONm">
|
||
<emu-nt id="_ref_24191"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassEscape">ClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="bww-5j2p" id="prod-3d9phfMH"><emu-nt id="_ref_24192"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-patterns-static-semantics-character-value" type="sdo" aoid="CharacterValue">
|
||
<h1><span class="secnum">22.2.1.7</span> Static Semantics: CharacterValue</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11686"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CharacterValue takes no arguments and returns a non-negative <emu-xref href="#integer" id="_ref_11687"><a href="notational-conventions.html#integer">integer</a></emu-xref>.</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-patterns-static-semantics-character-value-annexb" id="_ref_684"><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-character-value-annexb">B.1.2.4</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
<p>It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="ClassAtom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="byslh4l8" id="prod-xjk33vk0"><emu-t>-</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the numeric value of U+002D (HYPHEN-MINUS).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassAtomNoDash" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="7n5ukjeb" id="prod-r7Whzgyd"><emu-nt id="_ref_24193"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not one of <emu-t>\</emu-t> or <emu-t>]</emu-t> or <emu-t>-</emu-t></emu-gmod></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>ch</var> be the code point matched by <emu-nt id="_ref_24194"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt>.</li><li>Return the numeric value of <var>ch</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassEscape">ClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ayxoiyyq" id="prod-lioRfUCB"><emu-t>b</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the numeric value of U+0008 (BACKSPACE).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassEscape">ClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="byslh4l8" id="prod-RssYfbc0"><emu-t>-</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the numeric value of U+002D (HYPHEN-MINUS).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="-i5xcal8" id="prod-qdZp22xs"><emu-nt id="_ref_24195"><a href="text-processing.html#prod-ControlEscape">ControlEscape</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the numeric value according to <emu-xref href="#table-controlescape-code-point-values" id="_ref_685"><a href="text-processing.html#table-controlescape-code-point-values">Table 62</a></emu-xref>.</li></ol></emu-alg>
|
||
<emu-table id="table-controlescape-code-point-values" caption="ControlEscape Code Point Values" oldids="table-47"><figure><figcaption>Table 62: ControlEscape Code Point Values</figcaption><span id="table-47"></span>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>
|
||
ControlEscape
|
||
</th>
|
||
<th>
|
||
Numeric Value
|
||
</th>
|
||
<th>
|
||
Code Point
|
||
</th>
|
||
<th>
|
||
Unicode Name
|
||
</th>
|
||
<th>
|
||
Symbol
|
||
</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td>
|
||
<code>t</code>
|
||
</td>
|
||
<td>
|
||
9
|
||
</td>
|
||
<td>
|
||
<code>U+0009</code>
|
||
</td>
|
||
<td>
|
||
CHARACTER TABULATION
|
||
</td>
|
||
<td>
|
||
<HT>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<code>n</code>
|
||
</td>
|
||
<td>
|
||
10
|
||
</td>
|
||
<td>
|
||
<code>U+000A</code>
|
||
</td>
|
||
<td>
|
||
LINE FEED (LF)
|
||
</td>
|
||
<td>
|
||
<LF>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<code>v</code>
|
||
</td>
|
||
<td>
|
||
11
|
||
</td>
|
||
<td>
|
||
<code>U+000B</code>
|
||
</td>
|
||
<td>
|
||
LINE TABULATION
|
||
</td>
|
||
<td>
|
||
<VT>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<code>f</code>
|
||
</td>
|
||
<td>
|
||
12
|
||
</td>
|
||
<td>
|
||
<code>U+000C</code>
|
||
</td>
|
||
<td>
|
||
FORM FEED (FF)
|
||
</td>
|
||
<td>
|
||
<FF>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<code>r</code>
|
||
</td>
|
||
<td>
|
||
13
|
||
</td>
|
||
<td>
|
||
<code>U+000D</code>
|
||
</td>
|
||
<td>
|
||
CARRIAGE RETURN (CR)
|
||
</td>
|
||
<td>
|
||
<CR>
|
||
</td>
|
||
</tr>
|
||
</tbody></table>
|
||
</figure></emu-table>
|
||
<emu-grammar><emu-production name="CharacterEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lf4h7vn-" id="prod-OO2zEPPr">
|
||
<emu-t>c</emu-t>
|
||
<emu-nt id="_ref_24196"><a href="ecmascript-language-lexical-grammar.html#prod-AsciiLetter">AsciiLetter</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>ch</var> be the code point matched by <emu-nt id="_ref_24197"><a href="ecmascript-language-lexical-grammar.html#prod-AsciiLetter">AsciiLetter</a></emu-nt>.</li><li>Let <var>i</var> be the numeric value of <var>ch</var>.</li><li>Return the remainder of dividing <var>i</var> by 32.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="br2d94cy" id="prod--h1KYMFX">
|
||
<emu-t>0</emu-t>
|
||
<emu-gann>[lookahead ∉ <emu-nt id="_ref_24198"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigit">DecimalDigit</a></emu-nt>]</emu-gann>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the numeric value of U+0000 (NULL).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p><code>\0</code> represents the <NUL> character and cannot be followed by a decimal digit.</p>
|
||
</div></emu-note>
|
||
<emu-grammar><emu-production name="CharacterEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="qacbhaps" id="prod-GXRVwMQi"><emu-nt id="_ref_24199"><a href="ecmascript-language-lexical-grammar.html#prod-HexEscapeSequence">HexEscapeSequence</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the MV of <emu-nt id="_ref_24200"><a href="ecmascript-language-lexical-grammar.html#prod-HexEscapeSequence">HexEscapeSequence</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="RegExpUnicodeEscapeSequence" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="nr7lnrwo" id="prod-xQFw7WMV">
|
||
<emu-t>u</emu-t>
|
||
<emu-nt id="_ref_24201"><a href="text-processing.html#prod-HexLeadSurrogate">HexLeadSurrogate</a></emu-nt>
|
||
<emu-t>\u</emu-t>
|
||
<emu-nt id="_ref_24202"><a href="text-processing.html#prod-HexTrailSurrogate">HexTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>lead</var> be the <emu-xref aoid="CharacterValue" id="_ref_11688"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of <emu-nt id="_ref_24203"><a href="text-processing.html#prod-HexLeadSurrogate">HexLeadSurrogate</a></emu-nt>.</li><li>Let <var>trail</var> be the <emu-xref aoid="CharacterValue" id="_ref_11689"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of <emu-nt id="_ref_24204"><a href="text-processing.html#prod-HexTrailSurrogate">HexTrailSurrogate</a></emu-nt>.</li><li>Let <var>cp</var> be <emu-xref aoid="UTF16SurrogatePairToCodePoint" id="_ref_11690"><a href="ecmascript-language-source-code.html#sec-utf16decodesurrogatepair">UTF16SurrogatePairToCodePoint</a></emu-xref>(<var>lead</var>, <var>trail</var>).</li><li>Return the numeric value of <var>cp</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="RegExpUnicodeEscapeSequence" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ghktjvoi" id="prod-OI8ASjmd">
|
||
<emu-t>u</emu-t>
|
||
<emu-nt id="_ref_24205"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the MV of <emu-nt id="_ref_24206"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="RegExpUnicodeEscapeSequence" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="uybj7_dt" id="prod-cC4Huuek">
|
||
<emu-t>u{</emu-t>
|
||
<emu-nt id="_ref_24207"><a href="ecmascript-language-lexical-grammar.html#prod-CodePoint">CodePoint</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the MV of <emu-nt id="_ref_24208"><a href="ecmascript-language-lexical-grammar.html#prod-CodePoint">CodePoint</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="HexLeadSurrogate" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-HexLeadSurrogate">HexLeadSurrogate</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="pptelolr" id="prod-KB9TwXt5"><emu-nt id="_ref_24209"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="HexTrailSurrogate" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-HexTrailSurrogate">HexTrailSurrogate</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="pptelolr" id="prod-w_eLE8Wq"><emu-nt id="_ref_24210"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="HexNonSurrogate" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-HexNonSurrogate">HexNonSurrogate</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="pptelolr" id="prod-gm_vpVWn"><emu-nt id="_ref_24211"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the MV of <emu-nt id="_ref_24212"><a href="ecmascript-language-lexical-grammar.html#prod-Hex4Digits">Hex4Digits</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ge9cjxqz" id="prod-u6hqoUgl"><emu-nt id="_ref_24213"><a href="text-processing.html#prod-IdentityEscape">IdentityEscape</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>ch</var> be the code point matched by <emu-nt id="_ref_24214"><a href="text-processing.html#prod-IdentityEscape">IdentityEscape</a></emu-nt>.</li><li>Return the numeric value of <var>ch</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSetCharacter" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="kyrub20l" id="prod-dwcLz84m"><emu-nt id="_ref_24215"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_24216"><a href="text-processing.html#prod-ClassSetSyntaxCharacter">ClassSetSyntaxCharacter</a></emu-nt></emu-gmod></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>ch</var> be the code point matched by <emu-nt id="_ref_24217"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt>.</li><li>Return the numeric value of <var>ch</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSetCharacter" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="xyoixwqd" id="prod-y0BubLe1">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24218"><a href="text-processing.html#prod-ClassSetReservedPunctuator">ClassSetReservedPunctuator</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>ch</var> be the code point matched by <emu-nt id="_ref_24219"><a href="text-processing.html#prod-ClassSetReservedPunctuator">ClassSetReservedPunctuator</a></emu-nt>.</li><li>Return the numeric value of <var>ch</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSetCharacter" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="axxsqknu" id="prod-VNuih8IG"><emu-t>\b</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the numeric value of U+0008 (BACKSPACE).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-static-semantics-maycontainstrings" type="sdo" aoid="MayContainStrings">
|
||
<h1><span class="secnum">22.2.1.8</span> Static Semantics: MayContainStrings</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11691"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> MayContainStrings takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="8pmnkw2i" id="prod-Bf6PNBQl">
|
||
<emu-t>d</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="kzsugx0d" id="prod-RGVe7d_l">
|
||
<emu-t>D</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="w5xsbsk3" id="prod-OqQUZ1AJ">
|
||
<emu-t>s</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="avlpsekd" id="prod-wOKKYLJh">
|
||
<emu-t>S</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="lytism1a" id="prod-f1pS245L">
|
||
<emu-t>w</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="rhxouzu-" id="prod-GFqiLy7V">
|
||
<emu-t>W</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="4og7ke5v" id="prod-RmQZ0iW5">
|
||
<emu-t>P{</emu-t>
|
||
<emu-nt id="_ref_24220"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="UnicodePropertyValueExpression" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="sr3kbwzj" id="prod-s2EbLfVa">
|
||
<emu-nt id="_ref_24221"><a href="text-processing.html#prod-UnicodePropertyName">UnicodePropertyName</a></emu-nt>
|
||
<emu-t>=</emu-t>
|
||
<emu-nt id="_ref_24222"><a href="text-processing.html#prod-UnicodePropertyValue">UnicodePropertyValue</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="NestedClass" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="d-swr39f" id="prod-KPMY0hl9">
|
||
<emu-t>[^</emu-t>
|
||
<emu-nt id="_ref_24223"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassContents" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb" id="prod-mJSrJEIb">
|
||
<emu-gann>[empty]</emu-gann>
|
||
</emu-rhs>
|
||
<emu-rhs a="t0au2wo3" id="prod-VIFWQA3E">
|
||
<emu-nt id="_ref_24224"><a href="text-processing.html#prod-NonemptyClassRanges">NonemptyClassRanges</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="ClassSetOperand" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="pbrz9y58" id="prod-fXQDqqMu">
|
||
<emu-nt id="_ref_24225"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="UnicodePropertyValueExpression" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="jdlbklv9" id="prod-Vo8Rxe-U"><emu-nt id="_ref_24226"><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>If the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11692"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24227"><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt> is a binary property of strings listed in the “<emu-not-ref>Property name</emu-not-ref>” column of <emu-xref href="#table-binary-unicode-properties-of-strings" id="_ref_686"><a href="text-processing.html#table-binary-unicode-properties-of-strings">Table 66</a></emu-xref>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassUnion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lvavyv54" id="prod-gvGJSfuv">
|
||
<emu-nt id="_ref_24228"><a href="text-processing.html#prod-ClassSetRange">ClassSetRange</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24229"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>If the <emu-nt id="_ref_24230"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> is present, return <emu-xref aoid="MayContainStrings" id="_ref_11693"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24231"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassUnion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ga57bqew" id="prod-sW7TOMGn">
|
||
<emu-nt id="_ref_24232"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24233"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>If <emu-xref aoid="MayContainStrings" id="_ref_11694"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24234"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>If <emu-nt id="_ref_24235"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> is present, return <emu-xref aoid="MayContainStrings" id="_ref_11695"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24236"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassIntersection" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ldjtuyxs" id="prod-kLr2Lu9G">
|
||
<emu-nt id="_ref_24237"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-t>&&</emu-t>
|
||
<emu-nt id="_ref_24238"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>If <emu-xref aoid="MayContainStrings" id="_ref_11696"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the first <emu-nt id="_ref_24239"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <emu-xref aoid="MayContainStrings" id="_ref_11697"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the second <emu-nt id="_ref_24240"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassIntersection" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="sqaogagb" id="prod-TP89l0-Y">
|
||
<emu-nt id="_ref_24241"><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt>
|
||
<emu-t>&&</emu-t>
|
||
<emu-nt id="_ref_24242"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>If <emu-xref aoid="MayContainStrings" id="_ref_11698"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24243"><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <emu-xref aoid="MayContainStrings" id="_ref_11699"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24244"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSubtraction" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="0iwjxoz1" id="prod-tcMmJV95">
|
||
<emu-nt id="_ref_24245"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-t>--</emu-t>
|
||
<emu-nt id="_ref_24246"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="MayContainStrings" id="_ref_11700"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the first <emu-nt id="_ref_24247"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSubtraction" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="pdtgdxpo" id="prod-vhe5K8uN">
|
||
<emu-nt id="_ref_24248"><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt>
|
||
<emu-t>--</emu-t>
|
||
<emu-nt id="_ref_24249"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="MayContainStrings" id="_ref_11701"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24250"><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassStringDisjunctionContents" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="bsmwgovm" id="prod-2TGoIgN5">
|
||
<emu-nt id="_ref_24251"><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt>
|
||
<emu-t>|</emu-t>
|
||
<emu-nt id="_ref_24252"><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>If <emu-xref aoid="MayContainStrings" id="_ref_11702"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24253"><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="MayContainStrings" id="_ref_11703"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24254"><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassString" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb" id="prod-5vHBhYYk"><emu-gann>[empty]</emu-gann></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassString" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="zzzearnw" id="prod-Cx8VwpMk"><emu-nt id="_ref_24255"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="MayContainStrings" id="_ref_11704"><a href="text-processing.html#sec-static-semantics-maycontainstrings">MayContainStrings</a></emu-xref> of the <emu-nt id="_ref_24256"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="NonEmptyClassString" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="g-kpie7v" id="prod-w1OPLko-">
|
||
<emu-nt id="_ref_24257"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24258"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>If <emu-nt id="_ref_24259"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt> is present, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-groupspecifiersthatmatch" type="abstract operation" aoid="GroupSpecifiersThatMatch">
|
||
<h1><span class="secnum">22.2.1.9</span> Static Semantics: GroupSpecifiersThatMatch ( <var>thisGroupName</var> )</h1>
|
||
<p>The abstract operation GroupSpecifiersThatMatch takes argument <var>thisGroupName</var> (a <emu-nt id="_ref_24260"><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_11705"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11706"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-nt id="_ref_24261"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_11707"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Nodes</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>name</var> be the <emu-xref aoid="CapturingGroupName" id="_ref_11708"><a href="text-processing.html#sec-static-semantics-capturinggroupname">CapturingGroupName</a></emu-xref> of <var>thisGroupName</var>.</li><li>Let <var>pattern</var> be the <emu-nt id="_ref_24262"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> containing <var>thisGroupName</var>.</li><li>Let <var>result</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11709"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each <emu-nt id="_ref_24263"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a></emu-nt> <var>gs</var> that <var>pattern</var> contains, do<ol><li>If the <emu-xref aoid="CapturingGroupName" id="_ref_11710"><a href="text-processing.html#sec-static-semantics-capturinggroupname">CapturingGroupName</a></emu-xref> of <var>gs</var> is <var>name</var>, then<ol><li>Append <var>gs</var> to <var>result</var>.</li></ol></li></ol></li><li>Return <var>result</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-static-semantics-capturinggroupname" oldids="sec-regexp-identifier-names-static-semantics-stringvalue" type="sdo" aoid="CapturingGroupName"><span id="sec-regexp-identifier-names-static-semantics-stringvalue"></span>
|
||
<h1><span class="secnum">22.2.1.10</span> Static Semantics: CapturingGroupName</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11711"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CapturingGroupName takes no arguments and returns a String. It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="GroupName" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ibpwjayv" id="prod-n_is87x3">
|
||
<emu-t><</emu-t>
|
||
<emu-nt id="_ref_24264"><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a></emu-nt>
|
||
<emu-t>></emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>idTextUnescaped</var> be the <emu-xref aoid="RegExpIdentifierCodePoints" id="_ref_11712"><a href="text-processing.html#sec-regexpidentifiercodepoints">RegExpIdentifierCodePoints</a></emu-xref> of <emu-nt id="_ref_24265"><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a></emu-nt>.</li><li>Return <emu-xref aoid="CodePointsToString" id="_ref_11713"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<var>idTextUnescaped</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexpidentifiercodepoints" type="sdo" aoid="RegExpIdentifierCodePoints">
|
||
<h1><span class="secnum">22.2.1.11</span> Static Semantics: RegExpIdentifierCodePoints</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11714"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> RegExpIdentifierCodePoints takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11715"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of code points. It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="RegExpIdentifierName" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="0tblzef_" id="prod-MLgOzB7a"><emu-nt id="_ref_24266"><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>cp</var> be the <emu-xref aoid="RegExpIdentifierCodePoint" id="_ref_11716"><a href="text-processing.html#sec-regexpidentifiercodepoint">RegExpIdentifierCodePoint</a></emu-xref> of <emu-nt id="_ref_24267"><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a></emu-nt>.</li><li>Return « <var>cp</var> ».</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="RegExpIdentifierName" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="tpc7qkeo" id="prod-s0FAcATI">
|
||
<emu-nt id="_ref_24268"><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a></emu-nt>
|
||
<emu-nt id="_ref_24269"><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>cps</var> be the <emu-xref aoid="RegExpIdentifierCodePoints" id="_ref_11717"><a href="text-processing.html#sec-regexpidentifiercodepoints">RegExpIdentifierCodePoints</a></emu-xref> of the derived <emu-nt id="_ref_24270"><a href="text-processing.html#prod-RegExpIdentifierName">RegExpIdentifierName</a></emu-nt>.</li><li>Let <var>cp</var> be the <emu-xref aoid="RegExpIdentifierCodePoint" id="_ref_11718"><a href="text-processing.html#sec-regexpidentifiercodepoint">RegExpIdentifierCodePoint</a></emu-xref> of <emu-nt id="_ref_24271"><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_11719"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>cps</var> and « <var>cp</var> ».</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexpidentifiercodepoint" type="sdo" aoid="RegExpIdentifierCodePoint">
|
||
<h1><span class="secnum">22.2.1.12</span> Static Semantics: RegExpIdentifierCodePoint</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11720"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> RegExpIdentifierCodePoint takes no arguments and returns a code point. It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="RegExpIdentifierStart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="scjzw6a_" id="prod-KawRYiQy"><emu-nt id="_ref_24272"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierStartChar">IdentifierStartChar</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the code point matched by <emu-nt id="_ref_24273"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierStartChar">IdentifierStartChar</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="RegExpIdentifierPart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="q3hdl-qt" id="prod-hbCPVPTo"><emu-nt id="_ref_24274"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierPartChar">IdentifierPartChar</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the code point matched by <emu-nt id="_ref_24275"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierPartChar">IdentifierPartChar</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="RegExpIdentifierStart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="vkfrbm2v" id="prod-3xUUqpuD">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24276"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="RegExpIdentifierPart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="vkfrbm2v" id="prod-qsRdhrnd">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24277"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the code point whose numeric value is the <emu-xref aoid="CharacterValue" id="_ref_11721"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of <emu-nt id="_ref_24278"><a href="text-processing.html#prod-RegExpUnicodeEscapeSequence">RegExpUnicodeEscapeSequence</a></emu-nt>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="RegExpIdentifierStart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierStart">RegExpIdentifierStart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="-hbnr2gv" id="prod-rk-_SuFT">
|
||
<emu-nt id="_ref_24279"><a href="text-processing.html#prod-UnicodeLeadSurrogate">UnicodeLeadSurrogate</a></emu-nt>
|
||
<emu-nt id="_ref_24280"><a href="text-processing.html#prod-UnicodeTrailSurrogate">UnicodeTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
<emu-production name="RegExpIdentifierPart" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-RegExpIdentifierPart">RegExpIdentifierPart</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="-hbnr2gv" id="prod-NowIa6nU">
|
||
<emu-nt id="_ref_24281"><a href="text-processing.html#prod-UnicodeLeadSurrogate">UnicodeLeadSurrogate</a></emu-nt>
|
||
<emu-nt id="_ref_24282"><a href="text-processing.html#prod-UnicodeTrailSurrogate">UnicodeTrailSurrogate</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>lead</var> be the code unit whose numeric value is the numeric value of the code point matched by <emu-nt id="_ref_24283"><a href="text-processing.html#prod-UnicodeLeadSurrogate">UnicodeLeadSurrogate</a></emu-nt>.</li><li>Let <var>trail</var> be the code unit whose numeric value is the numeric value of the code point matched by <emu-nt id="_ref_24284"><a href="text-processing.html#prod-UnicodeTrailSurrogate">UnicodeTrailSurrogate</a></emu-nt>.</li><li>Return <emu-xref aoid="UTF16SurrogatePairToCodePoint" id="_ref_11722"><a href="ecmascript-language-source-code.html#sec-utf16decodesurrogatepair">UTF16SurrogatePairToCodePoint</a></emu-xref>(<var>lead</var>, <var>trail</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-pattern-semantics">
|
||
<h1><span class="secnum">22.2.2</span> Pattern Semantics</h1>
|
||
<p>A regular expression pattern is converted into an <emu-xref href="#sec-abstract-closure" id="_ref_11723"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> using the process described below. An implementation is encouraged to use more efficient algorithms than the ones listed below, as long as the results are the same. The <emu-xref href="#sec-abstract-closure" id="_ref_11724"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> is used as the value of a RegExp object's <var class="field">[[RegExpMatcher]]</var> internal slot.</p>
|
||
<p>A <emu-nt id="_ref_24285"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> is a BMP pattern if its associated flags contain neither a <code>u</code> nor a <code>v</code>. Otherwise, it is a Unicode pattern. A BMP pattern matches against a String interpreted as consisting of a sequence of 16-bit values that are Unicode code points in the range of the Basic Multilingual Plane. A Unicode pattern matches against a String interpreted as consisting of Unicode code points encoded using UTF-16. In the context of describing the behaviour of a BMP pattern “character” means a single 16-bit Unicode BMP code point. In the context of describing the behaviour of a Unicode pattern “character” means a UTF-16 encoded code point (<emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_687"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>). In either context, “character value” means the numeric value of the corresponding non-encoded code point.</p>
|
||
<p>The syntax and semantics of <emu-nt id="_ref_24286"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> is defined as if the source text for the <emu-nt id="_ref_24287"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> was a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11725"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-nt id="_ref_24288"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> values where each <emu-nt id="_ref_24289"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> corresponds to a Unicode code point. If a BMP pattern contains a non-BMP <emu-nt id="_ref_24290"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> the entire pattern is encoded using UTF-16 and the individual code units of that encoding are used as the elements of the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11726"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>For example, consider a pattern expressed in source text as the single non-BMP character U+1D11E (MUSICAL SYMBOL G CLEF). Interpreted as a Unicode pattern, it would be a single element (character) <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11727"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> consisting of the single code point U+1D11E. However, interpreted as a BMP pattern, it is first UTF-16 encoded to produce a two element <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11728"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> consisting of the code units 0xD834 and 0xDD1E.</p>
|
||
<p>Patterns are passed to the RegExp <emu-xref href="#constructor" id="_ref_11729"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> as ECMAScript String values in which non-BMP characters are UTF-16 encoded. For example, the single character MUSICAL SYMBOL G CLEF pattern, expressed as a String value, <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_11730"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> of length 2 whose elements were the code units 0xD834 and 0xDD1E. So no further translation of the string would be necessary to process it as a BMP pattern consisting of two pattern characters. However, to process it as a Unicode pattern <emu-xref aoid="UTF16SurrogatePairToCodePoint" id="_ref_11731"><a href="ecmascript-language-source-code.html#sec-utf16decodesurrogatepair">UTF16SurrogatePairToCodePoint</a></emu-xref> must be used in producing a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11732"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is a single pattern character, the code point U+1D11E.</p>
|
||
<p>An implementation may not actually perform such translations to or from UTF-16, but the semantics of this specification requires that the result of pattern matching be as if such translations were performed.</p>
|
||
</div></emu-note>
|
||
|
||
<emu-clause id="sec-pattern-notation" oldids="sec-notation"><span id="sec-notation"></span>
|
||
<h1><span class="secnum">22.2.2.1</span> Notation</h1>
|
||
<p>The descriptions below use the following internal data structures:</p>
|
||
<ul>
|
||
<li>
|
||
A <dfn tabindex="-1">CharSetElement</dfn> is one of the two following entities:
|
||
<ul>
|
||
<li>
|
||
If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>false</emu-val>, then a CharSetElement is a character in the sense of the Pattern Semantics above.
|
||
</li>
|
||
<li>
|
||
If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>true</emu-val>, then a CharSetElement is a sequence whose elements are characters in the sense of the Pattern Semantics above. This includes the empty sequence, sequences of one character, and sequences of more than one character. For convenience, when working with CharSetElements of this kind, an individual character is treated interchangeably with a sequence of one character.
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
A <dfn id="pattern-charset" variants="CharSets" tabindex="-1">CharSet</dfn> is a mathematical set of CharSetElements.
|
||
</li>
|
||
<li>
|
||
A <dfn id="pattern-capturerange" variants="CaptureRanges" tabindex="-1">CaptureRange</dfn> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11733"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[StartIndex]]</var>, <var class="field">[[EndIndex]]</var> } that represents the range of characters included in a capture, where <var class="field">[[StartIndex]]</var> is an <emu-xref href="#integer" id="_ref_11734"><a href="notational-conventions.html#integer">integer</a></emu-xref> representing the start index (inclusive) of the range within <var>Input</var>, and <var class="field">[[EndIndex]]</var> is an <emu-xref href="#integer" id="_ref_11735"><a href="notational-conventions.html#integer">integer</a></emu-xref> representing the end index (exclusive) of the range within <var>Input</var>. For any <emu-xref href="#pattern-capturerange" id="_ref_11736"><a href="text-processing.html#pattern-capturerange">CaptureRange</a></emu-xref>, these indices must satisfy the invariant that <var class="field">[[StartIndex]]</var> ≤ <var class="field">[[EndIndex]]</var>.
|
||
</li>
|
||
<li>
|
||
A <dfn id="pattern-matchstate" variants="MatchStates" oldids="pattern-matchresult" tabindex="-1"><span id="pattern-matchresult"></span>MatchState</dfn> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11737"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Input]]</var>, <var class="field">[[EndIndex]]</var>, <var class="field">[[Captures]]</var> } where <var class="field">[[Input]]</var> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11738"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of characters representing the String being matched, <var class="field">[[EndIndex]]</var> is an <emu-xref href="#integer" id="_ref_11739"><a href="notational-conventions.html#integer">integer</a></emu-xref>, and <var class="field">[[Captures]]</var> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11740"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of values, one for each <emu-xref href="#sec-countleftcapturingparenswithin" id="_ref_11741"><a href="text-processing.html#sec-countleftcapturingparenswithin">left-capturing parenthesis</a></emu-xref> in the pattern. <emu-xref href="#pattern-matchstate" id="_ref_11742"><a href="text-processing.html#pattern-matchstate">MatchStates</a></emu-xref> are used to represent partial match states in the regular expression matching algorithms. The <var class="field">[[EndIndex]]</var> is one plus the index of the last input character matched so far by the pattern, while <var class="field">[[Captures]]</var> holds the results of capturing parentheses. The <var>n</var><sup>th</sup> element of <var class="field">[[Captures]]</var> is either a <emu-xref href="#pattern-capturerange" id="_ref_11743"><a href="text-processing.html#pattern-capturerange">CaptureRange</a></emu-xref> representing the range of characters captured by the <var>n</var><sup>th</sup> set of capturing parentheses, or <emu-val>undefined</emu-val> if the <var>n</var><sup>th</sup> set of capturing parentheses hasn't been reached yet. Due to backtracking, many <emu-xref href="#pattern-matchstate" id="_ref_11744"><a href="text-processing.html#pattern-matchstate">MatchStates</a></emu-xref> may be in use at any time during the matching process.
|
||
</li>
|
||
<li>
|
||
A <dfn id="pattern-matchercontinuation" variants="MatcherContinuations" tabindex="-1">MatcherContinuation</dfn> is an <emu-xref href="#sec-abstract-closure" id="_ref_11745"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> that takes one <emu-xref href="#pattern-matchstate" id="_ref_11746"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> argument and returns either a <emu-xref href="#pattern-matchstate" id="_ref_11747"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> or <emu-const>failure</emu-const>. The <emu-xref href="#pattern-matchercontinuation" id="_ref_11748"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> attempts to match the remaining portion (specified by the closure's captured values) of the pattern against <var>Input</var>, starting at the intermediate state given by its <emu-xref href="#pattern-matchstate" id="_ref_11749"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> argument. If the match succeeds, the <emu-xref href="#pattern-matchercontinuation" id="_ref_11750"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> returns the final <emu-xref href="#pattern-matchstate" id="_ref_11751"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> that it reached; if the match fails, the <emu-xref href="#pattern-matchercontinuation" id="_ref_11752"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> returns <emu-const>failure</emu-const>.
|
||
</li>
|
||
<li>
|
||
A <dfn id="pattern-matcher" variants="Matchers" tabindex="-1">Matcher</dfn> is an <emu-xref href="#sec-abstract-closure" id="_ref_11753"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> that takes two arguments—a <emu-xref href="#pattern-matchstate" id="_ref_11754"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> and a <emu-xref href="#pattern-matchercontinuation" id="_ref_11755"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>—and returns either a <emu-xref href="#pattern-matchstate" id="_ref_11756"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> or <emu-const>failure</emu-const>. A <emu-xref href="#pattern-matcher" id="_ref_11757"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> attempts to match a middle subpattern (specified by the closure's captured values) of the pattern against the <emu-xref href="#pattern-matchstate" id="_ref_11758"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>'s <var class="field">[[Input]]</var>, starting at the intermediate state given by its <emu-xref href="#pattern-matchstate" id="_ref_11759"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> argument. The <emu-xref href="#pattern-matchercontinuation" id="_ref_11760"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> argument should be a closure that matches the rest of the pattern. After matching the subpattern of a pattern to obtain a new <emu-xref href="#pattern-matchstate" id="_ref_11761"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>, the <emu-xref href="#pattern-matcher" id="_ref_11762"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> then calls <emu-xref href="#pattern-matchercontinuation" id="_ref_11763"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> on that new <emu-xref href="#pattern-matchstate" id="_ref_11764"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> to test if the rest of the pattern can match as well. If it can, the <emu-xref href="#pattern-matcher" id="_ref_11765"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> returns the <emu-xref href="#pattern-matchstate" id="_ref_11766"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> returned by <emu-xref href="#pattern-matchercontinuation" id="_ref_11767"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>; if not, the <emu-xref href="#pattern-matcher" id="_ref_11768"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> may try different choices at its choice points, repeatedly calling <emu-xref href="#pattern-matchercontinuation" id="_ref_11769"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> until it either succeeds or all possibilities have been exhausted.
|
||
</li>
|
||
</ul>
|
||
|
||
<emu-clause id="sec-regexp-records">
|
||
<h1><span class="secnum">22.2.2.1.1</span> RegExp Records</h1>
|
||
<p>A <dfn variants="RegExp Records" tabindex="-1">RegExp Record</dfn> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11770"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> value used to store information about a RegExp that is needed during compilation and possibly during matching.</p>
|
||
<p>It has the following fields:</p>
|
||
<emu-table id="table-regexp-record-fields" caption="RegExp Record Fields"><figure><figcaption>Table 63: <emu-xref href="#sec-regexp-records" id="_ref_11771"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref> Fields</figcaption>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Field Name</th>
|
||
<th>Value</th>
|
||
<th>Meaning</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><var class="field">[[IgnoreCase]]</var></td>
|
||
<td>a Boolean</td>
|
||
<td>indicates whether <emu-val>"i"</emu-val> appears in the RegExp's flags</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[Multiline]]</var></td>
|
||
<td>a Boolean</td>
|
||
<td>indicates whether <emu-val>"m"</emu-val> appears in the RegExp's flags</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[DotAll]]</var></td>
|
||
<td>a Boolean</td>
|
||
<td>indicates whether <emu-val>"s"</emu-val> appears in the RegExp's flags</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[Unicode]]</var></td>
|
||
<td>a Boolean</td>
|
||
<td>indicates whether <emu-val>"u"</emu-val> appears in the RegExp's flags</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[UnicodeSets]]</var></td>
|
||
<td>a Boolean</td>
|
||
<td>indicates whether <emu-val>"v"</emu-val> appears in the RegExp's flags</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[CapturingGroupsCount]]</var></td>
|
||
<td>a non-negative <emu-xref href="#integer" id="_ref_11772"><a href="notational-conventions.html#integer">integer</a></emu-xref></td>
|
||
<td>the number of <emu-xref href="#sec-countleftcapturingparenswithin" id="_ref_11773"><a href="text-processing.html#sec-countleftcapturingparenswithin">left-capturing parentheses</a></emu-xref> in the RegExp's pattern</td>
|
||
</tr>
|
||
</tbody></table>
|
||
</figure></emu-table>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compilepattern" type="sdo" oldids="sec-pattern" aoid="CompilePattern"><span id="sec-pattern"></span>
|
||
<h1><span class="secnum">22.2.2.2</span> Runtime Semantics: CompilePattern</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11774"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompilePattern takes argument <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_11775"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and returns an <emu-xref href="#sec-abstract-closure" id="_ref_11776"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> that takes a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11777"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of characters and a non-negative <emu-xref href="#integer" id="_ref_11778"><a href="notational-conventions.html#integer">integer</a></emu-xref> and returns either a <emu-xref href="#pattern-matchstate" id="_ref_11779"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> or <emu-const>failure</emu-const>. It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="Pattern" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="eaw70mcy" id="prod-mHyeO4wo"><emu-nt id="_ref_24291"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11780"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24292"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>rer</var> and <emu-const>forward</emu-const>.</li><li>Return a new <emu-xref href="#sec-abstract-closure" id="_ref_11781"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with parameters (<var>Input</var>, <var>index</var>) that captures <var>rer</var> and <var>m</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11782"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>Input</var> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11783"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of characters.</li><li><emu-xref href="#assert" id="_ref_11784"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: 0 ≤ <var>index</var> ≤ the number of elements in <var>Input</var>.</li><li>Let <var>c</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11785"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures nothing and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11786"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11787"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Return <var>y</var>.</li></ol></li><li>Let <var>cap</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11788"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <var>rer</var>.<var class="field">[[CapturingGroupsCount]]</var> <emu-val>undefined</emu-val> values, indexed 1 through <var>rer</var>.<var class="field">[[CapturingGroupsCount]]</var>.</li><li>Let <var>x</var> be the <emu-xref href="#pattern-matchstate" id="_ref_11789"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> { <var class="field">[[Input]]</var>: <var>Input</var>, <var class="field">[[EndIndex]]</var>: <var>index</var>, <var class="field">[[Captures]]</var>: <var>cap</var> }.</li><li>Return <var>m</var>(<var>x</var>, <var>c</var>).</li></ol></li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>A Pattern compiles to an <emu-xref href="#sec-abstract-closure" id="_ref_11790"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> value. <emu-xref aoid="RegExpBuiltinExec" id="_ref_11791"><a href="text-processing.html#sec-regexpbuiltinexec">RegExpBuiltinExec</a></emu-xref> can then apply this procedure to a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11792"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of characters and an offset within that <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11793"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> to determine whether the pattern would match starting at exactly that offset within the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11794"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>, and, if it does match, what the values of the capturing parentheses would be. The algorithms in <emu-xref href="#sec-pattern-semantics" id="_ref_688"><a href="text-processing.html#sec-pattern-semantics">22.2.2</a></emu-xref> are designed so that compiling a pattern may throw a <emu-val>SyntaxError</emu-val> exception; on the other hand, once the pattern is successfully compiled, applying the resulting <emu-xref href="#sec-abstract-closure" id="_ref_11795"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> to find a match in a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11796"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of characters cannot throw an exception (except for any <emu-xref href="#implementation-defined" id="_ref_11797"><a href="overview.html#implementation-defined">implementation-defined</a></emu-xref> exceptions that can occur anywhere such as out-of-memory).</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compilesubpattern" type="sdo" oldids="sec-disjunction,sec-alternative,sec-term" aoid="CompileSubpattern"><span id="sec-term"></span><span id="sec-alternative"></span><span id="sec-disjunction"></span>
|
||
<h1><span class="secnum">22.2.2.3</span> Runtime Semantics: CompileSubpattern</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11798"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompileSubpattern takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_11799"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and <var>direction</var> (<emu-const>forward</emu-const> or <emu-const>backward</emu-const>) and returns a <emu-xref href="#pattern-matcher" id="_ref_11800"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>.</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-compilesubpattern-annexb" id="_ref_689"><a href="additional-ecmascript-features-for-web-browsers.html#sec-compilesubpattern-annexb">B.1.2.5</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
|
||
<!-- Disjunction -->
|
||
<p>It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="Disjunction" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="jt2lba_1" id="prod-y4rdvkKA">
|
||
<emu-nt id="_ref_24293"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>
|
||
<emu-t>|</emu-t>
|
||
<emu-nt id="_ref_24294"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m1</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11801"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24295"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt> with arguments <var>rer</var> and <var>direction</var>.</li><li>Let <var>m2</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11802"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24296"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>rer</var> and <var>direction</var>.</li><li>Return <emu-xref aoid="MatchTwoAlternatives" id="_ref_11803"><a href="text-processing.html#sec-matchtwoalternatives">MatchTwoAlternatives</a></emu-xref>(<var>m1</var>, <var>m2</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>The <code>|</code> regular expression operator separates two alternatives. The pattern first tries to match the left <emu-nt id="_ref_24297"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt> (followed by the sequel of the regular expression); if it fails, it tries to match the right <emu-nt id="_ref_24298"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> (followed by the sequel of the regular expression). If the left <emu-nt id="_ref_24299"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>, the right <emu-nt id="_ref_24300"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>, and the sequel all have choice points, all choices in the sequel are tried before moving on to the next choice in the left <emu-nt id="_ref_24301"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>. If choices in the left <emu-nt id="_ref_24302"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt> are exhausted, the right <emu-nt id="_ref_24303"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> is tried instead of the left <emu-nt id="_ref_24304"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>. Any capturing parentheses inside a portion of the pattern skipped by <code>|</code> produce <emu-val>undefined</emu-val> values instead of Strings. Thus, for example,</p>
|
||
<pre><code class="javascript hljs">/a|ab/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"abc"</span>)</code></pre>
|
||
<p>returns the result <emu-val>"a"</emu-val> and not <emu-val>"ab"</emu-val>. Moreover,</p>
|
||
<pre><code class="javascript hljs">/((a)|(ab))((c)|(bc))/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"abc"</span>)</code></pre>
|
||
<p>returns the array</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"abc"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-literal">undefined</span>, <span class="hljs-string">"bc"</span>, <span class="hljs-literal">undefined</span>, <span class="hljs-string">"bc"</span>]</code></pre>
|
||
<p>and not</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"abc"</span>, <span class="hljs-string">"ab"</span>, <span class="hljs-literal">undefined</span>, <span class="hljs-string">"ab"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-literal">undefined</span>]</code></pre>
|
||
<p>The order in which the two alternatives are tried is independent of the value of <var>direction</var>.</p>
|
||
</div></emu-note>
|
||
|
||
<!-- Alternative -->
|
||
<emu-grammar><emu-production name="Alternative" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb" id="prod-DxcBBSWc"><emu-gann>[empty]</emu-gann></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="EmptyMatcher" id="_ref_11804"><a href="text-processing.html#sec-emptymatcher">EmptyMatcher</a></emu-xref>().</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Alternative" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="vctbprkq" id="prod-fiPiStf_">
|
||
<emu-nt id="_ref_24305"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>
|
||
<emu-nt id="_ref_24306"><a href="text-processing.html#prod-Term">Term</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m1</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11805"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24307"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt> with arguments <var>rer</var> and <var>direction</var>.</li><li>Let <var>m2</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11806"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24308"><a href="text-processing.html#prod-Term">Term</a></emu-nt> with arguments <var>rer</var> and <var>direction</var>.</li><li>Return <emu-xref aoid="MatchSequence" id="_ref_11807"><a href="text-processing.html#sec-matchsequence">MatchSequence</a></emu-xref>(<var>m1</var>, <var>m2</var>, <var>direction</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>Consecutive <emu-nt id="_ref_24309"><a href="text-processing.html#prod-Term">Term</a></emu-nt>s try to simultaneously match consecutive portions of <var>Input</var>. When <var>direction</var> is <emu-const>forward</emu-const>, if the left <emu-nt id="_ref_24310"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>, the right <emu-nt id="_ref_24311"><a href="text-processing.html#prod-Term">Term</a></emu-nt>, and the sequel of the regular expression all have choice points, all choices in the sequel are tried before moving on to the next choice in the right <emu-nt id="_ref_24312"><a href="text-processing.html#prod-Term">Term</a></emu-nt>, and all choices in the right <emu-nt id="_ref_24313"><a href="text-processing.html#prod-Term">Term</a></emu-nt> are tried before moving on to the next choice in the left <emu-nt id="_ref_24314"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt>. When <var>direction</var> is <emu-const>backward</emu-const>, the evaluation order of <emu-nt id="_ref_24315"><a href="text-processing.html#prod-Alternative">Alternative</a></emu-nt> and <emu-nt id="_ref_24316"><a href="text-processing.html#prod-Term">Term</a></emu-nt> are reversed.</p>
|
||
</div></emu-note>
|
||
|
||
<!-- Term -->
|
||
<emu-grammar><emu-production name="Term" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Term">Term</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="4d3cub6p" id="prod-tmSpn0_R"><emu-nt id="_ref_24317"><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="CompileAssertion" id="_ref_11808"><a href="text-processing.html#sec-compileassertion">CompileAssertion</a></emu-xref> of <emu-nt id="_ref_24318"><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> with argument <var>rer</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 4</span><div class="note-contents">
|
||
<p>The resulting <emu-xref href="#pattern-matcher" id="_ref_11809"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> is independent of <var>direction</var>.</p>
|
||
</div></emu-note>
|
||
<emu-grammar><emu-production name="Term" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Term">Term</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="qd3tqxbs" id="prod-fNHoehtY"><emu-nt id="_ref_24319"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="CompileAtom" id="_ref_11810"><a href="text-processing.html#sec-compileatom">CompileAtom</a></emu-xref> of <emu-nt id="_ref_24320"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> with arguments <var>rer</var> and <var>direction</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Term" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Term">Term</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="rk7qpcwj" id="prod-LaYcA3Qv">
|
||
<emu-nt id="_ref_24321"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt>
|
||
<emu-nt id="_ref_24322"><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m</var> be <emu-xref aoid="CompileAtom" id="_ref_11811"><a href="text-processing.html#sec-compileatom">CompileAtom</a></emu-xref> of <emu-nt id="_ref_24323"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> with arguments <var>rer</var> and <var>direction</var>.</li><li>Let <var>q</var> be <emu-xref aoid="CompileQuantifier" id="_ref_11812"><a href="text-processing.html#sec-compilequantifier">CompileQuantifier</a></emu-xref> of <emu-nt id="_ref_24324"><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt>.</li><li><emu-xref href="#assert" id="_ref_11813"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>q</var>.<var class="field">[[Min]]</var> ≤ <var>q</var>.<var class="field">[[Max]]</var>.</li><li>Let <var>parenIndex</var> be <emu-xref aoid="CountLeftCapturingParensBefore" id="_ref_11814"><a href="text-processing.html#sec-countleftcapturingparensbefore">CountLeftCapturingParensBefore</a></emu-xref>(<emu-nt id="_ref_24325"><a href="text-processing.html#prod-Term">Term</a></emu-nt>).</li><li>Let <var>parenCount</var> be <emu-xref aoid="CountLeftCapturingParensWithin" id="_ref_11815"><a href="text-processing.html#sec-countleftcapturingparenswithin">CountLeftCapturingParensWithin</a></emu-xref>(<emu-nt id="_ref_24326"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt>).</li><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11816"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>m</var>, <var>q</var>, <var>parenIndex</var>, and <var>parenCount</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11817"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11818"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11819"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11820"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Return <emu-xref aoid="RepeatMatcher" id="_ref_11821"><a href="text-processing.html#sec-runtime-semantics-repeatmatcher-abstract-operation">RepeatMatcher</a></emu-xref>(<var>m</var>, <var>q</var>.<var class="field">[[Min]]</var>, <var>q</var>.<var class="field">[[Max]]</var>, <var>q</var>.<var class="field">[[Greedy]]</var>, <var>x</var>, <var>c</var>, <var>parenIndex</var>, <var>parenCount</var>).</li></ol></li></ol></emu-alg>
|
||
|
||
<emu-clause id="sec-runtime-semantics-repeatmatcher-abstract-operation" type="abstract operation" aoid="RepeatMatcher">
|
||
<h1><span class="secnum">22.2.2.3.1</span> RepeatMatcher ( <var>m</var>, <var>min</var>, <var>max</var>, <var>greedy</var>, <var>x</var>, <var>c</var>, <var>parenIndex</var>, <var>parenCount</var> )</h1>
|
||
<p>The abstract operation RepeatMatcher takes arguments <var>m</var> (a <emu-xref href="#pattern-matcher" id="_ref_11822"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>), <var>min</var> (a non-negative <emu-xref href="#integer" id="_ref_11823"><a href="notational-conventions.html#integer">integer</a></emu-xref>), <var>max</var> (a non-negative <emu-xref href="#integer" id="_ref_11824"><a href="notational-conventions.html#integer">integer</a></emu-xref> or +∞), <var>greedy</var> (a Boolean), <var>x</var> (a <emu-xref href="#pattern-matchstate" id="_ref_11825"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>), <var>c</var> (a <emu-xref href="#pattern-matchercontinuation" id="_ref_11826"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>), <var>parenIndex</var> (a non-negative <emu-xref href="#integer" id="_ref_11827"><a href="notational-conventions.html#integer">integer</a></emu-xref>), and <var>parenCount</var> (a non-negative <emu-xref href="#integer" id="_ref_11828"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and returns either a <emu-xref href="#pattern-matchstate" id="_ref_11829"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> or <emu-const>failure</emu-const>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>max</var> = 0, return <var>c</var>(<var>x</var>).</li><li>Let <var>d</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11830"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures <var>m</var>, <var>min</var>, <var>max</var>, <var>greedy</var>, <var>x</var>, <var>c</var>, <var>parenIndex</var>, and <var>parenCount</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11831"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11832"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li id="step-repeatmatcher-done">If <var>min</var> = 0 and <var>y</var>.<var class="field">[[EndIndex]]</var> = <var>x</var>.<var class="field">[[EndIndex]]</var>, return <emu-const>failure</emu-const>.</li><li>If <var>min</var> = 0, let <var>min2</var> be 0; else let <var>min2</var> be <var>min</var> - 1.</li><li>If <var>max</var> = +∞, let <var>max2</var> be +∞; else let <var>max2</var> be <var>max</var> - 1.</li><li>Return <emu-xref aoid="RepeatMatcher" id="_ref_11833"><a href="text-processing.html#sec-runtime-semantics-repeatmatcher-abstract-operation">RepeatMatcher</a></emu-xref>(<var>m</var>, <var>min2</var>, <var>max2</var>, <var>greedy</var>, <var>y</var>, <var>c</var>, <var>parenIndex</var>, <var>parenCount</var>).</li></ol></li><li>Let <var>cap</var> be a copy of <var>x</var>.<var class="field">[[Captures]]</var>.</li><li id="step-repeatmatcher-clear-captures">For each <emu-xref href="#integer" id="_ref_11834"><a href="notational-conventions.html#integer">integer</a></emu-xref> <var>k</var> in the <emu-xref href="#inclusive-interval" id="_ref_11835"><a href="notational-conventions.html#inclusive-interval">inclusive interval</a></emu-xref> from <var>parenIndex</var> + 1 to <var>parenIndex</var> + <var>parenCount</var>, set <var>cap</var>[<var>k</var>] to <emu-val>undefined</emu-val>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>e</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>xr</var> be the <emu-xref href="#pattern-matchstate" id="_ref_11836"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> { <var class="field">[[Input]]</var>: <var>Input</var>, <var class="field">[[EndIndex]]</var>: <var>e</var>, <var class="field">[[Captures]]</var>: <var>cap</var> }.</li><li>If <var>min</var> ≠ 0, return <var>m</var>(<var>xr</var>, <var>d</var>).</li><li>If <var>greedy</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>z</var> be <var>c</var>(<var>x</var>).</li><li>If <var>z</var> is not <emu-const>failure</emu-const>, return <var>z</var>.</li><li>Return <var>m</var>(<var>xr</var>, <var>d</var>).</li></ol></li><li>Let <var>z</var> be <var>m</var>(<var>xr</var>, <var>d</var>).</li><li>If <var>z</var> is not <emu-const>failure</emu-const>, return <var>z</var>.</li><li>Return <var>c</var>(<var>x</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>An <emu-nt id="_ref_24327"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> followed by a <emu-nt id="_ref_24328"><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt> is repeated the number of times specified by the <emu-nt id="_ref_24329"><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt>. A <emu-nt id="_ref_24330"><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt> can be non-greedy, in which case the <emu-nt id="_ref_24331"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> pattern is repeated as few times as possible while still matching the sequel, or it can be greedy, in which case the <emu-nt id="_ref_24332"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> pattern is repeated as many times as possible while still matching the sequel. The <emu-nt id="_ref_24333"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> pattern is repeated rather than the input character sequence that it matches, so different repetitions of the <emu-nt id="_ref_24334"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> can match different input substrings.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>If the <emu-nt id="_ref_24335"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> and the sequel of the regular expression all have choice points, the <emu-nt id="_ref_24336"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> is first matched as many (or as few, if non-greedy) times as possible. All choices in the sequel are tried before moving on to the next choice in the last repetition of <emu-nt id="_ref_24337"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt>. All choices in the last (n<sup>th</sup>) repetition of <emu-nt id="_ref_24338"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> are tried before moving on to the next choice in the next-to-last (n - 1)<sup>st</sup> repetition of <emu-nt id="_ref_24339"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt>; at which point it may turn out that more or fewer repetitions of <emu-nt id="_ref_24340"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> are now possible; these are exhausted (again, starting with either as few or as many as possible) before moving on to the next choice in the (n - 1)<sup>st</sup> repetition of <emu-nt id="_ref_24341"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> and so on.</p>
|
||
<p>Compare</p>
|
||
<pre><code class="javascript hljs">/a[a-z]{<span class="hljs-number">2</span>,<span class="hljs-number">4</span>}/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"abcdefghi"</span>)</code></pre>
|
||
<p>which returns <emu-val>"abcde"</emu-val> with</p>
|
||
<pre><code class="javascript hljs">/a[a-z]{<span class="hljs-number">2</span>,<span class="hljs-number">4</span>}?/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"abcdefghi"</span>)</code></pre>
|
||
<p>which returns <emu-val>"abc"</emu-val>.</p>
|
||
<p>Consider also</p>
|
||
<pre><code class="javascript hljs">/(aa|aabaac|ba|b|c)*/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"aabaac"</span>)</code></pre>
|
||
<p>which, by the choice point ordering above, returns the array</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"aaba"</span>, <span class="hljs-string">"ba"</span>]</code></pre>
|
||
<p>and not any of:</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"aabaac"</span>, <span class="hljs-string">"aabaac"</span>]
|
||
[<span class="hljs-string">"aabaac"</span>, <span class="hljs-string">"c"</span>]</code></pre>
|
||
<p>The above ordering of choice points can be used to write a regular expression that calculates the greatest common divisor of two numbers (represented in unary notation). The following example calculates the gcd of 10 and 15:</p>
|
||
<pre><code class="javascript hljs"><span class="hljs-string">"aaaaaaaaaa,aaaaaaaaaaaaaaa"</span>.<span class="hljs-title function_">replace</span>(<span class="hljs-regexp">/^(a+)\1*,\1+$/</span>, <span class="hljs-string">"$1"</span>)</code></pre>
|
||
<p>which returns the gcd in unary notation <emu-val>"aaaaa"</emu-val>.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>Step <emu-xref href="#step-repeatmatcher-clear-captures" id="_ref_690"><a href="text-processing.html#step-repeatmatcher-clear-captures">4</a></emu-xref> of the RepeatMatcher clears <emu-nt id="_ref_24342"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt>'s captures each time <emu-nt id="_ref_24343"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> is repeated. We can see its behaviour in the regular expression</p>
|
||
<pre><code class="javascript hljs">/(z)((a+)?(b+)?(c))*/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"zaacbbbcac"</span>)</code></pre>
|
||
<p>which returns the array</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"zaacbbbcac"</span>, <span class="hljs-string">"z"</span>, <span class="hljs-string">"ac"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-literal">undefined</span>, <span class="hljs-string">"c"</span>]</code></pre>
|
||
<p>and not</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"zaacbbbcac"</span>, <span class="hljs-string">"z"</span>, <span class="hljs-string">"ac"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-string">"bbb"</span>, <span class="hljs-string">"c"</span>]</code></pre>
|
||
<p>because each iteration of the outermost <code>*</code> clears all captured Strings contained in the quantified <emu-nt id="_ref_24344"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt>, which in this case includes capture Strings numbered 2, 3, 4, and 5.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 4</span><div class="note-contents">
|
||
<p>Step <emu-xref href="#step-repeatmatcher-done" id="_ref_691"><a href="text-processing.html#step-repeatmatcher-done">2.b</a></emu-xref> of the RepeatMatcher states that once the minimum number of repetitions has been satisfied, any more expansions of <emu-nt id="_ref_24345"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> that match the empty character sequence are not considered for further repetitions. This prevents the regular expression engine from falling into an infinite loop on patterns such as:</p>
|
||
<pre><code class="javascript hljs">/(a*)*/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"b"</span>)</code></pre>
|
||
<p>or the slightly more complicated:</p>
|
||
<pre><code class="javascript hljs">/(a*)b\<span class="hljs-number">1</span>+/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"baaaac"</span>)</code></pre>
|
||
<p>which returns the array</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"b"</span>, <span class="hljs-string">""</span>]</code></pre>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-emptymatcher" type="abstract operation" aoid="EmptyMatcher">
|
||
<h1><span class="secnum">22.2.2.3.2</span> EmptyMatcher ( )</h1>
|
||
<p>The abstract operation EmptyMatcher takes no arguments and returns a <emu-xref href="#pattern-matcher" id="_ref_11837"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11838"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures nothing and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11839"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11840"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11841"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11842"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Return <var>c</var>(<var>x</var>).</li></ol></li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-matchtwoalternatives" type="abstract operation" aoid="MatchTwoAlternatives">
|
||
<h1><span class="secnum">22.2.2.3.3</span> MatchTwoAlternatives ( <var>m1</var>, <var>m2</var> )</h1>
|
||
<p>The abstract operation MatchTwoAlternatives takes arguments <var>m1</var> (a <emu-xref href="#pattern-matcher" id="_ref_11843"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>) and <var>m2</var> (a <emu-xref href="#pattern-matcher" id="_ref_11844"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>) and returns a <emu-xref href="#pattern-matcher" id="_ref_11845"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11846"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>m1</var> and <var>m2</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11847"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11848"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11849"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11850"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>r</var> be <var>m1</var>(<var>x</var>, <var>c</var>).</li><li>If <var>r</var> is not <emu-const>failure</emu-const>, return <var>r</var>.</li><li>Return <var>m2</var>(<var>x</var>, <var>c</var>).</li></ol></li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-matchsequence" type="abstract operation" aoid="MatchSequence">
|
||
<h1><span class="secnum">22.2.2.3.4</span> MatchSequence ( <var>m1</var>, <var>m2</var>, <var>direction</var> )</h1>
|
||
<p>The abstract operation MatchSequence takes arguments <var>m1</var> (a <emu-xref href="#pattern-matcher" id="_ref_11851"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>), <var>m2</var> (a <emu-xref href="#pattern-matcher" id="_ref_11852"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>), and <var>direction</var> (<emu-const>forward</emu-const> or <emu-const>backward</emu-const>) and returns a <emu-xref href="#pattern-matcher" id="_ref_11853"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>direction</var> is <emu-const>forward</emu-const>, then<ol><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11854"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>m1</var> and <var>m2</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11855"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11856"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11857"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11858"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>d</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11859"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures <var>c</var> and <var>m2</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11860"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11861"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Return <var>m2</var>(<var>y</var>, <var>c</var>).</li></ol></li><li>Return <var>m1</var>(<var>x</var>, <var>d</var>).</li></ol></li></ol></li><li><emu-xref href="#assert" id="_ref_11862"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>direction</var> is <emu-const>backward</emu-const>.</li><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11863"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>m1</var> and <var>m2</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11864"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11865"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11866"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11867"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>d</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11868"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures <var>c</var> and <var>m1</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11869"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11870"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Return <var>m1</var>(<var>y</var>, <var>c</var>).</li></ol></li><li>Return <var>m2</var>(<var>x</var>, <var>d</var>).</li></ol></li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compileassertion" type="sdo" oldids="sec-assertion" aoid="CompileAssertion"><span id="sec-assertion"></span>
|
||
<h1><span class="secnum">22.2.2.4</span> Runtime Semantics: CompileAssertion</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11871"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompileAssertion takes argument <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_11872"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and returns a <emu-xref href="#pattern-matcher" id="_ref_11873"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>.</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-compileassertion-annexb" id="_ref_692"><a href="additional-ecmascript-features-for-web-browsers.html#sec-compileassertion-annexb">B.1.2.6</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
<p>It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="Assertion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="5yeieuod" id="prod-sVm_wok4"><emu-t>^</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11874"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>rer</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11875"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11876"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11877"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11878"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>e</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>If <var>e</var> = 0, or if <var>rer</var>.<var class="field">[[Multiline]]</var> is <emu-val>true</emu-val> and the character <var>Input</var>[<var>e</var> - 1] is matched by <emu-nt id="_ref_24346"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt>, then<ol><li>Return <var>c</var>(<var>x</var>).</li></ol></li><li>Return <emu-const>failure</emu-const>.</li></ol></li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>Even when the <code>y</code> flag is used with a pattern, <code>^</code> always matches only at the beginning of <var>Input</var>, or (if <var>rer</var>.<var class="field">[[Multiline]]</var> is <emu-val>true</emu-val>) at the beginning of a line.</p>
|
||
</div></emu-note>
|
||
<emu-grammar><emu-production name="Assertion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="emlmkqfm" id="prod-STP3aqEM"><emu-t>$</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11879"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>rer</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11880"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11881"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11882"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11883"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>e</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>InputLength</var> be the number of elements in <var>Input</var>.</li><li>If <var>e</var> = <var>InputLength</var>, or if <var>rer</var>.<var class="field">[[Multiline]]</var> is <emu-val>true</emu-val> and the character <var>Input</var>[<var>e</var>] is matched by <emu-nt id="_ref_24347"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt>, then<ol><li>Return <var>c</var>(<var>x</var>).</li></ol></li><li>Return <emu-const>failure</emu-const>.</li></ol></li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Assertion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="axxsqknu" id="prod-IZJSBUZJ"><emu-t>\b</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11884"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>rer</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11885"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11886"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11887"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11888"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>e</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>a</var> be <emu-xref aoid="IsWordChar" id="_ref_11889"><a href="text-processing.html#sec-runtime-semantics-iswordchar-abstract-operation">IsWordChar</a></emu-xref>(<var>rer</var>, <var>Input</var>, <var>e</var> - 1).</li><li>Let <var>b</var> be <emu-xref aoid="IsWordChar" id="_ref_11890"><a href="text-processing.html#sec-runtime-semantics-iswordchar-abstract-operation">IsWordChar</a></emu-xref>(<var>rer</var>, <var>Input</var>, <var>e</var>).</li><li>If <var>a</var> is <emu-val>true</emu-val> and <var>b</var> is <emu-val>false</emu-val>, or if <var>a</var> is <emu-val>false</emu-val> and <var>b</var> is <emu-val>true</emu-val>, return <var>c</var>(<var>x</var>).</li><li>Return <emu-const>failure</emu-const>.</li></ol></li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Assertion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lnx_opbv" id="prod-92fnNlhg"><emu-t>\B</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11891"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>rer</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11892"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11893"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11894"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11895"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>e</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>a</var> be <emu-xref aoid="IsWordChar" id="_ref_11896"><a href="text-processing.html#sec-runtime-semantics-iswordchar-abstract-operation">IsWordChar</a></emu-xref>(<var>rer</var>, <var>Input</var>, <var>e</var> - 1).</li><li>Let <var>b</var> be <emu-xref aoid="IsWordChar" id="_ref_11897"><a href="text-processing.html#sec-runtime-semantics-iswordchar-abstract-operation">IsWordChar</a></emu-xref>(<var>rer</var>, <var>Input</var>, <var>e</var>).</li><li>If <var>a</var> is <emu-val>true</emu-val> and <var>b</var> is <emu-val>true</emu-val>, or if <var>a</var> is <emu-val>false</emu-val> and <var>b</var> is <emu-val>false</emu-val>, return <var>c</var>(<var>x</var>).</li><li>Return <emu-const>failure</emu-const>.</li></ol></li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Assertion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="fbtayxzo" id="prod-eBn333dp">
|
||
<emu-t>(?=</emu-t>
|
||
<emu-nt id="_ref_24348"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11898"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24349"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>rer</var> and <emu-const>forward</emu-const>.</li><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11899"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>m</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11900"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11901"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11902"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11903"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>d</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11904"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures nothing and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11905"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11906"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Return <var>y</var>.</li></ol></li><li>Let <var>r</var> be <var>m</var>(<var>x</var>, <var>d</var>).</li><li>If <var>r</var> is <emu-const>failure</emu-const>, return <emu-const>failure</emu-const>.</li><li><emu-xref href="#assert" id="_ref_11907"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>r</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11908"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Let <var>cap</var> be <var>r</var>.<var class="field">[[Captures]]</var>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>xe</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>z</var> be the <emu-xref href="#pattern-matchstate" id="_ref_11909"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> { <var class="field">[[Input]]</var>: <var>Input</var>, <var class="field">[[EndIndex]]</var>: <var>xe</var>, <var class="field">[[Captures]]</var>: <var>cap</var> }.</li><li>Return <var>c</var>(<var>z</var>).</li></ol></li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>The form <code>(?=</code> <emu-nt id="_ref_24350"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> <code>)</code> specifies a zero-width positive lookahead. In order for it to succeed, the pattern inside <emu-nt id="_ref_24351"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> must match at the current position, but the current position is not advanced before matching the sequel. If <emu-nt id="_ref_24352"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> can match at the current position in several ways, only the first one is tried. Unlike other regular expression operators, there is no backtracking into a <code>(?=</code> form (this unusual behaviour is inherited from Perl). This only matters when the <emu-nt id="_ref_24353"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> contains capturing parentheses and the sequel of the pattern contains backreferences to those captures.</p>
|
||
<p>For example,</p>
|
||
<pre><code class="javascript hljs">/(?=(a+))/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"baaabac"</span>)</code></pre>
|
||
<p>matches the empty String immediately after the first <code>b</code> and therefore returns the array:</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">""</span>, <span class="hljs-string">"aaa"</span>]</code></pre>
|
||
<p>To illustrate the lack of backtracking into the lookahead, consider:</p>
|
||
<pre><code class="javascript hljs">/(?=(a+))a*b\<span class="hljs-number">1</span>/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"baaabac"</span>)</code></pre>
|
||
<p>This expression returns</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"aba"</span>, <span class="hljs-string">"a"</span>]</code></pre>
|
||
<p>and not:</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"aaaba"</span>, <span class="hljs-string">"a"</span>]</code></pre>
|
||
</div></emu-note>
|
||
<emu-grammar><emu-production name="Assertion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="uwxc-jvg" id="prod-R66yItqF">
|
||
<emu-t>(?!</emu-t>
|
||
<emu-nt id="_ref_24354"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11910"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24355"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>rer</var> and <emu-const>forward</emu-const>.</li><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11911"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>m</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11912"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11913"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11914"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11915"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>d</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11916"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures nothing and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11917"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11918"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Return <var>y</var>.</li></ol></li><li>Let <var>r</var> be <var>m</var>(<var>x</var>, <var>d</var>).</li><li>If <var>r</var> is not <emu-const>failure</emu-const>, return <emu-const>failure</emu-const>.</li><li>Return <var>c</var>(<var>x</var>).</li></ol></li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 4</span><div class="note-contents">
|
||
<p>The form <code>(?!</code> <emu-nt id="_ref_24356"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> <code>)</code> specifies a zero-width negative lookahead. In order for it to succeed, the pattern inside <emu-nt id="_ref_24357"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> must fail to match at the current position. The current position is not advanced before matching the sequel. <emu-nt id="_ref_24358"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> can contain capturing parentheses, but backreferences to them only make sense from within <emu-nt id="_ref_24359"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> itself. Backreferences to these capturing parentheses from elsewhere in the pattern always return <emu-val>undefined</emu-val> because the negative lookahead must fail for the pattern to succeed. For example,</p>
|
||
<pre><code class="javascript hljs">/(.*?)<span class="hljs-title function_">a</span>(?!(a+)b\2c)\<span class="hljs-number">2</span>(.*)/.<span class="hljs-title function_">exec</span>(<span class="hljs-string">"baaabaac"</span>)</code></pre>
|
||
<p>looks for an <code>a</code> not immediately followed by some positive number n of <code>a</code>'s, a <code>b</code>, another n <code>a</code>'s (specified by the first <code>\2</code>) and a <code>c</code>. The second <code>\2</code> is outside the negative lookahead, so it matches against <emu-val>undefined</emu-val> and therefore always succeeds. The whole expression returns the array:</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"baaabaac"</span>, <span class="hljs-string">"ba"</span>, <span class="hljs-literal">undefined</span>, <span class="hljs-string">"abaac"</span>]</code></pre>
|
||
</div></emu-note>
|
||
<emu-grammar><emu-production name="Assertion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="usbmjkdr" id="prod-sZjx8A-T">
|
||
<emu-t>(?<=</emu-t>
|
||
<emu-nt id="_ref_24360"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11919"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24361"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>rer</var> and <emu-const>backward</emu-const>.</li><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11920"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>m</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11921"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11922"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11923"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11924"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>d</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11925"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures nothing and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11926"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11927"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Return <var>y</var>.</li></ol></li><li>Let <var>r</var> be <var>m</var>(<var>x</var>, <var>d</var>).</li><li>If <var>r</var> is <emu-const>failure</emu-const>, return <emu-const>failure</emu-const>.</li><li><emu-xref href="#assert" id="_ref_11928"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>r</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11929"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Let <var>cap</var> be <var>r</var>.<var class="field">[[Captures]]</var>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>xe</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>z</var> be the <emu-xref href="#pattern-matchstate" id="_ref_11930"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> { <var class="field">[[Input]]</var>: <var>Input</var>, <var class="field">[[EndIndex]]</var>: <var>xe</var>, <var class="field">[[Captures]]</var>: <var>cap</var> }.</li><li>Return <var>c</var>(<var>z</var>).</li></ol></li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Assertion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Assertion">Assertion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="6jj9rpbu" id="prod-OBuox7k0">
|
||
<emu-t>(?<!</emu-t>
|
||
<emu-nt id="_ref_24362"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11931"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24363"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>rer</var> and <emu-const>backward</emu-const>.</li><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11932"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>m</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11933"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11934"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11935"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11936"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>d</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11937"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures nothing and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11938"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11939"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Return <var>y</var>.</li></ol></li><li>Let <var>r</var> be <var>m</var>(<var>x</var>, <var>d</var>).</li><li>If <var>r</var> is not <emu-const>failure</emu-const>, return <emu-const>failure</emu-const>.</li><li>Return <var>c</var>(<var>x</var>).</li></ol></li></ol></emu-alg>
|
||
|
||
<emu-clause id="sec-runtime-semantics-iswordchar-abstract-operation" type="abstract operation" aoid="IsWordChar">
|
||
<h1><span class="secnum">22.2.2.4.1</span> IsWordChar ( <var>rer</var>, <var>Input</var>, <var>e</var> )</h1>
|
||
<p>The abstract operation IsWordChar takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_11940"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>), <var>Input</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11941"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of characters), and <var>e</var> (an <emu-xref href="#integer" id="_ref_11942"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and returns a Boolean. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>InputLength</var> be the number of elements in <var>Input</var>.</li><li>If <var>e</var> = -1 or <var>e</var> = <var>InputLength</var>, return <emu-val>false</emu-val>.</li><li>Let <var>c</var> be the character <var>Input</var>[<var>e</var>].</li><li>If <emu-xref aoid="WordCharacters" id="_ref_11943"><a href="text-processing.html#sec-wordcharacters">WordCharacters</a></emu-xref>(<var>rer</var>) contains <var>c</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compilequantifier" type="sdo" oldids="sec-quantifier" aoid="CompileQuantifier"><span id="sec-quantifier"></span>
|
||
<h1><span class="secnum">22.2.2.5</span> Runtime Semantics: CompileQuantifier</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11944"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompileQuantifier takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11945"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> with fields <var class="field">[[Min]]</var> (a non-negative <emu-xref href="#integer" id="_ref_11946"><a href="notational-conventions.html#integer">integer</a></emu-xref>), <var class="field">[[Max]]</var> (a non-negative <emu-xref href="#integer" id="_ref_11947"><a href="notational-conventions.html#integer">integer</a></emu-xref> or +∞), and <var class="field">[[Greedy]]</var> (a Boolean). It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="Quantifier" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="dlini2nj" id="prod-9qV9mwu-"><emu-nt id="_ref_24364"><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>qp</var> be <emu-xref aoid="CompileQuantifierPrefix" id="_ref_11948"><a href="text-processing.html#sec-compilequantifierprefix">CompileQuantifierPrefix</a></emu-xref> of <emu-nt id="_ref_24365"><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt>.</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11949"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Min]]</var>: <var>qp</var>.<var class="field">[[Min]]</var>, <var class="field">[[Max]]</var>: <var>qp</var>.<var class="field">[[Max]]</var>, <var class="field">[[Greedy]]</var>: <emu-val>true</emu-val> }.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Quantifier" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Quantifier">Quantifier</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="cwtuervy" id="prod-qWoBDE8M">
|
||
<emu-nt id="_ref_24366"><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt>
|
||
<emu-t>?</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>qp</var> be <emu-xref aoid="CompileQuantifierPrefix" id="_ref_11950"><a href="text-processing.html#sec-compilequantifierprefix">CompileQuantifierPrefix</a></emu-xref> of <emu-nt id="_ref_24367"><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt>.</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11951"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Min]]</var>: <var>qp</var>.<var class="field">[[Min]]</var>, <var class="field">[[Max]]</var>: <var>qp</var>.<var class="field">[[Max]]</var>, <var class="field">[[Greedy]]</var>: <emu-val>false</emu-val> }.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compilequantifierprefix" type="sdo" aoid="CompileQuantifierPrefix">
|
||
<h1><span class="secnum">22.2.2.6</span> Runtime Semantics: CompileQuantifierPrefix</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11952"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompileQuantifierPrefix takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11953"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> with fields <var class="field">[[Min]]</var> (a non-negative <emu-xref href="#integer" id="_ref_11954"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and <var class="field">[[Max]]</var> (a non-negative <emu-xref href="#integer" id="_ref_11955"><a href="notational-conventions.html#integer">integer</a></emu-xref> or +∞). It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="QuantifierPrefix" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="sb5ztei-" id="prod-s8nl1xnS"><emu-t>*</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11956"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Min]]</var>: 0, <var class="field">[[Max]]</var>: +∞ }.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="QuantifierPrefix" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="4dclbrwl" id="prod-4GxjzerI"><emu-t>+</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11957"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Min]]</var>: 1, <var class="field">[[Max]]</var>: +∞ }.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="QuantifierPrefix" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="iy1xym7h" id="prod-xg-YUvEA"><emu-t>?</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11958"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Min]]</var>: 0, <var class="field">[[Max]]</var>: 1 }.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="QuantifierPrefix" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="akk3tt2f" id="prod-cx_RnfxU">
|
||
<emu-t>{</emu-t>
|
||
<emu-nt id="_ref_24368"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>i</var> be the MV of <emu-nt id="_ref_24369"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt> (see <emu-xref href="#sec-literals-numeric-literals" id="_ref_693"><a href="ecmascript-language-lexical-grammar.html#sec-literals-numeric-literals">12.9.3</a></emu-xref>).</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11959"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Min]]</var>: <var>i</var>, <var class="field">[[Max]]</var>: <var>i</var> }.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="QuantifierPrefix" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="pmpxiyk5" id="prod-zaHyl8D0">
|
||
<emu-t>{</emu-t>
|
||
<emu-nt id="_ref_24370"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>
|
||
<emu-t>,}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>i</var> be the MV of <emu-nt id="_ref_24371"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>.</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11960"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Min]]</var>: <var>i</var>, <var class="field">[[Max]]</var>: +∞ }.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="QuantifierPrefix" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-QuantifierPrefix">QuantifierPrefix</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="9hgpwdk0" id="prod-JGD-kmEs">
|
||
<emu-t>{</emu-t>
|
||
<emu-nt id="_ref_24372"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>
|
||
<emu-t>,</emu-t>
|
||
<emu-nt id="_ref_24373"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>i</var> be the MV of the first <emu-nt id="_ref_24374"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>.</li><li>Let <var>j</var> be the MV of the second <emu-nt id="_ref_24375"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigits">DecimalDigits</a></emu-nt>.</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11961"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Min]]</var>: <var>i</var>, <var class="field">[[Max]]</var>: <var>j</var> }.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compileatom" type="sdo" oldids="sec-atom,sec-atomescape,sec-characterescape,sec-decimalescape" aoid="CompileAtom"><span id="sec-decimalescape"></span><span id="sec-characterescape"></span><span id="sec-atomescape"></span><span id="sec-atom"></span>
|
||
<h1><span class="secnum">22.2.2.7</span> Runtime Semantics: CompileAtom</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_11962"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompileAtom takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_11963"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and <var>direction</var> (<emu-const>forward</emu-const> or <emu-const>backward</emu-const>) and returns a <emu-xref href="#pattern-matcher" id="_ref_11964"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>.</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-compileatom-annexb" id="_ref_694"><a href="additional-ecmascript-features-for-web-browsers.html#sec-compileatom-annexb">B.1.2.7</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
|
||
<!-- Atom -->
|
||
<p>It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="Atom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="vv9sxhyc" id="prod-Js9cL8Bl"><emu-nt id="_ref_24376"><a href="text-processing.html#prod-PatternCharacter">PatternCharacter</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>ch</var> be the character matched by <emu-nt id="_ref_24377"><a href="text-processing.html#prod-PatternCharacter">PatternCharacter</a></emu-nt>.</li><li>Let <var>A</var> be a one-element <emu-xref href="#pattern-charset" id="_ref_11965"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the character <var>ch</var>.</li><li>Return <emu-xref aoid="CharacterSetMatcher" id="_ref_11966"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>A</var>, <emu-val>false</emu-val>, <var>direction</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Atom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lljkc4zd" id="prod-HeZ4ZCvZ"><emu-t>.</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="AllCharacters" id="_ref_11967"><a href="text-processing.html#sec-allcharacters">AllCharacters</a></emu-xref>(<var>rer</var>).</li><li>If <var>rer</var>.<var class="field">[[DotAll]]</var> is not <emu-val>true</emu-val>, then<ol><li>Remove from <var>A</var> all characters corresponding to a code point on the right-hand side of the <emu-nt id="_ref_24378"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> production.</li></ol></li><li>Return <emu-xref aoid="CharacterSetMatcher" id="_ref_11968"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>A</var>, <emu-val>false</emu-val>, <var>direction</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Atom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="zqqoud41" id="prod-lKfl4ziO"><emu-nt id="_ref_24379"><a href="text-processing.html#prod-CharacterClass">CharacterClass</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>cc</var> be <emu-xref aoid="CompileCharacterClass" id="_ref_11969"><a href="text-processing.html#sec-compilecharacterclass">CompileCharacterClass</a></emu-xref> of <emu-nt id="_ref_24380"><a href="text-processing.html#prod-CharacterClass">CharacterClass</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>cs</var> be <var>cc</var>.<var class="field">[[CharSet]]</var>.</li><li>If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>false</emu-val>, or if every <emu-xref href="#sec-pattern-notation" id="_ref_11970"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> of <var>cs</var> consists of a single character (including if <var>cs</var> is empty), return <emu-xref aoid="CharacterSetMatcher" id="_ref_11971"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>cs</var>, <var>cc</var>.<var class="field">[[Invert]]</var>, <var>direction</var>).</li><li><emu-xref href="#assert" id="_ref_11972"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>cc</var>.<var class="field">[[Invert]]</var> is <emu-val>false</emu-val>.</li><li>Let <var>lm</var> be an empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_11973"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#pattern-matcher" id="_ref_11974"><a href="text-processing.html#pattern-matcher">Matchers</a></emu-xref>.</li><li>For each <emu-xref href="#sec-pattern-notation" id="_ref_11975"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> <var>s</var> in <var>cs</var> containing more than 1 character, iterating in descending order of length, do<ol><li>Let <var>cs2</var> be a one-element <emu-xref href="#pattern-charset" id="_ref_11976"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the last code point of <var>s</var>.</li><li>Let <var>m2</var> be <emu-xref aoid="CharacterSetMatcher" id="_ref_11977"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>cs2</var>, <emu-val>false</emu-val>, <var>direction</var>).</li><li>For each code point <var>c1</var> in <var>s</var>, iterating backwards from its second-to-last code point, do<ol><li>Let <var>cs1</var> be a one-element <emu-xref href="#pattern-charset" id="_ref_11978"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing <var>c1</var>.</li><li>Let <var>m1</var> be <emu-xref aoid="CharacterSetMatcher" id="_ref_11979"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>cs1</var>, <emu-val>false</emu-val>, <var>direction</var>).</li><li>Set <var>m2</var> to <emu-xref aoid="MatchSequence" id="_ref_11980"><a href="text-processing.html#sec-matchsequence">MatchSequence</a></emu-xref>(<var>m1</var>, <var>m2</var>, <var>direction</var>).</li></ol></li><li>Append <var>m2</var> to <var>lm</var>.</li></ol></li><li>Let <var>singles</var> be the <emu-xref href="#pattern-charset" id="_ref_11981"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing every <emu-xref href="#sec-pattern-notation" id="_ref_11982"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> of <var>cs</var> that consists of a single character.</li><li>Append <emu-xref aoid="CharacterSetMatcher" id="_ref_11983"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>singles</var>, <emu-val>false</emu-val>, <var>direction</var>) to <var>lm</var>.</li><li>If <var>cs</var> contains the empty sequence of characters, append <emu-xref aoid="EmptyMatcher" id="_ref_11984"><a href="text-processing.html#sec-emptymatcher">EmptyMatcher</a></emu-xref>() to <var>lm</var>.</li><li>Let <var>m2</var> be the last <emu-xref href="#pattern-matcher" id="_ref_11985"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> in <var>lm</var>.</li><li>For each <emu-xref href="#pattern-matcher" id="_ref_11986"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> <var>m1</var> of <var>lm</var>, iterating backwards from its second-to-last element, do<ol><li>Set <var>m2</var> to <emu-xref aoid="MatchTwoAlternatives" id="_ref_11987"><a href="text-processing.html#sec-matchtwoalternatives">MatchTwoAlternatives</a></emu-xref>(<var>m1</var>, <var>m2</var>).</li></ol></li><li>Return <var>m2</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Atom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lnltxn63" id="prod-rOrnsPez">
|
||
<emu-t>(</emu-t>
|
||
<emu-nt optional="" id="_ref_24381"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
<emu-nt id="_ref_24382"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>m</var> be <emu-xref aoid="CompileSubpattern" id="_ref_11988"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24383"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>rer</var> and <var>direction</var>.</li><li>Let <var>parenIndex</var> be <emu-xref aoid="CountLeftCapturingParensBefore" id="_ref_11989"><a href="text-processing.html#sec-countleftcapturingparensbefore">CountLeftCapturingParensBefore</a></emu-xref>(<emu-nt id="_ref_24384"><a href="text-processing.html#prod-Atom">Atom</a></emu-nt>).</li><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_11990"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>direction</var>, <var>m</var>, and <var>parenIndex</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11991"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11992"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_11993"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_11994"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>d</var> be a new <emu-xref href="#pattern-matchercontinuation" id="_ref_11995"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref> with parameters (<var>y</var>) that captures <var>x</var>, <var>c</var>, <var>direction</var>, and <var>parenIndex</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_11996"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>y</var> is a <emu-xref href="#pattern-matchstate" id="_ref_11997"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Let <var>cap</var> be a copy of <var>y</var>.<var class="field">[[Captures]]</var>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>xe</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>ye</var> be <var>y</var>.<var class="field">[[EndIndex]]</var>.</li><li>If <var>direction</var> is <emu-const>forward</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_11998"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>xe</var> ≤ <var>ye</var>.</li><li>Let <var>r</var> be the <emu-xref href="#pattern-capturerange" id="_ref_11999"><a href="text-processing.html#pattern-capturerange">CaptureRange</a></emu-xref> { <var class="field">[[StartIndex]]</var>: <var>xe</var>, <var class="field">[[EndIndex]]</var>: <var>ye</var> }.</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_12000"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>direction</var> is <emu-const>backward</emu-const>.</li><li><emu-xref href="#assert" id="_ref_12001"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>ye</var> ≤ <var>xe</var>.</li><li>Let <var>r</var> be the <emu-xref href="#pattern-capturerange" id="_ref_12002"><a href="text-processing.html#pattern-capturerange">CaptureRange</a></emu-xref> { <var class="field">[[StartIndex]]</var>: <var>ye</var>, <var class="field">[[EndIndex]]</var>: <var>xe</var> }.</li></ol></li><li>Set <var>cap</var>[<var>parenIndex</var> + 1] to <var>r</var>.</li><li>Let <var>z</var> be the <emu-xref href="#pattern-matchstate" id="_ref_12003"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> { <var class="field">[[Input]]</var>: <var>Input</var>, <var class="field">[[EndIndex]]</var>: <var>ye</var>, <var class="field">[[Captures]]</var>: <var>cap</var> }.</li><li>Return <var>c</var>(<var>z</var>).</li></ol></li><li>Return <var>m</var>(<var>x</var>, <var>d</var>).</li></ol></li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>Parentheses of the form <code>(</code> <emu-nt id="_ref_24385"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> <code>)</code> serve both to group the components of the <emu-nt id="_ref_24386"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> pattern together and to save the result of the match. The result can be used either in a backreference (<code>\</code> followed by a non-zero decimal number), referenced in a replace String, or returned as part of an array from the regular expression matching <emu-xref href="#sec-abstract-closure" id="_ref_12004"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref>. To inhibit the capturing behaviour of parentheses, use the form <code>(?:</code> <emu-nt id="_ref_24387"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> <code>)</code> instead.</p>
|
||
</div></emu-note>
|
||
<emu-grammar><emu-production name="Atom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="a-bf9noz" id="prod-jyyHsTvC">
|
||
<emu-t>(?</emu-t>
|
||
<emu-nt id="_ref_24388"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>:</emu-t>
|
||
<emu-nt id="_ref_24389"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>addModifiers</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12005"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24390"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>.</li><li>Let <var>removeModifiers</var> be the empty String.</li><li>Let <var>modifiedRer</var> be <emu-xref aoid="UpdateModifiers" id="_ref_12006"><a href="text-processing.html#sec-updatemodifiers">UpdateModifiers</a></emu-xref>(<var>rer</var>, <emu-xref aoid="CodePointsToString" id="_ref_12007"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<var>addModifiers</var>), <var>removeModifiers</var>).</li><li>Return <emu-xref aoid="CompileSubpattern" id="_ref_12008"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24391"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>modifiedRer</var> and <var>direction</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="Atom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-Atom">Atom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="qocvabie" id="prod-sL7vmg03">
|
||
<emu-t>(?</emu-t>
|
||
<emu-nt id="_ref_24392"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24393"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>
|
||
<emu-t>:</emu-t>
|
||
<emu-nt id="_ref_24394"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt>
|
||
<emu-t>)</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>addModifiers</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12009"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> the first <emu-nt id="_ref_24395"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>.</li><li>Let <var>removeModifiers</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12010"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> the second <emu-nt id="_ref_24396"><a href="text-processing.html#prod-RegularExpressionModifiers">RegularExpressionModifiers</a></emu-nt>.</li><li>Let <var>modifiedRer</var> be <emu-xref aoid="UpdateModifiers" id="_ref_12011"><a href="text-processing.html#sec-updatemodifiers">UpdateModifiers</a></emu-xref>(<var>rer</var>, <emu-xref aoid="CodePointsToString" id="_ref_12012"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<var>addModifiers</var>), <emu-xref aoid="CodePointsToString" id="_ref_12013"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<var>removeModifiers</var>)).</li><li>Return <emu-xref aoid="CompileSubpattern" id="_ref_12014"><a href="text-processing.html#sec-compilesubpattern">CompileSubpattern</a></emu-xref> of <emu-nt id="_ref_24397"><a href="text-processing.html#prod-Disjunction">Disjunction</a></emu-nt> with arguments <var>modifiedRer</var> and <var>direction</var>.</li></ol></emu-alg>
|
||
|
||
<!-- AtomEscape -->
|
||
<emu-grammar><emu-production name="AtomEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-AtomEscape">AtomEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="fr_5bnut" id="prod-cCYT06VF"><emu-nt id="_ref_24398"><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>n</var> be the <emu-xref aoid="CapturingGroupNumber" id="_ref_12015"><a href="text-processing.html#sec-patterns-static-semantics-capturing-group-number">CapturingGroupNumber</a></emu-xref> of <emu-nt id="_ref_24399"><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt>.</li><li><emu-xref href="#assert" id="_ref_12016"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>n</var> ≤ <var>rer</var>.<var class="field">[[CapturingGroupsCount]]</var>.</li><li>Return <emu-xref aoid="BackreferenceMatcher" id="_ref_12017"><a href="text-processing.html#sec-backreference-matcher">BackreferenceMatcher</a></emu-xref>(<var>rer</var>, « <var>n</var> », <var>direction</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>An escape sequence of the form <code>\</code> followed by a non-zero decimal number <var>n</var> matches the result of the <var>n</var><sup>th</sup> set of capturing parentheses (<emu-xref href="#sec-pattern-notation" id="_ref_695"><a href="text-processing.html#sec-pattern-notation">22.2.2.1</a></emu-xref>). It is an error if the regular expression has fewer than <var>n</var> capturing parentheses. If the regular expression has <var>n</var> or more capturing parentheses but the <var>n</var><sup>th</sup> one is <emu-val>undefined</emu-val> because it has not captured anything, then the backreference always succeeds.</p>
|
||
</div></emu-note>
|
||
<emu-grammar><emu-production name="AtomEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-AtomEscape">AtomEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="fjarvpc8" id="prod-HH-Xi2Q_"><emu-nt id="_ref_24400"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>cv</var> be the <emu-xref aoid="CharacterValue" id="_ref_12018"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of <emu-nt id="_ref_24401"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt>.</li><li>Let <var>ch</var> be the character whose character value is <var>cv</var>.</li><li>Let <var>A</var> be a one-element <emu-xref href="#pattern-charset" id="_ref_12019"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the character <var>ch</var>.</li><li>Return <emu-xref aoid="CharacterSetMatcher" id="_ref_12020"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>A</var>, <emu-val>false</emu-val>, <var>direction</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="AtomEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-AtomEscape">AtomEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="bww-5j2p" id="prod-k2ESRh0v"><emu-nt id="_ref_24402"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>cs</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12021"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24403"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> with argument <var>rer</var>.</li><li>If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>false</emu-val>, or if every <emu-xref href="#sec-pattern-notation" id="_ref_12022"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> of <var>cs</var> consists of a single character (including if <var>cs</var> is empty), return <emu-xref aoid="CharacterSetMatcher" id="_ref_12023"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>cs</var>, <emu-val>false</emu-val>, <var>direction</var>).</li><li>Let <var>lm</var> be an empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12024"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#pattern-matcher" id="_ref_12025"><a href="text-processing.html#pattern-matcher">Matchers</a></emu-xref>.</li><li>For each <emu-xref href="#sec-pattern-notation" id="_ref_12026"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> <var>s</var> in <var>cs</var> containing more than 1 character, iterating in descending order of length, do<ol><li>Let <var>cs2</var> be a one-element <emu-xref href="#pattern-charset" id="_ref_12027"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the last code point of <var>s</var>.</li><li>Let <var>m2</var> be <emu-xref aoid="CharacterSetMatcher" id="_ref_12028"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>cs2</var>, <emu-val>false</emu-val>, <var>direction</var>).</li><li>For each code point <var>c1</var> in <var>s</var>, iterating backwards from its second-to-last code point, do<ol><li>Let <var>cs1</var> be a one-element <emu-xref href="#pattern-charset" id="_ref_12029"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing <var>c1</var>.</li><li>Let <var>m1</var> be <emu-xref aoid="CharacterSetMatcher" id="_ref_12030"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>cs1</var>, <emu-val>false</emu-val>, <var>direction</var>).</li><li>Set <var>m2</var> to <emu-xref aoid="MatchSequence" id="_ref_12031"><a href="text-processing.html#sec-matchsequence">MatchSequence</a></emu-xref>(<var>m1</var>, <var>m2</var>, <var>direction</var>).</li></ol></li><li>Append <var>m2</var> to <var>lm</var>.</li></ol></li><li>Let <var>singles</var> be the <emu-xref href="#pattern-charset" id="_ref_12032"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing every <emu-xref href="#sec-pattern-notation" id="_ref_12033"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> of <var>cs</var> that consists of a single character.</li><li>Append <emu-xref aoid="CharacterSetMatcher" id="_ref_12034"><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation">CharacterSetMatcher</a></emu-xref>(<var>rer</var>, <var>singles</var>, <emu-val>false</emu-val>, <var>direction</var>) to <var>lm</var>.</li><li>If <var>cs</var> contains the empty sequence of characters, append <emu-xref aoid="EmptyMatcher" id="_ref_12035"><a href="text-processing.html#sec-emptymatcher">EmptyMatcher</a></emu-xref>() to <var>lm</var>.</li><li>Let <var>m2</var> be the last <emu-xref href="#pattern-matcher" id="_ref_12036"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> in <var>lm</var>.</li><li>For each <emu-xref href="#pattern-matcher" id="_ref_12037"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> <var>m1</var> of <var>lm</var>, iterating backwards from its second-to-last element, do<ol><li>Set <var>m2</var> to <emu-xref aoid="MatchTwoAlternatives" id="_ref_12038"><a href="text-processing.html#sec-matchtwoalternatives">MatchTwoAlternatives</a></emu-xref>(<var>m1</var>, <var>m2</var>).</li></ol></li><li>Return <var>m2</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="AtomEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-AtomEscape">AtomEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="dd_xjonr" id="prod-VB-OogXI">
|
||
<emu-t>k</emu-t>
|
||
<emu-nt id="_ref_24404"><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>matchingGroupSpecifiers</var> be <emu-xref aoid="GroupSpecifiersThatMatch" id="_ref_12039"><a href="text-processing.html#sec-groupspecifiersthatmatch">GroupSpecifiersThatMatch</a></emu-xref>(<emu-nt id="_ref_24405"><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt>).</li><li>Let <var>parenIndices</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12040"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each <emu-nt id="_ref_24406"><a href="text-processing.html#prod-GroupSpecifier">GroupSpecifier</a></emu-nt> <var>groupSpecifier</var> of <var>matchingGroupSpecifiers</var>, do<ol><li>Let <var>parenIndex</var> be <emu-xref aoid="CountLeftCapturingParensBefore" id="_ref_12041"><a href="text-processing.html#sec-countleftcapturingparensbefore">CountLeftCapturingParensBefore</a></emu-xref>(<var>groupSpecifier</var>).</li><li>Append <var>parenIndex</var> to <var>parenIndices</var>.</li></ol></li><li>Return <emu-xref aoid="BackreferenceMatcher" id="_ref_12042"><a href="text-processing.html#sec-backreference-matcher">BackreferenceMatcher</a></emu-xref>(<var>rer</var>, <var>parenIndices</var>, <var>direction</var>).</li></ol></emu-alg>
|
||
|
||
<emu-clause id="sec-runtime-semantics-charactersetmatcher-abstract-operation" type="abstract operation" aoid="CharacterSetMatcher">
|
||
<h1><span class="secnum">22.2.2.7.1</span> CharacterSetMatcher ( <var>rer</var>, <var>A</var>, <var>invert</var>, <var>direction</var> )</h1>
|
||
<p>The abstract operation CharacterSetMatcher takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12043"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>), <var>A</var> (a <emu-xref href="#pattern-charset" id="_ref_12044"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>), <var>invert</var> (a Boolean), and <var>direction</var> (<emu-const>forward</emu-const> or <emu-const>backward</emu-const>) and returns a <emu-xref href="#pattern-matcher" id="_ref_12045"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>true</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_12046"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>invert</var> is <emu-val>false</emu-val>.</li><li><emu-xref href="#assert" id="_ref_12047"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: Every <emu-xref href="#sec-pattern-notation" id="_ref_12048"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> of <var>A</var> consists of a single character.</li></ol></li><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_12049"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>rer</var>, <var>A</var>, <var>invert</var>, and <var>direction</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_12050"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_12051"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_12052"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_12053"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>e</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>If <var>direction</var> is <emu-const>forward</emu-const>, let <var>f</var> be <var>e</var> + 1.</li><li>Else, let <var>f</var> be <var>e</var> - 1.</li><li>Let <var>InputLength</var> be the number of elements in <var>Input</var>.</li><li>If <var>f</var> < 0 or <var>f</var> > <var>InputLength</var>, return <emu-const>failure</emu-const>.</li><li>Let <var>index</var> be <emu-xref aoid="min" id="_ref_12054"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>e</var>, <var>f</var>).</li><li>Let <var>ch</var> be the character <var>Input</var>[<var>index</var>].</li><li>Let <var>cc</var> be <emu-xref aoid="Canonicalize" id="_ref_12055"><a href="text-processing.html#sec-runtime-semantics-canonicalize-ch">Canonicalize</a></emu-xref>(<var>rer</var>, <var>ch</var>).</li><li>If there exists a <emu-xref href="#sec-pattern-notation" id="_ref_12056"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> in <var>A</var> containing exactly one character <var>a</var> such that <emu-xref aoid="Canonicalize" id="_ref_12057"><a href="text-processing.html#sec-runtime-semantics-canonicalize-ch">Canonicalize</a></emu-xref>(<var>rer</var>, <var>a</var>) is <var>cc</var>, let <var>found</var> be <emu-val>true</emu-val>; else let <var>found</var> be <emu-val>false</emu-val>.</li><li>If <var>invert</var> is <emu-val>false</emu-val> and <var>found</var> is <emu-val>false</emu-val>, return <emu-const>failure</emu-const>.</li><li>If <var>invert</var> is <emu-val>true</emu-val> and <var>found</var> is <emu-val>true</emu-val>, return <emu-const>failure</emu-const>.</li><li>Let <var>cap</var> be <var>x</var>.<var class="field">[[Captures]]</var>.</li><li>Let <var>y</var> be the <emu-xref href="#pattern-matchstate" id="_ref_12058"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> { <var class="field">[[Input]]</var>: <var>Input</var>, <var class="field">[[EndIndex]]</var>: <var>f</var>, <var class="field">[[Captures]]</var>: <var>cap</var> }.</li><li>Return <var>c</var>(<var>y</var>).</li></ol></li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-backreference-matcher" type="abstract operation" aoid="BackreferenceMatcher">
|
||
<h1><span class="secnum">22.2.2.7.2</span> BackreferenceMatcher ( <var>rer</var>, <var>ns</var>, <var>direction</var> )</h1>
|
||
<p>The abstract operation BackreferenceMatcher takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12059"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>), <var>ns</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12060"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of positive <emu-xref href="#integer" id="_ref_12061"><a href="notational-conventions.html#integer">integers</a></emu-xref>), and <var>direction</var> (<emu-const>forward</emu-const> or <emu-const>backward</emu-const>) and returns a <emu-xref href="#pattern-matcher" id="_ref_12062"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Return a new <emu-xref href="#pattern-matcher" id="_ref_12063"><a href="text-processing.html#pattern-matcher">Matcher</a></emu-xref> with parameters (<var>x</var>, <var>c</var>) that captures <var>rer</var>, <var>ns</var>, and <var>direction</var> and performs the following steps when called:<ol><li><emu-xref href="#assert" id="_ref_12064"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>x</var> is a <emu-xref href="#pattern-matchstate" id="_ref_12065"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_12066"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>c</var> is a <emu-xref href="#pattern-matchercontinuation" id="_ref_12067"><a href="text-processing.html#pattern-matchercontinuation">MatcherContinuation</a></emu-xref>.</li><li>Let <var>Input</var> be <var>x</var>.<var class="field">[[Input]]</var>.</li><li>Let <var>cap</var> be <var>x</var>.<var class="field">[[Captures]]</var>.</li><li>Let <var>r</var> be <emu-val>undefined</emu-val>.</li><li>For each <emu-xref href="#integer" id="_ref_12068"><a href="notational-conventions.html#integer">integer</a></emu-xref> <var>n</var> of <var>ns</var>, do<ol><li>If <var>cap</var>[<var>n</var>] is not <emu-val>undefined</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_12069"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>r</var> is <emu-val>undefined</emu-val>.</li><li>Set <var>r</var> to <var>cap</var>[<var>n</var>].</li></ol></li></ol></li><li>If <var>r</var> is <emu-val>undefined</emu-val>, return <var>c</var>(<var>x</var>).</li><li>Let <var>e</var> be <var>x</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>rs</var> be <var>r</var>.<var class="field">[[StartIndex]]</var>.</li><li>Let <var>re</var> be <var>r</var>.<var class="field">[[EndIndex]]</var>.</li><li>Let <var>len</var> be <var>re</var> - <var>rs</var>.</li><li>If <var>direction</var> is <emu-const>forward</emu-const>, let <var>f</var> be <var>e</var> + <var>len</var>.</li><li>Else, let <var>f</var> be <var>e</var> - <var>len</var>.</li><li>Let <var>InputLength</var> be the number of elements in <var>Input</var>.</li><li>If <var>f</var> < 0 or <var>f</var> > <var>InputLength</var>, return <emu-const>failure</emu-const>.</li><li>Let <var>g</var> be <emu-xref aoid="min" id="_ref_12070"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>e</var>, <var>f</var>).</li><li>If there exists an <emu-xref href="#integer" id="_ref_12071"><a href="notational-conventions.html#integer">integer</a></emu-xref> <var>i</var> in the <emu-xref href="#interval" id="_ref_12072"><a href="notational-conventions.html#interval">interval</a></emu-xref> from 0 (inclusive) to <var>len</var> (exclusive) such that <emu-xref aoid="Canonicalize" id="_ref_12073"><a href="text-processing.html#sec-runtime-semantics-canonicalize-ch">Canonicalize</a></emu-xref>(<var>rer</var>, <var>Input</var>[<var>rs</var> + <var>i</var>]) is not <emu-xref aoid="Canonicalize" id="_ref_12074"><a href="text-processing.html#sec-runtime-semantics-canonicalize-ch">Canonicalize</a></emu-xref>(<var>rer</var>, <var>Input</var>[<var>g</var> + <var>i</var>]), return <emu-const>failure</emu-const>.</li><li>Let <var>y</var> be the <emu-xref href="#pattern-matchstate" id="_ref_12075"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref> { <var class="field">[[Input]]</var>: <var>Input</var>, <var class="field">[[EndIndex]]</var>: <var>f</var>, <var class="field">[[Captures]]</var>: <var>cap</var> }.</li><li>Return <var>c</var>(<var>y</var>).</li></ol></li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-runtime-semantics-canonicalize-ch" type="abstract operation" aoid="Canonicalize">
|
||
<h1><span class="secnum">22.2.2.7.3</span> Canonicalize ( <var>rer</var>, <var>ch</var> )</h1>
|
||
<p>The abstract operation Canonicalize takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12076"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and <var>ch</var> (a character) and returns a character. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <emu-xref aoid="HasEitherUnicodeFlag" id="_ref_12077"><a href="text-processing.html#sec-runtime-semantics-haseitherunicodeflag-abstract-operation">HasEitherUnicodeFlag</a></emu-xref>(<var>rer</var>) is <emu-val>true</emu-val> and <var>rer</var>.<var class="field">[[IgnoreCase]]</var> is <emu-val>true</emu-val>, then<ol><li>If the file <a href="https://unicode.org/Public/UCD/latest/ucd/CaseFolding.txt"><code>CaseFolding.txt</code></a> of the Unicode Character Database provides a simple or common case folding mapping for <var>ch</var>, return the result of applying that mapping to <var>ch</var>.</li><li>Return <var>ch</var>.</li></ol></li><li>If <var>rer</var>.<var class="field">[[IgnoreCase]]</var> is <emu-val>false</emu-val>, return <var>ch</var>.</li><li><emu-xref href="#assert" id="_ref_12078"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>ch</var> is a UTF-16 code unit.</li><li>Let <var>cp</var> be the code point whose numeric value is the numeric value of <var>ch</var>.</li><li>Let <var>u</var> be toUppercase(« <var>cp</var> »), according to the Unicode Default Case Conversion algorithm.</li><li>Let <var>uStr</var> be <emu-xref aoid="CodePointsToString" id="_ref_12079"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<var>u</var>).</li><li>If the length of <var>uStr</var> ≠ 1, return <var>ch</var>.</li><li>Let <var>cu</var> be <var>uStr</var>'s single code unit element.</li><li>If the numeric value of <var>ch</var> ≥ 128 and the numeric value of <var>cu</var> < 128, return <var>ch</var>.</li><li>Return <var>cu</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>In case-insignificant matches when <emu-xref aoid="HasEitherUnicodeFlag" id="_ref_12080"><a href="text-processing.html#sec-runtime-semantics-haseitherunicodeflag-abstract-operation">HasEitherUnicodeFlag</a></emu-xref>(<var>rer</var>) is <emu-val>true</emu-val>, all characters are implicitly case-folded using the simple mapping provided by the Unicode Standard immediately before they are compared. The simple mapping always maps to a single code point, so it does not map, for example, <code>ß</code> (U+00DF LATIN SMALL LETTER SHARP S) to <code>ss</code> or <code>SS</code>. It may however map code points outside the Basic Latin block to code points within it—for example, <code>ſ</code> (U+017F LATIN SMALL LETTER LONG S) case-folds to <code>s</code> (U+0073 LATIN SMALL LETTER S) and <code>K</code> (U+212A KELVIN SIGN) case-folds to <code>k</code> (U+006B LATIN SMALL LETTER K). Strings containing those code points are matched by regular expressions such as <code>/[a-z]/ui</code>.</p>
|
||
<p>In case-insignificant matches when <emu-xref aoid="HasEitherUnicodeFlag" id="_ref_12081"><a href="text-processing.html#sec-runtime-semantics-haseitherunicodeflag-abstract-operation">HasEitherUnicodeFlag</a></emu-xref>(<var>rer</var>) is <emu-val>false</emu-val>, the mapping is based on Unicode Default Case Conversion algorithm toUppercase rather than toCasefold, which results in some subtle differences. For example, <code>Ω</code> (U+2126 OHM SIGN) is mapped by toUppercase to itself but by toCasefold to <code>ω</code> (U+03C9 GREEK SMALL LETTER OMEGA) along with <code>Ω</code> (U+03A9 GREEK CAPITAL LETTER OMEGA), so <emu-val>"\u2126"</emu-val> is matched by <code>/[ω]/ui</code> and <code>/[\u03A9]/ui</code> but not by <code>/[ω]/i</code> or <code>/[\u03A9]/i</code>. Also, no code point outside the Basic Latin block is mapped to a code point within it, so strings such as <emu-val>"\u017F ſ"</emu-val> and <emu-val>"\u212A K"</emu-val> are not matched by <code>/[a-z]/i</code>.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-updatemodifiers" type="abstract operation" aoid="UpdateModifiers">
|
||
<h1><span class="secnum">22.2.2.7.4</span> UpdateModifiers ( <var>rer</var>, <var>add</var>, <var>remove</var> )</h1>
|
||
<p>The abstract operation UpdateModifiers takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12082"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>), <var>add</var> (a String), and <var>remove</var> (a String) and returns a <emu-xref href="#sec-regexp-records" id="_ref_12083"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_12084"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>add</var> and <var>remove</var> have no elements in common.</li><li>Let <var>ignoreCase</var> be <var>rer</var>.<var class="field">[[IgnoreCase]]</var>.</li><li>Let <var>multiline</var> be <var>rer</var>.<var class="field">[[Multiline]]</var>.</li><li>Let <var>dotAll</var> be <var>rer</var>.<var class="field">[[DotAll]]</var>.</li><li>Let <var>unicode</var> be <var>rer</var>.<var class="field">[[Unicode]]</var>.</li><li>Let <var>unicodeSets</var> be <var>rer</var>.<var class="field">[[UnicodeSets]]</var>.</li><li>Let <var>capturingGroupsCount</var> be <var>rer</var>.<var class="field">[[CapturingGroupsCount]]</var>.</li><li>If <var>remove</var> contains <emu-val>"i"</emu-val>, set <var>ignoreCase</var> to <emu-val>false</emu-val>.</li><li>Else if <var>add</var> contains <emu-val>"i"</emu-val>, set <var>ignoreCase</var> to <emu-val>true</emu-val>.</li><li>If <var>remove</var> contains <emu-val>"m"</emu-val>, set <var>multiline</var> to <emu-val>false</emu-val>.</li><li>Else if <var>add</var> contains <emu-val>"m"</emu-val>, set <var>multiline</var> to <emu-val>true</emu-val>.</li><li>If <var>remove</var> contains <emu-val>"s"</emu-val>, set <var>dotAll</var> to <emu-val>false</emu-val>.</li><li>Else if <var>add</var> contains <emu-val>"s"</emu-val>, set <var>dotAll</var> to <emu-val>true</emu-val>.</li><li>Return the <emu-xref href="#sec-regexp-records" id="_ref_12085"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref> { <var class="field">[[IgnoreCase]]</var>: <var>ignoreCase</var>, <var class="field">[[Multiline]]</var>: <var>multiline</var>, <var class="field">[[DotAll]]</var>: <var>dotAll</var>, <var class="field">[[Unicode]]</var>: <var>unicode</var>, <var class="field">[[UnicodeSets]]</var>: <var>unicodeSets</var>, <var class="field">[[CapturingGroupsCount]]</var>: <var>capturingGroupsCount</var> }.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compilecharacterclass" type="sdo" oldids="sec-characterclass" aoid="CompileCharacterClass"><span id="sec-characterclass"></span>
|
||
<h1><span class="secnum">22.2.2.8</span> Runtime Semantics: CompileCharacterClass</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12086"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompileCharacterClass takes argument <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12087"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12088"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> with fields <var class="field">[[CharSet]]</var> (a <emu-xref href="#pattern-charset" id="_ref_12089"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>) and <var class="field">[[Invert]]</var> (a Boolean). It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="CharacterClass" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClass">CharacterClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="i-ml-nlt" id="prod-WTA5_13X">
|
||
<emu-t>[</emu-t>
|
||
<emu-nt id="_ref_24407"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12090"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24408"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> with argument <var>rer</var>.</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12091"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[CharSet]]</var>: <var>A</var>, <var class="field">[[Invert]]</var>: <emu-val>false</emu-val> }.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterClass" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClass">CharacterClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="d-swr39f" id="prod-C4IeNsQH">
|
||
<emu-t>[^</emu-t>
|
||
<emu-nt id="_ref_24409"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12092"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24410"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> with argument <var>rer</var>.</li><li>If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>true</emu-val>, then<ol><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12093"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[CharSet]]</var>: <emu-xref aoid="CharacterComplement" id="_ref_12094"><a href="text-processing.html#sec-charactercomplement">CharacterComplement</a></emu-xref>(<var>rer</var>, <var>A</var>), <var class="field">[[Invert]]</var>: <emu-val>false</emu-val> }.</li></ol></li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12095"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[CharSet]]</var>: <var>A</var>, <var class="field">[[Invert]]</var>: <emu-val>true</emu-val> }.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compiletocharset" type="sdo" oldids="sec-classranges,sec-nonemptyclassranges,sec-nonemptyclassrangesnodash,sec-classatom,sec-classatomnodash,sec-classescape,sec-characterclassescape" aoid="CompileToCharSet"><span id="sec-characterclassescape"></span><span id="sec-classescape"></span><span id="sec-classatomnodash"></span><span id="sec-classatom"></span><span id="sec-nonemptyclassrangesnodash"></span><span id="sec-nonemptyclassranges"></span><span id="sec-classranges"></span>
|
||
<h1><span class="secnum">22.2.2.9</span> Runtime Semantics: CompileToCharSet</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12096"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompileToCharSet takes argument <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12097"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and returns a <emu-xref href="#pattern-charset" id="_ref_12098"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>.</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-compiletocharset-annexb" id="_ref_696"><a href="additional-ecmascript-features-for-web-browsers.html#sec-compiletocharset-annexb">B.1.2.8</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
|
||
<!-- ClassContents -->
|
||
<p>It is defined piecewise over the following productions:</p>
|
||
<emu-grammar><emu-production name="ClassContents" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb" id="prod-JD0n1C2m"><emu-gann>[empty]</emu-gann></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the empty <emu-xref href="#pattern-charset" id="_ref_12099"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>.</li></ol></emu-alg>
|
||
|
||
<!-- NonemptyClassRanges -->
|
||
<emu-grammar><emu-production name="NonemptyClassRanges" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NonemptyClassRanges">NonemptyClassRanges</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="9bczlwfd" id="prod-v8F30MhJ">
|
||
<emu-nt id="_ref_24411"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>
|
||
<emu-nt id="_ref_24412"><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12100"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24413"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12101"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24414"><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a></emu-nt> with argument <var>rer</var>.</li><li>Return the union of <emu-xref href="#pattern-charset" id="_ref_12102"><a href="text-processing.html#pattern-charset">CharSets</a></emu-xref> <var>A</var> and <var>B</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="NonemptyClassRanges" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NonemptyClassRanges">NonemptyClassRanges</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="2bs-sw8o" id="prod-3Hff_hWr">
|
||
<emu-nt id="_ref_24415"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24416"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>
|
||
<emu-nt id="_ref_24417"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12103"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the first <emu-nt id="_ref_24418"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12104"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the second <emu-nt id="_ref_24419"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>C</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12105"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24420"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>D</var> be <emu-xref aoid="CharacterRange" id="_ref_12106"><a href="text-processing.html#sec-runtime-semantics-characterrange-abstract-operation">CharacterRange</a></emu-xref>(<var>A</var>, <var>B</var>).</li><li>Return the union of <var>D</var> and <var>C</var>.</li></ol></emu-alg>
|
||
|
||
<!-- NonemptyClassRangesNoDash -->
|
||
<emu-grammar><emu-production name="NonemptyClassRangesNoDash" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="z2ljibgz" id="prod-F2f_obS_">
|
||
<emu-nt id="_ref_24421"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt>
|
||
<emu-nt id="_ref_24422"><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12107"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24423"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12108"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24424"><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a></emu-nt> with argument <var>rer</var>.</li><li>Return the union of <emu-xref href="#pattern-charset" id="_ref_12109"><a href="text-processing.html#pattern-charset">CharSets</a></emu-xref> <var>A</var> and <var>B</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="NonemptyClassRangesNoDash" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NonemptyClassRangesNoDash">NonemptyClassRangesNoDash</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="udwlha-v" id="prod-m3mx3xme">
|
||
<emu-nt id="_ref_24425"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24426"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>
|
||
<emu-nt id="_ref_24427"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12110"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24428"><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12111"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24429"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>C</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12112"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24430"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>D</var> be <emu-xref aoid="CharacterRange" id="_ref_12113"><a href="text-processing.html#sec-runtime-semantics-characterrange-abstract-operation">CharacterRange</a></emu-xref>(<var>A</var>, <var>B</var>).</li><li>Return the union of <var>D</var> and <var>C</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p><emu-nt id="_ref_24431"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> can expand into a single <emu-nt id="_ref_24432"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> and/or ranges of two <emu-nt id="_ref_24433"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> separated by dashes. In the latter case the <emu-nt id="_ref_24434"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> includes all characters between the first <emu-nt id="_ref_24435"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> and the second <emu-nt id="_ref_24436"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>, inclusive; an error occurs if either <emu-nt id="_ref_24437"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> does not represent a single character (for example, if one is \w) or if the first <emu-nt id="_ref_24438"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>'s character value is strictly greater than the second <emu-nt id="_ref_24439"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt>'s character value.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>Even if the pattern ignores case, the case of the two ends of a range is significant in determining which characters belong to the range. Thus, for example, the pattern <code>/[E-F]/i</code> matches only the letters <code>E</code>, <code>F</code>, <code>e</code>, and <code>f</code>, while the pattern <code>/[E-f]/i</code> matches all uppercase and lowercase letters in the Unicode Basic Latin block as well as the symbols <code>[</code>, <code>\</code>, <code>]</code>, <code>^</code>, <code>_</code>, and <code>`</code>.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 4</span><div class="note-contents">
|
||
<p>A <code>-</code> character can be treated literally or it can denote a range. It is treated literally if it is the first or last character of <emu-nt id="_ref_24440"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>, the beginning or end limit of a range specification, or immediately follows a range specification.</p>
|
||
</div></emu-note>
|
||
|
||
<!-- ClassAtom -->
|
||
<emu-grammar><emu-production name="ClassAtom" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="byslh4l8" id="prod-v1pSxa5N"><emu-t>-</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the <emu-xref href="#pattern-charset" id="_ref_12114"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the single character <code>-</code> U+002D (HYPHEN-MINUS).</li></ol></emu-alg>
|
||
|
||
<!-- ClassAtomNoDash -->
|
||
<emu-grammar><emu-production name="ClassAtomNoDash" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassAtomNoDash">ClassAtomNoDash</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="7n5ukjeb" id="prod-XIQ-jH7Q"><emu-nt id="_ref_24441"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not one of <emu-t>\</emu-t> or <emu-t>]</emu-t> or <emu-t>-</emu-t></emu-gmod></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the <emu-xref href="#pattern-charset" id="_ref_12115"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the character matched by <emu-nt id="_ref_24442"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt>.</li></ol></emu-alg>
|
||
|
||
<!-- ClassEscape -->
|
||
<emu-grammar><emu-production name="ClassEscape" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-ClassEscape">ClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ayxoiyyq" id="prod-y4BsoD9c">
|
||
<emu-t>b</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="byslh4l8" id="prod-dYEaUVMZ">
|
||
<emu-t>-</emu-t>
|
||
</emu-rhs>
|
||
<emu-rhs a="fjarvpc8" id="prod--6UgQqmj">
|
||
<emu-nt id="_ref_24443"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>cv</var> be the <emu-xref aoid="CharacterValue" id="_ref_12116"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of this <emu-nt id="_ref_24444"><a href="text-processing.html#prod-ClassEscape">ClassEscape</a></emu-nt>.</li><li>Let <var>c</var> be the character whose character value is <var>cv</var>.</li><li>Return the <emu-xref href="#pattern-charset" id="_ref_12117"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the single character <var>c</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 5</span><div class="note-contents">
|
||
<p>A <emu-nt id="_ref_24445"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> can use any of the escape sequences that are allowed in the rest of the regular expression except for <code>\b</code>, <code>\B</code>, and backreferences. Inside a <emu-nt id="_ref_24446"><a href="text-processing.html#prod-CharacterClass">CharacterClass</a></emu-nt>, <code>\b</code> means the backspace character, while <code>\B</code> and backreferences raise errors. Using a backreference inside a <emu-nt id="_ref_24447"><a href="text-processing.html#prod-ClassAtom">ClassAtom</a></emu-nt> causes an error.</p>
|
||
</div></emu-note>
|
||
|
||
<!-- CharacterClassEscape -->
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="8pmnkw2i" id="prod-E23U4UCW"><emu-t>d</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the ten-element <emu-xref href="#pattern-charset" id="_ref_12118"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the characters <code>0</code>, <code>1</code>, <code>2</code>, <code>3</code>, <code>4</code>, <code>5</code>, <code>6</code>, <code>7</code>, <code>8</code>, and <code>9</code>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="kzsugx0d" id="prod-CJ70Staj"><emu-t>D</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>S</var> be the <emu-xref href="#pattern-charset" id="_ref_12119"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> returned by <emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="" class=" inline">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="8pmnkw2i"><emu-t>d</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>.</li><li>Return <emu-xref aoid="CharacterComplement" id="_ref_12120"><a href="text-processing.html#sec-charactercomplement">CharacterComplement</a></emu-xref>(<var>rer</var>, <var>S</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="w5xsbsk3" id="prod-4qp2L35t"><emu-t>s</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the <emu-xref href="#pattern-charset" id="_ref_12121"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all characters corresponding to a code point on the right-hand side of the <emu-nt id="_ref_24448"><a href="ecmascript-language-lexical-grammar.html#prod-WhiteSpace">WhiteSpace</a></emu-nt> or <emu-nt id="_ref_24449"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> productions.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="avlpsekd" id="prod-sOQsJGFN"><emu-t>S</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>S</var> be the <emu-xref href="#pattern-charset" id="_ref_12122"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> returned by <emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="" class=" inline">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="w5xsbsk3"><emu-t>s</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>.</li><li>Return <emu-xref aoid="CharacterComplement" id="_ref_12123"><a href="text-processing.html#sec-charactercomplement">CharacterComplement</a></emu-xref>(<var>rer</var>, <var>S</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lytism1a" id="prod-yVuyKzZ7"><emu-t>w</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="MaybeSimpleCaseFolding" id="_ref_12124"><a href="text-processing.html#sec-maybesimplecasefolding">MaybeSimpleCaseFolding</a></emu-xref>(<var>rer</var>, <emu-xref aoid="WordCharacters" id="_ref_12125"><a href="text-processing.html#sec-wordcharacters">WordCharacters</a></emu-xref>(<var>rer</var>)).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="rhxouzu-" id="prod-3TNl1K-Z"><emu-t>W</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>S</var> be the <emu-xref href="#pattern-charset" id="_ref_12126"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> returned by <emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="" class=" inline">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lytism1a"><emu-t>w</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>.</li><li>Return <emu-xref aoid="CharacterComplement" id="_ref_12127"><a href="text-processing.html#sec-charactercomplement">CharacterComplement</a></emu-xref>(<var>rer</var>, <var>S</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="w6blst1q" id="prod-kc86cCn-">
|
||
<emu-t>p{</emu-t>
|
||
<emu-nt id="_ref_24450"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="CompileToCharSet" id="_ref_12128"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24451"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> with argument <var>rer</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="CharacterClassEscape" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="4og7ke5v" id="prod-rM2HtPxJ">
|
||
<emu-t>P{</emu-t>
|
||
<emu-nt id="_ref_24452"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>S</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12129"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24453"><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> with argument <var>rer</var>.</li><li><emu-xref href="#assert" id="_ref_12130"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>S</var> contains only single code points.</li><li>Return <emu-xref aoid="CharacterComplement" id="_ref_12131"><a href="text-processing.html#sec-charactercomplement">CharacterComplement</a></emu-xref>(<var>rer</var>, <var>S</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="UnicodePropertyValueExpression" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="sr3kbwzj" id="prod-5_vYUeM-">
|
||
<emu-nt id="_ref_24454"><a href="text-processing.html#prod-UnicodePropertyName">UnicodePropertyName</a></emu-nt>
|
||
<emu-t>=</emu-t>
|
||
<emu-nt id="_ref_24455"><a href="text-processing.html#prod-UnicodePropertyValue">UnicodePropertyValue</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>ps</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12132"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24456"><a href="text-processing.html#prod-UnicodePropertyName">UnicodePropertyName</a></emu-nt>.</li><li>Let <var>p</var> be <emu-xref aoid="UnicodeMatchProperty" id="_ref_12133"><a href="text-processing.html#sec-runtime-semantics-unicodematchproperty-p">UnicodeMatchProperty</a></emu-xref>(<var>rer</var>, <var>ps</var>).</li><li><emu-xref href="#assert" id="_ref_12134"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>p</var> is a <emu-not-ref>Unicode property name</emu-not-ref> or property alias listed in the “<emu-not-ref>Property name and aliases</emu-not-ref>” column of <emu-xref href="#table-nonbinary-unicode-properties" id="_ref_697"><a href="text-processing.html#table-nonbinary-unicode-properties">Table 64</a></emu-xref>.</li><li>Let <var>vs</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12135"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24457"><a href="text-processing.html#prod-UnicodePropertyValue">UnicodePropertyValue</a></emu-nt>.</li><li>Let <var>v</var> be <emu-xref aoid="UnicodeMatchPropertyValue" id="_ref_12136"><a href="text-processing.html#sec-runtime-semantics-unicodematchpropertyvalue-p-v">UnicodeMatchPropertyValue</a></emu-xref>(<var>p</var>, <var>vs</var>).</li><li>Let <var>A</var> be the <emu-xref href="#pattern-charset" id="_ref_12137"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all Unicode code points whose character database definition includes the property <var>p</var> with value <var>v</var>.</li><li>Return <emu-xref aoid="MaybeSimpleCaseFolding" id="_ref_12138"><a href="text-processing.html#sec-maybesimplecasefolding">MaybeSimpleCaseFolding</a></emu-xref>(<var>rer</var>, <var>A</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="UnicodePropertyValueExpression" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-UnicodePropertyValueExpression">UnicodePropertyValueExpression</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="jdlbklv9" id="prod-JU4eVWl0"><emu-nt id="_ref_24458"><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>s</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12139"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_24459"><a href="text-processing.html#prod-LoneUnicodePropertyNameOrValue">LoneUnicodePropertyNameOrValue</a></emu-nt>.</li><li>If <emu-xref aoid="UnicodeMatchPropertyValue" id="_ref_12140"><a href="text-processing.html#sec-runtime-semantics-unicodematchpropertyvalue-p-v">UnicodeMatchPropertyValue</a></emu-xref>(<code>General_Category</code>, <var>s</var>) is a Unicode property value or property value alias for the General_Category (gc) property listed in <a href="https://unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt"><code>PropertyValueAliases.txt</code></a>, then<ol><li>Return the <emu-xref href="#pattern-charset" id="_ref_12141"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all Unicode code points whose character database definition includes the property “General_Category” with value <var>s</var>.</li></ol></li><li>Let <var>p</var> be <emu-xref aoid="UnicodeMatchProperty" id="_ref_12142"><a href="text-processing.html#sec-runtime-semantics-unicodematchproperty-p">UnicodeMatchProperty</a></emu-xref>(<var>rer</var>, <var>s</var>).</li><li><emu-xref href="#assert" id="_ref_12143"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>p</var> is a binary Unicode property or binary property alias listed in the “<emu-not-ref>Property name and aliases</emu-not-ref>” column of <emu-xref href="#table-binary-unicode-properties" id="_ref_698"><a href="text-processing.html#table-binary-unicode-properties">Table 65</a></emu-xref>, or a binary Unicode property of strings listed in the “<emu-not-ref>Property name</emu-not-ref>” column of <emu-xref href="#table-binary-unicode-properties-of-strings" id="_ref_699"><a href="text-processing.html#table-binary-unicode-properties-of-strings">Table 66</a></emu-xref>.</li><li>Let <var>A</var> be the <emu-xref href="#pattern-charset" id="_ref_12144"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all CharSetElements whose character database definition includes the property <var>p</var> with value “True”.</li><li>Return <emu-xref aoid="MaybeSimpleCaseFolding" id="_ref_12145"><a href="text-processing.html#sec-maybesimplecasefolding">MaybeSimpleCaseFolding</a></emu-xref>(<var>rer</var>, <var>A</var>).</li></ol></emu-alg>
|
||
|
||
<!-- ClassUnion -->
|
||
<emu-grammar><emu-production name="ClassUnion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="lvavyv54" id="prod-9tLGzF96">
|
||
<emu-nt id="_ref_24460"><a href="text-processing.html#prod-ClassSetRange">ClassSetRange</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24461"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12146"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24462"><a href="text-processing.html#prod-ClassSetRange">ClassSetRange</a></emu-nt> with argument <var>rer</var>.</li><li>If <emu-nt id="_ref_24463"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> is present, then<ol><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12147"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24464"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> with argument <var>rer</var>.</li><li>Return the union of <emu-xref href="#pattern-charset" id="_ref_12148"><a href="text-processing.html#pattern-charset">CharSets</a></emu-xref> <var>A</var> and <var>B</var>.</li></ol></li><li>Return <var>A</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassUnion" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ga57bqew" id="prod-x0IzZQcL">
|
||
<emu-nt id="_ref_24465"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24466"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12149"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24467"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> with argument <var>rer</var>.</li><li>If <emu-nt id="_ref_24468"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> is present, then<ol><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12150"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24469"><a href="text-processing.html#prod-ClassUnion">ClassUnion</a></emu-nt> with argument <var>rer</var>.</li><li>Return the union of <emu-xref href="#pattern-charset" id="_ref_12151"><a href="text-processing.html#pattern-charset">CharSets</a></emu-xref> <var>A</var> and <var>B</var>.</li></ol></li><li>Return <var>A</var>.</li></ol></emu-alg>
|
||
|
||
<!-- ClassIntersection -->
|
||
<emu-grammar><emu-production name="ClassIntersection" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="ldjtuyxs" id="prod-w2-hkHQn">
|
||
<emu-nt id="_ref_24470"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-t>&&</emu-t>
|
||
<emu-nt id="_ref_24471"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12152"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the first <emu-nt id="_ref_24472"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12153"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the second <emu-nt id="_ref_24473"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> with argument <var>rer</var>.</li><li>Return the intersection of <emu-xref href="#pattern-charset" id="_ref_12154"><a href="text-processing.html#pattern-charset">CharSets</a></emu-xref> <var>A</var> and <var>B</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassIntersection" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="sqaogagb" id="prod--kctPbXq">
|
||
<emu-nt id="_ref_24474"><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt>
|
||
<emu-t>&&</emu-t>
|
||
<emu-nt id="_ref_24475"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12155"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the <emu-nt id="_ref_24476"><a href="text-processing.html#prod-ClassIntersection">ClassIntersection</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12156"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the <emu-nt id="_ref_24477"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> with argument <var>rer</var>.</li><li>Return the intersection of <emu-xref href="#pattern-charset" id="_ref_12157"><a href="text-processing.html#pattern-charset">CharSets</a></emu-xref> <var>A</var> and <var>B</var>.</li></ol></emu-alg>
|
||
|
||
<!-- ClassSubtraction -->
|
||
<emu-grammar><emu-production name="ClassSubtraction" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="0iwjxoz1" id="prod-NbIP4ydn">
|
||
<emu-nt id="_ref_24478"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
<emu-t>--</emu-t>
|
||
<emu-nt id="_ref_24479"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12158"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the first <emu-nt id="_ref_24480"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12159"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the second <emu-nt id="_ref_24481"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> with argument <var>rer</var>.</li><li>Return the <emu-xref href="#pattern-charset" id="_ref_12160"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the CharSetElements of <var>A</var> which are not also CharSetElements of <var>B</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSubtraction" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="pdtgdxpo" id="prod-rCqAsGUK">
|
||
<emu-nt id="_ref_24482"><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt>
|
||
<emu-t>--</emu-t>
|
||
<emu-nt id="_ref_24483"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12161"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the <emu-nt id="_ref_24484"><a href="text-processing.html#prod-ClassSubtraction">ClassSubtraction</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12162"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the <emu-nt id="_ref_24485"><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> with argument <var>rer</var>.</li><li>Return the <emu-xref href="#pattern-charset" id="_ref_12163"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the CharSetElements of <var>A</var> which are not also CharSetElements of <var>B</var>.</li></ol></emu-alg>
|
||
|
||
<!-- ClassSetRange -->
|
||
<emu-grammar><emu-production name="ClassSetRange" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetRange">ClassSetRange</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="olq8_w1t" id="prod-_hGzIVko">
|
||
<emu-nt id="_ref_24486"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
<emu-t>-</emu-t>
|
||
<emu-nt id="_ref_24487"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12164"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the first <emu-nt id="_ref_24488"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12165"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of the second <emu-nt id="_ref_24489"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> with argument <var>rer</var>.</li><li>Return <emu-xref aoid="MaybeSimpleCaseFolding" id="_ref_12166"><a href="text-processing.html#sec-maybesimplecasefolding">MaybeSimpleCaseFolding</a></emu-xref>(<var>rer</var>, <emu-xref aoid="CharacterRange" id="_ref_12167"><a href="text-processing.html#sec-runtime-semantics-characterrange-abstract-operation">CharacterRange</a></emu-xref>(<var>A</var>, <var>B</var>)).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note 6</span><div class="note-contents">
|
||
<p>The result will often consist of two or more ranges. When UnicodeSets is <emu-val>true</emu-val> and IgnoreCase is <emu-val>true</emu-val>, then <emu-xref aoid="MaybeSimpleCaseFolding" id="_ref_12168"><a href="text-processing.html#sec-maybesimplecasefolding">MaybeSimpleCaseFolding</a></emu-xref>(<var>rer</var>, [Ā-č]) will include only the odd-numbered code points of that range.</p>
|
||
</div></emu-note>
|
||
|
||
<!-- ClassSetOperand -->
|
||
<emu-grammar><emu-production name="ClassSetOperand" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="pbrz9y58" id="prod-CT-iOKlu"><emu-nt id="_ref_24490"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12169"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24491"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> with argument <var>rer</var>.</li><li>Return <emu-xref aoid="MaybeSimpleCaseFolding" id="_ref_12170"><a href="text-processing.html#sec-maybesimplecasefolding">MaybeSimpleCaseFolding</a></emu-xref>(<var>rer</var>, <var>A</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSetOperand" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="gmk8rsml" id="prod-Dc11md8Q"><emu-nt id="_ref_24492"><a href="text-processing.html#prod-ClassStringDisjunction">ClassStringDisjunction</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12171"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24493"><a href="text-processing.html#prod-ClassStringDisjunction">ClassStringDisjunction</a></emu-nt> with argument <var>rer</var>.</li><li>Return <emu-xref aoid="MaybeSimpleCaseFolding" id="_ref_12172"><a href="text-processing.html#sec-maybesimplecasefolding">MaybeSimpleCaseFolding</a></emu-xref>(<var>rer</var>, <var>A</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSetOperand" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetOperand">ClassSetOperand</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="bz00qqkp" id="prod-uLxuDcXH"><emu-nt id="_ref_24494"><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="CompileToCharSet" id="_ref_12173"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24495"><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt> with argument <var>rer</var>.</li></ol></emu-alg>
|
||
|
||
<!-- NestedClass -->
|
||
<emu-grammar><emu-production name="NestedClass" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="i-ml-nlt" id="prod-o6xG9Ln_">
|
||
<emu-t>[</emu-t>
|
||
<emu-nt id="_ref_24496"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="CompileToCharSet" id="_ref_12174"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24497"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> with argument <var>rer</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="NestedClass" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="d-swr39f" id="prod-FNPscJtz">
|
||
<emu-t>[^</emu-t>
|
||
<emu-nt id="_ref_24498"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt>
|
||
<emu-t>]</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12175"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24499"><a href="text-processing.html#prod-ClassContents">ClassContents</a></emu-nt> with argument <var>rer</var>.</li><li>Return <emu-xref aoid="CharacterComplement" id="_ref_12176"><a href="text-processing.html#sec-charactercomplement">CharacterComplement</a></emu-xref>(<var>rer</var>, <var>A</var>).</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="NestedClass" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NestedClass">NestedClass</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="fmrtucj_" id="prod-qeN2oG49">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24500"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="CompileToCharSet" id="_ref_12177"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24501"><a href="text-processing.html#prod-CharacterClassEscape">CharacterClassEscape</a></emu-nt> with argument <var>rer</var>.</li></ol></emu-alg>
|
||
|
||
<!-- ClassStringDisjunction -->
|
||
<emu-grammar><emu-production name="ClassStringDisjunction" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassStringDisjunction">ClassStringDisjunction</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="kjbhn6ad" id="prod-D8tzzCjX">
|
||
<emu-t>\q{</emu-t>
|
||
<emu-nt id="_ref_24502"><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt>
|
||
<emu-t>}</emu-t>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="CompileToCharSet" id="_ref_12178"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24503"><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt> with argument <var>rer</var>.</li></ol></emu-alg>
|
||
|
||
<!-- ClassStringDisjunctionContents -->
|
||
<emu-grammar><emu-production name="ClassStringDisjunctionContents" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="-skvesn5" id="prod-S1fk5A6Q"><emu-nt id="_ref_24504"><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>s</var> be <emu-xref aoid="CompileClassSetString" id="_ref_12179"><a href="text-processing.html#sec-compileclasssetstring">CompileClassSetString</a></emu-xref> of <emu-nt id="_ref_24505"><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt> with argument <var>rer</var>.</li><li>Return the <emu-xref href="#pattern-charset" id="_ref_12180"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the one string <var>s</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassStringDisjunctionContents" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="bsmwgovm" id="prod-r5_vzTE6">
|
||
<emu-nt id="_ref_24506"><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt>
|
||
<emu-t>|</emu-t>
|
||
<emu-nt id="_ref_24507"><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>s</var> be <emu-xref aoid="CompileClassSetString" id="_ref_12181"><a href="text-processing.html#sec-compileclasssetstring">CompileClassSetString</a></emu-xref> of <emu-nt id="_ref_24508"><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>A</var> be the <emu-xref href="#pattern-charset" id="_ref_12182"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the one string <var>s</var>.</li><li>Let <var>B</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12183"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24509"><a href="text-processing.html#prod-ClassStringDisjunctionContents">ClassStringDisjunctionContents</a></emu-nt> with argument <var>rer</var>.</li><li>Return the union of <emu-xref href="#pattern-charset" id="_ref_12184"><a href="text-processing.html#pattern-charset">CharSets</a></emu-xref> <var>A</var> and <var>B</var>.</li></ol></emu-alg>
|
||
|
||
<!-- ClassSetCharacter -->
|
||
<emu-grammar><emu-production name="ClassSetCharacter" type="lexical">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="kyrub20l" id="prod-VEApxZ79">
|
||
<emu-nt id="_ref_24510"><a href="ecmascript-language-source-code.html#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_24511"><a href="text-processing.html#prod-ClassSetSyntaxCharacter">ClassSetSyntaxCharacter</a></emu-nt></emu-gmod>
|
||
</emu-rhs>
|
||
<emu-rhs a="ihzyy-yc" id="prod-opgR2DMh">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24512"><a href="text-processing.html#prod-CharacterEscape">CharacterEscape</a></emu-nt>
|
||
</emu-rhs>
|
||
<emu-rhs a="xyoixwqd" id="prod-yQoZkx34">
|
||
<emu-t>\</emu-t>
|
||
<emu-nt id="_ref_24513"><a href="text-processing.html#prod-ClassSetReservedPunctuator">ClassSetReservedPunctuator</a></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>cv</var> be the <emu-xref aoid="CharacterValue" id="_ref_12185"><a href="text-processing.html#sec-patterns-static-semantics-character-value">CharacterValue</a></emu-xref> of this <emu-nt id="_ref_24514"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>.</li><li>Let <var>c</var> be the character whose character value is <var>cv</var>.</li><li>Return the <emu-xref href="#pattern-charset" id="_ref_12186"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the single character <var>c</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassSetCharacter" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="axxsqknu" id="prod-lqd7zk2t"><emu-t>\b</emu-t></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return the <emu-xref href="#pattern-charset" id="_ref_12187"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the single character U+0008 (BACKSPACE).</li></ol></emu-alg>
|
||
|
||
<emu-clause id="sec-runtime-semantics-characterrange-abstract-operation" type="abstract operation" aoid="CharacterRange">
|
||
<h1><span class="secnum">22.2.2.9.1</span> CharacterRange ( <var>A</var>, <var>B</var> )</h1>
|
||
<p>The abstract operation CharacterRange takes arguments <var>A</var> (a <emu-xref href="#pattern-charset" id="_ref_12188"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>) and <var>B</var> (a <emu-xref href="#pattern-charset" id="_ref_12189"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>) and returns a <emu-xref href="#pattern-charset" id="_ref_12190"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_12191"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>A</var> and <var>B</var> each contain exactly one character.</li><li>Let <var>a</var> be the one character in <emu-xref href="#pattern-charset" id="_ref_12192"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> <var>A</var>.</li><li>Let <var>b</var> be the one character in <emu-xref href="#pattern-charset" id="_ref_12193"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> <var>B</var>.</li><li>Let <var>i</var> be the character value of character <var>a</var>.</li><li>Let <var>j</var> be the character value of character <var>b</var>.</li><li><emu-xref href="#assert" id="_ref_12194"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>i</var> ≤ <var>j</var>.</li><li>Return the <emu-xref href="#pattern-charset" id="_ref_12195"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all characters with a character value in the <emu-xref href="#inclusive-interval" id="_ref_12196"><a href="notational-conventions.html#inclusive-interval">inclusive interval</a></emu-xref> from <var>i</var> to <var>j</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-runtime-semantics-haseitherunicodeflag-abstract-operation" type="abstract operation" aoid="HasEitherUnicodeFlag">
|
||
<h1><span class="secnum">22.2.2.9.2</span> HasEitherUnicodeFlag ( <var>rer</var> )</h1>
|
||
<p>The abstract operation HasEitherUnicodeFlag takes argument <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12197"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and returns a Boolean. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>rer</var>.<var class="field">[[Unicode]]</var> is <emu-val>true</emu-val> or <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-wordcharacters" type="abstract operation" oldids="sec-runtime-semantics-wordcharacters-abstract-operation" aoid="WordCharacters"><span id="sec-runtime-semantics-wordcharacters-abstract-operation"></span>
|
||
<h1><span class="secnum">22.2.2.9.3</span> WordCharacters ( <var>rer</var> )</h1>
|
||
<p>The abstract operation WordCharacters takes argument <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12198"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and returns a <emu-xref href="#pattern-charset" id="_ref_12199"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>. Returns a <emu-xref href="#pattern-charset" id="_ref_12200"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the characters considered "word characters" for the purposes of <code>\b</code>, <code>\B</code>, <code>\w</code>, and <code>\W</code> It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>basicWordChars</var> be the <emu-xref href="#pattern-charset" id="_ref_12201"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing every character in <emu-xref href="#ASCII-word-characters" id="_ref_12202"><a href="ecmascript-data-types-and-values.html#ASCII-word-characters">the ASCII word characters</a></emu-xref>.</li><li>Let <var>extraWordChars</var> be the <emu-xref href="#pattern-charset" id="_ref_12203"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all characters <var>c</var> such that <var>c</var> is not in <var>basicWordChars</var> but <emu-xref aoid="Canonicalize" id="_ref_12204"><a href="text-processing.html#sec-runtime-semantics-canonicalize-ch">Canonicalize</a></emu-xref>(<var>rer</var>, <var>c</var>) is in <var>basicWordChars</var>.</li><li><emu-xref href="#assert" id="_ref_12205"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>extraWordChars</var> is empty unless <emu-xref aoid="HasEitherUnicodeFlag" id="_ref_12206"><a href="text-processing.html#sec-runtime-semantics-haseitherunicodeflag-abstract-operation">HasEitherUnicodeFlag</a></emu-xref>(<var>rer</var>) is <emu-val>true</emu-val> and <var>rer</var>.<var class="field">[[IgnoreCase]]</var> is <emu-val>true</emu-val>.</li><li>Return the union of <var>basicWordChars</var> and <var>extraWordChars</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-allcharacters" type="abstract operation" aoid="AllCharacters">
|
||
<h1><span class="secnum">22.2.2.9.4</span> AllCharacters ( <var>rer</var> )</h1>
|
||
<p>The abstract operation AllCharacters takes argument <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12207"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and returns a <emu-xref href="#pattern-charset" id="_ref_12208"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>. Returns the set of “all characters” according to the regular expression flags. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>true</emu-val> and <var>rer</var>.<var class="field">[[IgnoreCase]]</var> is <emu-val>true</emu-val>, then<ol><li declared="c">Return the <emu-xref href="#pattern-charset" id="_ref_12209"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all Unicode code points <var>c</var> that do not have a <a href="https://www.unicode.org/reports/tr44/#Simple_Case_Folding">Simple Case Folding</a> mapping (that is, <emu-xref aoid="scf" id="_ref_12210"><a href="text-processing.html#eqn-scf">scf</a></emu-xref>(<var>c</var>)=<var>c</var>).</li></ol></li><li>If <emu-xref aoid="HasEitherUnicodeFlag" id="_ref_12211"><a href="text-processing.html#sec-runtime-semantics-haseitherunicodeflag-abstract-operation">HasEitherUnicodeFlag</a></emu-xref>(<var>rer</var>) is <emu-val>true</emu-val>, then<ol><li>Return the <emu-xref href="#pattern-charset" id="_ref_12212"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all code point values.</li></ol></li><li>Return the <emu-xref href="#pattern-charset" id="_ref_12213"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing all code unit values.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-maybesimplecasefolding" type="abstract operation" aoid="MaybeSimpleCaseFolding">
|
||
<h1><span class="secnum">22.2.2.9.5</span> MaybeSimpleCaseFolding ( <var>rer</var>, <var>A</var> )</h1>
|
||
<p>The abstract operation MaybeSimpleCaseFolding takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12214"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and <var>A</var> (a <emu-xref href="#pattern-charset" id="_ref_12215"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>) and returns a <emu-xref href="#pattern-charset" id="_ref_12216"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>. If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>false</emu-val> or <var>rer</var>.<var class="field">[[IgnoreCase]]</var> is <emu-val>false</emu-val>, it returns <var>A</var>. Otherwise, it uses the <a href="https://www.unicode.org/reports/tr44/#Simple_Case_Folding">Simple Case Folding</a> (<emu-eqn id="eqn-scf" aoid="scf" class="inline">scf(<var>cp</var>)</emu-eqn>) definitions in the file <a href="https://unicode.org/Public/UCD/latest/ucd/CaseFolding.txt"><code>CaseFolding.txt</code></a> of the Unicode Character Database (each of which maps a single code point to another single code point) to map each <emu-xref href="#sec-pattern-notation" id="_ref_12217"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> of <var>A</var> character-by-character into a canonical form and returns the resulting <emu-xref href="#pattern-charset" id="_ref_12218"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>false</emu-val> or <var>rer</var>.<var class="field">[[IgnoreCase]]</var> is <emu-val>false</emu-val>, return <var>A</var>.</li><li>Let <var>B</var> be a new empty <emu-xref href="#pattern-charset" id="_ref_12219"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>.</li><li>For each <emu-xref href="#sec-pattern-notation" id="_ref_12220"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> <var>s</var> of <var>A</var>, do<ol><li>Let <var>t</var> be an empty sequence of characters.</li><li>For each single code point <var>cp</var> in <var>s</var>, do<ol><li>Append <emu-xref aoid="scf" id="_ref_12221"><a href="text-processing.html#eqn-scf">scf</a></emu-xref>(<var>cp</var>) to <var>t</var>.</li></ol></li><li>Add <var>t</var> to <var>B</var>.</li></ol></li><li>Return <var>B</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-charactercomplement" type="abstract operation" aoid="CharacterComplement">
|
||
<h1><span class="secnum">22.2.2.9.6</span> CharacterComplement ( <var>rer</var>, <var>S</var> )</h1>
|
||
<p>The abstract operation CharacterComplement takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12222"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and <var>S</var> (a <emu-xref href="#pattern-charset" id="_ref_12223"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>) and returns a <emu-xref href="#pattern-charset" id="_ref_12224"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>A</var> be <emu-xref aoid="AllCharacters" id="_ref_12225"><a href="text-processing.html#sec-allcharacters">AllCharacters</a></emu-xref>(<var>rer</var>).</li><li>Return the <emu-xref href="#pattern-charset" id="_ref_12226"><a href="text-processing.html#pattern-charset">CharSet</a></emu-xref> containing the CharSetElements of <var>A</var> which are not also CharSetElements of <var>S</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-runtime-semantics-unicodematchproperty-p" type="abstract operation" aoid="UnicodeMatchProperty">
|
||
<h1><span class="secnum">22.2.2.9.7</span> UnicodeMatchProperty ( <var>rer</var>, <var>p</var> )</h1>
|
||
<p>The abstract operation UnicodeMatchProperty takes arguments <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12227"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and <var>p</var> (<emu-xref href="#sec-source-text" id="_ref_12228"><a href="ecmascript-language-source-code.html#sec-source-text">ECMAScript source text</a></emu-xref>) and returns a <emu-not-ref>Unicode property name</emu-not-ref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>rer</var>.<var class="field">[[UnicodeSets]]</var> is <emu-val>true</emu-val> and <var>p</var> is a <emu-not-ref>Unicode property name</emu-not-ref> listed in the “<emu-not-ref>Property name</emu-not-ref>” column of <emu-xref href="#table-binary-unicode-properties-of-strings" id="_ref_700"><a href="text-processing.html#table-binary-unicode-properties-of-strings">Table 66</a></emu-xref>, then<ol><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12229"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Unicode code points <var>p</var>.</li></ol></li><li><emu-xref href="#assert" id="_ref_12230"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>p</var> is a <emu-not-ref>Unicode property name</emu-not-ref> or property alias listed in the “<emu-not-ref>Property name and aliases</emu-not-ref>” column of <emu-xref href="#table-nonbinary-unicode-properties" id="_ref_701"><a href="text-processing.html#table-nonbinary-unicode-properties">Table 64</a></emu-xref> or <emu-xref href="#table-binary-unicode-properties" id="_ref_702"><a href="text-processing.html#table-binary-unicode-properties">Table 65</a></emu-xref>.</li><li>Let <var>c</var> be the canonical <emu-not-ref>property name</emu-not-ref> of <var>p</var> as given in the “<emu-not-ref>Canonical property name</emu-not-ref>” column of the corresponding row.</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12231"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Unicode code points <var>c</var>.</li></ol></emu-alg>
|
||
<p>Implementations must support the <emu-not-ref>Unicode property names</emu-not-ref> and aliases listed in <emu-xref href="#table-nonbinary-unicode-properties" id="_ref_703"><a href="text-processing.html#table-nonbinary-unicode-properties">Table 64</a></emu-xref>, <emu-xref href="#table-binary-unicode-properties" id="_ref_704"><a href="text-processing.html#table-binary-unicode-properties">Table 65</a></emu-xref>, and <emu-xref href="#table-binary-unicode-properties-of-strings" id="_ref_705"><a href="text-processing.html#table-binary-unicode-properties-of-strings">Table 66</a></emu-xref>. To ensure interoperability, implementations must not support any other <emu-not-ref>property names</emu-not-ref> or aliases.</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>For example, <code>Script_Extensions</code> (<emu-not-ref>property name</emu-not-ref>) and <code>scx</code> (property alias) are valid, but <code>script_extensions</code> or <code>Scx</code> aren't.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>The listed properties form a superset of what <a href="https://unicode.org/reports/tr18/#RL1.2">UTS18 RL1.2</a> requires.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 3</span><div class="note-contents">
|
||
<p>The spellings of entries in these tables (including casing) match the spellings used in the file <a href="https://unicode.org/Public/UCD/latest/ucd/PropertyAliases.txt"><code>PropertyAliases.txt</code></a> in the Unicode Character Database. The precise spellings in that file are <a href="https://www.unicode.org/policies/stability_policy.html#Alias_Stability">guaranteed to be stable</a>.</p>
|
||
</div></emu-note>
|
||
<emu-table id="table-nonbinary-unicode-properties"><figure><figcaption>Table 64: Non-binary Unicode property aliases and their canonical <emu-not-ref>property names</emu-not-ref></figcaption>
|
||
|
||
<table class="real-table unicode-property-table">
|
||
<thead>
|
||
<tr>
|
||
<th><emu-not-ref>Property name and aliases</emu-not-ref></th>
|
||
<th><emu-not-ref>Canonical property name</emu-not-ref></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><code>General_Category</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr18/#General_Category_Property"><code>General_Category</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>gc</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Script</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr24/#Script"><code>Script</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>sc</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Script_Extensions</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr24/#Script_Extensions"><code>Script_Extensions</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>scx</code></td>
|
||
</tr>
|
||
</tbody></table>
|
||
</figure></emu-table>
|
||
|
||
<emu-table id="table-binary-unicode-properties"><figure><figcaption>Table 65: Binary Unicode property aliases and their canonical <emu-not-ref>property names</emu-not-ref></figcaption>
|
||
|
||
<table class="real-table unicode-property-table">
|
||
<thead>
|
||
<tr>
|
||
<th><emu-not-ref>Property name and aliases</emu-not-ref></th>
|
||
<th><emu-not-ref>Canonical property name</emu-not-ref></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><code>ASCII</code></td>
|
||
<td><a href="https://unicode.org/reports/tr18/#General_Category_Property"><code>ASCII</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>ASCII_Hex_Digit</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#ASCII_Hex_Digit"><code>ASCII_Hex_Digit</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>AHex</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Alphabetic</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Alphabetic"><code>Alphabetic</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Alpha</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Any</code></td>
|
||
<td><a href="https://unicode.org/reports/tr18/#General_Category_Property"><code>Any</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Assigned</code></td>
|
||
<td><a href="https://unicode.org/reports/tr18/#General_Category_Property"><code>Assigned</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Bidi_Control</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Bidi_Control"><code>Bidi_Control</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Bidi_C</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Bidi_Mirrored</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Bidi_Mirrored"><code>Bidi_Mirrored</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Bidi_M</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Case_Ignorable</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Case_Ignorable"><code>Case_Ignorable</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>CI</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Cased</code></td>
|
||
<td><a href="https://unicode.org/reports/tr44/#Cased"><code>Cased</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Changes_When_Casefolded</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#CWCF"><code>Changes_When_Casefolded</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>CWCF</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Changes_When_Casemapped</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#CWCM"><code>Changes_When_Casemapped</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>CWCM</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Changes_When_Lowercased</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#CWL"><code>Changes_When_Lowercased</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>CWL</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Changes_When_NFKC_Casefolded</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#CWKCF"><code>Changes_When_NFKC_Casefolded</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>CWKCF</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Changes_When_Titlecased</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#CWT"><code>Changes_When_Titlecased</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>CWT</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Changes_When_Uppercased</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#CWU"><code>Changes_When_Uppercased</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>CWU</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Dash</code></td>
|
||
<td><a href="https://unicode.org/reports/tr44/#Dash"><code>Dash</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Default_Ignorable_Code_Point</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Default_Ignorable_Code_Point"><code>Default_Ignorable_Code_Point</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>DI</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Deprecated</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Deprecated"><code>Deprecated</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Dep</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Diacritic</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Diacritic"><code>Diacritic</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Dia</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Emoji</code></td>
|
||
<td><a href="https://unicode.org/reports/tr51/#Emoji_Properties"><code>Emoji</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Emoji_Component</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr51/#Emoji_Properties"><code>Emoji_Component</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>EComp</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Emoji_Modifier</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr51/#Emoji_Properties"><code>Emoji_Modifier</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>EMod</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Emoji_Modifier_Base</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr51/#Emoji_Properties"><code>Emoji_Modifier_Base</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>EBase</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Emoji_Presentation</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr51/#Emoji_Properties"><code>Emoji_Presentation</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>EPres</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Extended_Pictographic</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr51/#Emoji_Properties"><code>Extended_Pictographic</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>ExtPict</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Extender</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Extender"><code>Extender</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Ext</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Grapheme_Base</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Grapheme_Base"><code>Grapheme_Base</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Gr_Base</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Grapheme_Extend</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Grapheme_Extend"><code>Grapheme_Extend</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Gr_Ext</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Hex_Digit</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Hex_Digit"><code>Hex_Digit</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Hex</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>IDS_Binary_Operator</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#IDS_Binary_Operator"><code>IDS_Binary_Operator</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>IDSB</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>IDS_Trinary_Operator</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#IDS_Trinary_Operator"><code>IDS_Trinary_Operator</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>IDST</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>ID_Continue</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#ID_Continue"><code>ID_Continue</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>IDC</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>ID_Start</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#ID_Start"><code>ID_Start</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>IDS</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Ideographic</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Ideographic"><code>Ideographic</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Ideo</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Join_Control</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Join_Control"><code>Join_Control</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Join_C</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Logical_Order_Exception</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Logical_Order_Exception"><code>Logical_Order_Exception</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>LOE</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Lowercase</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Lowercase"><code>Lowercase</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Lower</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Math</code></td>
|
||
<td><a href="https://unicode.org/reports/tr44/#Math"><code>Math</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Noncharacter_Code_Point</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Noncharacter_Code_Point"><code>Noncharacter_Code_Point</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>NChar</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Pattern_Syntax</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Pattern_Syntax"><code>Pattern_Syntax</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Pat_Syn</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Pattern_White_Space</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Pattern_White_Space"><code>Pattern_White_Space</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Pat_WS</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Quotation_Mark</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Quotation_Mark"><code>Quotation_Mark</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>QMark</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Radical</code></td>
|
||
<td><a href="https://unicode.org/reports/tr44/#Radical"><code>Radical</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Regional_Indicator</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Regional_Indicator"><code>Regional_Indicator</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>RI</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Sentence_Terminal</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#STerm"><code>Sentence_Terminal</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>STerm</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Soft_Dotted</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Soft_Dotted"><code>Soft_Dotted</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>SD</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Terminal_Punctuation</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Terminal_Punctuation"><code>Terminal_Punctuation</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Term</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Unified_Ideograph</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Unified_Ideograph"><code>Unified_Ideograph</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>UIdeo</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Uppercase</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Uppercase"><code>Uppercase</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Upper</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Variation_Selector</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#Variation_Selector"><code>Variation_Selector</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>VS</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>White_Space</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#White_Space"><code>White_Space</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>space</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>XID_Continue</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#XID_Continue"><code>XID_Continue</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>XIDC</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>XID_Start</code></td>
|
||
<td rowspan="2"><a href="https://unicode.org/reports/tr44/#XID_Start"><code>XID_Start</code></a></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>XIDS</code></td>
|
||
</tr>
|
||
</tbody></table>
|
||
</figure></emu-table>
|
||
|
||
<emu-table id="table-binary-unicode-properties-of-strings"><figure><figcaption>Table 66: Binary Unicode properties of strings</figcaption>
|
||
|
||
<table class="real-table unicode-property-table">
|
||
<thead>
|
||
<tr>
|
||
<th><emu-not-ref>Property name</emu-not-ref></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><code>Basic_Emoji</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>Emoji_Keycap_Sequence</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>RGI_Emoji_Modifier_Sequence</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>RGI_Emoji_Flag_Sequence</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>RGI_Emoji_Tag_Sequence</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>RGI_Emoji_ZWJ_Sequence</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>RGI_Emoji</code></td>
|
||
</tr>
|
||
</tbody></table>
|
||
</figure></emu-table>
|
||
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-runtime-semantics-unicodematchpropertyvalue-p-v" type="abstract operation" aoid="UnicodeMatchPropertyValue">
|
||
<h1><span class="secnum">22.2.2.9.8</span> UnicodeMatchPropertyValue ( <var>p</var>, <var>v</var> )</h1>
|
||
<p>The abstract operation UnicodeMatchPropertyValue takes arguments <var>p</var> (<emu-xref href="#sec-source-text" id="_ref_12232"><a href="ecmascript-language-source-code.html#sec-source-text">ECMAScript source text</a></emu-xref>) and <var>v</var> (<emu-xref href="#sec-source-text" id="_ref_12233"><a href="ecmascript-language-source-code.html#sec-source-text">ECMAScript source text</a></emu-xref>) and returns a Unicode property value. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_12234"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>p</var> is a canonical, unaliased <emu-not-ref>Unicode property name</emu-not-ref> listed in the “<emu-not-ref>Canonical property name</emu-not-ref>” column of <emu-xref href="#table-nonbinary-unicode-properties" id="_ref_706"><a href="text-processing.html#table-nonbinary-unicode-properties">Table 64</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_12235"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>v</var> is a property value or property value alias for the Unicode property <var>p</var> listed in <a href="https://unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt"><code>PropertyValueAliases.txt</code></a>.</li><li>Let <var>value</var> be the canonical property value of <var>v</var> as given in the “Canonical property value” column of the corresponding row.</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12236"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Unicode code points <var>value</var>.</li></ol></emu-alg>
|
||
<p>Implementations must support the Unicode property values and property value aliases listed in <a href="https://unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt"><code>PropertyValueAliases.txt</code></a> for the properties listed in <emu-xref href="#table-nonbinary-unicode-properties" id="_ref_707"><a href="text-processing.html#table-nonbinary-unicode-properties">Table 64</a></emu-xref>. To ensure interoperability, implementations must not support any other property values or property value aliases.</p>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>For example, <code>Xpeo</code> and <code>Old_Persian</code> are valid <code>Script_Extensions</code> values, but <code>xpeo</code> and <code>Old Persian</code> aren't.</p>
|
||
</div></emu-note>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This algorithm differs from <a href="https://unicode.org/reports/tr44/#Matching_Symbolic">the matching rules for symbolic values listed in UAX44</a>: case, <emu-xref href="#sec-white-space" id="_ref_708"><a href="ecmascript-language-lexical-grammar.html#sec-white-space">white space</a></emu-xref>, U+002D (HYPHEN-MINUS), and U+005F (LOW LINE) are not ignored, and the <code>Is</code> prefix is not supported.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-compileclasssetstring" type="sdo" aoid="CompileClassSetString">
|
||
<h1><span class="secnum">22.2.2.10</span> Runtime Semantics: CompileClassSetString</h1>
|
||
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_12237"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> CompileClassSetString takes argument <var>rer</var> (a <emu-xref href="#sec-regexp-records" id="_ref_12238"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref>) and returns a sequence of characters. It is defined piecewise over the following productions:</p>
|
||
|
||
<emu-grammar><emu-production name="ClassString" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="n7nathbb" id="prod-OhiYT-qV"><emu-gann>[empty]</emu-gann></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return an empty sequence of characters.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="ClassString" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-ClassString">ClassString</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="zzzearnw" id="prod-DqGvYEuY"><emu-nt id="_ref_24515"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt></emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Return <emu-xref aoid="CompileClassSetString" id="_ref_12239"><a href="text-processing.html#sec-compileclasssetstring">CompileClassSetString</a></emu-xref> of <emu-nt id="_ref_24516"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt> with argument <var>rer</var>.</li></ol></emu-alg>
|
||
<emu-grammar><emu-production name="NonEmptyClassString" type="lexical" collapsed="">
|
||
<emu-nt><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="g-kpie7v" id="prod-ew3HL5wc">
|
||
<emu-nt id="_ref_24517"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt>
|
||
<emu-nt optional="" id="_ref_24518"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
||
</emu-rhs>
|
||
</emu-production>
|
||
</emu-grammar>
|
||
<emu-alg><ol><li>Let <var>cs</var> be <emu-xref aoid="CompileToCharSet" id="_ref_12240"><a href="text-processing.html#sec-compiletocharset">CompileToCharSet</a></emu-xref> of <emu-nt id="_ref_24519"><a href="text-processing.html#prod-ClassSetCharacter">ClassSetCharacter</a></emu-nt> with argument <var>rer</var>.</li><li>Let <var>s1</var> be the sequence of characters that is the single <emu-xref href="#sec-pattern-notation" id="_ref_12241"><a href="text-processing.html#sec-pattern-notation">CharSetElement</a></emu-xref> of <var>cs</var>.</li><li>If <emu-nt id="_ref_24520"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt> is present, then<ol><li>Let <var>s2</var> be <emu-xref aoid="CompileClassSetString" id="_ref_12242"><a href="text-processing.html#sec-compileclasssetstring">CompileClassSetString</a></emu-xref> of <emu-nt id="_ref_24521"><a href="text-processing.html#prod-NonEmptyClassString">NonEmptyClassString</a></emu-nt> with argument <var>rer</var>.</li><li>Return the concatenation of <var>s1</var> and <var>s2</var>.</li></ol></li><li>Return <var>s1</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-abstract-operations-for-regexp-creation" oldids="sec-abstract-operations-for-the-regexp-constructor"><span id="sec-abstract-operations-for-the-regexp-constructor"></span>
|
||
<h1><span class="secnum">22.2.3</span> Abstract Operations for RegExp Creation</h1>
|
||
|
||
<emu-clause id="sec-regexpcreate" type="abstract operation" aoid="RegExpCreate">
|
||
<h1><span class="secnum">22.2.3.1</span> RegExpCreate ( <var>P</var>, <var>F</var> )</h1>
|
||
<p>The abstract operation RegExpCreate takes arguments <var>P</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_12243"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>F</var> (a String or <emu-val>undefined</emu-val>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12244"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12245"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>obj</var> be ! <emu-xref aoid="RegExpAlloc" id="_ref_12246"><a href="text-processing.html#sec-regexpalloc">RegExpAlloc</a></emu-xref>(<emu-xref href="#sec-regexp-constructor" id="_ref_12247"><a href="text-processing.html#sec-regexp-constructor">%RegExp%</a></emu-xref>).</li><li>Return ? <emu-xref aoid="RegExpInitialize" id="_ref_12248"><a href="text-processing.html#sec-regexpinitialize" class="e-user-code">RegExpInitialize</a></emu-xref>(<var>obj</var>, <var>P</var>, <var>F</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexpalloc" type="abstract operation" aoid="RegExpAlloc">
|
||
<h1><span class="secnum">22.2.3.2</span> RegExpAlloc ( <var>newTarget</var> )</h1>
|
||
<p>The abstract operation RegExpAlloc takes argument <var>newTarget</var> (a <emu-xref href="#constructor" id="_ref_12249"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12250"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12251"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>obj</var> be ? <emu-xref aoid="OrdinaryCreateFromConstructor" id="_ref_12252"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycreatefromconstructor" class="e-user-code">OrdinaryCreateFromConstructor</a></emu-xref>(<var>newTarget</var>, <emu-val>"%RegExp.prototype%"</emu-val>, « <var class="field">[[OriginalSource]]</var>, <var class="field">[[OriginalFlags]]</var>, <var class="field">[[RegExpRecord]]</var>, <var class="field">[[RegExpMatcher]]</var> »).</li><li>Perform ! <emu-xref aoid="DefinePropertyOrThrow" id="_ref_12253"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>obj</var>, <emu-val>"lastIndex"</emu-val>, PropertyDescriptor { <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }).</li><li>Return <var>obj</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexpinitialize" type="abstract operation" aoid="RegExpInitialize">
|
||
<h1><span class="secnum">22.2.3.3</span> RegExpInitialize ( <var>obj</var>, <var>pattern</var>, <var>flags</var> )</h1>
|
||
<p>The abstract operation RegExpInitialize takes arguments <var>obj</var> (an Object), <var>pattern</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_12254"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>flags</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_12255"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12256"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12257"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>pattern</var> is <emu-val>undefined</emu-val>, let <var>P</var> be the empty String.</li><li>Else, let <var>P</var> be ? <emu-xref aoid="ToString" id="_ref_12258"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>pattern</var>).</li><li>If <var>flags</var> is <emu-val>undefined</emu-val>, let <var>F</var> be the empty String.</li><li>Else, let <var>F</var> be ? <emu-xref aoid="ToString" id="_ref_12259"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>flags</var>).</li><li>If <var>F</var> contains any code unit other than <emu-val>"d"</emu-val>, <emu-val>"g"</emu-val>, <emu-val>"i"</emu-val>, <emu-val>"m"</emu-val>, <emu-val>"s"</emu-val>, <emu-val>"u"</emu-val>, <emu-val>"v"</emu-val>, or <emu-val>"y"</emu-val>, or if <var>F</var> contains any code unit more than once, throw a <emu-val>SyntaxError</emu-val> exception.</li><li>If <var>F</var> contains <emu-val>"i"</emu-val>, let <var>i</var> be <emu-val>true</emu-val>; else let <var>i</var> be <emu-val>false</emu-val>.</li><li>If <var>F</var> contains <emu-val>"m"</emu-val>, let <var>m</var> be <emu-val>true</emu-val>; else let <var>m</var> be <emu-val>false</emu-val>.</li><li>If <var>F</var> contains <emu-val>"s"</emu-val>, let <var>s</var> be <emu-val>true</emu-val>; else let <var>s</var> be <emu-val>false</emu-val>.</li><li>If <var>F</var> contains <emu-val>"u"</emu-val>, let <var>u</var> be <emu-val>true</emu-val>; else let <var>u</var> be <emu-val>false</emu-val>.</li><li>If <var>F</var> contains <emu-val>"v"</emu-val>, let <var>v</var> be <emu-val>true</emu-val>; else let <var>v</var> be <emu-val>false</emu-val>.</li><li>If <var>u</var> is <emu-val>true</emu-val> or <var>v</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>patternText</var> be <emu-xref aoid="StringToCodePoints" id="_ref_12260"><a href="ecmascript-language-source-code.html#sec-stringtocodepoints">StringToCodePoints</a></emu-xref>(<var>P</var>).</li></ol></li><li>Else,<ol><li>Let <var>patternText</var> be the result of interpreting each of <var>P</var>'s 16-bit elements as a Unicode BMP code point. UTF-16 decoding is not applied to the elements.</li></ol></li><li>Let <var>parseResult</var> be <emu-xref aoid="ParsePattern" id="_ref_12261"><a href="text-processing.html#sec-parsepattern">ParsePattern</a></emu-xref>(<var>patternText</var>, <var>u</var>, <var>v</var>).</li><li>If <var>parseResult</var> is a non-empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12262"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-val>SyntaxError</emu-val> objects, throw a <emu-val>SyntaxError</emu-val> exception.</li><li><emu-xref href="#assert" id="_ref_12263"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>parseResult</var> is a <emu-nt id="_ref_24522"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_12264"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>.</li><li>Set <var>obj</var>.<var class="field">[[OriginalSource]]</var> to <var>P</var>.</li><li>Set <var>obj</var>.<var class="field">[[OriginalFlags]]</var> to <var>F</var>.</li><li>Let <var>capturingGroupsCount</var> be <emu-xref aoid="CountLeftCapturingParensWithin" id="_ref_12265"><a href="text-processing.html#sec-countleftcapturingparenswithin">CountLeftCapturingParensWithin</a></emu-xref>(<var>parseResult</var>).</li><li>Let <var>rer</var> be the <emu-xref href="#sec-regexp-records" id="_ref_12266"><a href="text-processing.html#sec-regexp-records">RegExp Record</a></emu-xref> { <var class="field">[[IgnoreCase]]</var>: <var>i</var>, <var class="field">[[Multiline]]</var>: <var>m</var>, <var class="field">[[DotAll]]</var>: <var>s</var>, <var class="field">[[Unicode]]</var>: <var>u</var>, <var class="field">[[UnicodeSets]]</var>: <var>v</var>, <var class="field">[[CapturingGroupsCount]]</var>: <var>capturingGroupsCount</var> }.</li><li>Set <var>obj</var>.<var class="field">[[RegExpRecord]]</var> to <var>rer</var>.</li><li>Set <var>obj</var>.<var class="field">[[RegExpMatcher]]</var> to <emu-xref aoid="CompilePattern" id="_ref_12267"><a href="text-processing.html#sec-compilepattern">CompilePattern</a></emu-xref> of <var>parseResult</var> with argument <var>rer</var>.</li><li>Perform ? <emu-xref aoid="Set" id="_ref_12268"><a href="abstract-operations.html#sec-set-o-p-v-throw">Set</a></emu-xref>(<var>obj</var>, <emu-val>"lastIndex"</emu-val>, <emu-val>+0</emu-val><sub>𝔽</sub>, <emu-val>true</emu-val>).</li><li>Return <var>obj</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-parsepattern" type="abstract operation" aoid="ParsePattern">
|
||
<h1><span class="secnum">22.2.3.4</span> Static Semantics: ParsePattern ( <var>patternText</var>, <var>u</var>, <var>v</var> )</h1>
|
||
<p>The abstract operation ParsePattern takes arguments <var>patternText</var> (a sequence of Unicode code points), <var>u</var> (a Boolean), and <var>v</var> (a Boolean) and returns a <emu-xref href="#sec-syntactic-grammar" id="_ref_12269"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref> or a non-empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12270"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-val>SyntaxError</emu-val> objects.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>This section is amended in <emu-xref href="#sec-parsepattern-annexb" id="_ref_709"><a href="additional-ecmascript-features-for-web-browsers.html#sec-parsepattern-annexb">B.1.2.9</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>v</var> is <emu-val>true</emu-val> and <var>u</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>parseResult</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12271"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> containing one or more <emu-val>SyntaxError</emu-val> objects.</li></ol></li><li>Else if <var>v</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>parseResult</var> be <emu-xref aoid="ParseText" id="_ref_12272"><a href="ecmascript-language-source-code.html#sec-parsetext">ParseText</a></emu-xref>(<var>patternText</var>, <emu-nt params="+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups" id="_ref_24523"><a href="text-processing.html#prod-Pattern">Pattern</a><emu-mods><emu-params>[+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups]</emu-params></emu-mods></emu-nt>).</li></ol></li><li>Else if <var>u</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>parseResult</var> be <emu-xref aoid="ParseText" id="_ref_12273"><a href="ecmascript-language-source-code.html#sec-parsetext">ParseText</a></emu-xref>(<var>patternText</var>, <emu-nt params="+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups" id="_ref_24524"><a href="text-processing.html#prod-Pattern">Pattern</a><emu-mods><emu-params>[+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]</emu-params></emu-mods></emu-nt>).</li></ol></li><li>Else,<ol><li>Let <var>parseResult</var> be <emu-xref aoid="ParseText" id="_ref_12274"><a href="ecmascript-language-source-code.html#sec-parsetext">ParseText</a></emu-xref>(<var>patternText</var>, <emu-nt params="~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups" id="_ref_24525"><a href="text-processing.html#prod-Pattern">Pattern</a><emu-mods><emu-params>[~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]</emu-params></emu-mods></emu-nt>).</li></ol></li><li>Return <var>parseResult</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexp-constructor">
|
||
<h1><span class="secnum">22.2.4</span> The RegExp Constructor</h1>
|
||
<p>The RegExp <emu-xref href="#constructor" id="_ref_12275"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>:</p>
|
||
<ul>
|
||
<li>is <dfn tabindex="-1">%RegExp%</dfn>.</li>
|
||
<li>is the initial value of the <emu-val>"RegExp"</emu-val> property of the <emu-xref href="#sec-global-object" id="_ref_12276"><a href="global-object.html#sec-global-object">global object</a></emu-xref>.</li>
|
||
<li>creates and initializes a new RegExp object when called as a <emu-xref href="#constructor" id="_ref_12277"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>.</li>
|
||
<li>when called as a function rather than as a <emu-xref href="#constructor" id="_ref_12278"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>, returns either a new RegExp object, or the argument itself if the only argument is a RegExp object.</li>
|
||
<li>may be used as the value of an <code>extends</code> clause of a class definition. Subclass <emu-xref href="#constructor" id="_ref_12279"><a href="ecmascript-data-types-and-values.html#constructor">constructors</a></emu-xref> that intend to inherit the specified RegExp behaviour must include a <code>super</code> call to the RegExp <emu-xref href="#constructor" id="_ref_12280"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> to create and initialize subclass instances with the necessary internal slots.</li>
|
||
</ul>
|
||
|
||
<emu-clause id="sec-regexp-pattern-flags" type="built-in function">
|
||
<h1><span class="secnum">22.2.4.1</span> RegExp ( <var>pattern</var>, <var>flags</var> )</h1>
|
||
<p>This function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>patternIsRegExp</var> be ? <emu-xref aoid="IsRegExp" id="_ref_12281"><a href="abstract-operations.html#sec-isregexp" class="e-user-code">IsRegExp</a></emu-xref>(<var>pattern</var>).</li><li>If NewTarget is <emu-val>undefined</emu-val>, then<ol><li>Let <var>newTarget</var> be the <emu-xref href="#active-function-object" id="_ref_12282"><a href="executable-code-and-execution-contexts.html#active-function-object">active function object</a></emu-xref>.</li><li>If <var>patternIsRegExp</var> is <emu-val>true</emu-val> and <var>flags</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>patternConstructor</var> be ? <emu-xref aoid="Get" id="_ref_12283"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>pattern</var>, <emu-val>"constructor"</emu-val>).</li><li>If <emu-xref aoid="SameValue" id="_ref_12284"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>newTarget</var>, <var>patternConstructor</var>) is <emu-val>true</emu-val>, return <var>pattern</var>.</li></ol></li></ol></li><li>Else,<ol><li>Let <var>newTarget</var> be NewTarget.</li></ol></li><li>If <var>pattern</var> <emu-xref href="#sec-object-type" id="_ref_12285"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref> and <var>pattern</var> has a <var class="field">[[RegExpMatcher]]</var> internal slot, then<ol><li>Let <var>P</var> be <var>pattern</var>.<var class="field">[[OriginalSource]]</var>.</li><li>If <var>flags</var> is <emu-val>undefined</emu-val>, let <var>F</var> be <var>pattern</var>.<var class="field">[[OriginalFlags]]</var>.</li><li>Else, let <var>F</var> be <var>flags</var>.</li></ol></li><li>Else if <var>patternIsRegExp</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>P</var> be ? <emu-xref aoid="Get" id="_ref_12286"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>pattern</var>, <emu-val>"source"</emu-val>).</li><li>If <var>flags</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>F</var> be ? <emu-xref aoid="Get" id="_ref_12287"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>pattern</var>, <emu-val>"flags"</emu-val>).</li></ol></li><li>Else,<ol><li>Let <var>F</var> be <var>flags</var>.</li></ol></li></ol></li><li>Else,<ol><li>Let <var>P</var> be <var>pattern</var>.</li><li>Let <var>F</var> be <var>flags</var>.</li></ol></li><li>Let <var>O</var> be ? <emu-xref aoid="RegExpAlloc" id="_ref_12288"><a href="text-processing.html#sec-regexpalloc" class="e-user-code">RegExpAlloc</a></emu-xref>(<var>newTarget</var>).</li><li>Return ? <emu-xref aoid="RegExpInitialize" id="_ref_12289"><a href="text-processing.html#sec-regexpinitialize" class="e-user-code">RegExpInitialize</a></emu-xref>(<var>O</var>, <var>P</var>, <var>F</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>If pattern is supplied using a <emu-nt id="_ref_24526"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>, the usual escape sequence substitutions are performed before the String is processed by this function. If pattern must contain an escape sequence to be recognized by this function, any U+005C (REVERSE SOLIDUS) code points must be escaped within the <emu-nt id="_ref_24527"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt> to prevent them being removed when the contents of the <emu-nt id="_ref_24528"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt> are formed.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-properties-of-the-regexp-constructor">
|
||
<h1><span class="secnum">22.2.5</span> Properties of the RegExp Constructor</h1>
|
||
<p>The RegExp <emu-xref href="#constructor" id="_ref_12290"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>:</p>
|
||
<ul>
|
||
<li>has a <var class="field">[[Prototype]]</var> internal slot whose value is <emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_12291"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>.</li>
|
||
<li>has the following properties:</li>
|
||
</ul>
|
||
|
||
<emu-clause id="sec-regexp.escape" type="built-in function">
|
||
<h1><span class="secnum">22.2.5.1</span> RegExp.escape ( <var>S</var> )</h1>
|
||
<p>This function returns a copy of <var>S</var> in which characters that are potentially special in a regular expression <emu-nt id="_ref_24529"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> have been replaced by equivalent escape sequences.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
|
||
<emu-alg><ol><li>If <var>S</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_12292"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is not a String</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>escaped</var> be the empty String.</li><li>Let <var>cpList</var> be <emu-xref aoid="StringToCodePoints" id="_ref_12293"><a href="ecmascript-language-source-code.html#sec-stringtocodepoints">StringToCodePoints</a></emu-xref>(<var>S</var>).</li><li>For each code point <var>cp</var> of <var>cpList</var>, do<ol><li>If <var>escaped</var> is the empty String and <var>cp</var> is matched by either <emu-nt id="_ref_24530"><a href="ecmascript-language-lexical-grammar.html#prod-DecimalDigit">DecimalDigit</a></emu-nt> or <emu-nt id="_ref_24531"><a href="ecmascript-language-lexical-grammar.html#prod-AsciiLetter">AsciiLetter</a></emu-nt>, then<ol><li>NOTE: Escaping a leading digit ensures that output corresponds with pattern text which may be used after a <code>\0</code> character escape or a <emu-nt id="_ref_24532"><a href="text-processing.html#prod-DecimalEscape">DecimalEscape</a></emu-nt> such as <code>\1</code> and still match <var>S</var> rather than be interpreted as an extension of the preceding escape sequence. Escaping a leading ASCII letter does the same for the context after <code>\c</code>.</li><li>Let <var>numericValue</var> be the numeric value of <var>cp</var>.</li><li>Let <var>hex</var> be <emu-xref aoid="Number::toString" id="_ref_12294"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-tostring">Number::toString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12295"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>numericValue</var>), 16).</li><li><emu-xref href="#assert" id="_ref_12296"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: The length of <var>hex</var> is 2.</li><li>Set <var>escaped</var> to the <emu-xref href="#string-concatenation" id="_ref_12297"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of the code unit 0x005C (REVERSE SOLIDUS), <emu-val>"x"</emu-val>, and <var>hex</var>.</li></ol></li><li>Else,<ol><li>Set <var>escaped</var> to the <emu-xref href="#string-concatenation" id="_ref_12298"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>escaped</var> and <emu-xref aoid="EncodeForRegExpEscape" id="_ref_12299"><a href="text-processing.html#sec-encodeforregexpescape">EncodeForRegExpEscape</a></emu-xref>(<var>cp</var>).</li></ol></li></ol></li><li>Return <var>escaped</var>.</li></ol></emu-alg>
|
||
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>Despite having similar names, <emu-xref aoid="EscapeRegExpPattern" id="_ref_12300"><a href="text-processing.html#sec-escaperegexppattern">EscapeRegExpPattern</a></emu-xref> and <code>RegExp.escape</code> do not perform similar actions. The former escapes a pattern for representation as a string, while this function escapes a string for representation inside a pattern.</p>
|
||
</div></emu-note>
|
||
|
||
<emu-clause id="sec-encodeforregexpescape" type="abstract operation" aoid="EncodeForRegExpEscape">
|
||
<h1><span class="secnum">22.2.5.1.1</span> EncodeForRegExpEscape ( <var>cp</var> )</h1>
|
||
<p>The abstract operation EncodeForRegExpEscape takes argument <var>cp</var> (a code point) and returns a String. It returns a String representing a <emu-nt id="_ref_24533"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> for matching <var>cp</var>. If <var>cp</var> is white space or an ASCII punctuator, the returned value is an escape sequence. Otherwise, the returned value <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_12301"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> representation of <var>cp</var> itself. It performs the following steps when called:</p>
|
||
|
||
<emu-alg><ol><li>If <var>cp</var> is matched by <emu-nt id="_ref_24534"><a href="text-processing.html#prod-SyntaxCharacter">SyntaxCharacter</a></emu-nt> or <var>cp</var> is U+002F (SOLIDUS), then<ol><li>Return the <emu-xref href="#string-concatenation" id="_ref_12302"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of 0x005C (REVERSE SOLIDUS) and <emu-xref aoid="UTF16EncodeCodePoint" id="_ref_12303"><a href="ecmascript-language-source-code.html#sec-utf16encodecodepoint">UTF16EncodeCodePoint</a></emu-xref>(<var>cp</var>).</li></ol></li><li>If <var>cp</var> is a code point listed in the “Code Point” column of <emu-xref href="#table-controlescape-code-point-values" id="_ref_710"><a href="text-processing.html#table-controlescape-code-point-values">Table 62</a></emu-xref>, then<ol><li>Return the <emu-xref href="#string-concatenation" id="_ref_12304"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of 0x005C (REVERSE SOLIDUS) and the string in the “ControlEscape” column of the row whose “Code Point” column contains <var>cp</var>.</li></ol></li><li>Let <var>otherPunctuators</var> be the <emu-xref href="#string-concatenation" id="_ref_12305"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <emu-val>",-=<>#&!%:;@~'`"</emu-val> and the code unit 0x0022 (QUOTATION MARK).</li><li>Let <var>toEscape</var> be <emu-xref aoid="StringToCodePoints" id="_ref_12306"><a href="ecmascript-language-source-code.html#sec-stringtocodepoints">StringToCodePoints</a></emu-xref>(<var>otherPunctuators</var>).</li><li>If <var>toEscape</var> contains <var>cp</var>, <var>cp</var> is matched by either <emu-nt id="_ref_24535"><a href="ecmascript-language-lexical-grammar.html#prod-WhiteSpace">WhiteSpace</a></emu-nt> or <emu-nt id="_ref_24536"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt>, or <var>cp</var> has the same numeric value as a <emu-xref href="#leading-surrogate" id="_ref_12307"><a href="ecmascript-data-types-and-values.html#leading-surrogate">leading surrogate</a></emu-xref> or <emu-xref href="#trailing-surrogate" id="_ref_12308"><a href="ecmascript-data-types-and-values.html#trailing-surrogate">trailing surrogate</a></emu-xref>, then<ol><li>Let <var>cpNum</var> be the numeric value of <var>cp</var>.</li><li>If <var>cpNum</var> ≤ 0xFF, then<ol><li>Let <var>hex</var> be <emu-xref aoid="Number::toString" id="_ref_12309"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-tostring">Number::toString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12310"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>cpNum</var>), 16).</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_12311"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of the code unit 0x005C (REVERSE SOLIDUS), <emu-val>"x"</emu-val>, and <emu-xref aoid="StringPad" id="_ref_12312"><a href="text-processing.html#sec-stringpad">StringPad</a></emu-xref>(<var>hex</var>, 2, <emu-val>"0"</emu-val>, <emu-const>start</emu-const>).</li></ol></li><li>Let <var>escaped</var> be the empty String.</li><li>Let <var>codeUnits</var> be <emu-xref aoid="UTF16EncodeCodePoint" id="_ref_12313"><a href="ecmascript-language-source-code.html#sec-utf16encodecodepoint">UTF16EncodeCodePoint</a></emu-xref>(<var>cp</var>).</li><li>For each code unit <var>cu</var> of <var>codeUnits</var>, do<ol><li>Set <var>escaped</var> to the <emu-xref href="#string-concatenation" id="_ref_12314"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>escaped</var> and <emu-xref aoid="UnicodeEscape" id="_ref_12315"><a href="structured-data.html#sec-unicodeescape">UnicodeEscape</a></emu-xref>(<var>cu</var>).</li></ol></li><li>Return <var>escaped</var>.</li></ol></li><li>Return <emu-xref aoid="UTF16EncodeCodePoint" id="_ref_12316"><a href="ecmascript-language-source-code.html#sec-utf16encodecodepoint">UTF16EncodeCodePoint</a></emu-xref>(<var>cp</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexp.prototype">
|
||
<h1><span class="secnum">22.2.5.2</span> RegExp.prototype</h1>
|
||
<p>The initial value of <code>RegExp.prototype</code> is the <emu-xref href="#sec-properties-of-the-regexp-prototype-object" id="_ref_12317"><a href="text-processing.html#sec-properties-of-the-regexp-prototype-object">RegExp prototype object</a></emu-xref>.</p>
|
||
<p>This property has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause oldids="sec-get-regexp-@@species" id="sec-get-regexp-%symbol.species%" type="built-in function"><span id="sec-get-regexp-@@species"></span>
|
||
<h1><span class="secnum">22.2.5.3</span> get RegExp [ %Symbol.species% ]</h1>
|
||
<p><code>RegExp[%Symbol.species%]</code> is an <emu-xref href="#sec-object-type" id="_ref_12318"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Return the <emu-val>this</emu-val> value.</li></ol></emu-alg>
|
||
<p>The value of the <emu-val>"name"</emu-val> property of this function is <emu-val>"get [Symbol.species]"</emu-val>.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>RegExp prototype methods normally use their <emu-val>this</emu-val> value's <emu-xref href="#constructor" id="_ref_12319"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> to create a derived object. However, a subclass <emu-xref href="#constructor" id="_ref_12320"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> may over-ride that default behaviour by redefining its <emu-xref href="#sec-well-known-symbols" id="_ref_12321"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.species%</a></emu-xref> property.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-properties-of-the-regexp-prototype-object">
|
||
<h1><span class="secnum">22.2.6</span> Properties of the RegExp Prototype Object</h1>
|
||
<p>The <dfn tabindex="-1">RegExp prototype object</dfn>:</p>
|
||
<ul>
|
||
<li>is <dfn tabindex="-1">%RegExp.prototype%</dfn>.</li>
|
||
<li>is an <emu-xref href="#ordinary-object" id="_ref_12322"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>.</li>
|
||
<li>is not a RegExp instance and does not have a <var class="field">[[RegExpMatcher]]</var> internal slot or any of the other internal slots of RegExp instance objects.</li>
|
||
<li>has a <var class="field">[[Prototype]]</var> internal slot whose value is <emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_12323"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>.</li>
|
||
</ul>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>The RegExp prototype object does not have a <emu-val>"valueOf"</emu-val> property of its own; however, it inherits the <emu-val>"valueOf"</emu-val> property from the <emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_12324"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">Object prototype object</a></emu-xref>.</p>
|
||
</div></emu-note>
|
||
|
||
<emu-clause id="sec-regexp.prototype.constructor">
|
||
<h1><span class="secnum">22.2.6.1</span> RegExp.prototype.constructor</h1>
|
||
<p>The initial value of <code>RegExp.prototype.constructor</code> is <emu-xref href="#sec-regexp-constructor" id="_ref_12325"><a href="text-processing.html#sec-regexp-constructor">%RegExp%</a></emu-xref>.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexp.prototype.exec" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.2</span> RegExp.prototype.exec ( <var>string</var> )</h1>
|
||
<p>This method searches <var>string</var> for an occurrence of the regular expression pattern and returns an Array containing the results of the match, or <emu-val>null</emu-val> if <var>string</var> did not match.</p>
|
||
<p>It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Perform ? <emu-xref aoid="RequireInternalSlot" id="_ref_12326"><a href="ordinary-and-exotic-objects-behaviours.html#sec-requireinternalslot">RequireInternalSlot</a></emu-xref>(<var>R</var>, <var class="field">[[RegExpMatcher]]</var>).</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_12327"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>string</var>).</li><li>Return ? <emu-xref aoid="RegExpBuiltinExec" id="_ref_12328"><a href="text-processing.html#sec-regexpbuiltinexec" class="e-user-code">RegExpBuiltinExec</a></emu-xref>(<var>R</var>, <var>S</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.dotAll" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.3</span> get RegExp.prototype.dotAll</h1>
|
||
<p><code>RegExp.prototype.dotAll</code> is an <emu-xref href="#sec-object-type" id="_ref_12329"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Let <var>cu</var> be the code unit 0x0073 (LATIN SMALL LETTER S).</li><li>Return ? <emu-xref aoid="RegExpHasFlag" id="_ref_12330"><a href="text-processing.html#sec-regexphasflag">RegExpHasFlag</a></emu-xref>(<var>R</var>, <var>cu</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.flags" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.4</span> get RegExp.prototype.flags</h1>
|
||
<p><code>RegExp.prototype.flags</code> is an <emu-xref href="#sec-object-type" id="_ref_12331"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>If <var>R</var> <emu-xref href="#sec-object-type" id="_ref_12332"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>codeUnits</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12333"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>hasIndices</var> be <emu-xref aoid="ToBoolean" id="_ref_12334"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12335"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"hasIndices"</emu-val>)).</li><li>If <var>hasIndices</var> is <emu-val>true</emu-val>, append the code unit 0x0064 (LATIN SMALL LETTER D) to <var>codeUnits</var>.</li><li>Let <var>global</var> be <emu-xref aoid="ToBoolean" id="_ref_12336"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12337"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"global"</emu-val>)).</li><li>If <var>global</var> is <emu-val>true</emu-val>, append the code unit 0x0067 (LATIN SMALL LETTER G) to <var>codeUnits</var>.</li><li>Let <var>ignoreCase</var> be <emu-xref aoid="ToBoolean" id="_ref_12338"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12339"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"ignoreCase"</emu-val>)).</li><li>If <var>ignoreCase</var> is <emu-val>true</emu-val>, append the code unit 0x0069 (LATIN SMALL LETTER I) to <var>codeUnits</var>.</li><li>Let <var>multiline</var> be <emu-xref aoid="ToBoolean" id="_ref_12340"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12341"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"multiline"</emu-val>)).</li><li>If <var>multiline</var> is <emu-val>true</emu-val>, append the code unit 0x006D (LATIN SMALL LETTER M) to <var>codeUnits</var>.</li><li>Let <var>dotAll</var> be <emu-xref aoid="ToBoolean" id="_ref_12342"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12343"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"dotAll"</emu-val>)).</li><li>If <var>dotAll</var> is <emu-val>true</emu-val>, append the code unit 0x0073 (LATIN SMALL LETTER S) to <var>codeUnits</var>.</li><li>Let <var>unicode</var> be <emu-xref aoid="ToBoolean" id="_ref_12344"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12345"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"unicode"</emu-val>)).</li><li>If <var>unicode</var> is <emu-val>true</emu-val>, append the code unit 0x0075 (LATIN SMALL LETTER U) to <var>codeUnits</var>.</li><li>Let <var>unicodeSets</var> be <emu-xref aoid="ToBoolean" id="_ref_12346"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12347"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"unicodeSets"</emu-val>)).</li><li>If <var>unicodeSets</var> is <emu-val>true</emu-val>, append the code unit 0x0076 (LATIN SMALL LETTER V) to <var>codeUnits</var>.</li><li>Let <var>sticky</var> be <emu-xref aoid="ToBoolean" id="_ref_12348"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12349"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"sticky"</emu-val>)).</li><li>If <var>sticky</var> is <emu-val>true</emu-val>, append the code unit 0x0079 (LATIN SMALL LETTER Y) to <var>codeUnits</var>.</li><li>Return the String value whose code units are the elements of the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12350"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> <var>codeUnits</var>. If <var>codeUnits</var> has no elements, the empty String is returned.</li></ol></emu-alg>
|
||
|
||
<emu-clause id="sec-regexphasflag" type="abstract operation" aoid="RegExpHasFlag">
|
||
<h1><span class="secnum">22.2.6.4.1</span> RegExpHasFlag ( <var>R</var>, <var>codeUnit</var> )</h1>
|
||
<p>The abstract operation RegExpHasFlag takes arguments <var>R</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_12351"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>codeUnit</var> (a code unit) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12352"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a Boolean or <emu-val>undefined</emu-val>, or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12353"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>R</var> <emu-xref href="#sec-object-type" id="_ref_12354"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>R</var> does not have an <var class="field">[[OriginalFlags]]</var> internal slot, then<ol><li>If <emu-xref aoid="SameValue" id="_ref_12355"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>R</var>, <emu-xref href="#sec-properties-of-the-regexp-prototype-object" id="_ref_12356"><a href="text-processing.html#sec-properties-of-the-regexp-prototype-object">%RegExp.prototype%</a></emu-xref>) is <emu-val>true</emu-val>, return <emu-val>undefined</emu-val>.</li><li>Throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>Let <var>flags</var> be <var>R</var>.<var class="field">[[OriginalFlags]]</var>.</li><li>If <var>flags</var> contains <var>codeUnit</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.global" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.5</span> get RegExp.prototype.global</h1>
|
||
<p><code>RegExp.prototype.global</code> is an <emu-xref href="#sec-object-type" id="_ref_12357"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Let <var>cu</var> be the code unit 0x0067 (LATIN SMALL LETTER G).</li><li>Return ? <emu-xref aoid="RegExpHasFlag" id="_ref_12358"><a href="text-processing.html#sec-regexphasflag">RegExpHasFlag</a></emu-xref>(<var>R</var>, <var>cu</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.hasIndices" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.6</span> get RegExp.prototype.hasIndices</h1>
|
||
<p><code>RegExp.prototype.hasIndices</code> is an <emu-xref href="#sec-object-type" id="_ref_12359"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Let <var>cu</var> be the code unit 0x0064 (LATIN SMALL LETTER D).</li><li>Return ? <emu-xref aoid="RegExpHasFlag" id="_ref_12360"><a href="text-processing.html#sec-regexphasflag">RegExpHasFlag</a></emu-xref>(<var>R</var>, <var>cu</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.ignorecase" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.7</span> get RegExp.prototype.ignoreCase</h1>
|
||
<p><code>RegExp.prototype.ignoreCase</code> is an <emu-xref href="#sec-object-type" id="_ref_12361"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Let <var>cu</var> be the code unit 0x0069 (LATIN SMALL LETTER I).</li><li>Return ? <emu-xref aoid="RegExpHasFlag" id="_ref_12362"><a href="text-processing.html#sec-regexphasflag">RegExpHasFlag</a></emu-xref>(<var>R</var>, <var>cu</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause oldids="sec-regexp.prototype-@@match" id="sec-regexp.prototype-%symbol.match%" type="built-in function"><span id="sec-regexp.prototype-@@match"></span>
|
||
<h1><span class="secnum">22.2.6.8</span> RegExp.prototype [ %Symbol.match% ] ( <var>string</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>rx</var> be the <emu-val>this</emu-val> value.</li><li>If <var>rx</var> <emu-xref href="#sec-object-type" id="_ref_12363"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_12364"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>string</var>).</li><li>Let <var>flags</var> be ? <emu-xref aoid="ToString" id="_ref_12365"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12366"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>rx</var>, <emu-val>"flags"</emu-val>)).</li><li>If <var>flags</var> does not contain <emu-val>"g"</emu-val>, return ? <emu-xref aoid="RegExpExec" id="_ref_12367"><a href="text-processing.html#sec-regexpexec" class="e-user-code">RegExpExec</a></emu-xref>(<var>rx</var>, <var>S</var>).</li><li>If <var>flags</var> contains <emu-val>"u"</emu-val> or <var>flags</var> contains <emu-val>"v"</emu-val>, let <var>fullUnicode</var> be <emu-val>true</emu-val>; else let <var>fullUnicode</var> be <emu-val>false</emu-val>.</li><li>Perform ? <emu-xref aoid="Set" id="_ref_12368"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>, <emu-val>+0</emu-val><sub>𝔽</sub>, <emu-val>true</emu-val>).</li><li>Let <var>A</var> be ! <emu-xref aoid="ArrayCreate" id="_ref_12369"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(0).</li><li>Let <var>n</var> be 0.</li><li>Repeat,<ol><li>Let <var>result</var> be ? <emu-xref aoid="RegExpExec" id="_ref_12370"><a href="text-processing.html#sec-regexpexec" class="e-user-code">RegExpExec</a></emu-xref>(<var>rx</var>, <var>S</var>).</li><li>If <var>result</var> is <emu-val>null</emu-val>, then<ol><li>If <var>n</var> = 0, return <emu-val>null</emu-val>.</li><li>Return <var>A</var>.</li></ol></li><li>Let <var>matchStr</var> be ? <emu-xref aoid="ToString" id="_ref_12371"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12372"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>result</var>, <emu-val>"0"</emu-val>)).</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12373"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, ! <emu-xref aoid="ToString" id="_ref_12374"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12375"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>n</var>)), <var>matchStr</var>).</li><li>If <var>matchStr</var> is the empty String, then<ol><li>Let <var>thisIndex</var> be <emu-xref aoid="ℝ" id="_ref_12376"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToLength" id="_ref_12377"><a href="abstract-operations.html#sec-tolength" class="e-user-code">ToLength</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12378"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>))).</li><li>Let <var>nextIndex</var> be <emu-xref aoid="AdvanceStringIndex" id="_ref_12379"><a href="text-processing.html#sec-advancestringindex">AdvanceStringIndex</a></emu-xref>(<var>S</var>, <var>thisIndex</var>, <var>fullUnicode</var>).</li><li>Perform ? <emu-xref aoid="Set" id="_ref_12380"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>, <emu-xref aoid="𝔽" id="_ref_12381"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>nextIndex</var>), <emu-val>true</emu-val>).</li></ol></li><li>Set <var>n</var> to <var>n</var> + 1.</li></ol></li></ol></emu-alg>
|
||
<p>The value of the <emu-val>"name"</emu-val> property of this method is <emu-val>"[Symbol.match]"</emu-val>.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>The <emu-xref href="#sec-well-known-symbols" id="_ref_12382"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.match%</a></emu-xref> property is used by the <emu-xref aoid="IsRegExp" id="_ref_12383"><a href="abstract-operations.html#sec-isregexp">IsRegExp</a></emu-xref> abstract operation to identify objects that have the basic behaviour of regular expressions. The absence of a <emu-xref href="#sec-well-known-symbols" id="_ref_12384"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.match%</a></emu-xref> property or the existence of such a property whose value does not Boolean coerce to <emu-val>true</emu-val> indicates that the object is not intended to be used as a regular expression object.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause oldids="sec-regexp-prototype-matchall" id="sec-regexp-prototype-%symbol.matchall%" type="built-in function"><span id="sec-regexp-prototype-matchall"></span>
|
||
<h1><span class="secnum">22.2.6.9</span> RegExp.prototype [ %Symbol.matchAll% ] ( <var>string</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>If <var>R</var> <emu-xref href="#sec-object-type" id="_ref_12385"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_12386"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>string</var>).</li><li>Let <var>C</var> be ? <emu-xref aoid="SpeciesConstructor" id="_ref_12387"><a href="abstract-operations.html#sec-speciesconstructor" class="e-user-code">SpeciesConstructor</a></emu-xref>(<var>R</var>, <emu-xref href="#sec-regexp-constructor" id="_ref_12388"><a href="text-processing.html#sec-regexp-constructor">%RegExp%</a></emu-xref>).</li><li>Let <var>flags</var> be ? <emu-xref aoid="ToString" id="_ref_12389"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12390"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"flags"</emu-val>)).</li><li>Let <var>matcher</var> be ? <emu-xref aoid="Construct" id="_ref_12391"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>C</var>, « <var>R</var>, <var>flags</var> »).</li><li>Let <var>lastIndex</var> be ? <emu-xref aoid="ToLength" id="_ref_12392"><a href="abstract-operations.html#sec-tolength" class="e-user-code">ToLength</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12393"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"lastIndex"</emu-val>)).</li><li>Perform ? <emu-xref aoid="Set" id="_ref_12394"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>matcher</var>, <emu-val>"lastIndex"</emu-val>, <var>lastIndex</var>, <emu-val>true</emu-val>).</li><li>If <var>flags</var> contains <emu-val>"g"</emu-val>, let <var>global</var> be <emu-val>true</emu-val>.</li><li>Else, let <var>global</var> be <emu-val>false</emu-val>.</li><li>If <var>flags</var> contains <emu-val>"u"</emu-val> or <var>flags</var> contains <emu-val>"v"</emu-val>, let <var>fullUnicode</var> be <emu-val>true</emu-val>.</li><li>Else, let <var>fullUnicode</var> be <emu-val>false</emu-val>.</li><li>Return <emu-xref aoid="CreateRegExpStringIterator" id="_ref_12395"><a href="text-processing.html#sec-createregexpstringiterator">CreateRegExpStringIterator</a></emu-xref>(<var>matcher</var>, <var>S</var>, <var>global</var>, <var>fullUnicode</var>).</li></ol></emu-alg>
|
||
<p>The value of the <emu-val>"name"</emu-val> property of this method is <emu-val>"[Symbol.matchAll]"</emu-val>.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.multiline" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.10</span> get RegExp.prototype.multiline</h1>
|
||
<p><code>RegExp.prototype.multiline</code> is an <emu-xref href="#sec-object-type" id="_ref_12396"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Let <var>cu</var> be the code unit 0x006D (LATIN SMALL LETTER M).</li><li>Return ? <emu-xref aoid="RegExpHasFlag" id="_ref_12397"><a href="text-processing.html#sec-regexphasflag">RegExpHasFlag</a></emu-xref>(<var>R</var>, <var>cu</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause oldids="sec-regexp.prototype-@@replace" id="sec-regexp.prototype-%symbol.replace%" type="built-in function"><span id="sec-regexp.prototype-@@replace"></span>
|
||
<h1><span class="secnum">22.2.6.11</span> RegExp.prototype [ %Symbol.replace% ] ( <var>string</var>, <var>replaceValue</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>rx</var> be the <emu-val>this</emu-val> value.</li><li>If <var>rx</var> <emu-xref href="#sec-object-type" id="_ref_12398"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_12399"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>string</var>).</li><li>Let <var>lengthS</var> be the length of <var>S</var>.</li><li>Let <var>functionalReplace</var> be <emu-xref aoid="IsCallable" id="_ref_12400"><a href="abstract-operations.html#sec-iscallable">IsCallable</a></emu-xref>(<var>replaceValue</var>).</li><li>If <var>functionalReplace</var> is <emu-val>false</emu-val>, then<ol><li>Set <var>replaceValue</var> to ? <emu-xref aoid="ToString" id="_ref_12401"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>replaceValue</var>).</li></ol></li><li>Let <var>flags</var> be ? <emu-xref aoid="ToString" id="_ref_12402"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12403"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>rx</var>, <emu-val>"flags"</emu-val>)).</li><li>If <var>flags</var> contains <emu-val>"g"</emu-val>, let <var>global</var> be <emu-val>true</emu-val>; else let <var>global</var> be <emu-val>false</emu-val>.</li><li>If <var>global</var> is <emu-val>true</emu-val>, then<ol><li>Perform ? <emu-xref aoid="Set" id="_ref_12404"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>, <emu-val>+0</emu-val><sub>𝔽</sub>, <emu-val>true</emu-val>).</li></ol></li><li>Let <var>results</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12405"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>done</var> be <emu-val>false</emu-val>.</li><li>Repeat, while <var>done</var> is <emu-val>false</emu-val>,<ol><li>Let <var>result</var> be ? <emu-xref aoid="RegExpExec" id="_ref_12406"><a href="text-processing.html#sec-regexpexec" class="e-user-code">RegExpExec</a></emu-xref>(<var>rx</var>, <var>S</var>).</li><li>If <var>result</var> is <emu-val>null</emu-val>, then<ol><li>Set <var>done</var> to <emu-val>true</emu-val>.</li></ol></li><li>Else,<ol><li>Append <var>result</var> to <var>results</var>.</li><li>If <var>global</var> is <emu-val>false</emu-val>, then<ol><li>Set <var>done</var> to <emu-val>true</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>matchStr</var> be ? <emu-xref aoid="ToString" id="_ref_12407"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12408"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>result</var>, <emu-val>"0"</emu-val>)).</li><li>If <var>matchStr</var> is the empty String, then<ol><li>Let <var>thisIndex</var> be <emu-xref aoid="ℝ" id="_ref_12409"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToLength" id="_ref_12410"><a href="abstract-operations.html#sec-tolength" class="e-user-code">ToLength</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12411"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>))).</li><li>If <var>flags</var> contains <emu-val>"u"</emu-val> or <var>flags</var> contains <emu-val>"v"</emu-val>, let <var>fullUnicode</var> be <emu-val>true</emu-val>; else let <var>fullUnicode</var> be <emu-val>false</emu-val>.</li><li>Let <var>nextIndex</var> be <emu-xref aoid="AdvanceStringIndex" id="_ref_12412"><a href="text-processing.html#sec-advancestringindex">AdvanceStringIndex</a></emu-xref>(<var>S</var>, <var>thisIndex</var>, <var>fullUnicode</var>).</li><li>Perform ? <emu-xref aoid="Set" id="_ref_12413"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>, <emu-xref aoid="𝔽" id="_ref_12414"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>nextIndex</var>), <emu-val>true</emu-val>).</li></ol></li></ol></li></ol></li></ol></li><li>Let <var>accumulatedResult</var> be the empty String.</li><li>Let <var>nextSourcePosition</var> be 0.</li><li>For each element <var>result</var> of <var>results</var>, do<ol><li>Let <var>resultLength</var> be ? <emu-xref aoid="LengthOfArrayLike" id="_ref_12415"><a href="abstract-operations.html#sec-lengthofarraylike" class="e-user-code">LengthOfArrayLike</a></emu-xref>(<var>result</var>).</li><li>Let <var>nCaptures</var> be <emu-xref aoid="max" id="_ref_12416"><a href="notational-conventions.html#eqn-max">max</a></emu-xref>(<var>resultLength</var> - 1, 0).</li><li>Let <var>matched</var> be ? <emu-xref aoid="ToString" id="_ref_12417"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12418"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>result</var>, <emu-val>"0"</emu-val>)).</li><li>Let <var>matchLength</var> be the length of <var>matched</var>.</li><li>Let <var>position</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_12419"><a href="abstract-operations.html#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12420"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>result</var>, <emu-val>"index"</emu-val>)).</li><li>Set <var>position</var> to the result of <emu-xref href="#clamping" id="_ref_12421"><a href="notational-conventions.html#clamping">clamping</a></emu-xref> <var>position</var> between 0 and <var>lengthS</var>.</li><li>Let <var>captures</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12422"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>n</var> be 1.</li><li>Repeat, while <var>n</var> ≤ <var>nCaptures</var>,<ol><li>Let <var>capN</var> be ? <emu-xref aoid="Get" id="_ref_12423"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>result</var>, ! <emu-xref aoid="ToString" id="_ref_12424"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12425"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>n</var>))).</li><li>If <var>capN</var> is not <emu-val>undefined</emu-val>, then<ol><li>Set <var>capN</var> to ? <emu-xref aoid="ToString" id="_ref_12426"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>capN</var>).</li></ol></li><li>Append <var>capN</var> to <var>captures</var>.</li><li>NOTE: When <var>n</var> = 1, the preceding step puts the first element into <var>captures</var> (at index 0). More generally, the <var>n</var><sup>th</sup> capture (the characters captured by the <var>n</var><sup>th</sup> set of capturing parentheses) is at <var>captures</var>[<var>n</var> - 1].</li><li>Set <var>n</var> to <var>n</var> + 1.</li></ol></li><li>Let <var>namedCaptures</var> be ? <emu-xref aoid="Get" id="_ref_12427"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>result</var>, <emu-val>"groups"</emu-val>).</li><li>If <var>functionalReplace</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>replacerArgs</var> be the <emu-xref href="#list-concatenation" id="_ref_12428"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of « <var>matched</var> », <var>captures</var>, and « <emu-xref aoid="𝔽" id="_ref_12429"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>position</var>), <var>S</var> ».</li><li>If <var>namedCaptures</var> is not <emu-val>undefined</emu-val>, then<ol><li>Append <var>namedCaptures</var> to <var>replacerArgs</var>.</li></ol></li><li>Let <var>replacementValue</var> be ? <emu-xref aoid="Call" id="_ref_12430"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>replaceValue</var>, <emu-val>undefined</emu-val>, <var>replacerArgs</var>).</li><li>Let <var>replacementString</var> be ? <emu-xref aoid="ToString" id="_ref_12431"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>replacementValue</var>).</li></ol></li><li>Else,<ol><li>If <var>namedCaptures</var> is not <emu-val>undefined</emu-val>, then<ol><li>Set <var>namedCaptures</var> to ? <emu-xref aoid="ToObject" id="_ref_12432"><a href="abstract-operations.html#sec-toobject">ToObject</a></emu-xref>(<var>namedCaptures</var>).</li></ol></li><li>Let <var>replacementString</var> be ? <emu-xref aoid="GetSubstitution" id="_ref_12433"><a href="text-processing.html#sec-getsubstitution" class="e-user-code">GetSubstitution</a></emu-xref>(<var>matched</var>, <var>S</var>, <var>position</var>, <var>captures</var>, <var>namedCaptures</var>, <var>replaceValue</var>).</li></ol></li><li>If <var>position</var> ≥ <var>nextSourcePosition</var>, then<ol><li>NOTE: <var>position</var> should not normally move backwards. If it does, it is an indication of an ill-behaving RegExp subclass or use of an access triggered side-effect to change the global flag or other characteristics of <var>rx</var>. In such cases, the corresponding substitution is ignored.</li><li>Set <var>accumulatedResult</var> to the <emu-xref href="#string-concatenation" id="_ref_12434"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>accumulatedResult</var>, the <emu-xref href="#substring" id="_ref_12435"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>nextSourcePosition</var> to <var>position</var>, and <var>replacementString</var>.</li><li>Set <var>nextSourcePosition</var> to <var>position</var> + <var>matchLength</var>.</li></ol></li></ol></li><li>If <var>nextSourcePosition</var> ≥ <var>lengthS</var>, return <var>accumulatedResult</var>.</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_12436"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>accumulatedResult</var> and the <emu-xref href="#substring" id="_ref_12437"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>nextSourcePosition</var>.</li></ol></emu-alg>
|
||
<p>The value of the <emu-val>"name"</emu-val> property of this method is <emu-val>"[Symbol.replace]"</emu-val>.</p>
|
||
</emu-clause>
|
||
|
||
<emu-clause oldids="sec-regexp.prototype-@@search" id="sec-regexp.prototype-%symbol.search%" type="built-in function"><span id="sec-regexp.prototype-@@search"></span>
|
||
<h1><span class="secnum">22.2.6.12</span> RegExp.prototype [ %Symbol.search% ] ( <var>string</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>rx</var> be the <emu-val>this</emu-val> value.</li><li>If <var>rx</var> <emu-xref href="#sec-object-type" id="_ref_12438"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_12439"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>string</var>).</li><li>Let <var>previousLastIndex</var> be ? <emu-xref aoid="Get" id="_ref_12440"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>).</li><li>If <var>previousLastIndex</var> is not <emu-val>+0</emu-val><sub>𝔽</sub>, then<ol><li>Perform ? <emu-xref aoid="Set" id="_ref_12441"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>, <emu-val>+0</emu-val><sub>𝔽</sub>, <emu-val>true</emu-val>).</li></ol></li><li>Let <var>result</var> be ? <emu-xref aoid="RegExpExec" id="_ref_12442"><a href="text-processing.html#sec-regexpexec" class="e-user-code">RegExpExec</a></emu-xref>(<var>rx</var>, <var>S</var>).</li><li>Let <var>currentLastIndex</var> be ? <emu-xref aoid="Get" id="_ref_12443"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>).</li><li>If <emu-xref aoid="SameValue" id="_ref_12444"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>currentLastIndex</var>, <var>previousLastIndex</var>) is <emu-val>false</emu-val>, then<ol><li>Perform ? <emu-xref aoid="Set" id="_ref_12445"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>rx</var>, <emu-val>"lastIndex"</emu-val>, <var>previousLastIndex</var>, <emu-val>true</emu-val>).</li></ol></li><li>If <var>result</var> is <emu-val>null</emu-val>, return <emu-val>-1</emu-val><sub>𝔽</sub>.</li><li>Return ? <emu-xref aoid="Get" id="_ref_12446"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>result</var>, <emu-val>"index"</emu-val>).</li></ol></emu-alg>
|
||
<p>The value of the <emu-val>"name"</emu-val> property of this method is <emu-val>"[Symbol.search]"</emu-val>.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>The <emu-val>"lastIndex"</emu-val> and <emu-val>"global"</emu-val> properties of this RegExp object are ignored when performing the search. The <emu-val>"lastIndex"</emu-val> property is left unchanged.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.source" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.13</span> get RegExp.prototype.source</h1>
|
||
<p><code>RegExp.prototype.source</code> is an <emu-xref href="#sec-object-type" id="_ref_12447"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>If <var>R</var> <emu-xref href="#sec-object-type" id="_ref_12448"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>R</var> does not have an <var class="field">[[OriginalSource]]</var> internal slot, then<ol><li>If <emu-xref aoid="SameValue" id="_ref_12449"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>R</var>, <emu-xref href="#sec-properties-of-the-regexp-prototype-object" id="_ref_12450"><a href="text-processing.html#sec-properties-of-the-regexp-prototype-object">%RegExp.prototype%</a></emu-xref>) is <emu-val>true</emu-val>, return <emu-val>"(?:)"</emu-val>.</li><li>Throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li><emu-xref href="#assert" id="_ref_12451"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>R</var> has an <var class="field">[[OriginalFlags]]</var> internal slot.</li><li>Let <var>src</var> be <var>R</var>.<var class="field">[[OriginalSource]]</var>.</li><li>Let <var>flags</var> be <var>R</var>.<var class="field">[[OriginalFlags]]</var>.</li><li>Return <emu-xref aoid="EscapeRegExpPattern" id="_ref_12452"><a href="text-processing.html#sec-escaperegexppattern">EscapeRegExpPattern</a></emu-xref>(<var>src</var>, <var>flags</var>).</li></ol></emu-alg>
|
||
|
||
<emu-clause id="sec-escaperegexppattern" type="abstract operation" aoid="EscapeRegExpPattern">
|
||
<h1><span class="secnum">22.2.6.13.1</span> EscapeRegExpPattern ( <var>P</var>, <var>F</var> )</h1>
|
||
<p>The abstract operation EscapeRegExpPattern takes arguments <var>P</var> (a String) and <var>F</var> (a String) and returns a String. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>F</var> contains <emu-val>"v"</emu-val>, then<ol><li>Let <var>patternSymbol</var> be <emu-nt params="+UnicodeMode, +UnicodeSetsMode" id="_ref_24537"><a href="text-processing.html#prod-Pattern">Pattern</a><emu-mods><emu-params>[+UnicodeMode, +UnicodeSetsMode]</emu-params></emu-mods></emu-nt>.</li></ol></li><li>Else if <var>F</var> contains <emu-val>"u"</emu-val>, then<ol><li>Let <var>patternSymbol</var> be <emu-nt params="+UnicodeMode, ~UnicodeSetsMode" id="_ref_24538"><a href="text-processing.html#prod-Pattern">Pattern</a><emu-mods><emu-params>[+UnicodeMode, ~UnicodeSetsMode]</emu-params></emu-mods></emu-nt>.</li></ol></li><li>Else,<ol><li>Let <var>patternSymbol</var> be <emu-nt params="~UnicodeMode, ~UnicodeSetsMode" id="_ref_24539"><a href="text-processing.html#prod-Pattern">Pattern</a><emu-mods><emu-params>[~UnicodeMode, ~UnicodeSetsMode]</emu-params></emu-mods></emu-nt>.</li></ol></li><li>Let <var>S</var> be a String in the form of a <var>patternSymbol</var> equivalent to <var>P</var> interpreted as UTF-16 encoded Unicode code points (<emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_711"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>), in which certain code points are escaped as described below. <var>S</var> may or may not differ from <var>P</var>; however, the <emu-xref href="#sec-abstract-closure" id="_ref_12453"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> that would result from evaluating <var>S</var> as a <var>patternSymbol</var> must behave identically to the <emu-xref href="#sec-abstract-closure" id="_ref_12454"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> given by the constructed object's <var class="field">[[RegExpMatcher]]</var> internal slot. Multiple calls to this abstract operation using the same values for <var>P</var> and <var>F</var> must produce identical results.</li><li>The code points <code>/</code> or any <emu-nt id="_ref_24540"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> occurring in the pattern shall be escaped in <var>S</var> as necessary to ensure that the <emu-xref href="#string-concatenation" id="_ref_12455"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <emu-val>"/"</emu-val>, <var>S</var>, <emu-val>"/"</emu-val>, and <var>F</var> can be parsed (in an appropriate lexical context) as a <emu-nt id="_ref_24541"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt> that behaves identically to the constructed regular expression. For example, if <var>P</var> is <emu-val>"/"</emu-val>, then <var>S</var> could be <emu-val>"\/"</emu-val> or <emu-val>"\u002F"</emu-val>, among other possibilities, but not <emu-val>"/"</emu-val>, because <code>///</code> followed by <var>F</var> would be parsed as a <emu-nt id="_ref_24542"><a href="ecmascript-language-lexical-grammar.html#prod-SingleLineComment">SingleLineComment</a></emu-nt> rather than a <emu-nt id="_ref_24543"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt>. If <var>P</var> is the empty String, this specification can be met by letting <var>S</var> be <emu-val>"(?:)"</emu-val>.</li><li>Return <var>S</var>.</li></ol></emu-alg>
|
||
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>Despite having similar names, <code>RegExp.escape</code> and EscapeRegExpPattern do not perform similar actions. The former escapes a string for representation inside a pattern, while this function escapes a pattern for representation as a string.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause oldids="sec-regexp.prototype-@@split" id="sec-regexp.prototype-%symbol.split%" type="built-in function"><span id="sec-regexp.prototype-@@split"></span>
|
||
<h1><span class="secnum">22.2.6.14</span> RegExp.prototype [ %Symbol.split% ] ( <var>string</var>, <var>limit</var> )</h1>
|
||
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
||
<p>This method returns an Array into which substrings of the result of converting <var>string</var> to a String have been stored. The substrings are determined by searching from left to right for matches of the <emu-val>this</emu-val> value regular expression; these occurrences are not part of any String in the returned array, but serve to divide up the String value.</p>
|
||
<p>The <emu-val>this</emu-val> value may be an empty regular expression or a regular expression that can match an empty String. In this case, the regular expression does not match the empty <emu-not-ref>substring</emu-not-ref> at the beginning or end of the input String, nor does it match the empty <emu-not-ref>substring</emu-not-ref> at the end of the previous separator match. (For example, if the regular expression matches the empty String, the String is split up into individual code unit elements; the length of the result array equals the length of the String, and each <emu-not-ref>substring</emu-not-ref> contains one code unit.) Only the first match at a given index of the String is considered, even if backtracking could yield a non-empty <emu-not-ref>substring</emu-not-ref> match at that index. (For example, <code>/a*?/[Symbol.split]("ab")</code> evaluates to the array <code>["a", "b"]</code>, while <code>/a*/[Symbol.split]("ab")</code> evaluates to the array <code>["","b"]</code>.)</p>
|
||
<p>If <var>string</var> is (or converts to) the empty String, the result depends on whether the regular expression can match the empty String. If it can, the result array contains no elements. Otherwise, the result array contains one element, which is the empty String.</p>
|
||
<p>If the regular expression contains capturing parentheses, then each time <var>separator</var> is matched the results (including any <emu-val>undefined</emu-val> results) of the capturing parentheses are spliced into the output array. For example,</p>
|
||
<pre><code class="javascript hljs">/<(\/)?([^<span class="language-xml"><span class="hljs-tag"><></span>]+)>/[Symbol.split]("A<span class="hljs-tag"><<span class="hljs-name">B</span>></span>bold<span class="hljs-tag"></<span class="hljs-name">B</span>></span>and<span class="hljs-tag"><<span class="hljs-name">CODE</span>></span>coded<span class="hljs-tag"></<span class="hljs-name">CODE</span>></span>")</span></code></pre>
|
||
<p>evaluates to the array</p>
|
||
<pre><code class="javascript hljs">[<span class="hljs-string">"A"</span>, <span class="hljs-literal">undefined</span>, <span class="hljs-string">"B"</span>, <span class="hljs-string">"bold"</span>, <span class="hljs-string">"/"</span>, <span class="hljs-string">"B"</span>, <span class="hljs-string">"and"</span>, <span class="hljs-literal">undefined</span>, <span class="hljs-string">"CODE"</span>, <span class="hljs-string">"coded"</span>, <span class="hljs-string">"/"</span>, <span class="hljs-string">"CODE"</span>, <span class="hljs-string">""</span>]</code></pre>
|
||
<p>If <var>limit</var> is not <emu-val>undefined</emu-val>, then the output array is truncated so that it contains no more than <var>limit</var> elements.</p>
|
||
</div></emu-note>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>rx</var> be the <emu-val>this</emu-val> value.</li><li>If <var>rx</var> <emu-xref href="#sec-object-type" id="_ref_12456"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>S</var> be ? <emu-xref aoid="ToString" id="_ref_12457"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>string</var>).</li><li>Let <var>C</var> be ? <emu-xref aoid="SpeciesConstructor" id="_ref_12458"><a href="abstract-operations.html#sec-speciesconstructor" class="e-user-code">SpeciesConstructor</a></emu-xref>(<var>rx</var>, <emu-xref href="#sec-regexp-constructor" id="_ref_12459"><a href="text-processing.html#sec-regexp-constructor">%RegExp%</a></emu-xref>).</li><li>Let <var>flags</var> be ? <emu-xref aoid="ToString" id="_ref_12460"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12461"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>rx</var>, <emu-val>"flags"</emu-val>)).</li><li>If <var>flags</var> contains <emu-val>"u"</emu-val> or <var>flags</var> contains <emu-val>"v"</emu-val>, let <var>unicodeMatching</var> be <emu-val>true</emu-val>.</li><li>Else, let <var>unicodeMatching</var> be <emu-val>false</emu-val>.</li><li>If <var>flags</var> contains <emu-val>"y"</emu-val>, let <var>newFlags</var> be <var>flags</var>.</li><li>Else, let <var>newFlags</var> be the <emu-xref href="#string-concatenation" id="_ref_12462"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>flags</var> and <emu-val>"y"</emu-val>.</li><li>Let <var>splitter</var> be ? <emu-xref aoid="Construct" id="_ref_12463"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>C</var>, « <var>rx</var>, <var>newFlags</var> »).</li><li>Let <var>A</var> be ! <emu-xref aoid="ArrayCreate" id="_ref_12464"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(0).</li><li>Let <var>lengthA</var> be 0.</li><li>If <var>limit</var> is <emu-val>undefined</emu-val>, let <var>lim</var> be 2<sup>32</sup> - 1; else let <var>lim</var> be <emu-xref aoid="ℝ" id="_ref_12465"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToUint32" id="_ref_12466"><a href="abstract-operations.html#sec-touint32" class="e-user-code">ToUint32</a></emu-xref>(<var>limit</var>)).</li><li>If <var>lim</var> = 0, return <var>A</var>.</li><li>If <var>S</var> is the empty String, then<ol><li>Let <var>z</var> be ? <emu-xref aoid="RegExpExec" id="_ref_12467"><a href="text-processing.html#sec-regexpexec" class="e-user-code">RegExpExec</a></emu-xref>(<var>splitter</var>, <var>S</var>).</li><li>If <var>z</var> is not <emu-val>null</emu-val>, return <var>A</var>.</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12468"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, <emu-val>"0"</emu-val>, <var>S</var>).</li><li>Return <var>A</var>.</li></ol></li><li>Let <var>size</var> be the length of <var>S</var>.</li><li>Let <var>p</var> be 0.</li><li>Let <var>q</var> be <var>p</var>.</li><li>Repeat, while <var>q</var> < <var>size</var>,<ol><li>Perform ? <emu-xref aoid="Set" id="_ref_12469"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>splitter</var>, <emu-val>"lastIndex"</emu-val>, <emu-xref aoid="𝔽" id="_ref_12470"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>q</var>), <emu-val>true</emu-val>).</li><li>Let <var>z</var> be ? <emu-xref aoid="RegExpExec" id="_ref_12471"><a href="text-processing.html#sec-regexpexec" class="e-user-code">RegExpExec</a></emu-xref>(<var>splitter</var>, <var>S</var>).</li><li>If <var>z</var> is <emu-val>null</emu-val>, then<ol><li>Set <var>q</var> to <emu-xref aoid="AdvanceStringIndex" id="_ref_12472"><a href="text-processing.html#sec-advancestringindex">AdvanceStringIndex</a></emu-xref>(<var>S</var>, <var>q</var>, <var>unicodeMatching</var>).</li></ol></li><li>Else,<ol><li>Let <var>e</var> be <emu-xref aoid="ℝ" id="_ref_12473"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToLength" id="_ref_12474"><a href="abstract-operations.html#sec-tolength" class="e-user-code">ToLength</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12475"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>splitter</var>, <emu-val>"lastIndex"</emu-val>))).</li><li>Set <var>e</var> to <emu-xref aoid="min" id="_ref_12476"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>e</var>, <var>size</var>).</li><li>If <var>e</var> = <var>p</var>, then<ol><li>Set <var>q</var> to <emu-xref aoid="AdvanceStringIndex" id="_ref_12477"><a href="text-processing.html#sec-advancestringindex">AdvanceStringIndex</a></emu-xref>(<var>S</var>, <var>q</var>, <var>unicodeMatching</var>).</li></ol></li><li>Else,<ol><li>Let <var>T</var> be the <emu-xref href="#substring" id="_ref_12478"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>p</var> to <var>q</var>.</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12479"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, ! <emu-xref aoid="ToString" id="_ref_12480"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12481"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>lengthA</var>)), <var>T</var>).</li><li>Set <var>lengthA</var> to <var>lengthA</var> + 1.</li><li>If <var>lengthA</var> = <var>lim</var>, return <var>A</var>.</li><li>Set <var>p</var> to <var>e</var>.</li><li>Let <var>numberOfCaptures</var> be ? <emu-xref aoid="LengthOfArrayLike" id="_ref_12482"><a href="abstract-operations.html#sec-lengthofarraylike" class="e-user-code">LengthOfArrayLike</a></emu-xref>(<var>z</var>).</li><li>Set <var>numberOfCaptures</var> to <emu-xref aoid="max" id="_ref_12483"><a href="notational-conventions.html#eqn-max">max</a></emu-xref>(<var>numberOfCaptures</var> - 1, 0).</li><li>Let <var>i</var> be 1.</li><li>Repeat, while <var>i</var> ≤ <var>numberOfCaptures</var>,<ol><li>Let <var>nextCapture</var> be ? <emu-xref aoid="Get" id="_ref_12484"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>z</var>, ! <emu-xref aoid="ToString" id="_ref_12485"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12486"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>i</var>))).</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12487"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, ! <emu-xref aoid="ToString" id="_ref_12488"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12489"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>lengthA</var>)), <var>nextCapture</var>).</li><li>Set <var>i</var> to <var>i</var> + 1.</li><li>Set <var>lengthA</var> to <var>lengthA</var> + 1.</li><li>If <var>lengthA</var> = <var>lim</var>, return <var>A</var>.</li></ol></li><li>Set <var>q</var> to <var>p</var>.</li></ol></li></ol></li></ol></li><li>Let <var>T</var> be the <emu-xref href="#substring" id="_ref_12490"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>p</var> to <var>size</var>.</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12491"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, ! <emu-xref aoid="ToString" id="_ref_12492"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12493"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>lengthA</var>)), <var>T</var>).</li><li>Return <var>A</var>.</li></ol></emu-alg>
|
||
<p>The value of the <emu-val>"name"</emu-val> property of this method is <emu-val>"[Symbol.split]"</emu-val>.</p>
|
||
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
||
<p>This method ignores the value of the <emu-val>"global"</emu-val> and <emu-val>"sticky"</emu-val> properties of this RegExp object.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.sticky" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.15</span> get RegExp.prototype.sticky</h1>
|
||
<p><code>RegExp.prototype.sticky</code> is an <emu-xref href="#sec-object-type" id="_ref_12494"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Let <var>cu</var> be the code unit 0x0079 (LATIN SMALL LETTER Y).</li><li>Return ? <emu-xref aoid="RegExpHasFlag" id="_ref_12495"><a href="text-processing.html#sec-regexphasflag">RegExpHasFlag</a></emu-xref>(<var>R</var>, <var>cu</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexp.prototype.test" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.16</span> RegExp.prototype.test ( <var>S</var> )</h1>
|
||
<p>This method performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>If <var>R</var> <emu-xref href="#sec-object-type" id="_ref_12496"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>string</var> be ? <emu-xref aoid="ToString" id="_ref_12497"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>S</var>).</li><li>Let <var>match</var> be ? <emu-xref aoid="RegExpExec" id="_ref_12498"><a href="text-processing.html#sec-regexpexec" class="e-user-code">RegExpExec</a></emu-xref>(<var>R</var>, <var>string</var>).</li><li>If <var>match</var> is <emu-val>null</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexp.prototype.tostring" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.17</span> RegExp.prototype.toString ( )</h1>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>If <var>R</var> <emu-xref href="#sec-object-type" id="_ref_12499"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>pattern</var> be ? <emu-xref aoid="ToString" id="_ref_12500"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12501"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"source"</emu-val>)).</li><li>Let <var>flags</var> be ? <emu-xref aoid="ToString" id="_ref_12502"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12503"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"flags"</emu-val>)).</li><li>Let <var>result</var> be the <emu-xref href="#string-concatenation" id="_ref_12504"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <emu-val>"/"</emu-val>, <var>pattern</var>, <emu-val>"/"</emu-val>, and <var>flags</var>.</li><li>Return <var>result</var>.</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>The returned String has the form of a <emu-nt id="_ref_24544"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt> that evaluates to another RegExp object with the same behaviour as this object.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.unicode" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.18</span> get RegExp.prototype.unicode</h1>
|
||
<p><code>RegExp.prototype.unicode</code> is an <emu-xref href="#sec-object-type" id="_ref_12505"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Let <var>cu</var> be the code unit 0x0075 (LATIN SMALL LETTER U).</li><li>Return ? <emu-xref aoid="RegExpHasFlag" id="_ref_12506"><a href="text-processing.html#sec-regexphasflag">RegExpHasFlag</a></emu-xref>(<var>R</var>, <var>cu</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-get-regexp.prototype.unicodesets" type="built-in function">
|
||
<h1><span class="secnum">22.2.6.19</span> get RegExp.prototype.unicodeSets</h1>
|
||
<p><code>RegExp.prototype.unicodeSets</code> is an <emu-xref href="#sec-object-type" id="_ref_12507"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose set accessor function is <emu-val>undefined</emu-val>. Its get accessor function performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>R</var> be the <emu-val>this</emu-val> value.</li><li>Let <var>cu</var> be the code unit 0x0076 (LATIN SMALL LETTER V).</li><li>Return ? <emu-xref aoid="RegExpHasFlag" id="_ref_12508"><a href="text-processing.html#sec-regexphasflag">RegExpHasFlag</a></emu-xref>(<var>R</var>, <var>cu</var>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-abstract-operations-for-regexp-matching">
|
||
<h1><span class="secnum">22.2.7</span> Abstract Operations for RegExp Matching</h1>
|
||
|
||
<emu-clause id="sec-regexpexec" type="abstract operation" aoid="RegExpExec">
|
||
<h1><span class="secnum">22.2.7.1</span> RegExpExec ( <var>R</var>, <var>S</var> )</h1>
|
||
<p>The abstract operation RegExpExec takes arguments <var>R</var> (an Object) and <var>S</var> (a String) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12509"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either an Object or <emu-val>null</emu-val>, or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12510"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>exec</var> be ? <emu-xref aoid="Get" id="_ref_12511"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"exec"</emu-val>).</li><li>If <emu-xref aoid="IsCallable" id="_ref_12512"><a href="abstract-operations.html#sec-iscallable">IsCallable</a></emu-xref>(<var>exec</var>) is <emu-val>true</emu-val>, then<ol><li>Let <var>result</var> be ? <emu-xref aoid="Call" id="_ref_12513"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>exec</var>, <var>R</var>, « <var>S</var> »).</li><li>If <var>result</var> <emu-xref href="#sec-object-type" id="_ref_12514"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref> and <var>result</var> is not <emu-val>null</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <var>result</var>.</li></ol></li><li>Perform ? <emu-xref aoid="RequireInternalSlot" id="_ref_12515"><a href="ordinary-and-exotic-objects-behaviours.html#sec-requireinternalslot">RequireInternalSlot</a></emu-xref>(<var>R</var>, <var class="field">[[RegExpMatcher]]</var>).</li><li>Return ? <emu-xref aoid="RegExpBuiltinExec" id="_ref_12516"><a href="text-processing.html#sec-regexpbuiltinexec" class="e-user-code">RegExpBuiltinExec</a></emu-xref>(<var>R</var>, <var>S</var>).</li></ol></emu-alg>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>If a callable <emu-val>"exec"</emu-val> property is not found this algorithm falls back to attempting to use the built-in RegExp matching algorithm. This provides compatible behaviour for code written for prior editions where most built-in algorithms that use regular expressions did not perform a dynamic property lookup of <emu-val>"exec"</emu-val>.</p>
|
||
</div></emu-note>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexpbuiltinexec" type="abstract operation" aoid="RegExpBuiltinExec">
|
||
<h1><span class="secnum">22.2.7.2</span> RegExpBuiltinExec ( <var>R</var>, <var>S</var> )</h1>
|
||
<p>The abstract operation RegExpBuiltinExec takes arguments <var>R</var> (an initialized RegExp instance) and <var>S</var> (a String) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12517"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either an <emu-xref href="#array-exotic-object" id="_ref_12518"><a href="ordinary-and-exotic-objects-behaviours.html#array-exotic-object">Array exotic object</a></emu-xref> or <emu-val>null</emu-val>, or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_12519"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>length</var> be the length of <var>S</var>.</li><li>Let <var>lastIndex</var> be <emu-xref aoid="ℝ" id="_ref_12520"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToLength" id="_ref_12521"><a href="abstract-operations.html#sec-tolength" class="e-user-code">ToLength</a></emu-xref>(! <emu-xref aoid="Get" id="_ref_12522"><a href="abstract-operations.html#sec-get-o-p">Get</a></emu-xref>(<var>R</var>, <emu-val>"lastIndex"</emu-val>))).</li><li>Let <var>flags</var> be <var>R</var>.<var class="field">[[OriginalFlags]]</var>.</li><li>If <var>flags</var> contains <emu-val>"g"</emu-val>, let <var>global</var> be <emu-val>true</emu-val>; else let <var>global</var> be <emu-val>false</emu-val>.</li><li>If <var>flags</var> contains <emu-val>"y"</emu-val>, let <var>sticky</var> be <emu-val>true</emu-val>; else let <var>sticky</var> be <emu-val>false</emu-val>.</li><li>If <var>flags</var> contains <emu-val>"d"</emu-val>, let <var>hasIndices</var> be <emu-val>true</emu-val>; else let <var>hasIndices</var> be <emu-val>false</emu-val>.</li><li>If <var>global</var> is <emu-val>false</emu-val> and <var>sticky</var> is <emu-val>false</emu-val>, set <var>lastIndex</var> to 0.</li><li>Let <var>matcher</var> be <var>R</var>.<var class="field">[[RegExpMatcher]]</var>.</li><li>If <var>flags</var> contains <emu-val>"u"</emu-val> or <var>flags</var> contains <emu-val>"v"</emu-val>, let <var>fullUnicode</var> be <emu-val>true</emu-val>; else let <var>fullUnicode</var> be <emu-val>false</emu-val>.</li><li>Let <var>matchSucceeded</var> be <emu-val>false</emu-val>.</li><li>If <var>fullUnicode</var> is <emu-val>true</emu-val>, let <var>input</var> be <emu-xref aoid="StringToCodePoints" id="_ref_12523"><a href="ecmascript-language-source-code.html#sec-stringtocodepoints">StringToCodePoints</a></emu-xref>(<var>S</var>); else let <var>input</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12524"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose elements are the code units that are the elements of <var>S</var>.</li><li>NOTE: Each element of <var>input</var> is considered to be a character.</li><li>Repeat, while <var>matchSucceeded</var> is <emu-val>false</emu-val>,<ol><li>If <var>lastIndex</var> > <var>length</var>, then<ol><li>If <var>global</var> is <emu-val>true</emu-val> or <var>sticky</var> is <emu-val>true</emu-val>, then<ol><li>Perform ? <emu-xref aoid="Set" id="_ref_12525"><a href="abstract-operations.html#sec-set-o-p-v-throw">Set</a></emu-xref>(<var>R</var>, <emu-val>"lastIndex"</emu-val>, <emu-val>+0</emu-val><sub>𝔽</sub>, <emu-val>true</emu-val>).</li></ol></li><li>Return <emu-val>null</emu-val>.</li></ol></li><li>Let <var>inputIndex</var> be the index into <var>input</var> of the character that was obtained from element <var>lastIndex</var> of <var>S</var>.</li><li>Let <var>r</var> be <var>matcher</var>(<var>input</var>, <var>inputIndex</var>).</li><li>If <var>r</var> is <emu-const>failure</emu-const>, then<ol><li>If <var>sticky</var> is <emu-val>true</emu-val>, then<ol><li>Perform ? <emu-xref aoid="Set" id="_ref_12526"><a href="abstract-operations.html#sec-set-o-p-v-throw">Set</a></emu-xref>(<var>R</var>, <emu-val>"lastIndex"</emu-val>, <emu-val>+0</emu-val><sub>𝔽</sub>, <emu-val>true</emu-val>).</li><li>Return <emu-val>null</emu-val>.</li></ol></li><li>Set <var>lastIndex</var> to <emu-xref aoid="AdvanceStringIndex" id="_ref_12527"><a href="text-processing.html#sec-advancestringindex">AdvanceStringIndex</a></emu-xref>(<var>S</var>, <var>lastIndex</var>, <var>fullUnicode</var>).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_12528"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>r</var> is a <emu-xref href="#pattern-matchstate" id="_ref_12529"><a href="text-processing.html#pattern-matchstate">MatchState</a></emu-xref>.</li><li>Set <var>matchSucceeded</var> to <emu-val>true</emu-val>.</li></ol></li></ol></li><li>Let <var>e</var> be <var>r</var>.<var class="field">[[EndIndex]]</var>.</li><li>If <var>fullUnicode</var> is <emu-val>true</emu-val>, set <var>e</var> to <emu-xref aoid="GetStringIndex" id="_ref_12530"><a href="text-processing.html#sec-getstringindex">GetStringIndex</a></emu-xref>(<var>S</var>, <var>e</var>).</li><li>If <var>global</var> is <emu-val>true</emu-val> or <var>sticky</var> is <emu-val>true</emu-val>, then<ol><li>Perform ? <emu-xref aoid="Set" id="_ref_12531"><a href="abstract-operations.html#sec-set-o-p-v-throw">Set</a></emu-xref>(<var>R</var>, <emu-val>"lastIndex"</emu-val>, <emu-xref aoid="𝔽" id="_ref_12532"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>e</var>), <emu-val>true</emu-val>).</li></ol></li><li>Let <var>n</var> be the number of elements in <var>r</var>.<var class="field">[[Captures]]</var>.</li><li><emu-xref href="#assert" id="_ref_12533"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>n</var> = <var>R</var>.<var class="field">[[RegExpRecord]]</var>.<var class="field">[[CapturingGroupsCount]]</var>.</li><li><emu-xref href="#assert" id="_ref_12534"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>n</var> < 2<sup>32</sup> - 1.</li><li>Let <var>A</var> be ! <emu-xref aoid="ArrayCreate" id="_ref_12535"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(<var>n</var> + 1).</li><li><emu-xref href="#assert" id="_ref_12536"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: The <emu-xref href="#mathematical-value-of" id="_ref_12537"><a href="notational-conventions.html#mathematical-value-of">mathematical value of</a></emu-xref> <var>A</var>'s <emu-val>"length"</emu-val> property is <var>n</var> + 1.</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12538"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, <emu-val>"index"</emu-val>, <emu-xref aoid="𝔽" id="_ref_12539"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>lastIndex</var>)).</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12540"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, <emu-val>"input"</emu-val>, <var>S</var>).</li><li>Let <var>match</var> be the <emu-xref href="#sec-match-records" id="_ref_12541"><a href="text-processing.html#sec-match-records">Match Record</a></emu-xref> { <var class="field">[[StartIndex]]</var>: <var>lastIndex</var>, <var class="field">[[EndIndex]]</var>: <var>e</var> }.</li><li>Let <var>indices</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12542"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>groupNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12543"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Append <var>match</var> to <var>indices</var>.</li><li>Let <var>matchedSubstr</var> be <emu-xref aoid="GetMatchString" id="_ref_12544"><a href="text-processing.html#sec-getmatchstring">GetMatchString</a></emu-xref>(<var>S</var>, <var>match</var>).</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12545"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, <emu-val>"0"</emu-val>, <var>matchedSubstr</var>).</li><li>If <var>R</var> contains any <emu-nt id="_ref_24545"><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt>, then<ol><li>Let <var>groups</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_12546"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-val>null</emu-val>).</li><li>Let <var>hasGroups</var> be <emu-val>true</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>groups</var> be <emu-val>undefined</emu-val>.</li><li>Let <var>hasGroups</var> be <emu-val>false</emu-val>.</li></ol></li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12547"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, <emu-val>"groups"</emu-val>, <var>groups</var>).</li><li>Let <var>matchedGroupNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12548"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each <emu-xref href="#integer" id="_ref_12549"><a href="notational-conventions.html#integer">integer</a></emu-xref> <var>i</var> such that 1 ≤ <var>i</var> ≤ <var>n</var>, in ascending order, do<ol><li>Let <var>captureI</var> be <var>i</var><sup>th</sup> element of <var>r</var>.<var class="field">[[Captures]]</var>.</li><li>If <var>captureI</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>capturedValue</var> be <emu-val>undefined</emu-val>.</li><li>Append <emu-val>undefined</emu-val> to <var>indices</var>.</li></ol></li><li>Else,<ol><li>Let <var>captureStart</var> be <var>captureI</var>.<var class="field">[[StartIndex]]</var>.</li><li>Let <var>captureEnd</var> be <var>captureI</var>.<var class="field">[[EndIndex]]</var>.</li><li>If <var>fullUnicode</var> is <emu-val>true</emu-val>, then<ol><li>Set <var>captureStart</var> to <emu-xref aoid="GetStringIndex" id="_ref_12550"><a href="text-processing.html#sec-getstringindex">GetStringIndex</a></emu-xref>(<var>S</var>, <var>captureStart</var>).</li><li>Set <var>captureEnd</var> to <emu-xref aoid="GetStringIndex" id="_ref_12551"><a href="text-processing.html#sec-getstringindex">GetStringIndex</a></emu-xref>(<var>S</var>, <var>captureEnd</var>).</li></ol></li><li>Let <var>capture</var> be the <emu-xref href="#sec-match-records" id="_ref_12552"><a href="text-processing.html#sec-match-records">Match Record</a></emu-xref> { <var class="field">[[StartIndex]]</var>: <var>captureStart</var>, <var class="field">[[EndIndex]]</var>: <var>captureEnd</var> }.</li><li>Let <var>capturedValue</var> be <emu-xref aoid="GetMatchString" id="_ref_12553"><a href="text-processing.html#sec-getmatchstring">GetMatchString</a></emu-xref>(<var>S</var>, <var>capture</var>).</li><li>Append <var>capture</var> to <var>indices</var>.</li></ol></li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12554"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, ! <emu-xref aoid="ToString" id="_ref_12555"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12556"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>i</var>)), <var>capturedValue</var>).</li><li>If the <var>i</var><sup>th</sup> capture of <var>R</var> was defined with a <emu-nt id="_ref_24546"><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt>, then<ol><li>Let <var>s</var> be the <emu-xref aoid="CapturingGroupName" id="_ref_12557"><a href="text-processing.html#sec-static-semantics-capturinggroupname">CapturingGroupName</a></emu-xref> of that <emu-nt id="_ref_24547"><a href="text-processing.html#prod-GroupName">GroupName</a></emu-nt>.</li><li>If <var>matchedGroupNames</var> contains <var>s</var>, then<ol><li><emu-xref href="#assert" id="_ref_12558"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>capturedValue</var> is <emu-val>undefined</emu-val>.</li><li>Append <emu-val>undefined</emu-val> to <var>groupNames</var>.</li></ol></li><li>Else,<ol><li>If <var>capturedValue</var> is not <emu-val>undefined</emu-val>, append <var>s</var> to <var>matchedGroupNames</var>.</li><li>NOTE: If there are multiple groups named <var>s</var>, <var>groups</var> may already have an <var>s</var> property at this point. However, because <var>groups</var> is an <emu-xref href="#ordinary-object" id="_ref_12559"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> whose properties are all writable <emu-xref href="#sec-object-type" id="_ref_12560"><a href="ecmascript-data-types-and-values.html#sec-object-type">data properties</a></emu-xref>, the call to <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12561"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref> is nevertheless guaranteed to succeed.</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12562"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>groups</var>, <var>s</var>, <var>capturedValue</var>).</li><li>Append <var>s</var> to <var>groupNames</var>.</li></ol></li></ol></li><li>Else,<ol><li>Append <emu-val>undefined</emu-val> to <var>groupNames</var>.</li></ol></li></ol></li><li>If <var>hasIndices</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>indicesArray</var> be <emu-xref aoid="MakeMatchIndicesIndexPairArray" id="_ref_12563"><a href="text-processing.html#sec-makematchindicesindexpairarray">MakeMatchIndicesIndexPairArray</a></emu-xref>(<var>S</var>, <var>indices</var>, <var>groupNames</var>, <var>hasGroups</var>).</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12564"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, <emu-val>"indices"</emu-val>, <var>indicesArray</var>).</li></ol></li><li>Return <var>A</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-advancestringindex" type="abstract operation" aoid="AdvanceStringIndex">
|
||
<h1><span class="secnum">22.2.7.3</span> AdvanceStringIndex ( <var>S</var>, <var>index</var>, <var>unicode</var> )</h1>
|
||
<p>The abstract operation AdvanceStringIndex takes arguments <var>S</var> (a String), <var>index</var> (a non-negative <emu-xref href="#integer" id="_ref_12565"><a href="notational-conventions.html#integer">integer</a></emu-xref>), and <var>unicode</var> (a Boolean) and returns an <emu-xref href="#integer" id="_ref_12566"><a href="notational-conventions.html#integer">integer</a></emu-xref>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_12567"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>index</var> ≤ 2<sup>53</sup> - 1.</li><li>If <var>unicode</var> is <emu-val>false</emu-val>, return <var>index</var> + 1.</li><li>Let <var>length</var> be the length of <var>S</var>.</li><li>If <var>index</var> + 1 ≥ <var>length</var>, return <var>index</var> + 1.</li><li>Let <var>cp</var> be <emu-xref aoid="CodePointAt" id="_ref_12568"><a href="ecmascript-language-source-code.html#sec-codepointat">CodePointAt</a></emu-xref>(<var>S</var>, <var>index</var>).</li><li>Return <var>index</var> + <var>cp</var>.<var class="field">[[CodeUnitCount]]</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-getstringindex" type="abstract operation" aoid="GetStringIndex">
|
||
<h1><span class="secnum">22.2.7.4</span> GetStringIndex ( <var>S</var>, <var>codePointIndex</var> )</h1>
|
||
<p>The abstract operation GetStringIndex takes arguments <var>S</var> (a String) and <var>codePointIndex</var> (a non-negative <emu-xref href="#integer" id="_ref_12569"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and returns a non-negative <emu-xref href="#integer" id="_ref_12570"><a href="notational-conventions.html#integer">integer</a></emu-xref>. It interprets <var>S</var> as a sequence of UTF-16 encoded code points, as described in <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_712"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">6.1.4</a></emu-xref>, and returns the code unit index corresponding to code point index <var>codePointIndex</var> when such an index exists. Otherwise, it returns the length of <var>S</var>. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>If <var>S</var> is the empty String, return 0.</li><li>Let <var>len</var> be the length of <var>S</var>.</li><li>Let <var>codeUnitCount</var> be 0.</li><li>Let <var>codePointCount</var> be 0.</li><li>Repeat, while <var>codeUnitCount</var> < <var>len</var>,<ol><li>If <var>codePointCount</var> = <var>codePointIndex</var>, return <var>codeUnitCount</var>.</li><li>Let <var>cp</var> be <emu-xref aoid="CodePointAt" id="_ref_12571"><a href="ecmascript-language-source-code.html#sec-codepointat">CodePointAt</a></emu-xref>(<var>S</var>, <var>codeUnitCount</var>).</li><li>Set <var>codeUnitCount</var> to <var>codeUnitCount</var> + <var>cp</var>.<var class="field">[[CodeUnitCount]]</var>.</li><li>Set <var>codePointCount</var> to <var>codePointCount</var> + 1.</li></ol></li><li>Return <var>len</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-match-records">
|
||
<h1><span class="secnum">22.2.7.5</span> Match Records</h1>
|
||
<p>A <dfn variants="Match Records" tabindex="-1">Match Record</dfn> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12572"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> value used to encapsulate the start and end indices of a regular expression match or capture.</p>
|
||
<p>Match Records have the fields listed in <emu-xref href="#table-match-record" id="_ref_713"><a href="text-processing.html#table-match-record">Table 67</a></emu-xref>.</p>
|
||
<emu-table id="table-match-record" caption="Match Record Fields"><figure><figcaption>Table 67: <emu-xref href="#sec-match-records" id="_ref_12573"><a href="text-processing.html#sec-match-records">Match Record</a></emu-xref> Fields</figcaption>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Field Name</th>
|
||
<th>Value</th>
|
||
<th>Meaning</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td><var class="field">[[StartIndex]]</var></td>
|
||
<td>a non-negative <emu-xref href="#integer" id="_ref_12574"><a href="notational-conventions.html#integer">integer</a></emu-xref></td>
|
||
<td>The number of code units from the start of a string at which the match begins (inclusive).</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[EndIndex]]</var></td>
|
||
<td>an <emu-xref href="#integer" id="_ref_12575"><a href="notational-conventions.html#integer">integer</a></emu-xref> ≥ <var class="field">[[StartIndex]]</var></td>
|
||
<td>The number of code units from the start of a string at which the match ends (exclusive).</td>
|
||
</tr>
|
||
</tbody></table>
|
||
</figure></emu-table>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-getmatchstring" type="abstract operation" aoid="GetMatchString">
|
||
<h1><span class="secnum">22.2.7.6</span> GetMatchString ( <var>S</var>, <var>match</var> )</h1>
|
||
<p>The abstract operation GetMatchString takes arguments <var>S</var> (a String) and <var>match</var> (a <emu-xref href="#sec-match-records" id="_ref_12576"><a href="text-processing.html#sec-match-records">Match Record</a></emu-xref>) and returns a String. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_12577"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>match</var>.<var class="field">[[StartIndex]]</var> ≤ <var>match</var>.<var class="field">[[EndIndex]]</var> ≤ the length of <var>S</var>.</li><li>Return the <emu-xref href="#substring" id="_ref_12578"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>S</var> from <var>match</var>.<var class="field">[[StartIndex]]</var> to <var>match</var>.<var class="field">[[EndIndex]]</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-getmatchindexpair" type="abstract operation" aoid="GetMatchIndexPair">
|
||
<h1><span class="secnum">22.2.7.7</span> GetMatchIndexPair ( <var>S</var>, <var>match</var> )</h1>
|
||
<p>The abstract operation GetMatchIndexPair takes arguments <var>S</var> (a String) and <var>match</var> (a <emu-xref href="#sec-match-records" id="_ref_12579"><a href="text-processing.html#sec-match-records">Match Record</a></emu-xref>) and returns an Array. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_12580"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>match</var>.<var class="field">[[StartIndex]]</var> ≤ <var>match</var>.<var class="field">[[EndIndex]]</var> ≤ the length of <var>S</var>.</li><li>Return <emu-xref aoid="CreateArrayFromList" id="_ref_12581"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(« <emu-xref aoid="𝔽" id="_ref_12582"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>match</var>.<var class="field">[[StartIndex]]</var>), <emu-xref aoid="𝔽" id="_ref_12583"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>match</var>.<var class="field">[[EndIndex]]</var>) »).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-makematchindicesindexpairarray" type="abstract operation" aoid="MakeMatchIndicesIndexPairArray">
|
||
<h1><span class="secnum">22.2.7.8</span> MakeMatchIndicesIndexPairArray ( <var>S</var>, <var>indices</var>, <var>groupNames</var>, <var>hasGroups</var> )</h1>
|
||
<p>The abstract operation MakeMatchIndicesIndexPairArray takes arguments <var>S</var> (a String), <var>indices</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12584"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of either <emu-xref href="#sec-match-records" id="_ref_12585"><a href="text-processing.html#sec-match-records">Match Records</a></emu-xref> or <emu-val>undefined</emu-val>), <var>groupNames</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12586"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of either Strings or <emu-val>undefined</emu-val>), and <var>hasGroups</var> (a Boolean) and returns an Array. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>n</var> be the number of elements in <var>indices</var>.</li><li><emu-xref href="#assert" id="_ref_12587"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>n</var> < 2<sup>32</sup> - 1.</li><li><emu-xref href="#assert" id="_ref_12588"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>groupNames</var> has <var>n</var> - 1 elements.</li><li>NOTE: The <var>groupNames</var> <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12589"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> contains elements aligned with the <var>indices</var> <emu-xref href="#sec-list-and-record-specification-type" id="_ref_12590"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> starting at <var>indices</var>[1].</li><li>Let <var>A</var> be ! <emu-xref aoid="ArrayCreate" id="_ref_12591"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(<var>n</var>).</li><li>If <var>hasGroups</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>groups</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_12592"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-val>null</emu-val>).</li></ol></li><li>Else,<ol><li>Let <var>groups</var> be <emu-val>undefined</emu-val>.</li></ol></li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12593"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, <emu-val>"groups"</emu-val>, <var>groups</var>).</li><li>For each <emu-xref href="#integer" id="_ref_12594"><a href="notational-conventions.html#integer">integer</a></emu-xref> <var>i</var> such that 0 ≤ <var>i</var> < <var>n</var>, in ascending order, do<ol><li>Let <var>matchIndices</var> be <var>indices</var>[<var>i</var>].</li><li>If <var>matchIndices</var> is not <emu-val>undefined</emu-val>, then<ol><li>Let <var>matchIndexPair</var> be <emu-xref aoid="GetMatchIndexPair" id="_ref_12595"><a href="text-processing.html#sec-getmatchindexpair">GetMatchIndexPair</a></emu-xref>(<var>S</var>, <var>matchIndices</var>).</li></ol></li><li>Else,<ol><li>Let <var>matchIndexPair</var> be <emu-val>undefined</emu-val>.</li></ol></li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12596"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, ! <emu-xref aoid="ToString" id="_ref_12597"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_12598"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>i</var>)), <var>matchIndexPair</var>).</li><li>If <var>i</var> > 0, then<ol><li>Let <var>s</var> be <var>groupNames</var>[<var>i</var> - 1].</li><li>If <var>s</var> is not <emu-val>undefined</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_12599"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>groups</var> is not <emu-val>undefined</emu-val>.</li><li>NOTE: If there are multiple groups named <var>s</var>, <var>groups</var> may already have an <var>s</var> property at this point. However, because <var>groups</var> is an <emu-xref href="#ordinary-object" id="_ref_12600"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> whose properties are all writable <emu-xref href="#sec-object-type" id="_ref_12601"><a href="ecmascript-data-types-and-values.html#sec-object-type">data properties</a></emu-xref>, the call to <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12602"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref> is nevertheless guaranteed to succeed.</li><li>Perform ! <emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_12603"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>groups</var>, <var>s</var>, <var>matchIndexPair</var>).</li></ol></li></ol></li></ol></li><li>Return <var>A</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-properties-of-regexp-instances">
|
||
<h1><span class="secnum">22.2.8</span> Properties of RegExp Instances</h1>
|
||
<p>RegExp instances are <emu-xref href="#ordinary-object" id="_ref_12604"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref> that inherit properties from the <emu-xref href="#sec-properties-of-the-regexp-prototype-object" id="_ref_12605"><a href="text-processing.html#sec-properties-of-the-regexp-prototype-object">RegExp prototype object</a></emu-xref>. RegExp instances have internal slots <var class="field">[[OriginalSource]]</var>, <var class="field">[[OriginalFlags]]</var>, <var class="field">[[RegExpRecord]]</var>, and <var class="field">[[RegExpMatcher]]</var>. The value of the <var class="field">[[RegExpMatcher]]</var> internal slot is an <emu-xref href="#sec-abstract-closure" id="_ref_12606"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> representation of the <emu-nt id="_ref_24548"><a href="text-processing.html#prod-Pattern">Pattern</a></emu-nt> of the RegExp object.</p>
|
||
<emu-note><span class="note">Note</span><div class="note-contents">
|
||
<p>Prior to ECMAScript 2015, RegExp instances were specified as having the own <emu-xref href="#sec-object-type" id="_ref_12607"><a href="ecmascript-data-types-and-values.html#sec-object-type">data properties</a></emu-xref> <emu-val>"source"</emu-val>, <emu-val>"global"</emu-val>, <emu-val>"ignoreCase"</emu-val>, and <emu-val>"multiline"</emu-val>. Those properties are now specified as <emu-xref href="#sec-object-type" id="_ref_12608"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor properties</a></emu-xref> of <code>RegExp.prototype</code>.</p>
|
||
</div></emu-note>
|
||
<p>RegExp instances also have the following property:</p>
|
||
|
||
<emu-clause id="sec-lastindex">
|
||
<h1><span class="secnum">22.2.8.1</span> lastIndex</h1>
|
||
<p>The value of the <emu-val>"lastIndex"</emu-val> property specifies the String index at which to start the next match. It is coerced to an <emu-xref href="#integral-number" id="_ref_12609"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref> when used (see <emu-xref href="#sec-regexpbuiltinexec" id="_ref_714"><a href="text-processing.html#sec-regexpbuiltinexec">22.2.7.2</a></emu-xref>). This property shall have the attributes { <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }.</p>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-regexp-string-iterator-objects">
|
||
<h1><span class="secnum">22.2.9</span> RegExp String Iterator Objects</h1>
|
||
<p>A <dfn variants="RegExp String Iterators,RegExp String Iterator object,RegExp String Iterator objects" tabindex="-1">RegExp String Iterator</dfn> is an object that represents a specific iteration over some specific String instance object, matching against some specific RegExp instance object. There is not a named <emu-xref href="#constructor" id="_ref_12610"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> for RegExp String Iterator objects. Instead, RegExp String Iterator objects are created by calling certain methods of RegExp instance objects.</p>
|
||
|
||
<emu-clause id="sec-createregexpstringiterator" type="abstract operation" aoid="CreateRegExpStringIterator">
|
||
<h1><span class="secnum">22.2.9.1</span> CreateRegExpStringIterator ( <var>R</var>, <var>S</var>, <var>global</var>, <var>fullUnicode</var> )</h1>
|
||
<p>The abstract operation CreateRegExpStringIterator takes arguments <var>R</var> (an Object), <var>S</var> (a String), <var>global</var> (a Boolean), and <var>fullUnicode</var> (a Boolean) and returns an Object. It performs the following steps when called:</p>
|
||
<emu-alg><ol><li>Let <var>iterator</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_12611"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-%regexpstringiteratorprototype%-object" id="_ref_12612"><a href="text-processing.html#sec-%regexpstringiteratorprototype%-object">%RegExpStringIteratorPrototype%</a></emu-xref>, « <var class="field">[[IteratingRegExp]]</var>, <var class="field">[[IteratedString]]</var>, <var class="field">[[Global]]</var>, <var class="field">[[Unicode]]</var>, <var class="field">[[Done]]</var> »).</li><li>Set <var>iterator</var>.<var class="field">[[IteratingRegExp]]</var> to <var>R</var>.</li><li>Set <var>iterator</var>.<var class="field">[[IteratedString]]</var> to <var>S</var>.</li><li>Set <var>iterator</var>.<var class="field">[[Global]]</var> to <var>global</var>.</li><li>Set <var>iterator</var>.<var class="field">[[Unicode]]</var> to <var>fullUnicode</var>.</li><li>Set <var>iterator</var>.<var class="field">[[Done]]</var> to <emu-val>false</emu-val>.</li><li>Return <var>iterator</var>.</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-%regexpstringiteratorprototype%-object">
|
||
<h1><span class="secnum">22.2.9.2</span> The %RegExpStringIteratorPrototype% Object</h1>
|
||
<p>The <dfn tabindex="-1">%RegExpStringIteratorPrototype%</dfn> object:</p>
|
||
<ul>
|
||
<li>has properties that are inherited by all <emu-xref href="#sec-regexp-string-iterator-objects" id="_ref_12613"><a href="text-processing.html#sec-regexp-string-iterator-objects">RegExp String Iterator objects</a></emu-xref>.</li>
|
||
<li>is an <emu-xref href="#ordinary-object" id="_ref_12614"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>.</li>
|
||
<li>has a <var class="field">[[Prototype]]</var> internal slot whose value is <emu-xref href="#sec-%iterator.prototype%-object" id="_ref_12615"><a href="control-abstraction-objects.html#sec-%iterator.prototype%-object">%Iterator.prototype%</a></emu-xref>.</li>
|
||
<li>has the following properties:</li>
|
||
</ul>
|
||
|
||
<emu-clause id="sec-%regexpstringiteratorprototype%.next" type="built-in function">
|
||
<h1><span class="secnum">22.2.9.2.1</span> %RegExpStringIteratorPrototype%.next ( )</h1>
|
||
<emu-alg><ol><li>Let <var>O</var> be the <emu-val>this</emu-val> value.</li><li>If <var>O</var> <emu-xref href="#sec-object-type" id="_ref_12616"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>O</var> does not have all of the internal slots of a <emu-xref href="#sec-regexp-string-iterator-objects" id="_ref_12617"><a href="text-processing.html#sec-regexp-string-iterator-objects">RegExp String Iterator</a></emu-xref> Object Instance (see <emu-xref href="#sec-properties-of-regexp-string-iterator-instances" id="_ref_715"><a href="text-processing.html#sec-properties-of-regexp-string-iterator-instances">22.2.9.3</a></emu-xref>), throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>O</var>.<var class="field">[[Done]]</var> is <emu-val>true</emu-val>, then<ol><li>Return <emu-xref aoid="CreateIteratorResultObject" id="_ref_12618"><a href="abstract-operations.html#sec-createiterresultobject">CreateIteratorResultObject</a></emu-xref>(<emu-val>undefined</emu-val>, <emu-val>true</emu-val>).</li></ol></li><li>Let <var>R</var> be <var>O</var>.<var class="field">[[IteratingRegExp]]</var>.</li><li>Let <var>S</var> be <var>O</var>.<var class="field">[[IteratedString]]</var>.</li><li>Let <var>global</var> be <var>O</var>.<var class="field">[[Global]]</var>.</li><li>Let <var>fullUnicode</var> be <var>O</var>.<var class="field">[[Unicode]]</var>.</li><li>Let <var>match</var> be ? <emu-xref aoid="RegExpExec" id="_ref_12619"><a href="text-processing.html#sec-regexpexec" class="e-user-code">RegExpExec</a></emu-xref>(<var>R</var>, <var>S</var>).</li><li>If <var>match</var> is <emu-val>null</emu-val>, then<ol><li>Set <var>O</var>.<var class="field">[[Done]]</var> to <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="CreateIteratorResultObject" id="_ref_12620"><a href="abstract-operations.html#sec-createiterresultobject">CreateIteratorResultObject</a></emu-xref>(<emu-val>undefined</emu-val>, <emu-val>true</emu-val>).</li></ol></li><li>If <var>global</var> is <emu-val>false</emu-val>, then<ol><li>Set <var>O</var>.<var class="field">[[Done]]</var> to <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="CreateIteratorResultObject" id="_ref_12621"><a href="abstract-operations.html#sec-createiterresultobject">CreateIteratorResultObject</a></emu-xref>(<var>match</var>, <emu-val>false</emu-val>).</li></ol></li><li>Let <var>matchStr</var> be ? <emu-xref aoid="ToString" id="_ref_12622"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12623"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>match</var>, <emu-val>"0"</emu-val>)).</li><li>If <var>matchStr</var> is the empty String, then<ol><li>Let <var>thisIndex</var> be <emu-xref aoid="ℝ" id="_ref_12624"><a href="notational-conventions.html#%E2%84%9D">ℝ</a></emu-xref>(? <emu-xref aoid="ToLength" id="_ref_12625"><a href="abstract-operations.html#sec-tolength" class="e-user-code">ToLength</a></emu-xref>(? <emu-xref aoid="Get" id="_ref_12626"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>R</var>, <emu-val>"lastIndex"</emu-val>))).</li><li>Let <var>nextIndex</var> be <emu-xref aoid="AdvanceStringIndex" id="_ref_12627"><a href="text-processing.html#sec-advancestringindex">AdvanceStringIndex</a></emu-xref>(<var>S</var>, <var>thisIndex</var>, <var>fullUnicode</var>).</li><li>Perform ? <emu-xref aoid="Set" id="_ref_12628"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>R</var>, <emu-val>"lastIndex"</emu-val>, <emu-xref aoid="𝔽" id="_ref_12629"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>nextIndex</var>), <emu-val>true</emu-val>).</li></ol></li><li>Return <emu-xref aoid="CreateIteratorResultObject" id="_ref_12630"><a href="abstract-operations.html#sec-createiterresultobject">CreateIteratorResultObject</a></emu-xref>(<var>match</var>, <emu-val>false</emu-val>).</li></ol></emu-alg>
|
||
</emu-clause>
|
||
|
||
<emu-clause oldids="sec-%regexpstringiteratorprototype%-@@tostringtag" id="sec-%regexpstringiteratorprototype%-%symbol.tostringtag%"><span id="sec-%regexpstringiteratorprototype%-@@tostringtag"></span>
|
||
<h1><span class="secnum">22.2.9.2.2</span> %RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]</h1>
|
||
<p>The initial value of the <emu-xref href="#sec-well-known-symbols" id="_ref_12631"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.toStringTag%</a></emu-xref> property is the String value <emu-val>"RegExp String Iterator"</emu-val>.</p>
|
||
<p>This property has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val> }.</p>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
|
||
<emu-clause id="sec-properties-of-regexp-string-iterator-instances">
|
||
<h1><span class="secnum">22.2.9.3</span> Properties of RegExp String Iterator Instances</h1>
|
||
<p><emu-xref href="#sec-regexp-string-iterator-objects" id="_ref_12632"><a href="text-processing.html#sec-regexp-string-iterator-objects">RegExp String Iterator</a></emu-xref> instances are <emu-xref href="#ordinary-object" id="_ref_12633"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref> that inherit properties from the <emu-xref href="#sec-%regexpstringiteratorprototype%-object" id="_ref_12634"><a href="text-processing.html#sec-%regexpstringiteratorprototype%-object">%RegExpStringIteratorPrototype%</a></emu-xref> intrinsic object. <emu-xref href="#sec-regexp-string-iterator-objects" id="_ref_12635"><a href="text-processing.html#sec-regexp-string-iterator-objects">RegExp String Iterator</a></emu-xref> instances are initially created with the internal slots listed in <emu-xref href="#table-regexp-string-iterator-instance-slots" id="_ref_716"><a href="text-processing.html#table-regexp-string-iterator-instance-slots">Table 68</a></emu-xref>.</p>
|
||
<emu-table id="table-regexp-string-iterator-instance-slots" caption="Internal Slots of RegExp String Iterator Instances"><figure><figcaption>Table 68: Internal Slots of <emu-xref href="#sec-regexp-string-iterator-objects" id="_ref_12636"><a href="text-processing.html#sec-regexp-string-iterator-objects">RegExp String Iterator</a></emu-xref> Instances</figcaption>
|
||
<table>
|
||
<tbody><tr>
|
||
<th>Internal Slot</th>
|
||
<th>Type</th>
|
||
<th>Description</th>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[IteratingRegExp]]</var></td>
|
||
<td>an Object</td>
|
||
<td>The regular expression used for iteration. <emu-xref aoid="IsRegExp" id="_ref_12637"><a href="abstract-operations.html#sec-isregexp">IsRegExp</a></emu-xref>(<var class="field">[[IteratingRegExp]]</var>) is initially <emu-val>true</emu-val>.</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[IteratedString]]</var></td>
|
||
<td>a String</td>
|
||
<td>The String value being iterated upon.</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[Global]]</var></td>
|
||
<td>a Boolean</td>
|
||
<td>Indicates whether the <var class="field">[[IteratingRegExp]]</var> is global or not.</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[Unicode]]</var></td>
|
||
<td>a Boolean</td>
|
||
<td>Indicates whether the <var class="field">[[IteratingRegExp]]</var> is in Unicode mode or not.</td>
|
||
</tr>
|
||
<tr>
|
||
<td><var class="field">[[Done]]</var></td>
|
||
<td>a Boolean</td>
|
||
<td>Indicates whether the iteration is complete or not.</td>
|
||
</tr>
|
||
</tbody></table>
|
||
</figure></emu-table>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
</emu-clause>
|
||
</emu-clause></div></body> |