Files
ask262/spec-built/multipage/ecmascript-language-expressions.html
T

3706 lines
1.1 MiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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&nbsp;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&nbsp;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-ecmascript-language-expressions"></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>&lt;&lt;</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>&gt;&gt;</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>&gt;&gt;&gt;</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 &amp; Software License">Copyright &amp; 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-ecmascript-language-expressions">
<h1><span class="secnum">13</span> ECMAScript Language: Expressions</h1>
<emu-clause id="sec-identifiers">
<h1><span class="secnum">13.1</span> Identifiers</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="IdentifierReference" params="Yield, Await" id="prod-IdentifierReference">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_" id="prod-dL7e73Zt">
<emu-nt id="_ref_20350"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt>
</emu-rhs>
<emu-rhs a="zobe2rzz" constraints="~Yield" id="prod-dN4C9Ooo"><emu-constraints>[~Yield]</emu-constraints>
<emu-t>yield</emu-t>
</emu-rhs>
<emu-rhs a="dypijsdc" constraints="~Await" id="prod-iAOJjaxZ"><emu-constraints>[~Await]</emu-constraints>
<emu-t>await</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="BindingIdentifier" params="Yield, Await" id="prod-BindingIdentifier">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_" id="prod-5vbjd2EY">
<emu-nt id="_ref_20351"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt>
</emu-rhs>
<emu-rhs a="0d8zyjn8" id="prod-bP3zkqsh">
<emu-t>yield</emu-t>
</emu-rhs>
<emu-rhs a="hx1dvlrw" id="prod-k8G1I2qF">
<emu-t>await</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="LabelIdentifier" params="Yield, Await" id="prod-LabelIdentifier">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-LabelIdentifier">LabelIdentifier</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_">
<emu-nt id="_ref_20352"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt>
</emu-rhs>
<emu-rhs a="zobe2rzz" constraints="~Yield" id="prod-aHP0cTnm"><emu-constraints>[~Yield]</emu-constraints>
<emu-t>yield</emu-t>
</emu-rhs>
<emu-rhs a="dypijsdc" constraints="~Await" id="prod-8xe5-4Uo"><emu-constraints>[~Await]</emu-constraints>
<emu-t>await</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="Identifier" id="prod-Identifier">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v6xddc2h" id="prod-OqjWNqf4">
<emu-nt id="_ref_20353"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_20354"><a href="ecmascript-language-lexical-grammar.html#prod-ReservedWord">ReservedWord</a></emu-nt></emu-gmod>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><code>yield</code> and <code>await</code> are permitted as <emu-nt id="_ref_20355"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in the grammar, and prohibited with <emu-xref href="#sec-static-semantic-rules" id="_ref_5951"><a href="notational-conventions.html#sec-static-semantic-rules">static semantics</a></emu-xref> below, to prohibit automatic semicolon insertion in cases such as</p>
<pre><code class="javascript hljs"><span class="hljs-keyword">let</span>
<span class="hljs-keyword">await</span> <span class="hljs-number">0</span>;</code></pre>
</div></emu-note>
<emu-clause id="sec-identifiers-static-semantics-early-errors">
<h1><span class="secnum">13.1.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="BindingIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_"><emu-nt id="_ref_20356"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="IsStrict" id="_ref_5952"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this production) is <emu-val>true</emu-val> and the <emu-xref aoid="StringValue" id="_ref_5953"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20357"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt> is either <emu-val>"arguments"</emu-val> or <emu-val>"eval"</emu-val>.
</li>
</ul>
<emu-grammar><emu-production name="IdentifierReference" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
<emu-production name="BindingIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
<emu-production name="LabelIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LabelIdentifier">LabelIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="IsStrict" id="_ref_5954"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this production) is <emu-val>true</emu-val>.
</li>
</ul>
<emu-grammar><emu-production name="IdentifierReference" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hx1dvlrw"><emu-t>await</emu-t></emu-rhs>
</emu-production>
<emu-production name="BindingIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hx1dvlrw"><emu-t>await</emu-t></emu-rhs>
</emu-production>
<emu-production name="LabelIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LabelIdentifier">LabelIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hx1dvlrw"><emu-t>await</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref href="#sec-context-free-grammars" id="_ref_5955"><a href="notational-conventions.html#sec-context-free-grammars">goal symbol</a></emu-xref> of the syntactic grammar is <emu-nt id="_ref_20358"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>.
</li>
</ul>
<emu-grammar><emu-production name="BindingIdentifier" params="Yield, Await" collapsed="">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if this production has a <sub>[Yield]</sub> parameter.
</li>
</ul>
<emu-grammar><emu-production name="BindingIdentifier" params="Yield, Await" collapsed="">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hx1dvlrw"><emu-t>await</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if this production has an <sub>[Await]</sub> parameter.
</li>
</ul>
<emu-grammar><emu-production name="IdentifierReference" params="Yield, Await" collapsed="">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_"><emu-nt id="_ref_20359"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
</emu-production>
<emu-production name="BindingIdentifier" params="Yield, Await" collapsed="">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_"><emu-nt id="_ref_20360"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
</emu-production>
<emu-production name="LabelIdentifier" params="Yield, Await" collapsed="">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-LabelIdentifier">LabelIdentifier</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_"><emu-nt id="_ref_20361"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if this production has a <sub>[Yield]</sub> parameter and the <emu-xref aoid="StringValue" id="_ref_5956"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20362"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt> is <emu-val>"yield"</emu-val>.
</li>
<li>
It is a Syntax Error if this production has an <sub>[Await]</sub> parameter and the <emu-xref aoid="StringValue" id="_ref_5957"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20363"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt> is <emu-val>"await"</emu-val>.
</li>
</ul>
<emu-grammar><emu-production name="Identifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v6xddc2h"><emu-nt id="_ref_20364"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_20365"><a href="ecmascript-language-lexical-grammar.html#prod-ReservedWord">ReservedWord</a></emu-nt></emu-gmod></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="IsStrict" id="_ref_5958"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this phrase) is <emu-val>true</emu-val> and the <emu-xref aoid="StringValue" id="_ref_5959"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20366"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> is one of <emu-val>"implements"</emu-val>, <emu-val>"interface"</emu-val>, <emu-val>"let"</emu-val>, <emu-val>"package"</emu-val>, <emu-val>"private"</emu-val>, <emu-val>"protected"</emu-val>, <emu-val>"public"</emu-val>, <emu-val>"static"</emu-val>, or <emu-val>"yield"</emu-val>.
</li>
<li>
It is a Syntax Error if the <emu-xref href="#sec-context-free-grammars" id="_ref_5960"><a href="notational-conventions.html#sec-context-free-grammars">goal symbol</a></emu-xref> of the syntactic grammar is <emu-nt id="_ref_20367"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> and the <emu-xref aoid="StringValue" id="_ref_5961"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20368"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> is <emu-val>"await"</emu-val>.
</li>
<li>
It is a Syntax Error if the <emu-xref aoid="StringValue" id="_ref_5962"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20369"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> is the <emu-xref aoid="StringValue" id="_ref_5963"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of any <emu-nt id="_ref_20370"><a href="ecmascript-language-lexical-grammar.html#prod-ReservedWord">ReservedWord</a></emu-nt> except for <code>yield</code> or <code>await</code>.
</li>
</ul>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The <emu-xref aoid="StringValue" id="_ref_5964"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20371"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> normalizes any Unicode escape sequences in <emu-nt id="_ref_20372"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> hence such escapes cannot be used to write an <emu-nt id="_ref_20373"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt> whose code point sequence is the same as a <emu-nt id="_ref_20374"><a href="ecmascript-language-lexical-grammar.html#prod-ReservedWord">ReservedWord</a></emu-nt>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-static-semantics-stringvalue" oldids="sec-identifiers-static-semantics-stringvalue,sec-identifier-names-static-semantics-stringvalue" type="sdo" aoid="StringValue"><span id="sec-identifier-names-static-semantics-stringvalue"></span><span id="sec-identifiers-static-semantics-stringvalue"></span>
<h1><span class="secnum">13.1.2</span> Static Semantics: StringValue</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_5965"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> StringValue takes no arguments and returns a String. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="IdentifierName" type="lexical">
<emu-nt><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="q0afq8g8" id="prod-RwRM8vDx">
<emu-nt id="_ref_20375"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierStart">IdentifierStart</a></emu-nt>
</emu-rhs>
<emu-rhs a="cawc7ktu" id="prod-NS6rHu2W">
<emu-nt id="_ref_20376"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
<emu-nt id="_ref_20377"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierPart">IdentifierPart</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>idTextUnescaped</var> be the <emu-xref aoid="IdentifierCodePoints" id="_ref_5966"><a href="ecmascript-language-lexical-grammar.html#sec-identifiercodepoints">IdentifierCodePoints</a></emu-xref> of <emu-nt id="_ref_20378"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>.</li><li>Return <emu-xref aoid="CodePointsToString" id="_ref_5967"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<var>idTextUnescaped</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="IdentifierReference" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8" id="prod-TEe-WTI-"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
<emu-production name="BindingIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8" id="prod-ZpP1WoNY"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
<emu-production name="LabelIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LabelIdentifier">LabelIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8" id="prod-APZnd9XH"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>"yield"</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="IdentifierReference" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hx1dvlrw" id="prod-ov5ki9Up"><emu-t>await</emu-t></emu-rhs>
</emu-production>
<emu-production name="BindingIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hx1dvlrw" id="prod-fu2iq4OH"><emu-t>await</emu-t></emu-rhs>
</emu-production>
<emu-production name="LabelIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LabelIdentifier">LabelIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hx1dvlrw" id="prod-z0WsNljd"><emu-t>await</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>"await"</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Identifier" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v6xddc2h" id="prod-3LDrFiW5"><emu-nt id="_ref_20379"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_20380"><a href="ecmascript-language-lexical-grammar.html#prod-ReservedWord">ReservedWord</a></emu-nt></emu-gmod></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="StringValue" id="_ref_5968"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20381"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="PrivateIdentifier" type="lexical">
<emu-nt><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt> <emu-geq>::</emu-geq> <emu-rhs a="echyiakf" id="prod-nzu557qc">
<emu-t>#</emu-t>
<emu-nt id="_ref_20382"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref href="#string-concatenation" id="_ref_5969"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of 0x0023 (NUMBER SIGN) and the <emu-xref aoid="StringValue" id="_ref_5970"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20383"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ModuleExportName" collapsed="">
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xhtltz00" id="prod-Vk-n5Kcs"><emu-nt id="_ref_20384"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="SV" id="_ref_5971"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_20385"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-identifiers-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.1.3</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="IdentifierReference" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_" id="prod-12IVipzn"><emu-nt id="_ref_20386"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="ResolveBinding" id="_ref_5972"><a href="executable-code-and-execution-contexts.html#sec-resolvebinding" class="e-user-code">ResolveBinding</a></emu-xref>(<emu-xref aoid="StringValue" id="_ref_5973"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20387"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt>).</li></ol></emu-alg>
<emu-grammar><emu-production name="IdentifierReference" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8" id="prod-MHlI0_J2"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="ResolveBinding" id="_ref_5974"><a href="executable-code-and-execution-contexts.html#sec-resolvebinding" class="e-user-code">ResolveBinding</a></emu-xref>(<emu-val>"yield"</emu-val>).</li></ol></emu-alg>
<emu-grammar><emu-production name="IdentifierReference" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hx1dvlrw" id="prod-7dhF3jkA"><emu-t>await</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="ResolveBinding" id="_ref_5975"><a href="executable-code-and-execution-contexts.html#sec-resolvebinding" class="e-user-code">ResolveBinding</a></emu-xref>(<emu-val>"await"</emu-val>).</li></ol></emu-alg>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>The result of evaluating an <emu-nt id="_ref_20388"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> is always a value of type Reference.</p>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>In <emu-xref href="#non-strict-code" id="_ref_5976"><a href="ecmascript-language-source-code.html#non-strict-code">non-strict code</a></emu-xref>, the <emu-xref href="#sec-keywords-and-reserved-words" id="_ref_5977"><a href="ecmascript-language-lexical-grammar.html#sec-keywords-and-reserved-words">keyword</a></emu-xref> <code>yield</code> may be used as an identifier. Evaluating the <emu-nt id="_ref_20389"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> resolves the binding of <code>yield</code> as if it was an <emu-nt id="_ref_20390"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt>. Early Error restriction ensures that such an evaluation only can occur for <emu-xref href="#non-strict-code" id="_ref_5978"><a href="ecmascript-language-source-code.html#non-strict-code">non-strict code</a></emu-xref>.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
<emu-clause id="sec-primary-expression">
<h1><span class="secnum">13.2</span> Primary Expression</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="PrimaryExpression" params="Yield, Await" id="prod-PrimaryExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jo4mwtvh" id="prod-6iVAqhjf">
<emu-t>this</emu-t>
</emu-rhs>
<emu-rhs a="dlsgch-w" id="prod-Qw-BmNvs">
<emu-nt params="?Yield, ?Await" id="_ref_20391"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="kul-a19e" id="prod-Sla8Mecg">
<emu-nt id="_ref_20392"><a href="ecmascript-language-expressions.html#prod-Literal">Literal</a></emu-nt>
</emu-rhs>
<emu-rhs a="l8_i0ob3" id="prod-Caejwk3t">
<emu-nt params="?Yield, ?Await" id="_ref_20393"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="7pishiof" id="prod-4t3kIOlY">
<emu-nt params="?Yield, ?Await" id="_ref_20394"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="jc7szv1s" id="prod-SoPEL49Y">
<emu-nt id="_ref_20395"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="jqir3v1i" id="prod-Je5YcOXI">
<emu-nt params="?Yield, ?Await" id="_ref_20396"><a href="ecmascript-language-functions-and-classes.html#prod-ClassExpression">ClassExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="q7f39ayg" id="prod-1wa_TGAR">
<emu-nt id="_ref_20397"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="rvibtigb" id="prod-D7ySJoLP">
<emu-nt id="_ref_20398"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="naptrn97" id="prod-4BCWI5RW">
<emu-nt id="_ref_20399"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="mbzy6lvr" id="prod-rfJuuLNW">
<emu-nt id="_ref_20400"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="stpbjyob" id="prod-iJnRUrcY">
<emu-nt params="?Yield, ?Await, ~Tagged" id="_ref_20401"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a><emu-mods><emu-params>[?Yield, ?Await, ~Tagged]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="parencover" id="prod-INZ21P3A">
<emu-nt params="?Yield, ?Await" id="_ref_20402"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="CoverParenthesizedExpressionAndArrowParameterList" params="Yield, Await" id="prod-CoverParenthesizedExpressionAndArrowParameterList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ed6ncho6">
<emu-t>(</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20403"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="lyzvfyfb">
<emu-t>(</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20404"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="eormm5tk">
<emu-t>(</emu-t>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="pirlsxzm">
<emu-t>(</emu-t>
<emu-t>...</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20405"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="swpbyn40">
<emu-t>(</emu-t>
<emu-t>...</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20406"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="21pbm2tg">
<emu-t>(</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20407"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-t>...</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20408"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="qoyfpol8">
<emu-t>(</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20409"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-t>...</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20410"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<h2>Supplemental Syntax</h2>
<p>
When processing an instance of the production<br>
<emu-grammar><emu-production name="PrimaryExpression" params="Yield, Await" collapsed="" class=" inline">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kcra71qq"><emu-nt params="?Yield, ?Await" id="_ref_20411"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt></emu-rhs>
</emu-production>
</emu-grammar><br>
the interpretation of <emu-nt id="_ref_20412"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt> is refined using the following grammar:
</p>
<emu-grammar type="definition"><emu-production name="ParenthesizedExpression" params="Yield, Await" id="prod-ParenthesizedExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ParenthesizedExpression">ParenthesizedExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ed6ncho6" id="prod-m5AWMC3P">
<emu-t>(</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20413"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-this-keyword">
<h1><span class="secnum">13.2.1</span> The <code>this</code> Keyword</h1>
<emu-clause id="sec-this-keyword-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.2.1.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="PrimaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jo4mwtvh" id="prod-P91j5SRi"><emu-t>this</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="ResolveThisBinding" id="_ref_5979"><a href="executable-code-and-execution-contexts.html#sec-resolvethisbinding">ResolveThisBinding</a></emu-xref>().</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-identifier-reference">
<h1><span class="secnum">13.2.2</span> Identifier Reference</h1>
<p>See <emu-xref href="#sec-identifiers" id="_ref_399"><a href="ecmascript-language-expressions.html#sec-identifiers">13.1</a></emu-xref> for <emu-nt id="_ref_20414"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt>.</p>
</emu-clause>
<emu-clause id="sec-primary-expression-literals">
<h1><span class="secnum">13.2.3</span> Literals</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="Literal" id="prod-Literal">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Literal">Literal</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vphbieby" id="prod-3wWoyoyk">
<emu-nt id="_ref_20415"><a href="ecmascript-language-lexical-grammar.html#prod-NullLiteral">NullLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="nqjh_sxl" id="prod-T8-D_rlw">
<emu-nt id="_ref_20416"><a href="ecmascript-language-lexical-grammar.html#prod-BooleanLiteral">BooleanLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="pui0b1rt" id="prod-qwQbursv">
<emu-nt id="_ref_20417"><a href="ecmascript-language-lexical-grammar.html#prod-NumericLiteral">NumericLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="xhtltz00" id="prod-JuPoYov6">
<emu-nt id="_ref_20418"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-literals-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.2.3.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="Literal" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Literal">Literal</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vphbieby" id="prod-5gR2ZD66"><emu-nt id="_ref_20419"><a href="ecmascript-language-lexical-grammar.html#prod-NullLiteral">NullLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>null</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Literal" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Literal">Literal</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nqjh_sxl" id="prod-phcGo5D8"><emu-nt id="_ref_20420"><a href="ecmascript-language-lexical-grammar.html#prod-BooleanLiteral">BooleanLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_20421"><a href="ecmascript-language-lexical-grammar.html#prod-BooleanLiteral">BooleanLiteral</a></emu-nt> is the token <code>false</code>, return <emu-val>false</emu-val>.</li><li>If <emu-nt id="_ref_20422"><a href="ecmascript-language-lexical-grammar.html#prod-BooleanLiteral">BooleanLiteral</a></emu-nt> is the token <code>true</code>, return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Literal" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Literal">Literal</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="pui0b1rt" id="prod-JJ6LucaR"><emu-nt id="_ref_20423"><a href="ecmascript-language-lexical-grammar.html#prod-NumericLiteral">NumericLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="NumericValue" id="_ref_5980"><a href="ecmascript-language-lexical-grammar.html#sec-numericvalue">NumericValue</a></emu-xref> of <emu-nt id="_ref_20424"><a href="ecmascript-language-lexical-grammar.html#prod-NumericLiteral">NumericLiteral</a></emu-nt> as defined in <emu-xref href="#sec-literals-numeric-literals" id="_ref_400"><a href="ecmascript-language-lexical-grammar.html#sec-literals-numeric-literals">12.9.3</a></emu-xref>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Literal" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Literal">Literal</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xhtltz00" id="prod-JaYVP4rC"><emu-nt id="_ref_20425"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="SV" id="_ref_5981"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_20426"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt> as defined in <emu-xref href="#sec-static-semantics-sv" id="_ref_401"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">12.9.4.2</a></emu-xref>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-array-initializer">
<h1><span class="secnum">13.2.4</span> Array Initializer</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>An <emu-nt id="_ref_20427"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt> is an expression describing the initialization of an Array, using a list, of zero or more expressions each of which represents an array element, enclosed in square brackets. The elements need not be literals; they are evaluated each time the array initializer is evaluated.</p>
</div></emu-note>
<p>Array elements may be elided at the beginning, middle or end of the element list. Whenever a comma in the element list is not preceded by an <emu-nt id="_ref_20428"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> (i.e., a comma at the beginning or after another comma), the missing array element contributes to the length of the Array and increases the index of subsequent elements. Elided array elements are not defined. If an element is elided at the end of an array, that element does not contribute to the length of the Array.</p>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="ArrayLiteral" params="Yield, Await" id="prod-ArrayLiteral">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kg5ha7xc" id="prod-oN6pjX9m">
<emu-t>[</emu-t>
<emu-nt optional="" id="_ref_20429"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="xwviorlp" id="prod-Y8wRJ4om">
<emu-t>[</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20430"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="flt40tbt" id="prod-je9iGq8a">
<emu-t>[</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20431"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_20432"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="ElementList" params="Yield, Await" id="prod-ElementList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mg86fhyo" id="prod-nakNeXAG">
<emu-nt optional="" id="_ref_20433"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20434"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="bzoasbwv" id="prod-XL4uSEt_">
<emu-nt optional="" id="_ref_20435"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20436"><a href="ecmascript-language-expressions.html#prod-SpreadElement">SpreadElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="6ukoiilh" id="prod-rNLR62Va">
<emu-nt params="?Yield, ?Await" id="_ref_20437"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_20438"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20439"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="nnao2vfk" id="prod-BSaguLF3">
<emu-nt params="?Yield, ?Await" id="_ref_20440"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_20441"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20442"><a href="ecmascript-language-expressions.html#prod-SpreadElement">SpreadElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="Elision" id="prod-Elision">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lhh3u7f7" id="prod-UVeRCADp">
<emu-t>,</emu-t>
</emu-rhs>
<emu-rhs a="gg0bjle3" id="prod-lq_Nojbr">
<emu-nt id="_ref_20443"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt>
<emu-t>,</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="SpreadElement" params="Yield, Await" id="prod-SpreadElement">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-SpreadElement">SpreadElement</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tio0yijn" id="prod-H9W06sct">
<emu-t>...</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20444"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-runtime-semantics-arrayaccumulation" oldids="sec-static-semantics-elisionwidth" type="sdo" aoid="ArrayAccumulation"><span id="sec-static-semantics-elisionwidth"></span>
<h1><span class="secnum">13.2.4.1</span> Runtime Semantics: ArrayAccumulation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_5982"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ArrayAccumulation takes arguments <var>array</var> (an Array) and <var>nextIndex</var> (an <emu-xref href="#integer" id="_ref_5983"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5984"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an <emu-xref href="#integer" id="_ref_5985"><a href="notational-conventions.html#integer">integer</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_5986"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="Elision" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lhh3u7f7" id="prod-ACq7eTCD"><emu-t>,</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>len</var> be <var>nextIndex</var> + 1.</li><li>Perform ?&nbsp;<emu-xref aoid="Set" id="_ref_5987"><a href="abstract-operations.html#sec-set-o-p-v-throw" class="e-user-code">Set</a></emu-xref>(<var>array</var>, <emu-val>"length"</emu-val>, <emu-xref aoid="𝔽" id="_ref_5988"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>len</var>), <emu-val>true</emu-val>).</li><li>NOTE: The above step throws if <var>len</var> exceeds 2<sup>32</sup> - 1.</li><li>Return <var>len</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Elision" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gg0bjle3" id="prod-KyZNZ-MT">
<emu-nt id="_ref_20445"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt>
<emu-t>,</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_5989"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20446"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with arguments <var>array</var> and (<var>nextIndex</var> + 1).</li></ol></emu-alg>
<emu-grammar><emu-production name="ElementList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2aa1epou" id="prod-_juTnZH7">
<emu-nt optional="" id="_ref_20447"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_20448"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_20449"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> is present, then<ol><li>Set <var>nextIndex</var> to ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_5990"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20450"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li></ol></li><li>Let <var>initResult</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_5991"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20451"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>initValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_5992"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>initResult</var>).</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_5993"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>array</var>, !&nbsp;<emu-xref aoid="ToString" id="_ref_5994"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_5995"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>nextIndex</var>)), <var>initValue</var>).</li><li>Return <var>nextIndex</var> + 1.</li></ol></emu-alg>
<emu-grammar><emu-production name="ElementList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fbpz0ate" id="prod-PNKSiljq">
<emu-nt optional="" id="_ref_20452"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_20453"><a href="ecmascript-language-expressions.html#prod-SpreadElement">SpreadElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_20454"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> is present, then<ol><li>Set <var>nextIndex</var> to ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_5996"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20455"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_5997"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20456"><a href="ecmascript-language-expressions.html#prod-SpreadElement">SpreadElement</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ElementList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="_sr5sq6t" id="prod-9ZiZA1Ch">
<emu-nt id="_ref_20457"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_20458"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_20459"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Set <var>nextIndex</var> to ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_5998"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20460"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li><li>If <emu-nt id="_ref_20461"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> is present, then<ol><li>Set <var>nextIndex</var> to ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_5999"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20462"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li></ol></li><li>Let <var>initResult</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6000"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20463"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>initValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6001"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>initResult</var>).</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_6002"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>array</var>, !&nbsp;<emu-xref aoid="ToString" id="_ref_6003"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_6004"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>nextIndex</var>)), <var>initValue</var>).</li><li>Return <var>nextIndex</var> + 1.</li></ol></emu-alg>
<emu-grammar><emu-production name="ElementList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="aleaauxs" id="prod-HRfw0EOP">
<emu-nt id="_ref_20464"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_20465"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_20466"><a href="ecmascript-language-expressions.html#prod-SpreadElement">SpreadElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Set <var>nextIndex</var> to ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_6005"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20467"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li><li>If <emu-nt id="_ref_20468"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> is present, then<ol><li>Set <var>nextIndex</var> to ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_6006"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20469"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_6007"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20470"><a href="ecmascript-language-expressions.html#prod-SpreadElement">SpreadElement</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SpreadElement" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-SpreadElement">SpreadElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w7ifpmpd" id="prod-_w8Sn596">
<emu-t>...</emu-t>
<emu-nt id="_ref_20471"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>spreadRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6008"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20472"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>spreadObj</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6009"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>spreadRef</var>).</li><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_6010"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(<var>spreadObj</var>, <emu-const>sync</emu-const>).</li><li>Repeat,<ol><li>Let <var>next</var> be ?&nbsp;<emu-xref aoid="IteratorStepValue" id="_ref_6011"><a href="abstract-operations.html#sec-iteratorstepvalue" class="e-user-code">IteratorStepValue</a></emu-xref>(<var>iteratorRecord</var>).</li><li>If <var>next</var> is <emu-const>done</emu-const>, return <var>nextIndex</var>.</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_6012"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>array</var>, !&nbsp;<emu-xref aoid="ToString" id="_ref_6013"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_6014"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>nextIndex</var>)), <var>next</var>).</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><emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_6015"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref> is used to ensure that own properties are defined for the array even if the standard built-in <emu-xref href="#sec-properties-of-the-array-prototype-object" id="_ref_6016"><a href="indexed-collections.html#sec-properties-of-the-array-prototype-object">Array prototype object</a></emu-xref> has been modified in a manner that would preclude the creation of new own properties using <var class="field">[[Set]]</var>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-array-initializer-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.2.4.2</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ArrayLiteral" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kg5ha7xc" id="prod-8EXlViH4">
<emu-t>[</emu-t>
<emu-nt optional="" id="_ref_20473"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>array</var> be !&nbsp;<emu-xref aoid="ArrayCreate" id="_ref_6017"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(0).</li><li>If <emu-nt id="_ref_20474"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> is present, then<ol><li>Perform ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_6018"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20475"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with arguments <var>array</var> and 0.</li></ol></li><li>Return <var>array</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayLiteral" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cqjjuksr" id="prod-58ym50AN">
<emu-t>[</emu-t>
<emu-nt id="_ref_20476"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>array</var> be !&nbsp;<emu-xref aoid="ArrayCreate" id="_ref_6019"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(0).</li><li>Perform ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_6020"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20477"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt> with arguments <var>array</var> and 0.</li><li>Return <var>array</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayLiteral" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yjc94a7j" id="prod-f05iKqYb">
<emu-t>[</emu-t>
<emu-nt id="_ref_20478"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_20479"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>array</var> be !&nbsp;<emu-xref aoid="ArrayCreate" id="_ref_6021"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(0).</li><li>Let <var>nextIndex</var> be ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_6022"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20480"><a href="ecmascript-language-expressions.html#prod-ElementList">ElementList</a></emu-nt> with arguments <var>array</var> and 0.</li><li>If <emu-nt id="_ref_20481"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> is present, then<ol><li>Perform ?&nbsp;<emu-xref aoid="ArrayAccumulation" id="_ref_6023"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" class="e-user-code">ArrayAccumulation</a></emu-xref> of <emu-nt id="_ref_20482"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with arguments <var>array</var> and <var>nextIndex</var>.</li></ol></li><li>Return <var>array</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-object-initializer">
<h1><span class="secnum">13.2.5</span> Object Initializer</h1>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>An object initializer is an expression describing the initialization of an Object, written in a form resembling a literal. It is a list of zero or more pairs of <emu-xref href="#property-key" id="_ref_6024"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref> and associated values, enclosed in curly brackets. The values need not be literals; they are evaluated each time the object initializer is evaluated.</p>
</div></emu-note>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="ObjectLiteral" params="Yield, Await" id="prod-ObjectLiteral">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-4iBxhmtp">
<emu-t>{</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="qgbbf6iu" id="prod-tbtFUUOH">
<emu-t>{</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20483"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="bzhfnkx-" id="prod-k6AQl_P9">
<emu-t>{</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20484"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="PropertyDefinitionList" params="Yield, Await" id="prod-PropertyDefinitionList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="m0tgtrnc" id="prod-BIN60s98">
<emu-nt params="?Yield, ?Await" id="_ref_20485"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="r9tpew-z" id="prod-c72dXkTz">
<emu-nt params="?Yield, ?Await" id="_ref_20486"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20487"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="PropertyDefinition" params="Yield, Await" id="prod-PropertyDefinition">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dlsgch-w" id="prod-_kSpAuMA">
<emu-nt params="?Yield, ?Await" id="_ref_20488"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="apwscjmv">
<emu-nt params="?Yield, ?Await" id="_ref_20489"><a href="ecmascript-language-expressions.html#prod-CoverInitializedName">CoverInitializedName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="5zrjcx_s" id="prod-Jsxupyj1">
<emu-nt params="?Yield, ?Await" id="_ref_20490"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>:</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20491"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="ke2_9p84" id="prod-mDvkFMKq">
<emu-nt params="?Yield, ?Await" id="_ref_20492"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="tio0yijn" id="prod-vZMKiSRJ">
<emu-t>...</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20493"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="PropertyName" params="Yield, Await" id="prod-PropertyName">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="5x4jbee2" id="prod-0EhkgOcT">
<emu-nt id="_ref_20494"><a href="ecmascript-language-expressions.html#prod-LiteralPropertyName">LiteralPropertyName</a></emu-nt>
</emu-rhs>
<emu-rhs a="x0s2x3xm" id="prod-vr_cfE7P">
<emu-nt params="?Yield, ?Await" id="_ref_20495"><a href="ecmascript-language-expressions.html#prod-ComputedPropertyName">ComputedPropertyName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="LiteralPropertyName" id="prod-LiteralPropertyName">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LiteralPropertyName">LiteralPropertyName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="drsx4tka" id="prod-j68LXthC">
<emu-nt id="_ref_20496"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="xhtltz00" id="prod-ueikIsNm">
<emu-nt id="_ref_20497"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="pui0b1rt" id="prod-6-SoljXV">
<emu-nt id="_ref_20498"><a href="ecmascript-language-lexical-grammar.html#prod-NumericLiteral">NumericLiteral</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ComputedPropertyName" params="Yield, Await" id="prod-ComputedPropertyName">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ComputedPropertyName">ComputedPropertyName</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="48_35zgr" id="prod-V7gahr3e">
<emu-t>[</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20499"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="CoverInitializedName" params="Yield, Await" id="prod-CoverInitializedName">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-CoverInitializedName">CoverInitializedName</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hcdz_xlp">
<emu-nt params="?Yield, ?Await" id="_ref_20500"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20501"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="Initializer" params="In, Yield, Await" id="prod-Initializer">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3gfs5awf" id="prod-P2DNnhoV">
<emu-t>=</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_20502"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p><emu-nt id="_ref_20503"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is defined in <emu-xref href="#sec-method-definitions" id="_ref_402"><a href="ecmascript-language-functions-and-classes.html#sec-method-definitions">15.4</a></emu-xref>.</p>
</div></emu-note>
<emu-note><span class="note">Note 3</span><div class="note-contents">
<p>In certain contexts, <emu-nt id="_ref_20504"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> is used as a cover grammar for a more restricted secondary grammar. The <emu-nt id="_ref_20505"><a href="ecmascript-language-expressions.html#prod-CoverInitializedName">CoverInitializedName</a></emu-nt> production is necessary to fully cover these secondary grammars. However, use of this production results in an early Syntax Error in normal contexts where an actual <emu-nt id="_ref_20506"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> is expected.</p>
</div></emu-note>
<emu-clause id="sec-object-initializer-static-semantics-early-errors" oldids="sec-__proto__-property-names-in-object-initializers"><span id="sec-__proto__-property-names-in-object-initializers"></span>
<h1><span class="secnum">13.2.5.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="PropertyDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s8ilfl9g"><emu-nt id="_ref_20507"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="HasDirectSuper" id="_ref_6025"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper">HasDirectSuper</a></emu-xref> of <emu-nt id="_ref_20508"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if the <emu-xref aoid="PrivateBoundIdentifiers" id="_ref_6026"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers">PrivateBoundIdentifiers</a></emu-xref> of <emu-nt id="_ref_20509"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is not empty.
</li>
</ul>
<p>In addition to describing an actual object initializer the <emu-nt id="_ref_20510"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> productions are also used as a cover grammar for <emu-nt id="_ref_20511"><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a></emu-nt> and may be recognized as part of a <emu-nt id="_ref_20512"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt>. When <emu-nt id="_ref_20513"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> appears in a context where <emu-nt id="_ref_20514"><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a></emu-nt> is required the following Early Error rules are <b>not</b> applied. In addition, they are not applied when initially parsing a <emu-nt id="_ref_20515"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt> or <emu-nt id="_ref_20516"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>.</p>
<emu-grammar><emu-production name="PropertyDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3wg6qczf"><emu-nt id="_ref_20517"><a href="ecmascript-language-expressions.html#prod-CoverInitializedName">CoverInitializedName</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if any source text is matched by this production.
</li>
</ul>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>This production exists so that <emu-nt id="_ref_20518"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> can serve as a cover grammar for <emu-nt id="_ref_20519"><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a></emu-nt>. It cannot occur in an actual object initializer.</p>
</div></emu-note>
<emu-grammar><emu-production name="ObjectLiteral">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="g--o073w">
<emu-t>{</emu-t>
<emu-nt id="_ref_20520"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="hwnsf_iz">
<emu-t>{</emu-t>
<emu-nt id="_ref_20521"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt>
<emu-t>,</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="PropertyNameList" id="_ref_6027"><a href="ecmascript-language-expressions.html#sec-static-semantics-propertynamelist">PropertyNameList</a></emu-xref> of <emu-nt id="_ref_20522"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt> contains any duplicate entries for <emu-val>"__proto__"</emu-val> and at least two of those entries were obtained from productions of the form <emu-grammar><emu-production name="PropertyDefinition" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8tkldtak">
<emu-nt id="_ref_20523"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt>
<emu-t>:</emu-t>
<emu-nt id="_ref_20524"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>. This rule is not applied if this <emu-nt id="_ref_20525"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> is contained within a <emu-nt id="_ref_20526"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> that is being parsed for <emu-xref aoid="ParseJSON" id="_ref_6028"><a href="structured-data.html#sec-ParseJSON">ParseJSON</a></emu-xref> (see step <emu-xref href="#step-json-parse-parse" id="_ref_403"><a href="structured-data.html#step-json-parse-parse">3</a></emu-xref> of <emu-xref aoid="ParseJSON" id="_ref_6029"><a href="structured-data.html#sec-ParseJSON">ParseJSON</a></emu-xref>).
</li>
</ul>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>The <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6030"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> returned by <emu-xref aoid="PropertyNameList" id="_ref_6031"><a href="ecmascript-language-expressions.html#sec-static-semantics-propertynamelist">PropertyNameList</a></emu-xref> does not include <emu-xref href="#property-name" id="_ref_6032"><a href="ecmascript-data-types-and-values.html#property-name">property names</a></emu-xref> defined using a <emu-nt id="_ref_20527"><a href="ecmascript-language-expressions.html#prod-ComputedPropertyName">ComputedPropertyName</a></emu-nt>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-static-semantics-iscomputedpropertykey" type="sdo" aoid="IsComputedPropertyKey">
<h1><span class="secnum">13.2.5.2</span> Static Semantics: IsComputedPropertyKey</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6033"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> IsComputedPropertyKey takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="PropertyName" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="5x4jbee2" id="prod-SPDqK5VR"><emu-nt id="_ref_20528"><a href="ecmascript-language-expressions.html#prod-LiteralPropertyName">LiteralPropertyName</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="PropertyName" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nimmmso5" id="prod-SOs-1o2b"><emu-nt id="_ref_20529"><a href="ecmascript-language-expressions.html#prod-ComputedPropertyName">ComputedPropertyName</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-static-semantics-propertynamelist" type="sdo" aoid="PropertyNameList">
<h1><span class="secnum">13.2.5.3</span> Static Semantics: PropertyNameList</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6034"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> PropertyNameList takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6035"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="PropertyDefinitionList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="zxofg8tg" id="prod-ojv3z_1M"><emu-nt id="_ref_20530"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propName</var> be the <emu-xref aoid="PropName" id="_ref_6036"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_20531"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt>.</li><li>If <var>propName</var> is <emu-const>empty</emu-const>, return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6037"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Return « <var>propName</var>&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="PropertyDefinitionList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mvlwazei" id="prod-arjQ9VdV">
<emu-nt id="_ref_20532"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_20533"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>list</var> be the <emu-xref aoid="PropertyNameList" id="_ref_6038"><a href="ecmascript-language-expressions.html#sec-static-semantics-propertynamelist">PropertyNameList</a></emu-xref> of <emu-nt id="_ref_20534"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt>.</li><li>Let <var>propName</var> be the <emu-xref aoid="PropName" id="_ref_6039"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_20535"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt>.</li><li>If <var>propName</var> is <emu-const>empty</emu-const>, return <var>list</var>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6040"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>list</var> and « <var>propName</var>&nbsp;».</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-object-initializer-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.2.5.4</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ObjectLiteral" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-iYCMBfyG">
<emu-t>{</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="OrdinaryObjectCreate" id="_ref_6041"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_6042"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>).</li></ol></emu-alg>
<emu-grammar><emu-production name="ObjectLiteral">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="g--o073w" id="prod-0f4gdKLJ">
<emu-t>{</emu-t>
<emu-nt id="_ref_20536"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="hwnsf_iz" id="prod-HzxDeaw2">
<emu-t>{</emu-t>
<emu-nt id="_ref_20537"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt>
<emu-t>,</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>obj</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_6043"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_6044"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>).</li><li>Perform ?&nbsp;<emu-xref aoid="PropertyDefinitionEvaluation" id="_ref_6045"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydefinitionevaluation" class="e-user-code">PropertyDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_20538"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt> with argument <var>obj</var>.</li><li>Return <var>obj</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="LiteralPropertyName" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LiteralPropertyName">LiteralPropertyName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="drsx4tka" id="prod-ZrDWUX2E"><emu-nt id="_ref_20539"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="StringValue" id="_ref_6046"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20540"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="LiteralPropertyName" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LiteralPropertyName">LiteralPropertyName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xhtltz00" id="prod-Jt_nMkj7"><emu-nt id="_ref_20541"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="SV" id="_ref_6047"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_20542"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="LiteralPropertyName" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LiteralPropertyName">LiteralPropertyName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="pui0b1rt" id="prod-_aZrbYKk"><emu-nt id="_ref_20543"><a href="ecmascript-language-lexical-grammar.html#prod-NumericLiteral">NumericLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>nbr</var> be the <emu-xref aoid="NumericValue" id="_ref_6048"><a href="ecmascript-language-lexical-grammar.html#sec-numericvalue">NumericValue</a></emu-xref> of <emu-nt id="_ref_20544"><a href="ecmascript-language-lexical-grammar.html#prod-NumericLiteral">NumericLiteral</a></emu-nt>.</li><li>Return !&nbsp;<emu-xref aoid="ToString" id="_ref_6049"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<var>nbr</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="ComputedPropertyName" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ComputedPropertyName">ComputedPropertyName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ltvvc-5a" id="prod-6rX2zzfJ">
<emu-t>[</emu-t>
<emu-nt id="_ref_20545"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>exprValue</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6050"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20546"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>propName</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6051"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>exprValue</var>).</li><li>Return ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_6052"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>propName</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-propertydefinitionevaluation" oldids="sec-object-initializer-runtime-semantics-propertydefinitionevaluation" type="sdo" aoid="PropertyDefinitionEvaluation"><span id="sec-object-initializer-runtime-semantics-propertydefinitionevaluation"></span>
<h1><span class="secnum">13.2.5.5</span> Runtime Semantics: PropertyDefinitionEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6053"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> PropertyDefinitionEvaluation takes argument <var>object</var> (an Object) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6054"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6055"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="PropertyDefinitionList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mvlwazei" id="prod-2nasR_1u">
<emu-nt id="_ref_20547"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_20548"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="PropertyDefinitionEvaluation" id="_ref_6056"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydefinitionevaluation" class="e-user-code">PropertyDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_20549"><a href="ecmascript-language-expressions.html#prod-PropertyDefinitionList">PropertyDefinitionList</a></emu-nt> with argument <var>object</var>.</li><li>Perform ?&nbsp;<emu-xref aoid="PropertyDefinitionEvaluation" id="_ref_6057"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydefinitionevaluation" class="e-user-code">PropertyDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_20550"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> with argument <var>object</var>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="PropertyDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w7ifpmpd" id="prod-r1teTyPc">
<emu-t>...</emu-t>
<emu-nt id="_ref_20551"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>exprValue</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6058"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20552"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>fromValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6059"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>exprValue</var>).</li><li>Let <var>excludedNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6060"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Perform ?&nbsp;<emu-xref aoid="CopyDataProperties" id="_ref_6061"><a href="abstract-operations.html#sec-copydataproperties" class="e-user-code">CopyDataProperties</a></emu-xref>(<var>object</var>, <var>fromValue</var>, <var>excludedNames</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="PropertyDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i2hxnrih" id="prod-pxaBv7Tq"><emu-nt id="_ref_20553"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propName</var> be the <emu-xref aoid="StringValue" id="_ref_6062"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20554"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt>.</li><li>Let <var>exprValue</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6063"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20555"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt>.</li><li>Let <var>propValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6064"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>exprValue</var>).</li><li><emu-xref href="#assert" id="_ref_6065"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>object</var> is an ordinary, extensible object with no non-configurable properties.</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_6066"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>object</var>, <var>propName</var>, <var>propValue</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="PropertyDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8tkldtak" id="prod-N8qwXXqo">
<emu-nt id="_ref_20556"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt>
<emu-t>:</emu-t>
<emu-nt id="_ref_20557"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propKey</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6067"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20558"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt>.</li><li>If this <emu-nt id="_ref_20559"><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> is contained within a <emu-nt id="_ref_20560"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> that is being evaluated for <emu-xref aoid="ParseJSON" id="_ref_6068"><a href="structured-data.html#sec-ParseJSON">ParseJSON</a></emu-xref> (see step <emu-xref href="#step-json-parse-eval" id="_ref_404"><a href="structured-data.html#step-json-parse-eval">6</a></emu-xref> of <emu-xref aoid="ParseJSON" id="_ref_6069"><a href="structured-data.html#sec-ParseJSON">ParseJSON</a></emu-xref>), then<ol><li>Let <var>isProtoSetter</var> be <emu-val>false</emu-val>.</li></ol></li><li>Else if <var>propKey</var> is <emu-val>"__proto__"</emu-val> and <emu-xref aoid="IsComputedPropertyKey" id="_ref_6070"><a href="ecmascript-language-expressions.html#sec-static-semantics-iscomputedpropertykey">IsComputedPropertyKey</a></emu-xref> of <emu-nt id="_ref_20561"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt> is <emu-val>false</emu-val>, then<ol><li>Let <var>isProtoSetter</var> be <emu-val>true</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>isProtoSetter</var> be <emu-val>false</emu-val>.</li></ol></li><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_6071"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_20562"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>) is <emu-val>true</emu-val> and <var>isProtoSetter</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>propValue</var> be ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_6072"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_20563"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <var>propKey</var>.</li></ol></li><li>Else,<ol><li>Let <var>exprValueRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6073"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20564"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>propValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6074"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>exprValueRef</var>).</li></ol></li><li>If <var>isProtoSetter</var> is <emu-val>true</emu-val>, then<ol><li>If <var>propValue</var> <emu-xref href="#sec-object-type" id="_ref_6075"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref> or <var>propValue</var> is <emu-val>null</emu-val>, then<ol><li>Perform !&nbsp;<span class="e-user-code"><var>object</var>.<var class="field">[[SetPrototypeOf]]</var>(<var>propValue</var>)</span>.</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></li><li><emu-xref href="#assert" id="_ref_6076"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>object</var> is an ordinary, extensible object with no non-configurable properties.</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_6077"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>object</var>, <var>propKey</var>, <var>propValue</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="PropertyDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PropertyDefinition">PropertyDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s8ilfl9g" id="prod-FVQpyKtq"><emu-nt id="_ref_20565"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="MethodDefinitionEvaluation" id="_ref_6078"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-methoddefinitionevaluation" class="e-user-code">MethodDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_20566"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> with arguments <var>object</var> and <emu-val>true</emu-val>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-function-defining-expressions">
<h1><span class="secnum">13.2.6</span> Function Defining Expressions</h1>
<p>See <emu-xref href="#sec-function-definitions" id="_ref_405"><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions">15.2</a></emu-xref> for <emu-grammar><emu-production name="PrimaryExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jc7szv1s"><emu-nt id="_ref_20567"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>.</p>
<p>See <emu-xref href="#sec-generator-function-definitions" id="_ref_406"><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions">15.5</a></emu-xref> for <emu-grammar><emu-production name="PrimaryExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="q7f39ayg"><emu-nt id="_ref_20568"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>.</p>
<p>See <emu-xref href="#sec-class-definitions" id="_ref_407"><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions">15.7</a></emu-xref> for <emu-grammar><emu-production name="PrimaryExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2m5tsvzv"><emu-nt id="_ref_20569"><a href="ecmascript-language-functions-and-classes.html#prod-ClassExpression">ClassExpression</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>.</p>
<p>See <emu-xref href="#sec-async-function-definitions" id="_ref_408"><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions">15.8</a></emu-xref> for <emu-grammar><emu-production name="PrimaryExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rvibtigb"><emu-nt id="_ref_20570"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>.</p>
<p>See <emu-xref href="#sec-async-generator-function-definitions" id="_ref_409"><a href="ecmascript-language-functions-and-classes.html#sec-async-generator-function-definitions">15.6</a></emu-xref> for <emu-grammar><emu-production name="PrimaryExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="naptrn97"><emu-nt id="_ref_20571"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>.</p>
</emu-clause>
<emu-clause id="sec-primary-expression-regular-expression-literals">
<h1><span class="secnum">13.2.7</span> Regular Expression Literals</h1>
<h2>Syntax</h2>
<p>See <emu-xref href="#sec-literals-regular-expression-literals" id="_ref_410"><a href="ecmascript-language-lexical-grammar.html#sec-literals-regular-expression-literals">12.9.5</a></emu-xref>.</p>
<emu-clause id="sec-primary-expression-regular-expression-literals-static-semantics-early-errors">
<h1><span class="secnum">13.2.7.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="PrimaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mbzy6lvr"><emu-nt id="_ref_20572"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="IsValidRegularExpressionLiteral" id="_ref_6079"><a href="ecmascript-language-expressions.html#sec-isvalidregularexpressionliteral">IsValidRegularExpressionLiteral</a></emu-xref>(<emu-nt id="_ref_20573"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt>) is <emu-val>false</emu-val>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-isvalidregularexpressionliteral" type="abstract operation" aoid="IsValidRegularExpressionLiteral">
<h1><span class="secnum">13.2.7.2</span> Static Semantics: IsValidRegularExpressionLiteral ( <var>literal</var> )</h1>
<p>The abstract operation IsValidRegularExpressionLiteral takes argument <var>literal</var> (a <emu-nt id="_ref_20574"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6080"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns a Boolean. It determines if its argument is a valid regular expression literal. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>flags</var> be the <emu-xref aoid="FlagText" id="_ref_6081"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-flagtext">FlagText</a></emu-xref> of <var>literal</var>.</li><li>If <var>flags</var> contains any code points other than <code>d</code>, <code>g</code>, <code>i</code>, <code>m</code>, <code>s</code>, <code>u</code>, <code>v</code>, or <code>y</code>, or if <var>flags</var> contains any code point more than once, return <emu-val>false</emu-val>.</li><li>If <var>flags</var> contains <code>u</code>, 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>flags</var> contains <code>v</code>, let <var>v</var> be <emu-val>true</emu-val>; else let <var>v</var> be <emu-val>false</emu-val>.</li><li>Let <var>patternText</var> be the <emu-xref aoid="BodyText" id="_ref_6082"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-bodytext">BodyText</a></emu-xref> of <var>literal</var>.</li><li>If <var>u</var> is <emu-val>false</emu-val> and <var>v</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>stringValue</var> be <emu-xref aoid="CodePointsToString" id="_ref_6083"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<var>patternText</var>).</li><li>Set <var>patternText</var> to the sequence of code points resulting from interpreting each of the 16-bit elements of <var>stringValue</var> 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_6084"><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 <emu-xref href="#sec-syntactic-grammar" id="_ref_6085"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-regular-expression-literals-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.2.7.3</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="PrimaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mbzy6lvr" id="prod-J9TItKDI"><emu-nt id="_ref_20575"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>pattern</var> be <emu-xref aoid="CodePointsToString" id="_ref_6086"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<emu-xref aoid="BodyText" id="_ref_6087"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-bodytext">BodyText</a></emu-xref> of <emu-nt id="_ref_20576"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt>).</li><li>Let <var>flags</var> be <emu-xref aoid="CodePointsToString" id="_ref_6088"><a href="ecmascript-language-source-code.html#sec-codepointstostring">CodePointsToString</a></emu-xref>(<emu-xref aoid="FlagText" id="_ref_6089"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-flagtext">FlagText</a></emu-xref> of <emu-nt id="_ref_20577"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt>).</li><li>Return !&nbsp;<emu-xref aoid="RegExpCreate" id="_ref_6090"><a href="text-processing.html#sec-regexpcreate">RegExpCreate</a></emu-xref>(<var>pattern</var>, <var>flags</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-template-literals">
<h1><span class="secnum">13.2.8</span> Template Literals</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="TemplateLiteral" params="Yield, Await, Tagged" id="prod-TemplateLiteral">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e_otk8es" id="prod-d430kMbv">
<emu-nt id="_ref_20578"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt>
</emu-rhs>
<emu-rhs a="8adkeoem" id="prod-t3USkzuD">
<emu-nt params="?Yield, ?Await, ?Tagged" id="_ref_20579"><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a><emu-mods><emu-params>[?Yield, ?Await, ?Tagged]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="SubstitutionTemplate" params="Yield, Await, Tagged" id="prod-SubstitutionTemplate">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bpr_k7qa" id="prod-nG1t-jNI">
<emu-nt id="_ref_20580"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20581"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await, ?Tagged" id="_ref_20582"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a><emu-mods><emu-params>[?Yield, ?Await, ?Tagged]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="TemplateSpans" params="Yield, Await, Tagged" id="prod-TemplateSpans">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v_5hijma" id="prod-MrvlbnHm">
<emu-nt id="_ref_20583"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt>
</emu-rhs>
<emu-rhs a="3pqtoeeo" id="prod-j0qqWY2p">
<emu-nt params="?Yield, ?Await, ?Tagged" id="_ref_20584"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a><emu-mods><emu-params>[?Yield, ?Await, ?Tagged]</emu-params></emu-mods></emu-nt>
<emu-nt id="_ref_20585"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="TemplateMiddleList" params="Yield, Await, Tagged" id="prod-TemplateMiddleList">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="23_bspds" id="prod-V4hc4rPI">
<emu-nt id="_ref_20586"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20587"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="bdrr0gig" id="prod-PHoLfCK_">
<emu-nt params="?Yield, ?Await, ?Tagged" id="_ref_20588"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a><emu-mods><emu-params>[?Yield, ?Await, ?Tagged]</emu-params></emu-mods></emu-nt>
<emu-nt id="_ref_20589"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20590"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-static-semantics-template-early-errors" oldids="sec-primary-expression-template-literals-static-semantics-early-errors"><span id="sec-primary-expression-template-literals-static-semantics-early-errors"></span>
<h1><span class="secnum">13.2.8.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="TemplateLiteral" params="Yield, Await, Tagged" collapsed="">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e_otk8es"><emu-nt id="_ref_20591"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <sub>[Tagged]</sub> parameter was not set and <emu-nt id="_ref_20592"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt> <emu-xref aoid="Contains" id="_ref_6091"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_20593"><a href="ecmascript-language-lexical-grammar.html#prod-NotEscapeSequence">NotEscapeSequence</a></emu-nt>.
</li>
</ul>
<emu-grammar><emu-production name="TemplateLiteral" params="Yield, Await, Tagged" collapsed="">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8adkeoem"><emu-nt params="?Yield, ?Await, ?Tagged" id="_ref_20594"><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a><emu-mods><emu-params>[?Yield, ?Await, ?Tagged]</emu-params></emu-mods></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the number of elements in the <emu-xref aoid="TemplateStrings" id="_ref_6092"><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings">TemplateStrings</a></emu-xref> of <emu-nt id="_ref_20595"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt> with argument <emu-val>false</emu-val> is greater than or equal to 2<sup>32</sup>.
</li>
</ul>
<emu-grammar><emu-production name="SubstitutionTemplate" params="Yield, Await, Tagged" collapsed="">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bpr_k7qa">
<emu-nt id="_ref_20596"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20597"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await, ?Tagged" id="_ref_20598"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a><emu-mods><emu-params>[?Yield, ?Await, ?Tagged]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <sub>[Tagged]</sub> parameter was not set and <emu-nt id="_ref_20599"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt> <emu-xref aoid="Contains" id="_ref_6093"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_20600"><a href="ecmascript-language-lexical-grammar.html#prod-NotEscapeSequence">NotEscapeSequence</a></emu-nt>.
</li>
</ul>
<emu-grammar><emu-production name="TemplateSpans" params="Yield, Await, Tagged" collapsed="">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v_5hijma"><emu-nt id="_ref_20601"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <sub>[Tagged]</sub> parameter was not set and <emu-nt id="_ref_20602"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt> <emu-xref aoid="Contains" id="_ref_6094"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_20603"><a href="ecmascript-language-lexical-grammar.html#prod-NotEscapeSequence">NotEscapeSequence</a></emu-nt>.
</li>
</ul>
<emu-grammar><emu-production name="TemplateMiddleList" params="Yield, Await, Tagged">
<emu-nt params="Yield, Await, Tagged"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a><emu-mods><emu-params>[Yield, Await, Tagged]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="23_bspds">
<emu-nt id="_ref_20604"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20605"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="bdrr0gig">
<emu-nt params="?Yield, ?Await, ?Tagged" id="_ref_20606"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a><emu-mods><emu-params>[?Yield, ?Await, ?Tagged]</emu-params></emu-mods></emu-nt>
<emu-nt id="_ref_20607"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20608"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <sub>[Tagged]</sub> parameter was not set and <emu-nt id="_ref_20609"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt> <emu-xref aoid="Contains" id="_ref_6095"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_20610"><a href="ecmascript-language-lexical-grammar.html#prod-NotEscapeSequence">NotEscapeSequence</a></emu-nt>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-static-semantics-templatestrings" type="sdo" aoid="TemplateStrings">
<h1><span class="secnum">13.2.8.2</span> Static Semantics: TemplateStrings</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6096"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> TemplateStrings takes argument <var>raw</var> (a Boolean) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6097"><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>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="TemplateLiteral" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e_otk8es" id="prod-wUHw6ReH"><emu-nt id="_ref_20611"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return « <emu-xref aoid="TemplateString" id="_ref_6098"><a href="ecmascript-language-expressions.html#sec-templatestring">TemplateString</a></emu-xref>(<emu-nt id="_ref_20612"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt>, <var>raw</var>)&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="SubstitutionTemplate" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vpxmqc6d" id="prod-AfRnt93a">
<emu-nt id="_ref_20613"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt>
<emu-nt id="_ref_20614"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-nt id="_ref_20615"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>head</var> be « <emu-xref aoid="TemplateString" id="_ref_6099"><a href="ecmascript-language-expressions.html#sec-templatestring">TemplateString</a></emu-xref>(<emu-nt id="_ref_20616"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt>, <var>raw</var>)&nbsp;».</li><li>Let <var>tail</var> be the <emu-xref aoid="TemplateStrings" id="_ref_6100"><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings">TemplateStrings</a></emu-xref> of <emu-nt id="_ref_20617"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt> with argument <var>raw</var>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6101"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>head</var> and <var>tail</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateSpans" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v_5hijma" id="prod-SXp_0Muf"><emu-nt id="_ref_20618"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return « <emu-xref aoid="TemplateString" id="_ref_6102"><a href="ecmascript-language-expressions.html#sec-templatestring">TemplateString</a></emu-xref>(<emu-nt id="_ref_20619"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt>, <var>raw</var>)&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateSpans" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="slt0jvdm" id="prod-fValkc1v">
<emu-nt id="_ref_20620"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>
<emu-nt id="_ref_20621"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>middle</var> be the <emu-xref aoid="TemplateStrings" id="_ref_6103"><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings">TemplateStrings</a></emu-xref> of <emu-nt id="_ref_20622"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt> with argument <var>raw</var>.</li><li>Let <var>tail</var> be « <emu-xref aoid="TemplateString" id="_ref_6104"><a href="ecmascript-language-expressions.html#sec-templatestring">TemplateString</a></emu-xref>(<emu-nt id="_ref_20623"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt>, <var>raw</var>)&nbsp;».</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6105"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>middle</var> and <var>tail</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateMiddleList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3h7jyz9j" id="prod-sExxMRoA">
<emu-nt id="_ref_20624"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt id="_ref_20625"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return « <emu-xref aoid="TemplateString" id="_ref_6106"><a href="ecmascript-language-expressions.html#sec-templatestring">TemplateString</a></emu-xref>(<emu-nt id="_ref_20626"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>, <var>raw</var>)&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateMiddleList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="r6zwqruv" id="prod-oVK_xc-L">
<emu-nt id="_ref_20627"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>
<emu-nt id="_ref_20628"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt id="_ref_20629"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>front</var> be the <emu-xref aoid="TemplateStrings" id="_ref_6107"><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings">TemplateStrings</a></emu-xref> of <emu-nt id="_ref_20630"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt> with argument <var>raw</var>.</li><li>Let <var>last</var> be « <emu-xref aoid="TemplateString" id="_ref_6108"><a href="ecmascript-language-expressions.html#sec-templatestring">TemplateString</a></emu-xref>(<emu-nt id="_ref_20631"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>, <var>raw</var>)&nbsp;».</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6109"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>front</var> and <var>last</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-templatestring" type="abstract operation" aoid="TemplateString">
<h1><span class="secnum">13.2.8.3</span> Static Semantics: TemplateString ( <var>templateToken</var>, <var>raw</var> )</h1>
<p>The abstract operation TemplateString takes arguments <var>templateToken</var> (a <emu-nt id="_ref_20632"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6110"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, a <emu-nt id="_ref_20633"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6111"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, a <emu-nt id="_ref_20634"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6112"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, or a <emu-nt id="_ref_20635"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6113"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and <var>raw</var> (a Boolean) and returns a String or <emu-val>undefined</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>raw</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>string</var> be the <emu-xref aoid="TRV" id="_ref_6114"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-trv">TRV</a></emu-xref> of <var>templateToken</var>.</li></ol></li><li>Else,<ol><li>Let <var>string</var> be the <emu-xref aoid="TV" id="_ref_6115"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv">TV</a></emu-xref> of <var>templateToken</var>.</li></ol></li><li>Return <var>string</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>This operation returns <emu-val>undefined</emu-val> if <var>raw</var> is <emu-val>false</emu-val> and <var>templateToken</var> contains a <emu-nt id="_ref_20636"><a href="ecmascript-language-lexical-grammar.html#prod-NotEscapeSequence">NotEscapeSequence</a></emu-nt>. In all other cases, it returns a String.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-gettemplateobject" type="abstract operation" aoid="GetTemplateObject">
<h1><span class="secnum">13.2.8.4</span> GetTemplateObject ( <var>templateLiteral</var> )</h1>
<p>The abstract operation GetTemplateObject takes argument <var>templateLiteral</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_6116"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns an Array. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>realm</var> be <emu-xref href="#current-realm" id="_ref_6117"><a href="executable-code-and-execution-contexts.html#current-realm">the current Realm Record</a></emu-xref>.</li><li>Let <var>templateRegistry</var> be <var>realm</var>.<var class="field">[[TemplateMap]]</var>.</li><li>For each element <var>e</var> of <var>templateRegistry</var>, do<ol><li>If <var>e</var>.<var class="field">[[Site]]</var> is <emu-xref href="#sec-syntactic-grammar" id="_ref_6118"><a href="notational-conventions.html#sec-syntactic-grammar">the same Parse Node</a></emu-xref> as <var>templateLiteral</var>, then<ol><li>Return <var>e</var>.<var class="field">[[Array]]</var>.</li></ol></li></ol></li><li>Let <var>rawStrings</var> be the <emu-xref aoid="TemplateStrings" id="_ref_6119"><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings">TemplateStrings</a></emu-xref> of <var>templateLiteral</var> with argument <emu-val>true</emu-val>.</li><li><emu-xref href="#assert" id="_ref_6120"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>rawStrings</var> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6121"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings.</li><li>Let <var>cookedStrings</var> be the <emu-xref aoid="TemplateStrings" id="_ref_6122"><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings">TemplateStrings</a></emu-xref> of <var>templateLiteral</var> with argument <emu-val>false</emu-val>.</li><li>Let <var>count</var> be the number of elements in the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6123"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> <var>cookedStrings</var>.</li><li><emu-xref href="#assert" id="_ref_6124"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>count</var> ≤ 2<sup>32</sup> - 1.</li><li>Let <var>template</var> be !&nbsp;<emu-xref aoid="ArrayCreate" id="_ref_6125"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(<var>count</var>).</li><li>Let <var>rawObj</var> be !&nbsp;<emu-xref aoid="ArrayCreate" id="_ref_6126"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(<var>count</var>).</li><li>Let <var>index</var> be 0.</li><li>Repeat, while <var>index</var> &lt; <var>count</var>,<ol><li>Let <var>prop</var> be !&nbsp;<emu-xref aoid="ToString" id="_ref_6127"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_6128"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>index</var>)).</li><li>Let <var>cookedValue</var> be <var>cookedStrings</var>[<var>index</var>].</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_6129"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>template</var>, <var>prop</var>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>cookedValue</var>, <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Let <var>rawValue</var> be the String value <var>rawStrings</var>[<var>index</var>].</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_6130"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>rawObj</var>, <var>prop</var>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>rawValue</var>, <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Set <var>index</var> to <var>index</var> + 1.</li></ol></li><li>Perform !&nbsp;<emu-xref aoid="SetIntegrityLevel" id="_ref_6131"><a href="abstract-operations.html#sec-setintegritylevel">SetIntegrityLevel</a></emu-xref>(<var>rawObj</var>, <emu-const>frozen</emu-const>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_6132"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>template</var>, <emu-val>"raw"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>rawObj</var>, <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>&nbsp;}).</li><li>Perform !&nbsp;<emu-xref aoid="SetIntegrityLevel" id="_ref_6133"><a href="abstract-operations.html#sec-setintegritylevel">SetIntegrityLevel</a></emu-xref>(<var>template</var>, <emu-const>frozen</emu-const>).</li><li>Append the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6134"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Site]]</var>: <var>templateLiteral</var>, <var class="field">[[Array]]</var>: <var>template</var>&nbsp;} to <var>realm</var>.<var class="field">[[TemplateMap]]</var>.</li><li>Return <var>template</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>The creation of a template object cannot result in an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6135"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>.</p>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>Each <emu-nt id="_ref_20637"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt> in the program code of a <emu-xref href="#realm" id="_ref_6136"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref> is associated with a unique template object that is used in the evaluation of tagged Templates (<emu-xref href="#sec-template-literals-runtime-semantics-evaluation" id="_ref_411"><a href="ecmascript-language-expressions.html#sec-template-literals-runtime-semantics-evaluation">13.2.8.6</a></emu-xref>). The template objects are frozen and the same template object is used each time a specific tagged Template is evaluated. Whether template objects are created lazily upon first evaluation of the <emu-nt id="_ref_20638"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt> or eagerly prior to first evaluation is an implementation choice that is not observable to ECMAScript code.</p>
</div></emu-note>
<emu-note><span class="note">Note 3</span><div class="note-contents">
<p>Future editions of this specification may define additional non-enumerable properties of template objects.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-runtime-semantics-substitutionevaluation" type="sdo" aoid="SubstitutionEvaluation">
<h1><span class="secnum">13.2.8.5</span> Runtime Semantics: SubstitutionEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6137"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> SubstitutionEvaluation takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6138"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6139"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-ecmascript-language-types" id="_ref_6140"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6141"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="TemplateSpans" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v_5hijma" id="prod-h8M7VnrX"><emu-nt id="_ref_20639"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6142"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateSpans" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="slt0jvdm" id="prod-0ukbbNyO">
<emu-nt id="_ref_20640"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>
<emu-nt id="_ref_20641"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="SubstitutionEvaluation" id="_ref_6143"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-substitutionevaluation" class="e-user-code">SubstitutionEvaluation</a></emu-xref> of <emu-nt id="_ref_20642"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateMiddleList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3h7jyz9j" id="prod-oOPfrahZ">
<emu-nt id="_ref_20643"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt id="_ref_20644"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>subRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6144"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20645"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>.</li><li>Let <var>sub</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6145"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>subRef</var>).</li><li>Return « <var>sub</var>&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateMiddleList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="r6zwqruv" id="prod-Jm_C6N1j">
<emu-nt id="_ref_20646"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>
<emu-nt id="_ref_20647"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt id="_ref_20648"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>preceding</var> be ?&nbsp;<emu-xref aoid="SubstitutionEvaluation" id="_ref_6146"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-substitutionevaluation" class="e-user-code">SubstitutionEvaluation</a></emu-xref> of <emu-nt id="_ref_20649"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>.</li><li>Let <var>nextRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6147"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20650"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>.</li><li>Let <var>next</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6148"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>nextRef</var>).</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6149"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>preceding</var> and « <var>next</var>&nbsp;».</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-template-literals-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.2.8.6</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="TemplateLiteral" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e_otk8es" id="prod-1J8emXVO"><emu-nt id="_ref_20651"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="TV" id="_ref_6150"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv">TV</a></emu-xref> of <emu-nt id="_ref_20652"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt> as defined in <emu-xref href="#sec-template-literal-lexical-components" id="_ref_412"><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components">12.9.6</a></emu-xref>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SubstitutionTemplate" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vpxmqc6d" id="prod-uvbVZ8aQ">
<emu-nt id="_ref_20653"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt>
<emu-nt id="_ref_20654"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-nt id="_ref_20655"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>head</var> be the <emu-xref aoid="TV" id="_ref_6151"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv">TV</a></emu-xref> of <emu-nt id="_ref_20656"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt> as defined in <emu-xref href="#sec-template-literal-lexical-components" id="_ref_413"><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components">12.9.6</a></emu-xref>.</li><li>Let <var>subRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6152"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20657"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>.</li><li>Let <var>sub</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6153"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>subRef</var>).</li><li>Let <var>middle</var> be ?&nbsp;<emu-xref aoid="ToString" id="_ref_6154"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>sub</var>).</li><li>Let <var>tail</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6155"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20658"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt>.</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_6156"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>head</var>, <var>middle</var>, and <var>tail</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>The string conversion semantics applied to the <emu-nt id="_ref_20659"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> value are like <code>String.prototype.concat</code> rather than the <code>+</code> operator.</p>
</div></emu-note>
<emu-grammar><emu-production name="TemplateSpans" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v_5hijma" id="prod-Cn8o0vt2"><emu-nt id="_ref_20660"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="TV" id="_ref_6157"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv">TV</a></emu-xref> of <emu-nt id="_ref_20661"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt> as defined in <emu-xref href="#sec-template-literal-lexical-components" id="_ref_414"><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components">12.9.6</a></emu-xref>.</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateSpans" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="slt0jvdm" id="prod-4-zhpQ6s">
<emu-nt id="_ref_20662"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>
<emu-nt id="_ref_20663"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>head</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6158"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20664"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>.</li><li>Let <var>tail</var> be the <emu-xref aoid="TV" id="_ref_6159"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv">TV</a></emu-xref> of <emu-nt id="_ref_20665"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateTail">TemplateTail</a></emu-nt> as defined in <emu-xref href="#sec-template-literal-lexical-components" id="_ref_415"><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components">12.9.6</a></emu-xref>.</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_6160"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>head</var> and <var>tail</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateMiddleList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3h7jyz9j" id="prod-EX4ICnFk">
<emu-nt id="_ref_20666"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt id="_ref_20667"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>head</var> be the <emu-xref aoid="TV" id="_ref_6161"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv">TV</a></emu-xref> of <emu-nt id="_ref_20668"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt> as defined in <emu-xref href="#sec-template-literal-lexical-components" id="_ref_416"><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components">12.9.6</a></emu-xref>.</li><li>Let <var>subRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6162"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20669"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>.</li><li>Let <var>sub</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6163"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>subRef</var>).</li><li>Let <var>middle</var> be ?&nbsp;<emu-xref aoid="ToString" id="_ref_6164"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>sub</var>).</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_6165"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>head</var> and <var>middle</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>The string conversion semantics applied to the <emu-nt id="_ref_20670"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> value are like <code>String.prototype.concat</code> rather than the <code>+</code> operator.</p>
</div></emu-note>
<emu-grammar><emu-production name="TemplateMiddleList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="r6zwqruv" id="prod-F5opRz-R">
<emu-nt id="_ref_20671"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>
<emu-nt id="_ref_20672"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt>
<emu-nt id="_ref_20673"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>rest</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6166"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20674"><a href="ecmascript-language-expressions.html#prod-TemplateMiddleList">TemplateMiddleList</a></emu-nt>.</li><li>Let <var>middle</var> be the <emu-xref aoid="TV" id="_ref_6167"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv">TV</a></emu-xref> of <emu-nt id="_ref_20675"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateMiddle">TemplateMiddle</a></emu-nt> as defined in <emu-xref href="#sec-template-literal-lexical-components" id="_ref_417"><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components">12.9.6</a></emu-xref>.</li><li>Let <var>subRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6168"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20676"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>.</li><li>Let <var>sub</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6169"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>subRef</var>).</li><li>Let <var>last</var> be ?&nbsp;<emu-xref aoid="ToString" id="_ref_6170"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>sub</var>).</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_6171"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>rest</var>, <var>middle</var>, and <var>last</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note 3</span><div class="note-contents">
<p>The string conversion semantics applied to the <emu-nt id="_ref_20677"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> value are like <code>String.prototype.concat</code> rather than the <code>+</code> operator.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
<emu-clause id="sec-grouping-operator">
<h1><span class="secnum">13.2.9</span> The Grouping Operator</h1>
<emu-clause id="sec-grouping-operator-static-semantics-early-errors">
<h1><span class="secnum">13.2.9.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="PrimaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrb110hm"><emu-nt id="_ref_20678"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
<emu-nt id="_ref_20679"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt> <emu-xref href="#must-cover" id="_ref_6172"><a href="notational-conventions.html#must-cover">must cover</a></emu-xref> a <emu-nt id="_ref_20680"><a href="ecmascript-language-expressions.html#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-grouping-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.2.9.2</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="PrimaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrb110hm" id="prod-U7_IxrKv"><emu-nt id="_ref_20681"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be the <emu-nt id="_ref_20682"><a href="ecmascript-language-expressions.html#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_6173"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_20683"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6174"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>expr</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ParenthesizedExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s6bvnd5v" id="prod-cTC10Rwh">
<emu-t>(</emu-t>
<emu-nt id="_ref_20684"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6175"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20685"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>. This may be of type Reference.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>This algorithm does not apply <emu-xref aoid="GetValue" id="_ref_6176"><a href="ecmascript-data-types-and-values.html#sec-getvalue">GetValue</a></emu-xref> to <emu-xref aoid="Evaluation" id="_ref_6177"><a href="syntax-directed-operations.html#sec-evaluation">Evaluation</a></emu-xref> of <emu-nt id="_ref_20686"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>. The principal motivation for this is so that operators such as <code>delete</code> and <code>typeof</code> may be applied to parenthesized expressions.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-left-hand-side-expressions">
<h1><span class="secnum">13.3</span> Left-Hand-Side Expressions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="MemberExpression" params="Yield, Await" id="prod-MemberExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="zp2ej-dr" id="prod-RT3Hrl25">
<emu-nt params="?Yield, ?Await" id="_ref_20687"><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="rnalvwun" id="prod-IScPEVPu">
<emu-nt params="?Yield, ?Await" id="_ref_20688"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>[</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20689"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="_qdjqibg" id="prod-BTxM7XK0">
<emu-nt params="?Yield, ?Await" id="_ref_20690"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20691"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="46cuzeza" id="prod-hF7lIb25">
<emu-nt params="?Yield, ?Await" id="_ref_20692"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await, +Tagged" id="_ref_20693"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a><emu-mods><emu-params>[?Yield, ?Await, +Tagged]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="g9rhupwf" id="prod-gkYgn85G">
<emu-nt params="?Yield, ?Await" id="_ref_20694"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="yb7id2be" id="prod-EZ2BF6v8">
<emu-nt id="_ref_20695"><a href="ecmascript-language-expressions.html#prod-MetaProperty">MetaProperty</a></emu-nt>
</emu-rhs>
<emu-rhs a="ufvcifdc" id="prod-BRZkuqi1">
<emu-t>new</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20696"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20697"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="4cnbmhao" id="prod-20SfjmEZ">
<emu-nt params="?Yield, ?Await" id="_ref_20698"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20699"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="SuperProperty" params="Yield, Await" id="prod-SuperProperty">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2abn9oi" id="prod-lWlOKYig">
<emu-t>super</emu-t>
<emu-t>[</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20700"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="9pdsslwb" id="prod-6y-_egWQ">
<emu-t>super</emu-t>
<emu-t>.</emu-t>
<emu-nt id="_ref_20701"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="MetaProperty" id="prod-MetaProperty">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MetaProperty">MetaProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="czvbijjt">
<emu-nt id="_ref_20702"><a href="ecmascript-language-expressions.html#prod-NewTarget">NewTarget</a></emu-nt>
</emu-rhs>
<emu-rhs a="_cnkj-qp">
<emu-nt id="_ref_20703"><a href="ecmascript-language-expressions.html#prod-ImportMeta">ImportMeta</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="NewTarget" id="prod-NewTarget">
<emu-nt><a href="ecmascript-language-expressions.html#prod-NewTarget">NewTarget</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0t4hpsv9" id="prod-4bMdCOPa">
<emu-t>new</emu-t>
<emu-t>.</emu-t>
<emu-t>target</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="ImportMeta" id="prod-ImportMeta">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ImportMeta">ImportMeta</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8myn6frq" id="prod-qIsN6LkP">
<emu-t>import</emu-t>
<emu-t>.</emu-t>
<emu-t>meta</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="NewExpression" params="Yield, Await" id="prod-NewExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vbcu9jjv">
<emu-nt params="?Yield, ?Await" id="_ref_20704"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="iyf_se48" id="prod-NMg_0YQR">
<emu-t>new</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20705"><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="CallExpression" params="Yield, Await" id="prod-CallExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="callcover" id="prod-ltrZioVe">
<emu-nt params="?Yield, ?Await" id="_ref_20706"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="5cynbd7h" id="prod-G9gIp39y">
<emu-nt params="?Yield, ?Await" id="_ref_20707"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="12avhmhv" id="prod-5bjr6Yqy">
<emu-nt params="?Yield, ?Await" id="_ref_20708"><a href="ecmascript-language-expressions.html#prod-ImportCall">ImportCall</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="zq2ahe82" id="prod-kYvem_87">
<emu-nt params="?Yield, ?Await" id="_ref_20709"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20710"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="jan4qzpu" id="prod-Shb6Dgff">
<emu-nt params="?Yield, ?Await" id="_ref_20711"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>[</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20712"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="8fzekpe0" id="prod-EOA2Fe3-">
<emu-nt params="?Yield, ?Await" id="_ref_20713"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20714"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="xe3ycfgs" id="prod-WPBp76A-">
<emu-nt params="?Yield, ?Await" id="_ref_20715"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await, +Tagged" id="_ref_20716"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a><emu-mods><emu-params>[?Yield, ?Await, +Tagged]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="62npgx0j" id="prod-FwaLgcLH">
<emu-nt params="?Yield, ?Await" id="_ref_20717"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20718"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="SuperCall" params="Yield, Await" id="prod-SuperCall">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="a1uz3ssm" id="prod-qBjKPlc1">
<emu-t>super</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20719"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ImportCall" params="Yield, Await" id="prod-ImportCall">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ImportCall">ImportCall</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lxdwtaop" id="prod-k77_OH1u">
<emu-t>import</emu-t>
<emu-t>(</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20720"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="vxyviles" id="prod-nQPLRauX">
<emu-t>import</emu-t>
<emu-t>(</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20721"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20722"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="Arguments" params="Yield, Await" id="prod-Arguments">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eormm5tk" id="prod-lgwqNVq7">
<emu-t>(</emu-t>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="zoyucce7">
<emu-t>(</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20723"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
<emu-rhs a="xsawavht">
<emu-t>(</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20724"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="ArgumentList" params="Yield, Await" id="prod-ArgumentList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="j1moyzsj" id="prod-7tzqa9tS">
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20725"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="tio0yijn" id="prod-bq3bMpyK">
<emu-t>...</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20726"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="krcqss7_" id="prod--rnN0MQv">
<emu-nt params="?Yield, ?Await" id="_ref_20727"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20728"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="1ve8zfk_" id="prod-1jakKBk1">
<emu-nt params="?Yield, ?Await" id="_ref_20729"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-t>...</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20730"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="OptionalExpression" params="Yield, Await" id="prod-OptionalExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ecu35e6c" id="prod-AiLVvGnw">
<emu-nt params="?Yield, ?Await" id="_ref_20731"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20732"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="zdg__vw8" id="prod-dfra8X0j">
<emu-nt params="?Yield, ?Await" id="_ref_20733"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20734"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="w8fdvlpp" id="prod-iAWRBWZp">
<emu-nt params="?Yield, ?Await" id="_ref_20735"><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20736"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="OptionalChain" params="Yield, Await" id="prod-OptionalChain">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8htvkqhl" id="prod-J4fvvwWl">
<emu-t>?.</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20737"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="dfjbcotw" id="prod-a5k1i_eU">
<emu-t>?.</emu-t>
<emu-t>[</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20738"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="w-4ch2am" id="prod-JoCAeM_3">
<emu-t>?.</emu-t>
<emu-nt id="_ref_20739"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="gddsvrzp">
<emu-t>?.</emu-t>
<emu-nt params="?Yield, ?Await, +Tagged" id="_ref_20740"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a><emu-mods><emu-params>[?Yield, ?Await, +Tagged]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="0xlnjlpz" id="prod-qtd11XGp">
<emu-t>?.</emu-t>
<emu-nt id="_ref_20741"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
<emu-rhs a="mf2i0e3e" id="prod-zMZUOMrf">
<emu-nt params="?Yield, ?Await" id="_ref_20742"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20743"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="tyrnajyn" id="prod-4aVR1jLh">
<emu-nt params="?Yield, ?Await" id="_ref_20744"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>[</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_20745"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="nm82pnnk" id="prod-25V7_u74">
<emu-nt params="?Yield, ?Await" id="_ref_20746"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20747"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="i6asyits">
<emu-nt params="?Yield, ?Await" id="_ref_20748"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await, +Tagged" id="_ref_20749"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a><emu-mods><emu-params>[?Yield, ?Await, +Tagged]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="tglbsgos" id="prod-MW9Cgivd">
<emu-nt params="?Yield, ?Await" id="_ref_20750"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20751"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="LeftHandSideExpression" params="Yield, Await" id="prod-LeftHandSideExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qjnhzlak">
<emu-nt params="?Yield, ?Await" id="_ref_20752"><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="hpn2js4d" id="prod-cMsSM13C">
<emu-nt params="?Yield, ?Await" id="_ref_20753"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="hwcrnmoq" id="prod-xKiE8xPm">
<emu-nt params="?Yield, ?Await" id="_ref_20754"><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<h2>Supplemental Syntax</h2>
<p>
When processing an instance of the production<br>
<emu-grammar><emu-production name="CallExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7jj-96li"><emu-nt id="_ref_20755"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar><br>
the interpretation of <emu-nt id="_ref_20756"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt> is refined using the following grammar:
</p>
<emu-grammar type="definition"><emu-production name="CallMemberExpression" params="Yield, Await" id="prod-CallMemberExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-CallMemberExpression">CallMemberExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="90e-xzcw">
<emu-nt params="?Yield, ?Await" id="_ref_20757"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20758"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-static-semantics">
<h1><span class="secnum">13.3.1</span> Static Semantics</h1>
<emu-clause id="sec-left-hand-side-expressions-static-semantics-early-errors">
<h1><span class="secnum">13.3.1.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="OptionalChain">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tfcmykyj">
<emu-t>?.</emu-t>
<emu-nt id="_ref_20759"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="ocv4xe0-">
<emu-nt id="_ref_20760"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-nt id="_ref_20761"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if any source text is matched by this production.
</li>
</ul>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>This production exists in order to prevent automatic semicolon insertion rules (<emu-xref href="#sec-automatic-semicolon-insertion" id="_ref_418"><a href="ecmascript-language-lexical-grammar.html#sec-automatic-semicolon-insertion">12.10</a></emu-xref>) from being applied to the following code:</p>
<pre><code class="javascript hljs">a?.<span class="hljs-property">b</span>
<span class="hljs-string">`c`</span></code></pre>
<p>so that it would be interpreted as two valid statements. The purpose is to maintain consistency with similar code without optional chaining:</p>
<pre><code class="javascript hljs">a.<span class="hljs-property">b</span>
<span class="hljs-string">`c`</span></code></pre>
<p>which is a valid statement and where automatic semicolon insertion does not apply.</p>
</div></emu-note>
<emu-grammar><emu-production name="ImportMeta">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ImportMeta">ImportMeta</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8myn6frq">
<emu-t>import</emu-t>
<emu-t>.</emu-t>
<emu-t>meta</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the syntactic <emu-xref href="#sec-context-free-grammars" id="_ref_6178"><a href="notational-conventions.html#sec-context-free-grammars">goal symbol</a></emu-xref> is not <emu-nt id="_ref_20762"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>.
</li>
</ul>
</emu-clause>
</emu-clause>
<emu-clause id="sec-property-accessors">
<h1><span class="secnum">13.3.2</span> Property Accessors</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Properties are accessed by name, using either the dot notation:</p>
<div class="rhs">
<emu-nt id="_ref_20763"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <code>.</code> <emu-nt id="_ref_20764"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt><br>
<emu-nt id="_ref_20765"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <code>.</code> <emu-nt id="_ref_20766"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</div>
<p>or the bracket notation:</p>
<div class="rhs">
<emu-nt id="_ref_20767"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <code>[</code> <emu-nt id="_ref_20768"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> <code>]</code><br>
<emu-nt id="_ref_20769"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <code>[</code> <emu-nt id="_ref_20770"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> <code>]</code>
</div>
<p>The dot notation is explained by the following syntactic conversion:</p>
<div class="rhs">
<emu-nt id="_ref_20771"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <code>.</code> <emu-nt id="_ref_20772"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</div>
<p>is identical in its behaviour to</p>
<div class="rhs">
<emu-nt id="_ref_20773"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <code>[</code> &lt;<i>identifier-name-string</i>&gt; <code>]</code>
</div>
<p>and similarly</p>
<div class="rhs">
<emu-nt id="_ref_20774"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <code>.</code> <emu-nt id="_ref_20775"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</div>
<p>is identical in its behaviour to</p>
<div class="rhs">
<emu-nt id="_ref_20776"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <code>[</code> &lt;<i>identifier-name-string</i>&gt; <code>]</code>
</div>
<p>where &lt;<i>identifier-name-string</i>&gt; is the <emu-xref aoid="StringValue" id="_ref_6179"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20777"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>.</p>
</div></emu-note>
<emu-clause id="sec-property-accessors-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.3.2.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="MemberExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="a74xd7de" id="prod-3HizunKA">
<emu-nt id="_ref_20778"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-t>[</emu-t>
<emu-nt id="_ref_20779"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6180"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20780"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6181"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6182"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20781"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluatePropertyAccessWithExpressionKey" id="_ref_6183"><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-expression-key" class="e-user-code">EvaluatePropertyAccessWithExpressionKey</a></emu-xref>(<var>baseValue</var>, <emu-nt id="_ref_20782"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="MemberExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="frbj984t" id="prod-BG7ZKp5h">
<emu-nt id="_ref_20783"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20784"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6184"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20785"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6185"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6186"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20786"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>).</li><li>Return <emu-xref aoid="EvaluatePropertyAccessWithIdentifierKey" id="_ref_6187"><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-identifier-key">EvaluatePropertyAccessWithIdentifierKey</a></emu-xref>(<var>baseValue</var>, <emu-nt id="_ref_20787"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="MemberExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0uk9afbi" id="prod-ufIc-5xW">
<emu-nt id="_ref_20788"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20789"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6188"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20790"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6189"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>Let <var>fieldNameString</var> be the <emu-xref aoid="StringValue" id="_ref_6190"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20791"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>.</li><li>Return <emu-xref aoid="MakePrivateReference" id="_ref_6191"><a href="ecmascript-data-types-and-values.html#sec-makeprivatereference">MakePrivateReference</a></emu-xref>(<var>baseValue</var>, <var>fieldNameString</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="CallExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2u2urbmg" id="prod-JQpFT9fK">
<emu-nt id="_ref_20792"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-t>[</emu-t>
<emu-nt id="_ref_20793"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6192"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20794"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6193"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6194"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20795"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluatePropertyAccessWithExpressionKey" id="_ref_6195"><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-expression-key" class="e-user-code">EvaluatePropertyAccessWithExpressionKey</a></emu-xref>(<var>baseValue</var>, <emu-nt id="_ref_20796"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="CallExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="u6lsbvgu" id="prod-zAM15mqm">
<emu-nt id="_ref_20797"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20798"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6196"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20799"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6197"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6198"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20800"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>).</li><li>Return <emu-xref aoid="EvaluatePropertyAccessWithIdentifierKey" id="_ref_6199"><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-identifier-key">EvaluatePropertyAccessWithIdentifierKey</a></emu-xref>(<var>baseValue</var>, <emu-nt id="_ref_20801"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="CallExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cysjk9wh" id="prod-CLxiRtJM">
<emu-nt id="_ref_20802"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20803"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6200"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20804"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6201"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>Let <var>fieldNameString</var> be the <emu-xref aoid="StringValue" id="_ref_6202"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20805"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>.</li><li>Return <emu-xref aoid="MakePrivateReference" id="_ref_6203"><a href="ecmascript-data-types-and-values.html#sec-makeprivatereference">MakePrivateReference</a></emu-xref>(<var>baseValue</var>, <var>fieldNameString</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-evaluate-property-access-with-expression-key" type="abstract operation" oldids="sec-evaluate-expression-key-property-access" aoid="EvaluatePropertyAccessWithExpressionKey"><span id="sec-evaluate-expression-key-property-access"></span>
<h1><span class="secnum">13.3.3</span> EvaluatePropertyAccessWithExpressionKey ( <var>baseValue</var>, <var>expression</var>, <var>strict</var> )</h1>
<p>The abstract operation EvaluatePropertyAccessWithExpressionKey takes arguments <var>baseValue</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6204"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), <var>expression</var> (an <emu-nt id="_ref_20806"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6205"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>), and <var>strict</var> (a Boolean) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6206"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6207"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6208"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>propertyNameReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6209"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>expression</var>.</li><li>Let <var>propertyNameValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6210"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>propertyNameReference</var>).</li><li>NOTE: In most cases, <emu-xref aoid="ToPropertyKey" id="_ref_6211"><a href="abstract-operations.html#sec-topropertykey">ToPropertyKey</a></emu-xref> will be performed on <var>propertyNameValue</var> immediately after this step. However, in the case of <code>a[b] = c</code>, it will not be performed until after evaluation of <code>c</code>.</li><li>Return the <emu-xref href="#sec-reference-record-specification-type" id="_ref_6212"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref> { <var class="field">[[Base]]</var>: <var>baseValue</var>, <var class="field">[[ReferencedName]]</var>: <var>propertyNameValue</var>, <var class="field">[[Strict]]</var>: <var>strict</var>, <var class="field">[[ThisValue]]</var>: <emu-const>empty</emu-const>&nbsp;}.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-evaluate-property-access-with-identifier-key" type="abstract operation" oldids="sec-evaluate-identifier-key-property-access" aoid="EvaluatePropertyAccessWithIdentifierKey"><span id="sec-evaluate-identifier-key-property-access"></span>
<h1><span class="secnum">13.3.4</span> EvaluatePropertyAccessWithIdentifierKey ( <var>baseValue</var>, <var>identifierName</var>, <var>strict</var> )</h1>
<p>The abstract operation EvaluatePropertyAccessWithIdentifierKey takes arguments <var>baseValue</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6213"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), <var>identifierName</var> (an <emu-nt id="_ref_20807"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6214"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>), and <var>strict</var> (a Boolean) and returns a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6215"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>propertyNameString</var> be the <emu-xref aoid="StringValue" id="_ref_6216"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <var>identifierName</var>.</li><li>Return the <emu-xref href="#sec-reference-record-specification-type" id="_ref_6217"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref> { <var class="field">[[Base]]</var>: <var>baseValue</var>, <var class="field">[[ReferencedName]]</var>: <var>propertyNameString</var>, <var class="field">[[Strict]]</var>: <var>strict</var>, <var class="field">[[ThisValue]]</var>: <emu-const>empty</emu-const>&nbsp;}.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-new-operator">
<h1><span class="secnum">13.3.5</span> The <code>new</code> Operator</h1>
<emu-clause id="sec-new-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.3.5.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="NewExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="51p618ta" id="prod-oglQ-mZC">
<emu-t>new</emu-t>
<emu-nt id="_ref_20808"><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateNew" id="_ref_6218"><a href="ecmascript-language-expressions.html#sec-evaluatenew" class="e-user-code">EvaluateNew</a></emu-xref>(<emu-nt id="_ref_20809"><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a></emu-nt>, <emu-const>empty</emu-const>).</li></ol></emu-alg>
<emu-grammar><emu-production name="MemberExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cfq-hbbx" id="prod-ynRwNJgH">
<emu-t>new</emu-t>
<emu-nt id="_ref_20810"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-nt id="_ref_20811"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateNew" id="_ref_6219"><a href="ecmascript-language-expressions.html#sec-evaluatenew" class="e-user-code">EvaluateNew</a></emu-xref>(<emu-nt id="_ref_20812"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>, <emu-nt id="_ref_20813"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>).</li></ol></emu-alg>
<emu-clause id="sec-evaluatenew" type="abstract operation" aoid="EvaluateNew">
<h1><span class="secnum">13.3.5.1.1</span> EvaluateNew ( <var>constructExpr</var>, <var>arguments</var> )</h1>
<p>The abstract operation EvaluateNew takes arguments <var>constructExpr</var> (a <emu-nt id="_ref_20814"><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6220"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref> or a <emu-nt id="_ref_20815"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6221"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and <var>arguments</var> (<emu-const>empty</emu-const> or an <emu-nt id="_ref_20816"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_6222"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6223"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6224"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6225"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>ref</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6226"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>constructExpr</var>.</li><li>Let <var>constructor</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6227"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>ref</var>).</li><li>If <var>arguments</var> is <emu-const>empty</emu-const>, then<ol><li>Let <var>argList</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6228"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></li><li>Else,<ol><li>Let <var>argList</var> be ?&nbsp;<emu-xref aoid="ArgumentListEvaluation" id="_ref_6229"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" class="e-user-code">ArgumentListEvaluation</a></emu-xref> of <var>arguments</var>.</li></ol></li><li>If <emu-xref aoid="IsConstructor" id="_ref_6230"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>constructor</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return ?&nbsp;<emu-xref aoid="Construct" id="_ref_6231"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>constructor</var>, <var>argList</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-function-calls">
<h1><span class="secnum">13.3.6</span> Function Calls</h1>
<emu-clause id="sec-function-calls-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.3.6.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="CallExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7jj-96li" id="prod-4XjrYD2l"><emu-nt id="_ref_20817"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be the <emu-nt id="_ref_20818"><a href="ecmascript-language-expressions.html#prod-CallMemberExpression">CallMemberExpression</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_6232"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_20819"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>.</li><li>Let <var>memberExpr</var> be the <emu-nt id="_ref_20820"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> of <var>expr</var>.</li><li>Let <var>arguments</var> be the <emu-nt id="_ref_20821"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt> of <var>expr</var>.</li><li>Let <var>ref</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6233"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>memberExpr</var>.</li><li>Let <var>func</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6234"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>ref</var>).</li><li>If <var>ref</var> is a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6235"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>, <emu-xref aoid="IsPropertyReference" id="_ref_6236"><a href="ecmascript-data-types-and-values.html#sec-ispropertyreference">IsPropertyReference</a></emu-xref>(<var>ref</var>) is <emu-val>false</emu-val>, and <var>ref</var>.<var class="field">[[ReferencedName]]</var> is <emu-val>"eval"</emu-val>, then<ol><li>If <emu-xref aoid="SameValue" id="_ref_6237"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>func</var>, <emu-xref href="#sec-eval-x" id="_ref_6238"><a href="global-object.html#sec-eval-x">%eval%</a></emu-xref>) is <emu-val>true</emu-val>, then<ol><li>Let <var>argList</var> be ?&nbsp;<emu-xref aoid="ArgumentListEvaluation" id="_ref_6239"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" class="e-user-code">ArgumentListEvaluation</a></emu-xref> of <var>arguments</var>.</li><li>If <var>argList</var> has no elements, return <emu-val>undefined</emu-val>.</li><li>Let <var>evalArg</var> be the first element of <var>argList</var>.</li><li>If <emu-xref aoid="IsStrict" id="_ref_6240"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20822"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>) is <emu-val>true</emu-val>, let <var>strictCaller</var> be <emu-val>true</emu-val>; else let <var>strictCaller</var> be <emu-val>false</emu-val>.</li><li id="step-callexpression-evaluation-direct-eval">Return ?&nbsp;<emu-xref aoid="PerformEval" id="_ref_6241"><a href="global-object.html#sec-performeval" class="e-user-code">PerformEval</a></emu-xref>(<var>evalArg</var>, <var>strictCaller</var>, <emu-val>true</emu-val>).</li></ol></li></ol></li><li>Let <var>thisCall</var> be this <emu-nt id="_ref_20823"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>tailCall</var> be <emu-xref aoid="IsInTailPosition" id="_ref_6242"><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition">IsInTailPosition</a></emu-xref>(<var>thisCall</var>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluateCall" id="_ref_6243"><a href="ecmascript-language-expressions.html#sec-evaluatecall" class="e-user-code">EvaluateCall</a></emu-xref>(<var>func</var>, <var>ref</var>, <var>arguments</var>, <var>tailCall</var>).</li></ol></emu-alg>
<p>A <emu-nt id="_ref_20824"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> evaluation that executes step <emu-xref href="#step-callexpression-evaluation-direct-eval" id="_ref_419"><a href="ecmascript-language-expressions.html#step-callexpression-evaluation-direct-eval">6.a.v</a></emu-xref> is a <dfn variants="direct evals" tabindex="-1">direct eval</dfn>.</p>
<emu-grammar><emu-production name="CallExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qugahahu" id="prod-nikwMTuV">
<emu-nt id="_ref_20825"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-nt id="_ref_20826"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>ref</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6244"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20827"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>func</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6245"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>ref</var>).</li><li>Let <var>thisCall</var> be this <emu-nt id="_ref_20828"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>tailCall</var> be <emu-xref aoid="IsInTailPosition" id="_ref_6246"><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition">IsInTailPosition</a></emu-xref>(<var>thisCall</var>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluateCall" id="_ref_6247"><a href="ecmascript-language-expressions.html#sec-evaluatecall" class="e-user-code">EvaluateCall</a></emu-xref>(<var>func</var>, <var>ref</var>, <emu-nt id="_ref_20829"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>, <var>tailCall</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-evaluatecall" type="abstract operation" oldids="sec-evaluatedirectcall" aoid="EvaluateCall"><span id="sec-evaluatedirectcall"></span>
<h1><span class="secnum">13.3.6.2</span> EvaluateCall ( <var>func</var>, <var>ref</var>, <var>arguments</var>, <var>tailPosition</var> )</h1>
<p>The abstract operation EvaluateCall takes arguments <var>func</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6248"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), <var>ref</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6249"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6250"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>), <var>arguments</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_6251"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>), and <var>tailPosition</var> (a Boolean) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6252"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6253"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6254"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>ref</var> is a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6255"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>, then<ol><li>If <emu-xref aoid="IsPropertyReference" id="_ref_6256"><a href="ecmascript-data-types-and-values.html#sec-ispropertyreference">IsPropertyReference</a></emu-xref>(<var>ref</var>) is <emu-val>true</emu-val>, then<ol><li>Let <var>thisValue</var> be <emu-xref aoid="GetThisValue" id="_ref_6257"><a href="ecmascript-data-types-and-values.html#sec-getthisvalue">GetThisValue</a></emu-xref>(<var>ref</var>).</li></ol></li><li>Else,<ol><li>Let <var>refEnv</var> be <var>ref</var>.<var class="field">[[Base]]</var>.</li><li><emu-xref href="#assert" id="_ref_6258"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>refEnv</var> is an <emu-xref href="#sec-environment-records" id="_ref_6259"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>.</li><li>Let <var>thisValue</var> be <var>refEnv</var>.<emu-xref aoid="WithBaseObject" id="_ref_6260"><a href="executable-code-and-execution-contexts.html#abstract-withbaseobject">WithBaseObject</a></emu-xref>().</li></ol></li></ol></li><li>Else,<ol><li>Let <var>thisValue</var> be <emu-val>undefined</emu-val>.</li></ol></li><li>Let <var>argList</var> be ?&nbsp;<emu-xref aoid="ArgumentListEvaluation" id="_ref_6261"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" class="e-user-code">ArgumentListEvaluation</a></emu-xref> of <var>arguments</var>.</li><li>If <var>func</var> <emu-xref href="#sec-object-type" id="_ref_6262"><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 <emu-xref aoid="IsCallable" id="_ref_6263"><a href="abstract-operations.html#sec-iscallable">IsCallable</a></emu-xref>(<var>func</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>tailPosition</var> is <emu-val>true</emu-val>, perform <emu-xref aoid="PrepareForTailCall" id="_ref_6264"><a href="ecmascript-language-functions-and-classes.html#sec-preparefortailcall">PrepareForTailCall</a></emu-xref>().</li><li>Return ?&nbsp;<emu-xref aoid="Call" id="_ref_6265"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>func</var>, <var>thisValue</var>, <var>argList</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-super-keyword">
<h1><span class="secnum">13.3.7</span> The <code>super</code> Keyword</h1>
<emu-clause id="sec-super-keyword-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.3.7.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="SuperProperty" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tpjzdyqv" id="prod-AopplWA-">
<emu-t>super</emu-t>
<emu-t>[</emu-t>
<emu-nt id="_ref_20830"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>env</var> be <emu-xref aoid="GetThisEnvironment" id="_ref_6266"><a href="executable-code-and-execution-contexts.html#sec-getthisenvironment">GetThisEnvironment</a></emu-xref>().</li><li>Let <var>actualThis</var> be ?&nbsp;<var>env</var>.<emu-xref aoid="GetThisBinding" id="_ref_6267"><a href="executable-code-and-execution-contexts.html#abstract-getthisbinding">GetThisBinding</a></emu-xref>().</li><li>Let <var>propertyNameReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6268"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20831"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>.</li><li>Let <var>propertyNameValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6269"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>propertyNameReference</var>).</li><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6270"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20832"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt>).</li><li>NOTE: In most cases, <emu-xref aoid="ToPropertyKey" id="_ref_6271"><a href="abstract-operations.html#sec-topropertykey">ToPropertyKey</a></emu-xref> will be performed on <var>propertyNameValue</var> immediately after this step. However, in the case of <code>super[b] = c</code>, it will not be performed until after evaluation of <code>c</code>.</li><li>Return <emu-xref aoid="MakeSuperPropertyReference" id="_ref_6272"><a href="ecmascript-language-expressions.html#sec-makesuperpropertyreference">MakeSuperPropertyReference</a></emu-xref>(<var>actualThis</var>, <var>propertyNameValue</var>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="SuperProperty" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="9pdsslwb" id="prod-YiE5fXTa">
<emu-t>super</emu-t>
<emu-t>.</emu-t>
<emu-nt id="_ref_20833"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>env</var> be <emu-xref aoid="GetThisEnvironment" id="_ref_6273"><a href="executable-code-and-execution-contexts.html#sec-getthisenvironment">GetThisEnvironment</a></emu-xref>().</li><li>Let <var>actualThis</var> be ?&nbsp;<var>env</var>.<emu-xref aoid="GetThisBinding" id="_ref_6274"><a href="executable-code-and-execution-contexts.html#abstract-getthisbinding">GetThisBinding</a></emu-xref>().</li><li>Let <var>propertyKey</var> be the <emu-xref aoid="StringValue" id="_ref_6275"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20834"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>.</li><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6276"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20835"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt>).</li><li>Return <emu-xref aoid="MakeSuperPropertyReference" id="_ref_6277"><a href="ecmascript-language-expressions.html#sec-makesuperpropertyreference">MakeSuperPropertyReference</a></emu-xref>(<var>actualThis</var>, <var>propertyKey</var>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="SuperCall" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qdmdlzzo" id="prod--j5ruhLQ">
<emu-t>super</emu-t>
<emu-nt id="_ref_20836"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>newTarget</var> be <emu-xref aoid="GetNewTarget" id="_ref_6278"><a href="executable-code-and-execution-contexts.html#sec-getnewtarget">GetNewTarget</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_6279"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>newTarget</var> is a <emu-xref href="#constructor" id="_ref_6280"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>.</li><li>Let <var>func</var> be <emu-xref aoid="GetSuperConstructor" id="_ref_6281"><a href="ecmascript-language-expressions.html#sec-getsuperconstructor">GetSuperConstructor</a></emu-xref>().</li><li>Let <var>argList</var> be ?&nbsp;<emu-xref aoid="ArgumentListEvaluation" id="_ref_6282"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" class="e-user-code">ArgumentListEvaluation</a></emu-xref> of <emu-nt id="_ref_20837"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>.</li><li>If <emu-xref aoid="IsConstructor" id="_ref_6283"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>func</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>result</var> be ?&nbsp;<emu-xref aoid="Construct" id="_ref_6284"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>func</var>, <var>argList</var>, <var>newTarget</var>).</li><li>Let <var>thisER</var> be <emu-xref aoid="GetThisEnvironment" id="_ref_6285"><a href="executable-code-and-execution-contexts.html#sec-getthisenvironment">GetThisEnvironment</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_6286"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>thisER</var> is a <emu-xref href="#sec-function-environment-records" id="_ref_6287"><a href="executable-code-and-execution-contexts.html#sec-function-environment-records">Function Environment Record</a></emu-xref>.</li><li>Perform ?&nbsp;<emu-xref aoid="BindThisValue" id="_ref_6288"><a href="executable-code-and-execution-contexts.html#sec-bindthisvalue">BindThisValue</a></emu-xref>(<var>thisER</var>, <var>result</var>).</li><li>Let <var>F</var> be <var>thisER</var>.<var class="field">[[FunctionObject]]</var>.</li><li><emu-xref href="#assert" id="_ref_6289"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>F</var> is an ECMAScript <emu-xref href="#function-object" id="_ref_6290"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>.</li><li>Perform ?&nbsp;<emu-xref aoid="InitializeInstanceElements" id="_ref_6291"><a href="abstract-operations.html#sec-initializeinstanceelements" class="e-user-code">InitializeInstanceElements</a></emu-xref>(<var>result</var>, <var>F</var>).</li><li>Return <var>result</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-getsuperconstructor" type="abstract operation" aoid="GetSuperConstructor">
<h1><span class="secnum">13.3.7.2</span> GetSuperConstructor ( )</h1>
<p>The abstract operation GetSuperConstructor takes no arguments and returns an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6292"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>envRec</var> be <emu-xref aoid="GetThisEnvironment" id="_ref_6293"><a href="executable-code-and-execution-contexts.html#sec-getthisenvironment">GetThisEnvironment</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_6294"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>envRec</var> is a <emu-xref href="#sec-function-environment-records" id="_ref_6295"><a href="executable-code-and-execution-contexts.html#sec-function-environment-records">Function Environment Record</a></emu-xref>.</li><li>Let <var>activeFunction</var> be <var>envRec</var>.<var class="field">[[FunctionObject]]</var>.</li><li><emu-xref href="#assert" id="_ref_6296"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>activeFunction</var> is an ECMAScript <emu-xref href="#function-object" id="_ref_6297"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>.</li><li>Let <var>superConstructor</var> be !&nbsp;<var>activeFunction</var>.<var class="field">[[GetPrototypeOf]]</var>().</li><li>Return <var>superConstructor</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-makesuperpropertyreference" type="abstract operation" aoid="MakeSuperPropertyReference">
<h1><span class="secnum">13.3.7.3</span> MakeSuperPropertyReference ( <var>actualThis</var>, <var>propertyKey</var>, <var>strict</var> )</h1>
<p>The abstract operation MakeSuperPropertyReference takes arguments <var>actualThis</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6298"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), <var>propertyKey</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6299"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>strict</var> (a Boolean) and returns a <emu-xref href="#super-reference-record" id="_ref_6300"><a href="ecmascript-data-types-and-values.html#super-reference-record">Super Reference Record</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>env</var> be <emu-xref aoid="GetThisEnvironment" id="_ref_6301"><a href="executable-code-and-execution-contexts.html#sec-getthisenvironment">GetThisEnvironment</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_6302"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>env</var>.<emu-xref aoid="HasSuperBinding" id="_ref_6303"><a href="executable-code-and-execution-contexts.html#abstract-hassuperbinding">HasSuperBinding</a></emu-xref>() is <emu-val>true</emu-val>.</li><li><emu-xref href="#assert" id="_ref_6304"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>env</var> is a <emu-xref href="#sec-function-environment-records" id="_ref_6305"><a href="executable-code-and-execution-contexts.html#sec-function-environment-records">Function Environment Record</a></emu-xref>.</li><li>Let <var>baseValue</var> be <emu-xref aoid="GetSuperBase" id="_ref_6306"><a href="executable-code-and-execution-contexts.html#sec-getsuperbase">GetSuperBase</a></emu-xref>(<var>env</var>).</li><li>Return the <emu-xref href="#sec-reference-record-specification-type" id="_ref_6307"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref> { <var class="field">[[Base]]</var>: <var>baseValue</var>, <var class="field">[[ReferencedName]]</var>: <var>propertyKey</var>, <var class="field">[[Strict]]</var>: <var>strict</var>, <var class="field">[[ThisValue]]</var>: <var>actualThis</var>&nbsp;}.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-argument-lists">
<h1><span class="secnum">13.3.8</span> Argument Lists</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The evaluation of an argument list produces a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6308"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of values.</p>
</div></emu-note>
<emu-clause id="sec-runtime-semantics-argumentlistevaluation" oldids="sec-template-literals-runtime-semantics-argumentlistevaluation,sec-argument-lists-runtime-semantics-argumentlistevaluation" type="sdo" aoid="ArgumentListEvaluation"><span id="sec-argument-lists-runtime-semantics-argumentlistevaluation"></span><span id="sec-template-literals-runtime-semantics-argumentlistevaluation"></span>
<h1><span class="secnum">13.3.8.1</span> Runtime Semantics: ArgumentListEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6309"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ArgumentListEvaluation takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6310"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6311"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-ecmascript-language-types" id="_ref_6312"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6313"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="Arguments" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eormm5tk" id="prod-qXYYcvIK">
<emu-t>(</emu-t>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6314"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArgumentList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1px9pijq" id="prod-6LIBrAp-"><emu-nt id="_ref_20838"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>ref</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6315"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20839"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>arg</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6316"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>ref</var>).</li><li>Return « <var>arg</var>&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="ArgumentList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w7ifpmpd" id="prod-9NFeGQ82">
<emu-t>...</emu-t>
<emu-nt id="_ref_20840"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>list</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6317"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>spreadRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6318"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20841"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>spreadObj</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6319"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>spreadRef</var>).</li><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_6320"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(<var>spreadObj</var>, <emu-const>sync</emu-const>).</li><li>Repeat,<ol><li>Let <var>next</var> be ?&nbsp;<emu-xref aoid="IteratorStepValue" id="_ref_6321"><a href="abstract-operations.html#sec-iteratorstepvalue" class="e-user-code">IteratorStepValue</a></emu-xref>(<var>iteratorRecord</var>).</li><li>If <var>next</var> is <emu-const>done</emu-const>, return <var>list</var>.</li><li>Append <var>next</var> to <var>list</var>.</li></ol></li></ol></emu-alg>
<emu-grammar><emu-production name="ArgumentList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f_i_7oqe" id="prod-avUGM8aa">
<emu-nt id="_ref_20842"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_20843"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>precedingArgs</var> be ?&nbsp;<emu-xref aoid="ArgumentListEvaluation" id="_ref_6322"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" class="e-user-code">ArgumentListEvaluation</a></emu-xref> of <emu-nt id="_ref_20844"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a></emu-nt>.</li><li>Let <var>ref</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6323"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20845"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>arg</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6324"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>ref</var>).</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6325"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>precedingArgs</var> and « <var>arg</var>&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="ArgumentList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="z4rq-va3" id="prod-Au9Wi9yT">
<emu-nt id="_ref_20846"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a></emu-nt>
<emu-t>,</emu-t>
<emu-t>...</emu-t>
<emu-nt id="_ref_20847"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>precedingArgs</var> be ?&nbsp;<emu-xref aoid="ArgumentListEvaluation" id="_ref_6326"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" class="e-user-code">ArgumentListEvaluation</a></emu-xref> of <emu-nt id="_ref_20848"><a href="ecmascript-language-expressions.html#prod-ArgumentList">ArgumentList</a></emu-nt>.</li><li>Let <var>spreadRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6327"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20849"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_6328"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6329"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>spreadRef</var>), <emu-const>sync</emu-const>).</li><li>Repeat,<ol><li>Let <var>next</var> be ?&nbsp;<emu-xref aoid="IteratorStepValue" id="_ref_6330"><a href="abstract-operations.html#sec-iteratorstepvalue" class="e-user-code">IteratorStepValue</a></emu-xref>(<var>iteratorRecord</var>).</li><li>If <var>next</var> is <emu-const>done</emu-const>, return <var>precedingArgs</var>.</li><li>Append <var>next</var> to <var>precedingArgs</var>.</li></ol></li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateLiteral" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e_otk8es" id="prod-EUsfaoKE"><emu-nt id="_ref_20850"><a href="ecmascript-language-lexical-grammar.html#prod-NoSubstitutionTemplate">NoSubstitutionTemplate</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>templateLiteral</var> be this <emu-nt id="_ref_20851"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>.</li><li>Let <var>siteObj</var> be <emu-xref aoid="GetTemplateObject" id="_ref_6331"><a href="ecmascript-language-expressions.html#sec-gettemplateobject">GetTemplateObject</a></emu-xref>(<var>templateLiteral</var>).</li><li>Return « <var>siteObj</var>&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="TemplateLiteral" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="haut9ebi" id="prod-_obYKRXG"><emu-nt id="_ref_20852"><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>templateLiteral</var> be this <emu-nt id="_ref_20853"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>.</li><li>Let <var>siteObj</var> be <emu-xref aoid="GetTemplateObject" id="_ref_6332"><a href="ecmascript-language-expressions.html#sec-gettemplateobject">GetTemplateObject</a></emu-xref>(<var>templateLiteral</var>).</li><li>Let <var>remaining</var> be ?&nbsp;<emu-xref aoid="ArgumentListEvaluation" id="_ref_6333"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" class="e-user-code">ArgumentListEvaluation</a></emu-xref> of <emu-nt id="_ref_20854"><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6334"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of « <var>siteObj</var>&nbsp;» and <var>remaining</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SubstitutionTemplate" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-SubstitutionTemplate">SubstitutionTemplate</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vpxmqc6d" id="prod-RX4K7HKv">
<emu-nt id="_ref_20855"><a href="ecmascript-language-lexical-grammar.html#prod-TemplateHead">TemplateHead</a></emu-nt>
<emu-nt id="_ref_20856"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-nt id="_ref_20857"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>firstSubRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6335"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20858"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>.</li><li>Let <var>firstSub</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6336"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>firstSubRef</var>).</li><li>Let <var>restSub</var> be ?&nbsp;<emu-xref aoid="SubstitutionEvaluation" id="_ref_6337"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-substitutionevaluation" class="e-user-code">SubstitutionEvaluation</a></emu-xref> of <emu-nt id="_ref_20859"><a href="ecmascript-language-expressions.html#prod-TemplateSpans">TemplateSpans</a></emu-nt>.</li><li><emu-xref href="#assert" id="_ref_6338"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>restSub</var> is a possibly empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6339"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6340"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of « <var>firstSub</var>&nbsp;» and <var>restSub</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-optional-chains">
<h1><span class="secnum">13.3.9</span> Optional Chains</h1>
<emu-note><span class="note">Note</span><div class="note-contents">An optional chain is a chain of one or more property accesses and function calls, the first of which begins with the token <code>?.</code>.</div></emu-note>
<emu-clause id="sec-optional-chaining-evaluation" type="sdo">
<h1><span class="secnum">13.3.9.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="OptionalExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tne-ixmh" id="prod--_aqugGj">
<emu-nt id="_ref_20860"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-nt id="_ref_20861"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6341"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20862"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6342"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>If <var>baseValue</var> is either <emu-val>undefined</emu-val> or <emu-val>null</emu-val>, then<ol><li>Return <emu-val>undefined</emu-val>.</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="ChainEvaluation" id="_ref_6343"><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" class="e-user-code">ChainEvaluation</a></emu-xref> of <emu-nt id="_ref_20863"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> with arguments <var>baseValue</var> and <var>baseReference</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vah6zjkb" id="prod-k1PrC9LR">
<emu-nt id="_ref_20864"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-nt id="_ref_20865"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6344"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20866"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6345"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>If <var>baseValue</var> is either <emu-val>undefined</emu-val> or <emu-val>null</emu-val>, then<ol><li>Return <emu-val>undefined</emu-val>.</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="ChainEvaluation" id="_ref_6346"><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" class="e-user-code">ChainEvaluation</a></emu-xref> of <emu-nt id="_ref_20867"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> with arguments <var>baseValue</var> and <var>baseReference</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="m-2pf2bd" id="prod-TDZnNZ1K">
<emu-nt id="_ref_20868"><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a></emu-nt>
<emu-nt id="_ref_20869"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>baseReference</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6347"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20870"><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a></emu-nt>.</li><li>Let <var>baseValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6348"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>baseReference</var>).</li><li>If <var>baseValue</var> is either <emu-val>undefined</emu-val> or <emu-val>null</emu-val>, then<ol><li>Return <emu-val>undefined</emu-val>.</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="ChainEvaluation" id="_ref_6349"><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" class="e-user-code">ChainEvaluation</a></emu-xref> of <emu-nt id="_ref_20871"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> with arguments <var>baseValue</var> and <var>baseReference</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-optional-chaining-chain-evaluation" type="sdo" aoid="ChainEvaluation">
<h1><span class="secnum">13.3.9.2</span> Runtime Semantics: ChainEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6350"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ChainEvaluation takes arguments <var>baseValue</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6351"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>baseReference</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6352"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6353"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6354"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6355"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6356"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>, or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6357"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ynxeowdb" id="prod-1C3YSxR_">
<emu-t>?.</emu-t>
<emu-nt id="_ref_20872"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>thisChain</var> be this <emu-nt id="_ref_20873"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>.</li><li>Let <var>tailCall</var> be <emu-xref aoid="IsInTailPosition" id="_ref_6358"><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition">IsInTailPosition</a></emu-xref>(<var>thisChain</var>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluateCall" id="_ref_6359"><a href="ecmascript-language-expressions.html#sec-evaluatecall" class="e-user-code">EvaluateCall</a></emu-xref>(<var>baseValue</var>, <var>baseReference</var>, <emu-nt id="_ref_20874"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>, <var>tailCall</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kktyttw7" id="prod-w5u7jzLu">
<emu-t>?.</emu-t>
<emu-t>[</emu-t>
<emu-nt id="_ref_20875"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6360"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20876"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluatePropertyAccessWithExpressionKey" id="_ref_6361"><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-expression-key" class="e-user-code">EvaluatePropertyAccessWithExpressionKey</a></emu-xref>(<var>baseValue</var>, <emu-nt id="_ref_20877"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w-4ch2am" id="prod-9T4kB2jq">
<emu-t>?.</emu-t>
<emu-nt id="_ref_20878"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6362"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20879"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>).</li><li>Return <emu-xref aoid="EvaluatePropertyAccessWithIdentifierKey" id="_ref_6363"><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-identifier-key">EvaluatePropertyAccessWithIdentifierKey</a></emu-xref>(<var>baseValue</var>, <emu-nt id="_ref_20880"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0xlnjlpz" id="prod-JeRaAt5H">
<emu-t>?.</emu-t>
<emu-nt id="_ref_20881"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>fieldNameString</var> be the <emu-xref aoid="StringValue" id="_ref_6364"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20882"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>.</li><li>Return <emu-xref aoid="MakePrivateReference" id="_ref_6365"><a href="ecmascript-data-types-and-values.html#sec-makeprivatereference">MakePrivateReference</a></emu-xref>(<var>baseValue</var>, <var>fieldNameString</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eogoekck" id="prod-kAXkNcIE">
<emu-nt id="_ref_20883"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-nt id="_ref_20884"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>optionalChain</var> be <emu-nt id="_ref_20885"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>.</li><li>Let <var>newReference</var> be ?&nbsp;<emu-xref aoid="ChainEvaluation" id="_ref_6366"><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" class="e-user-code">ChainEvaluation</a></emu-xref> of <var>optionalChain</var> with arguments <var>baseValue</var> and <var>baseReference</var>.</li><li>Let <var>newValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6367"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>newReference</var>).</li><li>Let <var>thisChain</var> be this <emu-nt id="_ref_20886"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>.</li><li>Let <var>tailCall</var> be <emu-xref aoid="IsInTailPosition" id="_ref_6368"><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition">IsInTailPosition</a></emu-xref>(<var>thisChain</var>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluateCall" id="_ref_6369"><a href="ecmascript-language-expressions.html#sec-evaluatecall" class="e-user-code">EvaluateCall</a></emu-xref>(<var>newValue</var>, <var>newReference</var>, <emu-nt id="_ref_20887"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>, <var>tailCall</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jgl-kve-" id="prod-PNgnxyKa">
<emu-nt id="_ref_20888"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-t>[</emu-t>
<emu-nt id="_ref_20889"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>optionalChain</var> be <emu-nt id="_ref_20890"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>.</li><li>Let <var>newReference</var> be ?&nbsp;<emu-xref aoid="ChainEvaluation" id="_ref_6370"><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" class="e-user-code">ChainEvaluation</a></emu-xref> of <var>optionalChain</var> with arguments <var>baseValue</var> and <var>baseReference</var>.</li><li>Let <var>newValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6371"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>newReference</var>).</li><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6372"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20891"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluatePropertyAccessWithExpressionKey" id="_ref_6373"><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-expression-key" class="e-user-code">EvaluatePropertyAccessWithExpressionKey</a></emu-xref>(<var>newValue</var>, <emu-nt id="_ref_20892"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lf2imwfr" id="prod-Il7WrbnC">
<emu-nt id="_ref_20893"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20894"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>optionalChain</var> be <emu-nt id="_ref_20895"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>.</li><li>Let <var>newReference</var> be ?&nbsp;<emu-xref aoid="ChainEvaluation" id="_ref_6374"><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" class="e-user-code">ChainEvaluation</a></emu-xref> of <var>optionalChain</var> with arguments <var>baseValue</var> and <var>baseReference</var>.</li><li>Let <var>newValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6375"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>newReference</var>).</li><li>Let <var>strict</var> be <emu-xref aoid="IsStrict" id="_ref_6376"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(this <emu-nt id="_ref_20896"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>).</li><li>Return <emu-xref aoid="EvaluatePropertyAccessWithIdentifierKey" id="_ref_6377"><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-identifier-key">EvaluatePropertyAccessWithIdentifierKey</a></emu-xref>(<var>newValue</var>, <emu-nt id="_ref_20897"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>, <var>strict</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dnp-fbqk" id="prod-5tv-oPv9">
<emu-nt id="_ref_20898"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20899"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>optionalChain</var> be <emu-nt id="_ref_20900"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>.</li><li>Let <var>newReference</var> be ?&nbsp;<emu-xref aoid="ChainEvaluation" id="_ref_6378"><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" class="e-user-code">ChainEvaluation</a></emu-xref> of <var>optionalChain</var> with arguments <var>baseValue</var> and <var>baseReference</var>.</li><li>Let <var>newValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6379"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>newReference</var>).</li><li>Let <var>fieldNameString</var> be the <emu-xref aoid="StringValue" id="_ref_6380"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_20901"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>.</li><li>Return <emu-xref aoid="MakePrivateReference" id="_ref_6381"><a href="ecmascript-data-types-and-values.html#sec-makeprivatereference">MakePrivateReference</a></emu-xref>(<var>newValue</var>, <var>fieldNameString</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-import-calls">
<h1><span class="secnum">13.3.10</span> Import Calls</h1>
<emu-clause id="sec-import-call-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.3.10.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ImportCall" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ImportCall">ImportCall</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rksumt7f" id="prod-DuEmEibb">
<emu-t>import</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_20902"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateImportCall" id="_ref_6382"><a href="ecmascript-language-expressions.html#sec-evaluate-import-call" class="e-user-code">EvaluateImportCall</a></emu-xref>(<emu-nt id="_ref_20903"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>).</li></ol></emu-alg>
<emu-grammar><emu-production name="ImportCall" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ImportCall">ImportCall</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7jkmc6eq" id="prod-OGjeE4Nc">
<emu-t>import</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_20904"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_20905"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateImportCall" id="_ref_6383"><a href="ecmascript-language-expressions.html#sec-evaluate-import-call" class="e-user-code">EvaluateImportCall</a></emu-xref>(the first <emu-nt id="_ref_20906"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>, the second <emu-nt id="_ref_20907"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-evaluate-import-call" type="abstract operation" aoid="EvaluateImportCall">
<h1><span class="secnum">13.3.10.2</span> EvaluateImportCall ( <var>specifierExpression</var> [ , <var>optionsExpression</var> ] )</h1>
<p>The abstract operation EvaluateImportCall takes argument <var>specifierExpression</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_6384"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and optional argument <var>optionsExpression</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_6385"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6386"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Promise or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6387"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>referrer</var> be <emu-xref aoid="GetActiveScriptOrModule" id="_ref_6388"><a href="executable-code-and-execution-contexts.html#sec-getactivescriptormodule">GetActiveScriptOrModule</a></emu-xref>().</li><li>If <var>referrer</var> is <emu-val>null</emu-val>, set <var>referrer</var> to <emu-xref href="#current-realm" id="_ref_6389"><a href="executable-code-and-execution-contexts.html#current-realm">the current Realm Record</a></emu-xref>.</li><li>Let <var>specifierRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6390"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>specifierExpression</var>.</li><li>Let <var>specifier</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6391"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>specifierRef</var>).</li><li>If <var>optionsExpression</var> is present, then<ol><li>Let <var>optionsRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6392"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>optionsExpression</var>.</li><li>Let <var>options</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6393"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>optionsRef</var>).</li></ol></li><li>Else,<ol><li>Let <var>options</var> be <emu-val>undefined</emu-val>.</li></ol></li><li>Let <var>promiseCapability</var> be !&nbsp;<emu-xref aoid="NewPromiseCapability" id="_ref_6394"><a href="control-abstraction-objects.html#sec-newpromisecapability">NewPromiseCapability</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_6395"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>).</li><li>Let <var>specifierString</var> be <emu-xref aoid="Completion" id="_ref_6396"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="ToString" id="_ref_6397"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>specifier</var>)).</li><li><emu-xref aoid="IfAbruptRejectPromise" id="_ref_6398"><a href="control-abstraction-objects.html#sec-ifabruptrejectpromise" class="e-user-code">IfAbruptRejectPromise</a></emu-xref>(<var>specifierString</var>, <var>promiseCapability</var>).</li><li>Let <var>attributes</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6399"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>If <var>options</var> is not <emu-val>undefined</emu-val>, then<ol><li>If <var>options</var> <emu-xref href="#sec-object-type" id="_ref_6400"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, then<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_6401"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « a newly created <emu-val>TypeError</emu-val> object&nbsp;»).</li><li>Return <var>promiseCapability</var>.<var class="field">[[Promise]]</var>.</li></ol></li><li>Let <var>attributesObj</var> be <emu-xref aoid="Completion" id="_ref_6402"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="Get" id="_ref_6403"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>options</var>, <emu-val>"with"</emu-val>)).</li><li><emu-xref aoid="IfAbruptRejectPromise" id="_ref_6404"><a href="control-abstraction-objects.html#sec-ifabruptrejectpromise" class="e-user-code">IfAbruptRejectPromise</a></emu-xref>(<var>attributesObj</var>, <var>promiseCapability</var>).</li><li>If <var>attributesObj</var> is not <emu-val>undefined</emu-val>, then<ol><li>If <var>attributesObj</var> <emu-xref href="#sec-object-type" id="_ref_6405"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, then<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_6406"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « a newly created <emu-val>TypeError</emu-val> object&nbsp;»).</li><li>Return <var>promiseCapability</var>.<var class="field">[[Promise]]</var>.</li></ol></li><li>Let <var>entries</var> be <emu-xref aoid="Completion" id="_ref_6407"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="EnumerableOwnProperties" id="_ref_6408"><a href="abstract-operations.html#sec-enumerableownproperties" class="e-user-code">EnumerableOwnProperties</a></emu-xref>(<var>attributesObj</var>, <emu-const>key+value</emu-const>)).</li><li><emu-xref aoid="IfAbruptRejectPromise" id="_ref_6409"><a href="control-abstraction-objects.html#sec-ifabruptrejectpromise" class="e-user-code">IfAbruptRejectPromise</a></emu-xref>(<var>entries</var>, <var>promiseCapability</var>).</li><li>For each element <var>entry</var> of <var>entries</var>, do<ol><li>Let <var>key</var> be !&nbsp;<emu-xref aoid="Get" id="_ref_6410"><a href="abstract-operations.html#sec-get-o-p">Get</a></emu-xref>(<var>entry</var>, <emu-val>"0"</emu-val>).</li><li>Let <var>value</var> be !&nbsp;<emu-xref aoid="Get" id="_ref_6411"><a href="abstract-operations.html#sec-get-o-p">Get</a></emu-xref>(<var>entry</var>, <emu-val>"1"</emu-val>).</li><li>If <var>key</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_6412"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>, then<ol><li>If <var>value</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_6413"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is not a String</a></emu-xref>, then<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_6414"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « a newly created <emu-val>TypeError</emu-val> object&nbsp;»).</li><li>Return <var>promiseCapability</var>.<var class="field">[[Promise]]</var>.</li></ol></li><li>Append the <emu-xref href="#importattribute-record" id="_ref_6415"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Record</a></emu-xref> { <var class="field">[[Key]]</var>: <var>key</var>, <var class="field">[[Value]]</var>: <var>value</var>&nbsp;} to <var>attributes</var>.</li></ol></li></ol></li></ol></li><li>If <emu-xref aoid="AllImportAttributesSupported" id="_ref_6416"><a href="ecmascript-language-scripts-and-modules.html#sec-AllImportAttributesSupported">AllImportAttributesSupported</a></emu-xref>(<var>attributes</var>) is <emu-val>false</emu-val>, then<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_6417"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « a newly created <emu-val>TypeError</emu-val> object&nbsp;»).</li><li>Return <var>promiseCapability</var>.<var class="field">[[Promise]]</var>.</li></ol></li><li>Sort <var>attributes</var> according to the lexicographic order of their <var class="field">[[Key]]</var> field, treating the value of each such field as a sequence of UTF-16 code unit values. NOTE: This sorting is observable only in that <emu-xref href="#host" id="_ref_6418"><a href="overview.html#host">hosts</a></emu-xref> are prohibited from changing behaviour based on the order in which attributes are enumerated.</li></ol></li><li>Let <var>moduleRequest</var> be a new <emu-xref href="#modulerequest-record" id="_ref_6419"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> { <var class="field">[[Specifier]]</var>: <var>specifierString</var>, <var class="field">[[Attributes]]</var>: <var>attributes</var>&nbsp;}.</li><li>Perform <emu-xref aoid="HostLoadImportedModule" id="_ref_6420"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref>(<var>referrer</var>, <var>moduleRequest</var>, <emu-const>empty</emu-const>, <var>promiseCapability</var>).</li><li>Return <var>promiseCapability</var>.<var class="field">[[Promise]]</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-ContinueDynamicImport" type="abstract operation" aoid="ContinueDynamicImport">
<h1><span class="secnum">13.3.10.3</span> ContinueDynamicImport ( <var>promiseCapability</var>, <var>moduleCompletion</var> )</h1>
<p>The abstract operation ContinueDynamicImport takes arguments <var>promiseCapability</var> (a <emu-xref href="#sec-promisecapability-records" id="_ref_6421"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref>) and <var>moduleCompletion</var> (either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6422"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-abstract-module-records" id="_ref_6423"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6424"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>) and returns <emu-const>unused</emu-const>. It completes the process of a dynamic import originally started by an <emu-xref href="#sec-import-calls" id="_ref_420"><a href="ecmascript-language-expressions.html#sec-import-calls"><code>import()</code></a></emu-xref> call, resolving or rejecting the promise returned by that call as appropriate. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>moduleCompletion</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6425"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_6426"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « <var>moduleCompletion</var>.<var class="field">[[Value]]</var>&nbsp;»).</li><li>Return <emu-const>unused</emu-const>.</li></ol></li><li>Let <var>module</var> be <var>moduleCompletion</var>.<var class="field">[[Value]]</var>.</li><li>Let <var>loadPromise</var> be <var>module</var>.<emu-xref aoid="LoadRequestedModules" id="_ref_6427"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref>().</li><li>Let <var>rejectedClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_6428"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with parameters (<var>reason</var>) that captures <var>promiseCapability</var> and performs the following steps when called:<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_6429"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « <var>reason</var>&nbsp;»).</li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_6430"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></li><li>Let <var>onRejected</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_6431"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>rejectedClosure</var>, 1, <emu-val>""</emu-val>, «&nbsp;»).</li><li>Let <var>linkAndEvaluateClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_6432"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with no parameters that captures <var>module</var>, <var>promiseCapability</var>, and <var>onRejected</var> and performs the following steps when called:<ol><li>Let <var>link</var> be <emu-xref aoid="Completion" id="_ref_6433"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<var>module</var>.<emu-xref aoid="Link" id="_ref_6434"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref>()).</li><li>If <var>link</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6435"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_6436"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « <var>link</var>.<var class="field">[[Value]]</var>&nbsp;»).</li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_6437"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></li><li>Let <var>evaluatePromise</var> be <var>module</var>.<emu-xref aoid="Evaluate" id="_ref_6438"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>().</li><li>Let <var>fulfilledClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_6439"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with no parameters that captures <var>module</var> and <var>promiseCapability</var> and performs the following steps when called:<ol><li>Let <var>namespace</var> be <emu-xref aoid="GetModuleNamespace" id="_ref_6440"><a href="ecmascript-language-scripts-and-modules.html#sec-getmodulenamespace">GetModuleNamespace</a></emu-xref>(<var>module</var>).</li><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_6441"><a href="abstract-operations.html#sec-call" class="e-user-code e-user-code">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Resolve]]</var>, <emu-val>undefined</emu-val>, « <var>namespace</var>&nbsp;»).</li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_6442"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></li><li>Let <var>onFulfilled</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_6443"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>fulfilledClosure</var>, 0, <emu-val>""</emu-val>, «&nbsp;»).</li><li>Perform <emu-xref aoid="PerformPromiseThen" id="_ref_6444"><a href="control-abstraction-objects.html#sec-performpromisethen">PerformPromiseThen</a></emu-xref>(<var>evaluatePromise</var>, <var>onFulfilled</var>, <var>onRejected</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></li><li>Let <var>linkAndEvaluate</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_6445"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>linkAndEvaluateClosure</var>, 0, <emu-val>""</emu-val>, «&nbsp;»).</li><li>Perform <emu-xref aoid="PerformPromiseThen" id="_ref_6446"><a href="control-abstraction-objects.html#sec-performpromisethen">PerformPromiseThen</a></emu-xref>(<var>loadPromise</var>, <var>linkAndEvaluate</var>, <var>onRejected</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-tagged-templates">
<h1><span class="secnum">13.3.11</span> Tagged Templates</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>A tagged template is a function call where the arguments of the call are derived from a <emu-nt id="_ref_20908"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt> (<emu-xref href="#sec-template-literals" id="_ref_421"><a href="ecmascript-language-expressions.html#sec-template-literals">13.2.8</a></emu-xref>). The actual arguments include a template object (<emu-xref href="#sec-gettemplateobject" id="_ref_422"><a href="ecmascript-language-expressions.html#sec-gettemplateobject">13.2.8.4</a></emu-xref>) and the values produced by evaluating the expressions embedded within the <emu-nt id="_ref_20909"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>.</p>
</div></emu-note>
<emu-clause id="sec-tagged-templates-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.3.11.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="MemberExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fj52gjle" id="prod-ZiK0MveV">
<emu-nt id="_ref_20910"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-nt id="_ref_20911"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>tagRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6447"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20912"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>.</li><li>Let <var>tagFunc</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6448"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>tagRef</var>).</li><li>Let <var>thisCall</var> be this <emu-nt id="_ref_20913"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>.</li><li>Let <var>tailCall</var> be <emu-xref aoid="IsInTailPosition" id="_ref_6449"><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition">IsInTailPosition</a></emu-xref>(<var>thisCall</var>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluateCall" id="_ref_6450"><a href="ecmascript-language-expressions.html#sec-evaluatecall" class="e-user-code">EvaluateCall</a></emu-xref>(<var>tagFunc</var>, <var>tagRef</var>, <emu-nt id="_ref_20914"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>, <var>tailCall</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="CallExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rc744wey" id="prod-N2ZjHnZW">
<emu-nt id="_ref_20915"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-nt id="_ref_20916"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>tagRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6451"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20917"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>tagFunc</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6452"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>tagRef</var>).</li><li>Let <var>thisCall</var> be this <emu-nt id="_ref_20918"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>.</li><li>Let <var>tailCall</var> be <emu-xref aoid="IsInTailPosition" id="_ref_6453"><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition">IsInTailPosition</a></emu-xref>(<var>thisCall</var>).</li><li>Return ?&nbsp;<emu-xref aoid="EvaluateCall" id="_ref_6454"><a href="ecmascript-language-expressions.html#sec-evaluatecall" class="e-user-code">EvaluateCall</a></emu-xref>(<var>tagFunc</var>, <var>tagRef</var>, <emu-nt id="_ref_20919"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>, <var>tailCall</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-meta-properties">
<h1><span class="secnum">13.3.12</span> Meta Properties</h1>
<emu-clause id="sec-meta-properties-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.3.12.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="NewTarget" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-NewTarget">NewTarget</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0t4hpsv9" id="prod-OIanAQRE">
<emu-t>new</emu-t>
<emu-t>.</emu-t>
<emu-t>target</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="GetNewTarget" id="_ref_6455"><a href="executable-code-and-execution-contexts.html#sec-getnewtarget">GetNewTarget</a></emu-xref>().</li></ol></emu-alg>
<emu-grammar><emu-production name="ImportMeta" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ImportMeta">ImportMeta</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8myn6frq" id="prod-ZjGYptj_">
<emu-t>import</emu-t>
<emu-t>.</emu-t>
<emu-t>meta</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>module</var> be <emu-xref aoid="GetActiveScriptOrModule" id="_ref_6456"><a href="executable-code-and-execution-contexts.html#sec-getactivescriptormodule">GetActiveScriptOrModule</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_6457"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> is a <emu-xref href="#sourctextmodule-record" id="_ref_6458"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref>.</li><li>Let <var>importMeta</var> be <var>module</var>.<var class="field">[[ImportMeta]]</var>.</li><li>If <var>importMeta</var> is <emu-const>empty</emu-const>, then<ol><li>Set <var>importMeta</var> to <emu-xref aoid="OrdinaryObjectCreate" id="_ref_6459"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-val>null</emu-val>).</li><li>Let <var>importMetaValues</var> be <emu-xref aoid="HostGetImportMetaProperties" id="_ref_6460"><a href="ecmascript-language-expressions.html#sec-hostgetimportmetaproperties">HostGetImportMetaProperties</a></emu-xref>(<var>module</var>).</li><li>For each <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6461"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Key]]</var>, <var class="field">[[Value]]</var>&nbsp;} <var>p</var> of <var>importMetaValues</var>, do<ol><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_6462"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>importMeta</var>, <var>p</var>.<var class="field">[[Key]]</var>, <var>p</var>.<var class="field">[[Value]]</var>).</li></ol></li><li>Perform <emu-xref aoid="HostFinalizeImportMeta" id="_ref_6463"><a href="ecmascript-language-expressions.html#sec-hostfinalizeimportmeta">HostFinalizeImportMeta</a></emu-xref>(<var>importMeta</var>, <var>module</var>).</li><li>Set <var>module</var>.<var class="field">[[ImportMeta]]</var> to <var>importMeta</var>.</li><li>Return <var>importMeta</var>.</li></ol></li><li><emu-xref href="#assert" id="_ref_6464"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>importMeta</var> <emu-xref href="#sec-object-type" id="_ref_6465"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Return <var>importMeta</var>.</li></ol></emu-alg>
<emu-clause id="sec-hostgetimportmetaproperties" type="host-defined abstract operation" aoid="HostGetImportMetaProperties">
<h1><span class="secnum">13.3.12.1.1</span> HostGetImportMetaProperties ( <var>moduleRecord</var> )</h1>
<p>The <emu-xref href="#host-defined" id="_ref_6466"><a href="overview.html#host-defined">host-defined</a></emu-xref> abstract operation HostGetImportMetaProperties takes argument <var>moduleRecord</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_6467"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6468"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6469"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Records</a></emu-xref> with fields <var class="field">[[Key]]</var> (a <emu-xref href="#property-key" id="_ref_6470"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var class="field">[[Value]]</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6471"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>). It allows <emu-xref href="#host" id="_ref_6472"><a href="overview.html#host">hosts</a></emu-xref> to provide <emu-xref href="#property-key" id="_ref_6473"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref> and values for the object returned from <code>import.meta</code>.</p>
<p>The default implementation of HostGetImportMetaProperties is to return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6474"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</p>
</emu-clause>
<emu-clause id="sec-hostfinalizeimportmeta" type="host-defined abstract operation" aoid="HostFinalizeImportMeta">
<h1><span class="secnum">13.3.12.1.2</span> HostFinalizeImportMeta ( <var>importMeta</var>, <var>moduleRecord</var> )</h1>
<p>The <emu-xref href="#host-defined" id="_ref_6475"><a href="overview.html#host-defined">host-defined</a></emu-xref> abstract operation HostFinalizeImportMeta takes arguments <var>importMeta</var> (an Object) and <var>moduleRecord</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_6476"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and returns <emu-const>unused</emu-const>. It allows <emu-xref href="#host" id="_ref_6477"><a href="overview.html#host">hosts</a></emu-xref> to perform any extraordinary operations to prepare the object returned from <code>import.meta</code>.</p>
<p>Most <emu-xref href="#host" id="_ref_6478"><a href="overview.html#host">hosts</a></emu-xref> will be able to simply define <emu-xref aoid="HostGetImportMetaProperties" id="_ref_6479"><a href="ecmascript-language-expressions.html#sec-hostgetimportmetaproperties">HostGetImportMetaProperties</a></emu-xref>, and leave HostFinalizeImportMeta with its default behaviour. However, HostFinalizeImportMeta provides an "escape hatch" for <emu-xref href="#host" id="_ref_6480"><a href="overview.html#host">hosts</a></emu-xref> which need to directly manipulate the object before it is exposed to ECMAScript code.</p>
<p>The default implementation of HostFinalizeImportMeta is to return <emu-const>unused</emu-const>.</p>
</emu-clause>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-update-expressions">
<h1><span class="secnum">13.4</span> Update Expressions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="UpdateExpression" params="Yield, Await" id="prod-UpdateExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="t7cmhicy">
<emu-nt params="?Yield, ?Await" id="_ref_20920"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="egpm8pw8" id="prod-w05b3u14">
<emu-nt params="?Yield, ?Await" id="_ref_20921"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-gann>[no <emu-nt id="_ref_20922"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>++</emu-t>
</emu-rhs>
<emu-rhs a="xaomniuu" id="prod-ij__hpSO">
<emu-nt params="?Yield, ?Await" id="_ref_20923"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-gann>[no <emu-nt id="_ref_20924"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>--</emu-t>
</emu-rhs>
<emu-rhs a="4u-mahoy" id="prod-qnUAnDpi">
<emu-t>++</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20925"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="mutg-4fe" id="prod-an6Vm9J4">
<emu-t>--</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20926"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-update-expressions-static-semantics-early-errors">
<h1><span class="secnum">13.4.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="UpdateExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i_jjg0ex">
<emu-nt id="_ref_20927"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>++</emu-t>
</emu-rhs>
<emu-rhs a="jr0tcoqg">
<emu-nt id="_ref_20928"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>--</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is an early Syntax Error if the <emu-xref aoid="AssignmentTargetType" id="_ref_6481"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_20929"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-const>invalid</emu-const>.
</li>
</ul>
<emu-grammar><emu-production name="UpdateExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vwgxygda">
<emu-t>++</emu-t>
<emu-nt id="_ref_20930"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="onrvwudi">
<emu-t>--</emu-t>
<emu-nt id="_ref_20931"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is an early Syntax Error if the <emu-xref aoid="AssignmentTargetType" id="_ref_6482"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_20932"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> is <emu-const>invalid</emu-const>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-postfix-increment-operator">
<h1><span class="secnum">13.4.2</span> Postfix Increment Operator</h1>
<emu-clause id="sec-postfix-increment-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.4.2.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UpdateExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i_jjg0ex" id="prod-rHS1jNn2">
<emu-nt id="_ref_20933"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>++</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lhs</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6483"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20934"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>If the <emu-xref aoid="AssignmentTargetType" id="_ref_6484"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_20935"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-const>web-compat</emu-const>, throw a <emu-val>ReferenceError</emu-val> exception.</li><li>Let <var>oldValue</var> be ?&nbsp;<emu-xref aoid="ToNumeric" id="_ref_6485"><a href="abstract-operations.html#sec-tonumeric" class="e-user-code">ToNumeric</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6486"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lhs</var>)).</li><li>If <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6487"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">is a Number</a></emu-xref>, then<ol><li>Let <var>newValue</var> be <emu-xref aoid="Number::add" id="_ref_6488"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-add">Number::add</a></emu-xref>(<var>oldValue</var>, <emu-val>1</emu-val><sub>𝔽</sub>).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_6489"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-bigint-type" id="_ref_6490"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type">is a BigInt</a></emu-xref>.</li><li>Let <var>newValue</var> be <emu-xref aoid="BigInt::add" id="_ref_6491"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-add">BigInt::add</a></emu-xref>(<var>oldValue</var>, <emu-val>1</emu-val><sub></sub>).</li></ol></li><li>Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6492"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lhs</var>, <var>newValue</var>).</li><li>Return <var>oldValue</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-postfix-decrement-operator">
<h1><span class="secnum">13.4.3</span> Postfix Decrement Operator</h1>
<emu-clause id="sec-postfix-decrement-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.4.3.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UpdateExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jr0tcoqg" id="prod-wioTQf27">
<emu-nt id="_ref_20936"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>--</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lhs</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6493"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20937"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>If the <emu-xref aoid="AssignmentTargetType" id="_ref_6494"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_20938"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-const>web-compat</emu-const>, throw a <emu-val>ReferenceError</emu-val> exception.</li><li>Let <var>oldValue</var> be ?&nbsp;<emu-xref aoid="ToNumeric" id="_ref_6495"><a href="abstract-operations.html#sec-tonumeric" class="e-user-code">ToNumeric</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6496"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lhs</var>)).</li><li>If <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6497"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">is a Number</a></emu-xref>, then<ol><li>Let <var>newValue</var> be <emu-xref aoid="Number::subtract" id="_ref_6498"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-subtract">Number::subtract</a></emu-xref>(<var>oldValue</var>, <emu-val>1</emu-val><sub>𝔽</sub>).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_6499"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-bigint-type" id="_ref_6500"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type">is a BigInt</a></emu-xref>.</li><li>Let <var>newValue</var> be <emu-xref aoid="BigInt::subtract" id="_ref_6501"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-subtract">BigInt::subtract</a></emu-xref>(<var>oldValue</var>, <emu-val>1</emu-val><sub></sub>).</li></ol></li><li>Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6502"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lhs</var>, <var>newValue</var>).</li><li>Return <var>oldValue</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-prefix-increment-operator">
<h1><span class="secnum">13.4.4</span> Prefix Increment Operator</h1>
<emu-clause id="sec-prefix-increment-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.4.4.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UpdateExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vwgxygda" id="prod-10GLxGSJ">
<emu-t>++</emu-t>
<emu-nt id="_ref_20939"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6503"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20940"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>If the <emu-xref aoid="AssignmentTargetType" id="_ref_6504"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_20941"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> is <emu-const>web-compat</emu-const>, throw a <emu-val>ReferenceError</emu-val> exception.</li><li>Let <var>oldValue</var> be ?&nbsp;<emu-xref aoid="ToNumeric" id="_ref_6505"><a href="abstract-operations.html#sec-tonumeric" class="e-user-code">ToNumeric</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6506"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>expr</var>)).</li><li>If <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6507"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">is a Number</a></emu-xref>, then<ol><li>Let <var>newValue</var> be <emu-xref aoid="Number::add" id="_ref_6508"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-add">Number::add</a></emu-xref>(<var>oldValue</var>, <emu-val>1</emu-val><sub>𝔽</sub>).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_6509"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-bigint-type" id="_ref_6510"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type">is a BigInt</a></emu-xref>.</li><li>Let <var>newValue</var> be <emu-xref aoid="BigInt::add" id="_ref_6511"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-add">BigInt::add</a></emu-xref>(<var>oldValue</var>, <emu-val>1</emu-val><sub></sub>).</li></ol></li><li>Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6512"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>expr</var>, <var>newValue</var>).</li><li>Return <var>newValue</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-prefix-decrement-operator">
<h1><span class="secnum">13.4.5</span> Prefix Decrement Operator</h1>
<emu-clause id="sec-prefix-decrement-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.4.5.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UpdateExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="onrvwudi" id="prod-DhW7Culr">
<emu-t>--</emu-t>
<emu-nt id="_ref_20942"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6513"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20943"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>If the <emu-xref aoid="AssignmentTargetType" id="_ref_6514"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_20944"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> is <emu-const>web-compat</emu-const>, throw a <emu-val>ReferenceError</emu-val> exception.</li><li>Let <var>oldValue</var> be ?&nbsp;<emu-xref aoid="ToNumeric" id="_ref_6515"><a href="abstract-operations.html#sec-tonumeric" class="e-user-code">ToNumeric</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6516"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>expr</var>)).</li><li>If <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6517"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">is a Number</a></emu-xref>, then<ol><li>Let <var>newValue</var> be <emu-xref aoid="Number::subtract" id="_ref_6518"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-subtract">Number::subtract</a></emu-xref>(<var>oldValue</var>, <emu-val>1</emu-val><sub>𝔽</sub>).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_6519"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-bigint-type" id="_ref_6520"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type">is a BigInt</a></emu-xref>.</li><li>Let <var>newValue</var> be <emu-xref aoid="BigInt::subtract" id="_ref_6521"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-subtract">BigInt::subtract</a></emu-xref>(<var>oldValue</var>, <emu-val>1</emu-val><sub></sub>).</li></ol></li><li>Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6522"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>expr</var>, <var>newValue</var>).</li><li>Return <var>newValue</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-unary-operators">
<h1><span class="secnum">13.5</span> Unary Operators</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="UnaryExpression" params="Yield, Await" id="prod-UnaryExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lrh_izya">
<emu-nt params="?Yield, ?Await" id="_ref_20945"><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="qh6tas2i" id="prod-n3f1x4OA">
<emu-t>delete</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20946"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="d3t3dyzd" id="prod-bEnaiUfM">
<emu-t>void</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20947"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="atfv1ezt" id="prod-oOmRMvU8">
<emu-t>typeof</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20948"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="1zx-fkm3" id="prod-55Xz_E0Z">
<emu-t>+</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20949"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="lehvx30i" id="prod-yxAmCDj1">
<emu-t>-</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20950"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="mvwftuyy" id="prod-nw8eIftf">
<emu-t>~</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20951"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="cm7fnuig" id="prod-4lEraLTO">
<emu-t>!</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20952"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="dfqdbsrx" constraints="+Await" id="prod-zVi0tVGF"><emu-constraints>[+Await]</emu-constraints>
<emu-nt params="?Yield" id="_ref_20953"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a><emu-mods><emu-params>[?Yield]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-delete-operator">
<h1><span class="secnum">13.5.1</span> The <code>delete</code> Operator</h1>
<emu-clause id="sec-delete-operator-static-semantics-early-errors">
<h1><span class="secnum">13.5.1.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="UnaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v9wiw5nl">
<emu-t>delete</emu-t>
<emu-nt id="_ref_20954"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="IsStrict" id="_ref_6523"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(the <emu-nt id="_ref_20955"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>) is <emu-val>true</emu-val> and the derived <emu-nt id="_ref_20956"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> is <emu-grammar><emu-production name="PrimaryExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i2hxnrih"><emu-nt id="_ref_20957"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>, <emu-grammar><emu-production name="MemberExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0uk9afbi">
<emu-nt id="_ref_20958"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20959"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>, <emu-grammar><emu-production name="CallExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cysjk9wh">
<emu-nt id="_ref_20960"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20961"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>, <emu-grammar><emu-production name="OptionalChain" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0xlnjlpz">
<emu-t>?.</emu-t>
<emu-nt id="_ref_20962"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>, or <emu-grammar><emu-production name="OptionalChain" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dnp-fbqk">
<emu-nt id="_ref_20963"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_20964"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>.
</li>
<li>
<p>
It is a Syntax Error if the derived <emu-nt id="_ref_20965"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> is<br>
<emu-grammar><emu-production name="PrimaryExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrb110hm"><emu-nt id="_ref_20966"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar><br>
and <emu-nt id="_ref_20967"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt> ultimately derives a phrase that, if used in place of <emu-nt id="_ref_20968"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>, would produce a Syntax Error according to these rules. This rule is recursively applied.
</p>
</li>
</ul>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The last rule means that expressions such as <code>delete (((foo)))</code> produce <emu-xref href="#early-error" id="_ref_6524"><a href="error-handling-and-language-extensions.html#early-error">early errors</a></emu-xref> because of recursive application of the first rule.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-delete-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.5.1.2</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UnaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v9wiw5nl" id="prod-1QeAbR0Z">
<emu-t>delete</emu-t>
<emu-nt id="_ref_20969"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>ref</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6525"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20970"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>If <var>ref</var> is not a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6526"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>, return <emu-val>true</emu-val>.</li><li>If <emu-xref aoid="IsUnresolvableReference" id="_ref_6527"><a href="ecmascript-data-types-and-values.html#sec-isunresolvablereference">IsUnresolvableReference</a></emu-xref>(<var>ref</var>) is <emu-val>true</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_6528"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>ref</var>.<var class="field">[[Strict]]</var> is <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></li><li>If <emu-xref aoid="IsPropertyReference" id="_ref_6529"><a href="ecmascript-data-types-and-values.html#sec-ispropertyreference">IsPropertyReference</a></emu-xref>(<var>ref</var>) is <emu-val>true</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_6530"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsPrivateReference" id="_ref_6531"><a href="ecmascript-data-types-and-values.html#sec-isprivatereference">IsPrivateReference</a></emu-xref>(<var>ref</var>) is <emu-val>false</emu-val>.</li><li>If <emu-xref aoid="IsSuperReference" id="_ref_6532"><a href="ecmascript-data-types-and-values.html#sec-issuperreference">IsSuperReference</a></emu-xref>(<var>ref</var>) is <emu-val>true</emu-val>, throw a <emu-val>ReferenceError</emu-val> exception.</li><li id="step-delete-operator-toobject">Let <var>baseObj</var> be ?&nbsp;<emu-xref aoid="ToObject" id="_ref_6533"><a href="abstract-operations.html#sec-toobject">ToObject</a></emu-xref>(<var>ref</var>.<var class="field">[[Base]]</var>).</li><li>If <var>ref</var>.<var class="field">[[ReferencedName]]</var> is not a <emu-xref href="#property-key" id="_ref_6534"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>, then<ol><li>Set <var>ref</var>.<var class="field">[[ReferencedName]]</var> to ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_6535"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>ref</var>.<var class="field">[[ReferencedName]]</var>).</li></ol></li><li>Let <var>deleteStatus</var> be ?&nbsp;<span class="e-user-code"><var>baseObj</var>.<var class="field">[[Delete]]</var>(<var>ref</var>.<var class="field">[[ReferencedName]]</var>)</span>.</li><li>If <var>deleteStatus</var> is <emu-val>false</emu-val> and <var>ref</var>.<var class="field">[[Strict]]</var> is <emu-val>true</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <var>deleteStatus</var>.</li></ol></li><li>Let <var>base</var> be <var>ref</var>.<var class="field">[[Base]]</var>.</li><li><emu-xref href="#assert" id="_ref_6536"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>base</var> is an <emu-xref href="#sec-environment-records" id="_ref_6537"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>.</li><li>Return ?&nbsp;<span class="e-user-code"><var>base</var>.<emu-xref aoid="DeleteBinding" id="_ref_6538"><a href="executable-code-and-execution-contexts.html#abstract-deletebinding">DeleteBinding</a></emu-xref>(<var>ref</var>.<var class="field">[[ReferencedName]]</var>)</span>.</li></ol></emu-alg>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>When a <code>delete</code> operator occurs within <emu-xref href="#sec-strict-mode-code" id="_ref_6539"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref>, a <emu-val>SyntaxError</emu-val> exception is thrown if its <emu-nt id="_ref_20971"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> is a direct reference to a variable, function argument, or function name. In addition, if a <code>delete</code> operator occurs within <emu-xref href="#sec-strict-mode-code" id="_ref_6540"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref> and the property to be deleted has the attribute { <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> } (or otherwise cannot be deleted), a <emu-val>TypeError</emu-val> exception is thrown.</p>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>The object that may be created in step <emu-xref href="#step-delete-operator-toobject" id="_ref_423"><a href="ecmascript-language-expressions.html#step-delete-operator-toobject">4.c</a></emu-xref> is not accessible outside of the above abstract operation and the <emu-xref href="#ordinary-object" id="_ref_6541"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var class="field">[[Delete]]</var> internal method. An implementation might choose to avoid the actual creation of that object.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
<emu-clause id="sec-void-operator">
<h1><span class="secnum">13.5.2</span> The <code>void</code> Operator</h1>
<emu-clause id="sec-void-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.5.2.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UnaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="5dgdjy7z" id="prod-aU1kwA1W">
<emu-t>void</emu-t>
<emu-nt id="_ref_20972"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6542"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20973"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>Perform ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6543"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>expr</var>).</li><li>Return <emu-val>undefined</emu-val>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><emu-xref aoid="GetValue" id="_ref_6544"><a href="ecmascript-data-types-and-values.html#sec-getvalue">GetValue</a></emu-xref> must be called even though its value is not used because it may have observable side-effects.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
<emu-clause id="sec-typeof-operator">
<h1><span class="secnum">13.5.3</span> The <code>typeof</code> Operator</h1>
<emu-clause id="sec-typeof-operator-runtime-semantics-evaluation" oldids="table-typeof-operator-results,sec-IsHTMLDDA-internal-slot-typeof" type="sdo"><span id="sec-IsHTMLDDA-internal-slot-typeof"></span><span id="table-typeof-operator-results"></span>
<h1><span class="secnum">13.5.3.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UnaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qxosuesc" id="prod-1gTisO9f">
<emu-t>typeof</emu-t>
<emu-nt id="_ref_20974"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>val</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6546"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20975"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>If <var>val</var> is a <emu-xref href="#sec-reference-record-specification-type" id="_ref_6547"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>, then<ol><li>If <emu-xref aoid="IsUnresolvableReference" id="_ref_6548"><a href="ecmascript-data-types-and-values.html#sec-isunresolvablereference">IsUnresolvableReference</a></emu-xref>(<var>val</var>) is <emu-val>true</emu-val>, return <emu-val>"undefined"</emu-val>.</li></ol></li><li>Set <var>val</var> to ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6549"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>val</var>).</li><li>If <var>val</var> is <emu-val>undefined</emu-val>, return <emu-val>"undefined"</emu-val>.</li><li>If <var>val</var> is <emu-val>null</emu-val>, return <emu-val>"object"</emu-val>.</li><li>If <var>val</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_6550"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>, return <emu-val>"string"</emu-val>.</li><li>If <var>val</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_6551"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, return <emu-val>"symbol"</emu-val>.</li><li>If <var>val</var> <emu-xref href="#sec-ecmascript-language-types-boolean-type" id="_ref_6552"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type">is a Boolean</a></emu-xref>, return <emu-val>"boolean"</emu-val>.</li><li>If <var>val</var> <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6553"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">is a Number</a></emu-xref>, return <emu-val>"number"</emu-val>.</li><li>If <var>val</var> <emu-xref href="#sec-ecmascript-language-types-bigint-type" id="_ref_6554"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type">is a BigInt</a></emu-xref>, return <emu-val>"bigint"</emu-val>.</li><li><emu-xref href="#assert" id="_ref_6555"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>val</var> <emu-xref href="#sec-object-type" id="_ref_6556"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li id="step-typeof-web-compat-insertion-point" normative-optional=""><div class="attributes-tag"><emu-xref href="#sec-conformance" id="_ref_6545"><a href="conformance.html#sec-conformance">Normative Optional</a></emu-xref></div>If the <emu-xref href="#host" id="_ref_6557"><a href="overview.html#host">host</a></emu-xref> is a web browser or otherwise supports <emu-xref href="#sec-IsHTMLDDA-internal-slot" title="" id="_ref_424"><a href="additional-ecmascript-features-for-web-browsers.html#sec-IsHTMLDDA-internal-slot">The <var class="field">[[IsHTMLDDA]]</var> Internal Slot</a></emu-xref>, then<ol><li>If <var>val</var> has an <var class="field">[[IsHTMLDDA]]</var> internal slot, return <emu-val>"undefined"</emu-val>.</li></ol></li><li>If <var>val</var> has a <var class="field">[[Call]]</var> internal method, return <emu-val>"function"</emu-val>.</li><li>Return <emu-val>"object"</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-unary-plus-operator">
<h1><span class="secnum">13.5.4</span> Unary <code>+</code> Operator</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The unary + operator converts its operand to <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6558"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">Number type</a></emu-xref>.</p>
</div></emu-note>
<emu-clause id="sec-unary-plus-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.5.4.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UnaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="o0kdmush" id="prod-2HNipbZz">
<emu-t>+</emu-t>
<emu-nt id="_ref_20976"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6559"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20977"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="ToNumber" id="_ref_6560"><a href="abstract-operations.html#sec-tonumber" class="e-user-code">ToNumber</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6561"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>expr</var>)).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-unary-minus-operator">
<h1><span class="secnum">13.5.5</span> Unary <code>-</code> Operator</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The unary <code>-</code> operator converts its operand to a numeric value and then negates it. Negating <emu-val>+0</emu-val><sub>𝔽</sub> produces <emu-val>-0</emu-val><sub>𝔽</sub>, and negating <emu-val>-0</emu-val><sub>𝔽</sub> produces <emu-val>+0</emu-val><sub>𝔽</sub>.</p>
</div></emu-note>
<emu-clause id="sec-unary-minus-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.5.5.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UnaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="odzkxnu5" id="prod-pAGhFy1g">
<emu-t>-</emu-t>
<emu-nt id="_ref_20978"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6562"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20979"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>Let <var>oldValue</var> be ?&nbsp;<emu-xref aoid="ToNumeric" id="_ref_6563"><a href="abstract-operations.html#sec-tonumeric" class="e-user-code">ToNumeric</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6564"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>expr</var>)).</li><li>If <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6565"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">is a Number</a></emu-xref>, return <emu-xref aoid="Number::unaryMinus" id="_ref_6566"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-unaryMinus">Number::unaryMinus</a></emu-xref>(<var>oldValue</var>).</li><li><emu-xref href="#assert" id="_ref_6567"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-bigint-type" id="_ref_6568"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type">is a BigInt</a></emu-xref>.</li><li>Return <emu-xref aoid="BigInt::unaryMinus" id="_ref_6569"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-unaryMinus">BigInt::unaryMinus</a></emu-xref>(<var>oldValue</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-bitwise-not-operator">
<h1><span class="secnum">13.5.6</span> Bitwise NOT Operator ( <code>~</code> )</h1>
<emu-clause id="sec-bitwise-not-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.5.6.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UnaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="b9nqec7b" id="prod-JRszWout">
<emu-t>~</emu-t>
<emu-nt id="_ref_20980"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6570"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20981"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>Let <var>oldValue</var> be ?&nbsp;<emu-xref aoid="ToNumeric" id="_ref_6571"><a href="abstract-operations.html#sec-tonumeric" class="e-user-code">ToNumeric</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6572"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>expr</var>)).</li><li>If <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6573"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">is a Number</a></emu-xref>, return <emu-xref aoid="Number::bitwiseNOT" id="_ref_6574"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseNOT">Number::bitwiseNOT</a></emu-xref>(<var>oldValue</var>).</li><li><emu-xref href="#assert" id="_ref_6575"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>oldValue</var> <emu-xref href="#sec-ecmascript-language-types-bigint-type" id="_ref_6576"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type">is a BigInt</a></emu-xref>.</li><li>Return <emu-xref aoid="BigInt::bitwiseNOT" id="_ref_6577"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseNOT">BigInt::bitwiseNOT</a></emu-xref>(<var>oldValue</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-logical-not-operator">
<h1><span class="secnum">13.5.7</span> Logical NOT Operator ( <code>!</code> )</h1>
<emu-clause id="sec-logical-not-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.5.7.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="UnaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ulcvcjyx" id="prod-bMAu-F7p">
<emu-t>!</emu-t>
<emu-nt id="_ref_20982"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6578"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_20983"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>Let <var>oldValue</var> be <emu-xref aoid="ToBoolean" id="_ref_6579"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6580"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>expr</var>)).</li><li>If <var>oldValue</var> is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-exp-operator">
<h1><span class="secnum">13.6</span> Exponentiation Operator</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="ExponentiationExpression" params="Yield, Await" id="prod-ExponentiationExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8ws4fpw1">
<emu-nt params="?Yield, ?Await" id="_ref_20984"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="sofstrau" id="prod-EEr7dA-y">
<emu-nt params="?Yield, ?Await" id="_ref_20985"><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>**</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_20986"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-exp-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.6.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ExponentiationExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0zbfzgb0" id="prod-Ig4oSMA1">
<emu-nt id="_ref_20987"><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt>
<emu-t>**</emu-t>
<emu-nt id="_ref_20988"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6581"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_20989"><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt>, <code>**</code>, <emu-nt id="_ref_20990"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-multiplicative-operators">
<h1><span class="secnum">13.7</span> Multiplicative Operators</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="MultiplicativeExpression" params="Yield, Await" id="prod-MultiplicativeExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="z3kjsjvx">
<emu-nt params="?Yield, ?Await" id="_ref_20991"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="wkojp9vf" id="prod-D9vYTSYe">
<emu-nt params="?Yield, ?Await" id="_ref_20992"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt id="_ref_20993"><a href="ecmascript-language-expressions.html#prod-MultiplicativeOperator">MultiplicativeOperator</a></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_20994"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="MultiplicativeOperator" oneof="" id="prod-MultiplicativeOperator">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MultiplicativeOperator">MultiplicativeOperator</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-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note</span><div class="note-contents">
<ul>
<li>The <code>*</code> operator performs multiplication, producing the product of its operands.</li>
<li>The <code>/</code> operator performs division, producing the quotient of its operands.</li>
<li>The <code>%</code> operator yields the remainder of its operands from an implied division.</li>
</ul>
</div></emu-note>
<emu-clause id="sec-multiplicative-operators-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.7.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="MultiplicativeExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-5_iophl" id="prod-k6IpXNbV">
<emu-nt id="_ref_20995"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>
<emu-nt id="_ref_20996"><a href="ecmascript-language-expressions.html#prod-MultiplicativeOperator">MultiplicativeOperator</a></emu-nt>
<emu-nt id="_ref_20997"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>opText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6582"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_20998"><a href="ecmascript-language-expressions.html#prod-MultiplicativeOperator">MultiplicativeOperator</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6583"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_20999"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>, <var>opText</var>, <emu-nt id="_ref_21000"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-additive-operators">
<h1><span class="secnum">13.8</span> Additive Operators</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="AdditiveExpression" params="Yield, Await" id="prod-AdditiveExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="9q89e3qa">
<emu-nt params="?Yield, ?Await" id="_ref_21001"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="efn1nbbh" id="prod--RZPkEex">
<emu-nt params="?Yield, ?Await" id="_ref_21002"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>+</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21003"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="4wmnuxdc" id="prod-XorHFOnH">
<emu-nt params="?Yield, ?Await" id="_ref_21004"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>-</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21005"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-addition-operator-plus">
<h1><span class="secnum">13.8.1</span> The Addition Operator ( <code>+</code> )</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The addition operator either performs string concatenation or numeric addition.</p>
</div></emu-note>
<emu-clause id="sec-addition-operator-plus-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.8.1.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="AdditiveExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dkl7f70y" id="prod-QDoARwWX">
<emu-nt id="_ref_21006"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
<emu-t>+</emu-t>
<emu-nt id="_ref_21007"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6584"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_21008"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>, <code>+</code>, <emu-nt id="_ref_21009"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-subtraction-operator-minus">
<h1><span class="secnum">13.8.2</span> The Subtraction Operator ( <code>-</code> )</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The <code>-</code> operator performs subtraction, producing the difference of its operands.</p>
</div></emu-note>
<emu-clause id="sec-subtraction-operator-minus-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.8.2.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="AdditiveExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7gvefllu" id="prod-YHTEjt6S">
<emu-nt id="_ref_21010"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
<emu-t>-</emu-t>
<emu-nt id="_ref_21011"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6585"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_21012"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>, <code>-</code>, <emu-nt id="_ref_21013"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-bitwise-shift-operators">
<h1><span class="secnum">13.9</span> Bitwise Shift Operators</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="ShiftExpression" params="Yield, Await" id="prod-ShiftExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="5myeagmz">
<emu-nt params="?Yield, ?Await" id="_ref_21014"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="ir3jyndh" id="prod-fBlf7SId">
<emu-nt params="?Yield, ?Await" id="_ref_21015"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&lt;&lt;</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21016"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="dbgq-61d" id="prod--QVo0NY2">
<emu-nt params="?Yield, ?Await" id="_ref_21017"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&gt;&gt;</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21018"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="yxrnku6r" id="prod-VbX7s-GB">
<emu-nt params="?Yield, ?Await" id="_ref_21019"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&gt;&gt;&gt;</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21020"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-left-shift-operator">
<h1><span class="secnum">13.9.1</span> The Left Shift Operator ( <code>&lt;&lt;</code> )</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Performs a bitwise left shift operation on the left operand by the amount specified by the right operand.</p>
</div></emu-note>
<emu-clause id="sec-left-shift-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.9.1.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ShiftExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tg9tkm4d" id="prod-17NrpRTI">
<emu-nt id="_ref_21021"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
<emu-t>&lt;&lt;</emu-t>
<emu-nt id="_ref_21022"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6586"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_21023"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>, <code>&lt;&lt;</code>, <emu-nt id="_ref_21024"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-signed-right-shift-operator">
<h1><span class="secnum">13.9.2</span> The Signed Right Shift Operator ( <code>&gt;&gt;</code> )</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Performs a sign-filling bitwise right shift operation on the left operand by the amount specified by the right operand.</p>
</div></emu-note>
<emu-clause id="sec-signed-right-shift-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.9.2.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ShiftExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vimn88nj" id="prod-wu5oH3lt">
<emu-nt id="_ref_21025"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
<emu-t>&gt;&gt;</emu-t>
<emu-nt id="_ref_21026"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6587"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_21027"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>, <code>&gt;&gt;</code>, <emu-nt id="_ref_21028"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-unsigned-right-shift-operator">
<h1><span class="secnum">13.9.3</span> The Unsigned Right Shift Operator ( <code>&gt;&gt;&gt;</code> )</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Performs a zero-filling bitwise right shift operation on the left operand by the amount specified by the right operand.</p>
</div></emu-note>
<emu-clause id="sec-unsigned-right-shift-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.9.3.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ShiftExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n_furjdr" id="prod-erFDFU2C">
<emu-nt id="_ref_21029"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
<emu-t>&gt;&gt;&gt;</emu-t>
<emu-nt id="_ref_21030"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6588"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_21031"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>, <code>&gt;&gt;&gt;</code>, <emu-nt id="_ref_21032"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-relational-operators">
<h1><span class="secnum">13.10</span> Relational Operators</h1>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>The result of evaluating a relational operator is always of type Boolean, reflecting whether the relationship named by the operator holds between its two operands.</p>
</div></emu-note>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="RelationalExpression" params="In, Yield, Await" id="prod-RelationalExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="evzvmihy">
<emu-nt params="?Yield, ?Await" id="_ref_21033"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="rpncjsrj" id="prod-KibMHocH">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21034"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&lt;</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21035"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="4ijt0lxw" id="prod-W1sKvRa9">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21036"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&gt;</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21037"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="raidxcln" id="prod-H5jP53q2">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21038"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&lt;=</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21039"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="unuuwbsz" id="prod-g28T6iwt">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21040"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&gt;=</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21041"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="imdygppt" id="prod-abEstsgg">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21042"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>instanceof</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21043"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="tinqflo_" constraints="+In" id="prod-8_yvvfCY"><emu-constraints>[+In]</emu-constraints>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_21044"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>in</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21045"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="pkiqafbw" constraints="+In" id="prod-3D8w-akN"><emu-constraints>[+In]</emu-constraints>
<emu-nt id="_ref_21046"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21047"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>The <sub>[In]</sub> grammar parameter is needed to avoid confusing the <code>in</code> operator in a relational expression with the <code>in</code> operator in a <code>for</code> statement.</p>
</div></emu-note>
<emu-clause id="sec-relational-operators-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.10.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="RelationalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0hbjkrqw" id="prod-3gCYoRfU">
<emu-nt id="_ref_21048"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>&lt;</emu-t>
<emu-nt id="_ref_21049"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6589"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21050"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6590"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6591"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21051"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6592"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Let <var>r</var> be ?&nbsp;<emu-xref aoid="IsLessThan" id="_ref_6593"><a href="abstract-operations.html#sec-islessthan" class="e-user-code">IsLessThan</a></emu-xref>(<var>lVal</var>, <var>rVal</var>, <emu-val>true</emu-val>).</li><li>If <var>r</var> is <emu-val>undefined</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <var>r</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="RelationalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gziyg7ut" id="prod-4iUOHdEx">
<emu-nt id="_ref_21052"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>&gt;</emu-t>
<emu-nt id="_ref_21053"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6594"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21054"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6595"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6596"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21055"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6597"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Let <var>r</var> be ?&nbsp;<emu-xref aoid="IsLessThan" id="_ref_6598"><a href="abstract-operations.html#sec-islessthan" class="e-user-code">IsLessThan</a></emu-xref>(<var>rVal</var>, <var>lVal</var>, <emu-val>false</emu-val>).</li><li>If <var>r</var> is <emu-val>undefined</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <var>r</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="RelationalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kcktdtrm" id="prod-jZs1rFWK">
<emu-nt id="_ref_21056"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>&lt;=</emu-t>
<emu-nt id="_ref_21057"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6599"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21058"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6600"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6601"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21059"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6602"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Let <var>r</var> be ?&nbsp;<emu-xref aoid="IsLessThan" id="_ref_6603"><a href="abstract-operations.html#sec-islessthan" class="e-user-code">IsLessThan</a></emu-xref>(<var>rVal</var>, <var>lVal</var>, <emu-val>false</emu-val>).</li><li>If <var>r</var> is either <emu-val>true</emu-val> or <emu-val>undefined</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="RelationalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3cupp_tq" id="prod-ZF2k2rEh">
<emu-nt id="_ref_21060"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>&gt;=</emu-t>
<emu-nt id="_ref_21061"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6604"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21062"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6605"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6606"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21063"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6607"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Let <var>r</var> be ?&nbsp;<emu-xref aoid="IsLessThan" id="_ref_6608"><a href="abstract-operations.html#sec-islessthan" class="e-user-code">IsLessThan</a></emu-xref>(<var>lVal</var>, <var>rVal</var>, <emu-val>true</emu-val>).</li><li>If <var>r</var> is either <emu-val>true</emu-val> or <emu-val>undefined</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="RelationalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1ec9rmdp" id="prod-X4T8u1As">
<emu-nt id="_ref_21064"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>instanceof</emu-t>
<emu-nt id="_ref_21065"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6609"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21066"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6610"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6611"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21067"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6612"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Return ?&nbsp;<emu-xref aoid="InstanceofOperator" id="_ref_6613"><a href="ecmascript-language-expressions.html#sec-instanceofoperator" class="e-user-code">InstanceofOperator</a></emu-xref>(<var>lVal</var>, <var>rVal</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="RelationalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="9mtjpkmx" id="prod-Xv5acyHs">
<emu-nt id="_ref_21068"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt id="_ref_21069"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6614"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21070"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6615"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6616"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21071"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6617"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>If <var>rVal</var> <emu-xref href="#sec-object-type" id="_ref_6618"><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>Return ?&nbsp;<emu-xref aoid="HasProperty" id="_ref_6619"><a href="abstract-operations.html#sec-hasproperty" class="e-user-code">HasProperty</a></emu-xref>(<var>rVal</var>, ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_6620"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>lVal</var>)).</li></ol></emu-alg>
<emu-grammar><emu-production name="RelationalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bfkxjj0f" id="prod-00OK517S">
<emu-nt id="_ref_21072"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt id="_ref_21073"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>privateIdentifier</var> be the <emu-xref aoid="StringValue" id="_ref_6621"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_21074"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>.</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6622"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21075"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6623"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>If <var>rVal</var> <emu-xref href="#sec-object-type" id="_ref_6624"><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>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_6625"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li><emu-xref href="#assert" id="_ref_6626"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>privateEnv</var> is not <emu-val>null</emu-val>.</li><li>Let <var>privateName</var> be <emu-xref aoid="ResolvePrivateIdentifier" id="_ref_6627"><a href="executable-code-and-execution-contexts.html#sec-resolve-private-identifier">ResolvePrivateIdentifier</a></emu-xref>(<var>privateEnv</var>, <var>privateIdentifier</var>).</li><li>If <emu-xref aoid="PrivateElementFind" id="_ref_6628"><a href="abstract-operations.html#sec-privateelementfind">PrivateElementFind</a></emu-xref>(<var>rVal</var>, <var>privateName</var>) is <emu-const>empty</emu-const>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-instanceofoperator" type="abstract operation" aoid="InstanceofOperator">
<h1><span class="secnum">13.10.2</span> InstanceofOperator ( <var>V</var>, <var>target</var> )</h1>
<p>The abstract operation InstanceofOperator takes arguments <var>V</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6629"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>target</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6630"><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_6631"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6632"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It implements the generic algorithm for determining if <var>V</var> is an instance of <var>target</var> either by consulting <var>target</var>'s <emu-xref href="#sec-well-known-symbols" id="_ref_6633"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.hasInstance%</a></emu-xref> method or, if absent, determining whether the value of <var>target</var>'s <emu-val>"prototype"</emu-val> property is present in <var>V</var>'s prototype chain. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_6634"><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>instOfHandler</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_6635"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>target</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_6636"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.hasInstance%</a></emu-xref>).</li><li>If <var>instOfHandler</var> is not <emu-val>undefined</emu-val>, then<ol><li>Return <emu-xref aoid="ToBoolean" id="_ref_6637"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_6638"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>instOfHandler</var>, <var>target</var>, « <var>V</var>&nbsp;»)).</li></ol></li><li id="step-instanceof-check-function">If <emu-xref aoid="IsCallable" id="_ref_6639"><a href="abstract-operations.html#sec-iscallable">IsCallable</a></emu-xref>(<var>target</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li id="step-instanceof-fallback">Return ?&nbsp;<emu-xref aoid="OrdinaryHasInstance" id="_ref_6640"><a href="abstract-operations.html#sec-ordinaryhasinstance" class="e-user-code">OrdinaryHasInstance</a></emu-xref>(<var>target</var>, <var>V</var>).</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Steps <emu-xref href="#step-instanceof-check-function" id="_ref_425"><a href="ecmascript-language-expressions.html#step-instanceof-check-function">4</a></emu-xref> and <emu-xref href="#step-instanceof-fallback" id="_ref_426"><a href="ecmascript-language-expressions.html#step-instanceof-fallback">5</a></emu-xref> provide compatibility with previous editions of ECMAScript that did not use a <emu-xref href="#sec-well-known-symbols" id="_ref_6641"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.hasInstance%</a></emu-xref> method to define the <code>instanceof</code> operator semantics. If an object does not define or inherit <emu-xref href="#sec-well-known-symbols" id="_ref_6642"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.hasInstance%</a></emu-xref> it uses the default <code>instanceof</code> semantics.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
<emu-clause id="sec-equality-operators">
<h1><span class="secnum">13.11</span> Equality Operators</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The result of evaluating an equality operator is always of type Boolean, reflecting whether the relationship named by the operator holds between its two operands.</p>
</div></emu-note>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="EqualityExpression" params="In, Yield, Await" id="prod-EqualityExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kobejffm">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21076"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="jxpsr3d-" id="prod-UHCaQLr6">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21077"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>==</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21078"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="ipid5oaz" id="prod-J7HEcFq2">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21079"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>!=</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21080"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="f7clru0r" id="prod-ugTHi1aM">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21081"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>===</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21082"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="n5bw_4at" id="prod-6Ta8WxmN">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21083"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>!==</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21084"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-equality-operators-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.11.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="EqualityExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dxo0lfgu" id="prod-EO4eBsqd">
<emu-nt id="_ref_21085"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
<emu-t>==</emu-t>
<emu-nt id="_ref_21086"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6643"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21087"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6644"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6645"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21088"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6646"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Return ?&nbsp;<emu-xref aoid="IsLooselyEqual" id="_ref_6647"><a href="abstract-operations.html#sec-islooselyequal" class="e-user-code">IsLooselyEqual</a></emu-xref>(<var>rVal</var>, <var>lVal</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="EqualityExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cn2twrby" id="prod-zS10Lrlo">
<emu-nt id="_ref_21089"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
<emu-t>!=</emu-t>
<emu-nt id="_ref_21090"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6648"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21091"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6649"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6650"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21092"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6651"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Let <var>r</var> be ?&nbsp;<emu-xref aoid="IsLooselyEqual" id="_ref_6652"><a href="abstract-operations.html#sec-islooselyequal" class="e-user-code">IsLooselyEqual</a></emu-xref>(<var>rVal</var>, <var>lVal</var>).</li><li>If <var>r</var> is <emu-val>true</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="EqualityExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4hu79ipe" id="prod-gVfoAVuz">
<emu-nt id="_ref_21093"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
<emu-t>===</emu-t>
<emu-nt id="_ref_21094"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6653"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21095"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6654"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6655"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21096"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6656"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Return <emu-xref aoid="IsStrictlyEqual" id="_ref_6657"><a href="abstract-operations.html#sec-isstrictlyequal">IsStrictlyEqual</a></emu-xref>(<var>rVal</var>, <var>lVal</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="EqualityExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="irptryux" id="prod-q4vp8E6E">
<emu-nt id="_ref_21097"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
<emu-t>!==</emu-t>
<emu-nt id="_ref_21098"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6658"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21099"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6659"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6660"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21100"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6661"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Let <var>r</var> be <emu-xref aoid="IsStrictlyEqual" id="_ref_6662"><a href="abstract-operations.html#sec-isstrictlyequal">IsStrictlyEqual</a></emu-xref>(<var>rVal</var>, <var>lVal</var>).</li><li>If <var>r</var> is <emu-val>true</emu-val>, 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>The equality operators maintain the following invariants:</p>
<ul>
<li>
<code>A != B</code> is equivalent to <code>!(A == B)</code>.
</li>
<li>
<code>A == B</code> is equivalent to <code>B == A</code>, except in the order of evaluation of <code>A</code> and <code>B</code>.
</li>
</ul>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>The equality operator is not always transitive. For example, there might be two distinct String objects, each representing the same String value; each String object would be considered equal to the String value by the <code>==</code> operator, but the two String objects would not be equal to each other. For example:</p>
<ul>
<li>
<code>new String("a") == "a"</code> and <code>"a" == new String("a")</code> are both <emu-val>true</emu-val>.
</li>
<li>
<code>new String("a") == new String("a")</code> is <emu-val>false</emu-val>.
</li>
</ul>
</div></emu-note>
<emu-note><span class="note">Note 3</span><div class="note-contents">
<p>Comparison of Strings uses a simple equality test on sequences of code unit values. There is no attempt to use the more complex, semantically oriented definitions of character or string equality and collating order defined in the Unicode specification. Therefore Strings values that are canonically equal according to the Unicode Standard could test as unequal. In effect this algorithm assumes that both Strings are already in normalized form.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
<emu-clause id="sec-binary-bitwise-operators">
<h1><span class="secnum">13.12</span> Binary Bitwise Operators</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="BitwiseANDExpression" params="In, Yield, Await" id="prod-BitwiseANDExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xfq7h3dt">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21101"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="lp9tp43u" id="prod-wrUN23HO">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21102"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&amp;</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21103"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="BitwiseXORExpression" params="In, Yield, Await" id="prod-BitwiseXORExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qmrxjqqk">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21104"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="1xjkk1wc" id="prod-9YKtCpIQ">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21105"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>^</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21106"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="BitwiseORExpression" params="In, Yield, Await" id="prod-BitwiseORExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="joxsfj33">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21107"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="rqrhqzr9" id="prod-AgJdAkQg">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21108"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>|</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21109"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-binary-bitwise-operators-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.12.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="BitwiseANDExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qq3twiws" id="prod-_rEQOot5">
<emu-nt id="_ref_21110"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a></emu-nt>
<emu-t>&amp;</emu-t>
<emu-nt id="_ref_21111"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6663"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_21112"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a></emu-nt>, <code>&amp;</code>, <emu-nt id="_ref_21113"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>).</li></ol></emu-alg>
<emu-grammar><emu-production name="BitwiseXORExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tgmxlg5x" id="prod-Q4tADXpb">
<emu-nt id="_ref_21114"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a></emu-nt>
<emu-t>^</emu-t>
<emu-nt id="_ref_21115"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6664"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_21116"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a></emu-nt>, <code>^</code>, <emu-nt id="_ref_21117"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a></emu-nt>).</li></ol></emu-alg>
<emu-grammar><emu-production name="BitwiseORExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="aw36khwc" id="prod-KiqD724B">
<emu-nt id="_ref_21118"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>
<emu-t>|</emu-t>
<emu-nt id="_ref_21119"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateStringOrNumericBinaryExpression" id="_ref_6665"><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" class="e-user-code">EvaluateStringOrNumericBinaryExpression</a></emu-xref>(<emu-nt id="_ref_21120"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>, <code>|</code>, <emu-nt id="_ref_21121"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a></emu-nt>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-binary-logical-operators">
<h1><span class="secnum">13.13</span> Binary Logical Operators</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="LogicalANDExpression" params="In, Yield, Await" id="prod-LogicalANDExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="c_3moriv">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21122"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="goip25p_" id="prod-vZbQbZtn">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21123"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&amp;&amp;</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21124"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="LogicalORExpression" params="In, Yield, Await" id="prod-LogicalORExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-LogicalORExpression">LogicalORExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uibyaiez">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21125"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="j2ugmrmi" id="prod-ACEMYh2d">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21126"><a href="ecmascript-language-expressions.html#prod-LogicalORExpression">LogicalORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>||</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21127"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="CoalesceExpression" params="In, Yield, Await" id="prod-CoalesceExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-CoalesceExpression">CoalesceExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0m-knz7v" id="prod-au86anjM">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21128"><a href="ecmascript-language-expressions.html#prod-CoalesceExpressionHead">CoalesceExpressionHead</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>??</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21129"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="CoalesceExpressionHead" params="In, Yield, Await" id="prod-CoalesceExpressionHead">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-CoalesceExpressionHead">CoalesceExpressionHead</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrl3tdye">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21130"><a href="ecmascript-language-expressions.html#prod-CoalesceExpression">CoalesceExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="c_3moriv">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21131"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ShortCircuitExpression" params="In, Yield, Await" id="prod-ShortCircuitExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-ShortCircuitExpression">ShortCircuitExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cubbqwpr">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21132"><a href="ecmascript-language-expressions.html#prod-LogicalORExpression">LogicalORExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="yrl3tdye">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21133"><a href="ecmascript-language-expressions.html#prod-CoalesceExpression">CoalesceExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The value produced by a <code>&amp;&amp;</code> or <code>||</code> operator is not necessarily of type Boolean. The value produced will always be the value of one of the two operand expressions.</p>
</div></emu-note>
<emu-clause id="sec-binary-logical-operators-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.13.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="LogicalANDExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iybiqszh" id="prod-7s2sQWPJ">
<emu-nt id="_ref_21134"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt>
<emu-t>&amp;&amp;</emu-t>
<emu-nt id="_ref_21135"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6666"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21136"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6667"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>If <emu-xref aoid="ToBoolean" id="_ref_6668"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(<var>lVal</var>) is <emu-val>false</emu-val>, return <var>lVal</var>.</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6669"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21137"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6670"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="LogicalORExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LogicalORExpression">LogicalORExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tku92t5q" id="prod-3FN9c95J">
<emu-nt id="_ref_21138"><a href="ecmascript-language-expressions.html#prod-LogicalORExpression">LogicalORExpression</a></emu-nt>
<emu-t>||</emu-t>
<emu-nt id="_ref_21139"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6671"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21140"><a href="ecmascript-language-expressions.html#prod-LogicalORExpression">LogicalORExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6672"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>If <emu-xref aoid="ToBoolean" id="_ref_6673"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(<var>lVal</var>) is <emu-val>true</emu-val>, return <var>lVal</var>.</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6674"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21141"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6675"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="CoalesceExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CoalesceExpression">CoalesceExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3eoigfmu" id="prod-VuyYXoKA">
<emu-nt id="_ref_21142"><a href="ecmascript-language-expressions.html#prod-CoalesceExpressionHead">CoalesceExpressionHead</a></emu-nt>
<emu-t>??</emu-t>
<emu-nt id="_ref_21143"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6676"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21144"><a href="ecmascript-language-expressions.html#prod-CoalesceExpressionHead">CoalesceExpressionHead</a></emu-nt>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6677"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>If <var>lVal</var> is neither <emu-val>undefined</emu-val> nor <emu-val>null</emu-val>, return <var>lVal</var>.</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6678"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21145"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6679"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-conditional-operator">
<h1><span class="secnum">13.14</span> Conditional Operator ( <code>? :</code> )</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="ConditionalExpression" params="In, Yield, Await" id="prod-ConditionalExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-ConditionalExpression">ConditionalExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hb3dzpk6">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21146"><a href="ecmascript-language-expressions.html#prod-ShortCircuitExpression">ShortCircuitExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="hgxirk7b" id="prod-mR1mZxSc">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21147"><a href="ecmascript-language-expressions.html#prod-ShortCircuitExpression">ShortCircuitExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>?</emu-t>
<emu-nt params="+In, ?Yield, ?Await" id="_ref_21148"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>:</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21149"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The grammar for a <emu-nt id="_ref_21150"><a href="ecmascript-language-expressions.html#prod-ConditionalExpression">ConditionalExpression</a></emu-nt> in ECMAScript is slightly different from that in C and Java, which each allow the second subexpression to be an <emu-nt id="_ref_21151"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> but restrict the third expression to be a <emu-nt id="_ref_21152"><a href="ecmascript-language-expressions.html#prod-ConditionalExpression">ConditionalExpression</a></emu-nt>. The motivation for this difference in ECMAScript is to allow an assignment expression to be governed by either arm of a conditional and to eliminate the confusing and fairly useless case of a comma expression as the centre expression.</p>
</div></emu-note>
<emu-clause id="sec-conditional-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.14.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ConditionalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ConditionalExpression">ConditionalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="d4vlxget" id="prod-yhd-4Qj-">
<emu-nt id="_ref_21153"><a href="ecmascript-language-expressions.html#prod-ShortCircuitExpression">ShortCircuitExpression</a></emu-nt>
<emu-t>?</emu-t>
<emu-nt id="_ref_21154"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t>:</emu-t>
<emu-nt id="_ref_21155"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6680"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21156"><a href="ecmascript-language-expressions.html#prod-ShortCircuitExpression">ShortCircuitExpression</a></emu-nt>.</li><li>Let <var>lVal</var> be <emu-xref aoid="ToBoolean" id="_ref_6681"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="GetValue" id="_ref_6682"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>)).</li><li>If <var>lVal</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>trueRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6683"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of the first <emu-nt id="_ref_21157"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6684"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>trueRef</var>).</li></ol></li><li>Let <var>falseRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6685"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of the second <emu-nt id="_ref_21158"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6686"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>falseRef</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-assignment-operators">
<h1><span class="secnum">13.15</span> Assignment Operators</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="AssignmentExpression" params="In, Yield, Await" id="prod-AssignmentExpression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gqos3l-s">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21159"><a href="ecmascript-language-expressions.html#prod-ConditionalExpression">ConditionalExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="xu2tbseh" constraints="+Yield" id="prod-wU5Xsk6s"><emu-constraints>[+Yield]</emu-constraints>
<emu-nt params="?In, ?Await" id="_ref_21160"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a><emu-mods><emu-params>[?In, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="m23qgn_1" id="prod-nUwhqikN">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21161"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="3h9r6dls" id="prod-iYk5nCgu">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21162"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="assignment" id="prod-eXKFjh2J">
<emu-nt params="?Yield, ?Await" id="_ref_21163"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>=</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21164"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="3cvjfmjy" id="prod-shfKC2mw">
<emu-nt params="?Yield, ?Await" id="_ref_21165"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt id="_ref_21166"><a href="ecmascript-language-expressions.html#prod-AssignmentOperator">AssignmentOperator</a></emu-nt>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21167"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="3bbinvbh" id="prod-hQLdzapj">
<emu-nt params="?Yield, ?Await" id="_ref_21168"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>&amp;&amp;=</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21169"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="kvjhbccb" id="prod-w-48XpMo">
<emu-nt params="?Yield, ?Await" id="_ref_21170"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>||=</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21171"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="cwe0lpyb" id="prod-7NM9KEaO">
<emu-nt params="?Yield, ?Await" id="_ref_21172"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>??=</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21173"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AssignmentOperator" oneof="" id="prod-AssignmentOperator">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentOperator">AssignmentOperator</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>&lt;&lt;=</emu-t> <emu-t>&gt;&gt;=</emu-t> <emu-t>&gt;&gt;&gt;=</emu-t> <emu-t>&amp;=</emu-t> <emu-t>^=</emu-t> <emu-t>|=</emu-t> <emu-t>**=</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-assignment-operators-static-semantics-early-errors">
<h1><span class="secnum">13.15.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="AssignmentExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ijpo4eaq">
<emu-nt id="_ref_21174"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>=</emu-t>
<emu-nt id="_ref_21175"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
If <emu-nt id="_ref_21176"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is either an <emu-nt id="_ref_21177"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> or an <emu-nt id="_ref_21178"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, <emu-nt id="_ref_21179"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> <emu-xref href="#must-cover" id="_ref_6687"><a href="notational-conventions.html#must-cover">must cover</a></emu-xref> an <emu-nt id="_ref_21180"><a href="ecmascript-language-expressions.html#prod-AssignmentPattern">AssignmentPattern</a></emu-nt>.
</li>
<li>
If <emu-nt id="_ref_21181"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is neither an <emu-nt id="_ref_21182"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> nor an <emu-nt id="_ref_21183"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, it is a Syntax Error if the <emu-xref aoid="AssignmentTargetType" id="_ref_6688"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_21184"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-const>invalid</emu-const>.
</li>
</ul>
<emu-grammar><emu-production name="AssignmentExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xzqhr---">
<emu-nt id="_ref_21185"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-nt id="_ref_21186"><a href="ecmascript-language-expressions.html#prod-AssignmentOperator">AssignmentOperator</a></emu-nt>
<emu-nt id="_ref_21187"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="AssignmentTargetType" id="_ref_6689"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_21188"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-const>invalid</emu-const>.
</li>
</ul>
<emu-grammar><emu-production name="AssignmentExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="devkzibl">
<emu-nt id="_ref_21189"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>&amp;&amp;=</emu-t>
<emu-nt id="_ref_21190"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="dt1frwiy">
<emu-nt id="_ref_21191"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>||=</emu-t>
<emu-nt id="_ref_21192"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="dbifpqxa">
<emu-nt id="_ref_21193"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>??=</emu-t>
<emu-nt id="_ref_21194"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="AssignmentTargetType" id="_ref_6690"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_21195"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is not <emu-const>simple</emu-const>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-assignment-operators-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.15.2</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="AssignmentExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ijpo4eaq" id="prod-dpJd5ekV">
<emu-nt id="_ref_21196"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>=</emu-t>
<emu-nt id="_ref_21197"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_21198"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is neither an <emu-nt id="_ref_21199"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> nor an <emu-nt id="_ref_21200"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, then<ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6691"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21201"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>If the <emu-xref aoid="AssignmentTargetType" id="_ref_6692"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_21202"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-const>web-compat</emu-const>, throw a <emu-val>ReferenceError</emu-val> exception.</li><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_6693"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_21203"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>) is <emu-val>true</emu-val> and <emu-xref aoid="IsIdentifierRef" id="_ref_6694"><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref">IsIdentifierRef</a></emu-xref> of <emu-nt id="_ref_21204"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-val>true</emu-val>, then<ol><li>Let <var>lhs</var> be the <emu-xref aoid="StringValue" id="_ref_6695"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_21205"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_6696"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_21206"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <var>lhs</var>.</li></ol></li><li>Else,<ol><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6697"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21207"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6698"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li></ol></li><li id="step-assignmentexpression-evaluation-simple-putvalue">Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6699"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>rVal</var>).</li><li>Return <var>rVal</var>.</li></ol></li><li>Let <var>assignmentPattern</var> be the <emu-nt id="_ref_21208"><a href="ecmascript-language-expressions.html#prod-AssignmentPattern">AssignmentPattern</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_6700"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_21209"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6701"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21210"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6702"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Perform ?&nbsp;<emu-xref aoid="DestructuringAssignmentEvaluation" id="_ref_6703"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-destructuringassignmentevaluation" class="e-user-code">DestructuringAssignmentEvaluation</a></emu-xref> of <var>assignmentPattern</var> with argument <var>rVal</var>.</li><li>Return <var>rVal</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xzqhr---" id="prod-d86UjzUy">
<emu-nt id="_ref_21211"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-nt id="_ref_21212"><a href="ecmascript-language-expressions.html#prod-AssignmentOperator">AssignmentOperator</a></emu-nt>
<emu-nt id="_ref_21213"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6704"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21214"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>If the <emu-xref aoid="AssignmentTargetType" id="_ref_6705"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_21215"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-const>web-compat</emu-const>, throw a <emu-val>ReferenceError</emu-val> exception.</li><li id="step-assignmentexpression-evaluation-compound-getvalue">Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6706"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6707"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21216"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6708"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Let <var>assignmentOpText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6709"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_21217"><a href="ecmascript-language-expressions.html#prod-AssignmentOperator">AssignmentOperator</a></emu-nt>.</li><li>Let <var>opText</var> be the sequence of Unicode code points associated with <var>assignmentOpText</var> in the following table:
<figure>
<!-- emu-format ignore -->
<table class="lightweight-table">
<thead>
<tr><th> <var>assignmentOpText</var> </th><th> <var>opText</var> </th></tr>
</thead>
<tbody><tr><td> <code>**=</code> </td><td> <code>**</code> </td></tr>
<tr><td> <code>*=</code> </td><td> <code>*</code> </td></tr>
<tr><td> <code>/=</code> </td><td> <code>/</code> </td></tr>
<tr><td> <code>%=</code> </td><td> <code>%</code> </td></tr>
<tr><td> <code>+=</code> </td><td> <code>+</code> </td></tr>
<tr><td> <code>-=</code> </td><td> <code>-</code> </td></tr>
<tr><td> <code>&lt;&lt;=</code> </td><td> <code>&lt;&lt;</code> </td></tr>
<tr><td> <code>&gt;&gt;=</code> </td><td> <code>&gt;&gt;</code> </td></tr>
<tr><td> <code>&gt;&gt;&gt;=</code> </td><td> <code>&gt;&gt;&gt;</code> </td></tr>
<tr><td> <code>&amp;=</code> </td><td> <code>&amp;</code> </td></tr>
<tr><td> <code>^=</code> </td><td> <code>^</code> </td></tr>
<tr><td> <code>|=</code> </td><td> <code>|</code> </td></tr>
</tbody></table>
</figure></li><li>Let <var>r</var> be ?&nbsp;<emu-xref aoid="ApplyStringOrNumericBinaryOperator" id="_ref_6710"><a href="ecmascript-language-expressions.html#sec-applystringornumericbinaryoperator" class="e-user-code">ApplyStringOrNumericBinaryOperator</a></emu-xref>(<var>lVal</var>, <var>opText</var>, <var>rVal</var>).</li><li id="step-assignmentexpression-evaluation-compound-putvalue">Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6711"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>r</var>).</li><li>Return <var>r</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="devkzibl" id="prod-tjCiSw-h">
<emu-nt id="_ref_21218"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>&amp;&amp;=</emu-t>
<emu-nt id="_ref_21219"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6712"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21220"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li id="step-assignmentexpression-evaluation-lgcl-and-getvalue">Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6713"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>If <emu-xref aoid="ToBoolean" id="_ref_6714"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(<var>lVal</var>) is <emu-val>false</emu-val>, return <var>lVal</var>.</li><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_6715"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_21221"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>) is <emu-val>true</emu-val> and <emu-xref aoid="IsIdentifierRef" id="_ref_6716"><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref">IsIdentifierRef</a></emu-xref> of <emu-nt id="_ref_21222"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-val>true</emu-val>, then<ol><li>Let <var>lhs</var> be the <emu-xref aoid="StringValue" id="_ref_6717"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_21223"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_6718"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_21224"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <var>lhs</var>.</li></ol></li><li>Else,<ol><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6719"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21225"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6720"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li></ol></li><li id="step-assignmentexpression-evaluation-lgcl-and-putvalue">Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6721"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>rVal</var>).</li><li>Return <var>rVal</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dt1frwiy" id="prod-H705EMCV">
<emu-nt id="_ref_21226"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>||=</emu-t>
<emu-nt id="_ref_21227"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6722"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21228"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li id="step-assignmentexpression-evaluation-lgcl-or-getvalue">Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6723"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>If <emu-xref aoid="ToBoolean" id="_ref_6724"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(<var>lVal</var>) is <emu-val>true</emu-val>, return <var>lVal</var>.</li><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_6725"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_21229"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>) is <emu-val>true</emu-val> and <emu-xref aoid="IsIdentifierRef" id="_ref_6726"><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref">IsIdentifierRef</a></emu-xref> of <emu-nt id="_ref_21230"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-val>true</emu-val>, then<ol><li>Let <var>lhs</var> be the <emu-xref aoid="StringValue" id="_ref_6727"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_21231"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_6728"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_21232"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <var>lhs</var>.</li></ol></li><li>Else,<ol><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6729"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21233"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6730"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li></ol></li><li id="step-assignmentexpression-evaluation-lgcl-or-putvalue">Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6731"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>rVal</var>).</li><li>Return <var>rVal</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dbifpqxa" id="prod-ity5YYTe">
<emu-nt id="_ref_21234"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>??=</emu-t>
<emu-nt id="_ref_21235"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6732"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21236"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li id="step-assignmentexpression-evaluation-lgcl-nullish-getvalue">Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6733"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>If <var>lVal</var> is neither <emu-val>undefined</emu-val> nor <emu-val>null</emu-val>, return <var>lVal</var>.</li><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_6734"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_21237"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>) is <emu-val>true</emu-val> and <emu-xref aoid="IsIdentifierRef" id="_ref_6735"><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref">IsIdentifierRef</a></emu-xref> of <emu-nt id="_ref_21238"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is <emu-val>true</emu-val>, then<ol><li>Let <var>lhs</var> be the <emu-xref aoid="StringValue" id="_ref_6736"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_21239"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_6737"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_21240"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <var>lhs</var>.</li></ol></li><li>Else,<ol><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6738"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21241"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6739"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li></ol></li><li id="step-assignmentexpression-evaluation-lgcl-nullish-putvalue">Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6740"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>rVal</var>).</li><li>Return <var>rVal</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>When this expression occurs within <emu-xref href="#sec-strict-mode-code" id="_ref_6741"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref>, it is a runtime error if <var>lRef</var> in step <emu-xref href="#step-assignmentexpression-evaluation-simple-putvalue" id="_ref_427"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-simple-putvalue">1.e</a></emu-xref>, <emu-xref href="#step-assignmentexpression-evaluation-compound-getvalue" id="_ref_428"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-compound-getvalue">3</a></emu-xref>, <emu-xref href="#step-assignmentexpression-evaluation-lgcl-and-getvalue" id="_ref_429"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-lgcl-and-getvalue">2</a></emu-xref>, <emu-xref href="#step-assignmentexpression-evaluation-lgcl-or-getvalue" id="_ref_430"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-lgcl-or-getvalue">2</a></emu-xref>, <emu-xref href="#step-assignmentexpression-evaluation-lgcl-nullish-getvalue" id="_ref_431"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-lgcl-nullish-getvalue">2</a></emu-xref> is an unresolvable reference. If it is, a <emu-val>ReferenceError</emu-val> exception is thrown. Additionally, it is a runtime error if the <var>lRef</var> in step <emu-xref href="#step-assignmentexpression-evaluation-compound-putvalue" id="_ref_432"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-compound-putvalue">9</a></emu-xref>, <emu-xref href="#step-assignmentexpression-evaluation-lgcl-and-putvalue" id="_ref_433"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-lgcl-and-putvalue">6</a></emu-xref>, <emu-xref href="#step-assignmentexpression-evaluation-lgcl-or-putvalue" id="_ref_434"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-lgcl-or-putvalue">6</a></emu-xref>, <emu-xref href="#step-assignmentexpression-evaluation-lgcl-nullish-putvalue" id="_ref_435"><a href="ecmascript-language-expressions.html#step-assignmentexpression-evaluation-lgcl-nullish-putvalue">6</a></emu-xref> is a reference to a <emu-xref href="#sec-object-type" id="_ref_6742"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref> with the attribute value { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val> }, to an <emu-xref href="#sec-object-type" id="_ref_6743"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> with the attribute value { <var class="field">[[Set]]</var>: <emu-val>undefined</emu-val> }, or to a non-existent property of an object for which the <emu-xref aoid="IsExtensible" id="_ref_6744"><a href="abstract-operations.html#sec-isextensible-o">IsExtensible</a></emu-xref> predicate returns the value <emu-val>false</emu-val>. In these cases a <emu-val>TypeError</emu-val> exception is thrown.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-applystringornumericbinaryoperator" type="abstract operation" aoid="ApplyStringOrNumericBinaryOperator">
<h1><span class="secnum">13.15.3</span> ApplyStringOrNumericBinaryOperator ( <var>lVal</var>, <var>opText</var>, <var>rVal</var> )</h1>
<p>The abstract operation ApplyStringOrNumericBinaryOperator takes arguments <var>lVal</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6745"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), <var>opText</var> (<code>**</code>, <code>*</code>, <code>/</code>, <code>%</code>, <code>+</code>, <code>-</code>, <code>&lt;&lt;</code>, <code>&gt;&gt;</code>, <code>&gt;&gt;&gt;</code>, <code>&amp;</code>, <code>^</code>, or <code>|</code>), and <var>rVal</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6746"><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_6747"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a String, a BigInt, or a Number, or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6748"><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>opText</var> is <code>+</code>, then<ol><li id="step-binary-op-toprimitive-lval">Let <var>lPrim</var> be ?&nbsp;<emu-xref aoid="ToPrimitive" id="_ref_6749"><a href="abstract-operations.html#sec-toprimitive" class="e-user-code">ToPrimitive</a></emu-xref>(<var>lVal</var>).</li><li id="step-binary-op-toprimitive-rval">Let <var>rPrim</var> be ?&nbsp;<emu-xref aoid="ToPrimitive" id="_ref_6750"><a href="abstract-operations.html#sec-toprimitive" class="e-user-code">ToPrimitive</a></emu-xref>(<var>rVal</var>).</li><li id="step-binary-op-string-check">If <var>lPrim</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_6751"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> or <var>rPrim</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_6752"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>, then<ol><li>Let <var>lStr</var> be ?&nbsp;<emu-xref aoid="ToString" id="_ref_6753"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>lPrim</var>).</li><li>Let <var>rStr</var> be ?&nbsp;<emu-xref aoid="ToString" id="_ref_6754"><a href="abstract-operations.html#sec-tostring" class="e-user-code">ToString</a></emu-xref>(<var>rPrim</var>).</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_6755"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>lStr</var> and <var>rStr</var>.</li></ol></li><li>Set <var>lVal</var> to <var>lPrim</var>.</li><li>Set <var>rVal</var> to <var>rPrim</var>.</li></ol></li><li>NOTE: At this point, it must be a numeric operation.</li><li>Let <var>lNum</var> be ?&nbsp;<emu-xref aoid="ToNumeric" id="_ref_6756"><a href="abstract-operations.html#sec-tonumeric" class="e-user-code">ToNumeric</a></emu-xref>(<var>lVal</var>).</li><li>Let <var>rNum</var> be ?&nbsp;<emu-xref aoid="ToNumeric" id="_ref_6757"><a href="abstract-operations.html#sec-tonumeric" class="e-user-code">ToNumeric</a></emu-xref>(<var>rVal</var>).</li><li>If <emu-xref aoid="SameType" id="_ref_6758"><a href="abstract-operations.html#sec-sametype">SameType</a></emu-xref>(<var>lNum</var>, <var>rNum</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>lNum</var> <emu-xref href="#sec-ecmascript-language-types-bigint-type" id="_ref_6759"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type">is a BigInt</a></emu-xref>, then<ol><li>If <var>opText</var> is <code>**</code>, return ?&nbsp;<emu-xref aoid="BigInt::exponentiate" id="_ref_6760"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-exponentiate">BigInt::exponentiate</a></emu-xref>(<var>lNum</var>, <var>rNum</var>).</li><li>If <var>opText</var> is <code>/</code>, return ?&nbsp;<emu-xref aoid="BigInt::divide" id="_ref_6761"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-divide">BigInt::divide</a></emu-xref>(<var>lNum</var>, <var>rNum</var>).</li><li>If <var>opText</var> is <code>%</code>, return ?&nbsp;<emu-xref aoid="BigInt::remainder" id="_ref_6762"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-remainder">BigInt::remainder</a></emu-xref>(<var>lNum</var>, <var>rNum</var>).</li><li>If <var>opText</var> is <code>&gt;&gt;&gt;</code>, return ?&nbsp;<emu-xref aoid="BigInt::unsignedRightShift" id="_ref_6763"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-unsignedRightShift">BigInt::unsignedRightShift</a></emu-xref>(<var>lNum</var>, <var>rNum</var>).</li><li>Let <var>operation</var> be the abstract operation associated with <var>opText</var> in the following table:
<figure>
<!-- emu-format ignore -->
<table class="lightweight-table">
<thead>
<tr><th> <var>opText</var> </th><th> <var>operation</var> </th></tr>
</thead>
<tbody>
<tr><td> <code>*</code> </td><td> <emu-xref aoid="BigInt::multiply" id="_ref_6764"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-multiply">BigInt::multiply</a></emu-xref> </td></tr>
<tr><td> <code>+</code> </td><td> <emu-xref aoid="BigInt::add" id="_ref_6765"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-add">BigInt::add</a></emu-xref> </td></tr>
<tr><td> <code>-</code> </td><td> <emu-xref aoid="BigInt::subtract" id="_ref_6766"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-subtract">BigInt::subtract</a></emu-xref> </td></tr>
<tr><td> <code>&lt;&lt;</code> </td><td> <emu-xref aoid="BigInt::leftShift" id="_ref_6767"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-leftShift">BigInt::leftShift</a></emu-xref> </td></tr>
<tr><td> <code>&gt;&gt;</code> </td><td> <emu-xref aoid="BigInt::signedRightShift" id="_ref_6768"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-signedRightShift">BigInt::signedRightShift</a></emu-xref> </td></tr>
<tr><td> <code>&amp;</code> </td><td> <emu-xref aoid="BigInt::bitwiseAND" id="_ref_6769"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseAND">BigInt::bitwiseAND</a></emu-xref> </td></tr>
<tr><td> <code>^</code> </td><td> <emu-xref aoid="BigInt::bitwiseXOR" id="_ref_6770"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseXOR">BigInt::bitwiseXOR</a></emu-xref> </td></tr>
<tr><td> <code>|</code> </td><td> <emu-xref aoid="BigInt::bitwiseOR" id="_ref_6771"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseOR">BigInt::bitwiseOR</a></emu-xref> </td></tr>
</tbody>
</table>
</figure></li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_6772"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>lNum</var> <emu-xref href="#sec-ecmascript-language-types-number-type" id="_ref_6773"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type">is a Number</a></emu-xref>.</li><li>Let <var>operation</var> be the abstract operation associated with <var>opText</var> in the following table:
<figure>
<!-- emu-format ignore -->
<table class="lightweight-table">
<thead>
<tr><th> <var>opText</var> </th><th> <var>operation</var> </th></tr>
</thead>
<tbody>
<tr><td> <code>**</code> </td><td> <emu-xref aoid="Number::exponentiate" id="_ref_6774"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-exponentiate">Number::exponentiate</a></emu-xref> </td></tr>
<tr><td> <code>*</code> </td><td> <emu-xref aoid="Number::multiply" id="_ref_6775"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-multiply">Number::multiply</a></emu-xref> </td></tr>
<tr><td> <code>/</code> </td><td> <emu-xref aoid="Number::divide" id="_ref_6776"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-divide">Number::divide</a></emu-xref> </td></tr>
<tr><td> <code>%</code> </td><td> <emu-xref aoid="Number::remainder" id="_ref_6777"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-remainder">Number::remainder</a></emu-xref> </td></tr>
<tr><td> <code>+</code> </td><td> <emu-xref aoid="Number::add" id="_ref_6778"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-add">Number::add</a></emu-xref> </td></tr>
<tr><td> <code>-</code> </td><td> <emu-xref aoid="Number::subtract" id="_ref_6779"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-subtract">Number::subtract</a></emu-xref> </td></tr>
<tr><td> <code>&lt;&lt;</code> </td><td> <emu-xref aoid="Number::leftShift" id="_ref_6780"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-leftShift">Number::leftShift</a></emu-xref> </td></tr>
<tr><td> <code>&gt;&gt;</code> </td><td> <emu-xref aoid="Number::signedRightShift" id="_ref_6781"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-signedRightShift">Number::signedRightShift</a></emu-xref> </td></tr>
<tr><td> <code>&gt;&gt;&gt;</code> </td><td> <emu-xref aoid="Number::unsignedRightShift" id="_ref_6782"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-unsignedRightShift">Number::unsignedRightShift</a></emu-xref> </td></tr>
<tr><td> <code>&amp;</code> </td><td> <emu-xref aoid="Number::bitwiseAND" id="_ref_6783"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseAND">Number::bitwiseAND</a></emu-xref> </td></tr>
<tr><td> <code>^</code> </td><td> <emu-xref aoid="Number::bitwiseXOR" id="_ref_6784"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseXOR">Number::bitwiseXOR</a></emu-xref> </td></tr>
<tr><td> <code>|</code> </td><td> <emu-xref aoid="Number::bitwiseOR" id="_ref_6785"><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseOR">Number::bitwiseOR</a></emu-xref> </td></tr>
</tbody>
</table>
</figure></li></ol></li><li>Return <var>operation</var>(<var>lNum</var>, <var>rNum</var>).</li></ol></emu-alg>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>No hint is provided in the calls to <emu-xref aoid="ToPrimitive" id="_ref_6786"><a href="abstract-operations.html#sec-toprimitive">ToPrimitive</a></emu-xref> in steps <emu-xref href="#step-binary-op-toprimitive-lval" id="_ref_436"><a href="ecmascript-language-expressions.html#step-binary-op-toprimitive-lval">1.a</a></emu-xref> and <emu-xref href="#step-binary-op-toprimitive-rval" id="_ref_437"><a href="ecmascript-language-expressions.html#step-binary-op-toprimitive-rval">1.b</a></emu-xref>. All standard objects except Dates handle the absence of a hint as if <emu-const>number</emu-const> were given; Dates handle the absence of a hint as if <emu-const>string</emu-const> were given. <emu-xref href="#exotic-object" id="_ref_6787"><a href="ecmascript-data-types-and-values.html#exotic-object">Exotic objects</a></emu-xref> may handle the absence of a hint in some other manner.</p>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>Step <emu-xref href="#step-binary-op-string-check" id="_ref_438"><a href="ecmascript-language-expressions.html#step-binary-op-string-check">1.c</a></emu-xref> differs from step <emu-xref href="#step-arc-string-check" id="_ref_439"><a href="abstract-operations.html#step-arc-string-check">3</a></emu-xref> of the <emu-xref aoid="IsLessThan" id="_ref_6788"><a href="abstract-operations.html#sec-islessthan">IsLessThan</a></emu-xref> algorithm, by using the logical-or operation instead of the logical-and operation.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-evaluatestringornumericbinaryexpression" type="abstract operation" aoid="EvaluateStringOrNumericBinaryExpression">
<h1><span class="secnum">13.15.4</span> EvaluateStringOrNumericBinaryExpression ( <var>leftOperand</var>, <var>opText</var>, <var>rightOperand</var> )</h1>
<p>The abstract operation EvaluateStringOrNumericBinaryExpression takes arguments <var>leftOperand</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_6789"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>), <var>opText</var> (a sequence of Unicode code points), and <var>rightOperand</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_6790"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6791"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a String, a BigInt, or a Number, or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6792"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6793"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>leftOperand</var>.</li><li>Let <var>lVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6794"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6795"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>rightOperand</var>.</li><li>Let <var>rVal</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6796"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li><li>Return ?&nbsp;<emu-xref aoid="ApplyStringOrNumericBinaryOperator" id="_ref_6797"><a href="ecmascript-language-expressions.html#sec-applystringornumericbinaryoperator" class="e-user-code">ApplyStringOrNumericBinaryOperator</a></emu-xref>(<var>lVal</var>, <var>opText</var>, <var>rVal</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-destructuring-assignment">
<h1><span class="secnum">13.15.5</span> Destructuring Assignment</h1>
<h2>Supplemental Syntax</h2>
<p>
In certain circumstances when processing an instance of the production<br>
<emu-grammar><emu-production name="AssignmentExpression" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ijpo4eaq">
<emu-nt id="_ref_21242"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>=</emu-t>
<emu-nt id="_ref_21243"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar><br>
the interpretation of <emu-nt id="_ref_21244"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is refined using the following grammar:
</p>
<emu-grammar type="definition"><emu-production name="AssignmentPattern" params="Yield, Await" id="prod-AssignmentPattern">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentPattern">AssignmentPattern</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7w04vwf-">
<emu-nt params="?Yield, ?Await" id="_ref_21245"><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="s2vx3ypi">
<emu-nt params="?Yield, ?Await" id="_ref_21246"><a href="ecmascript-language-expressions.html#prod-ArrayAssignmentPattern">ArrayAssignmentPattern</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ObjectAssignmentPattern" params="Yield, Await" id="prod-ObjectAssignmentPattern">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-Ix53lok1">
<emu-t>{</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="bn_ddxqp" id="prod-O0K_hLF1">
<emu-t>{</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21247"><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="ofajfz5a" id="prod-3uSyi6IT">
<emu-t>{</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21248"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="da4bl21i" id="prod-S2lwsZIP">
<emu-t>{</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21249"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="?Yield, ?Await" optional="" id="_ref_21250"><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="ArrayAssignmentPattern" params="Yield, Await" id="prod-ArrayAssignmentPattern">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-ArrayAssignmentPattern">ArrayAssignmentPattern</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s4zfck54" id="prod-lF9xCwj2">
<emu-t>[</emu-t>
<emu-nt optional="" id="_ref_21251"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" optional="" id="_ref_21252"><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="mfk9jesb" id="prod-VmyFmgP-">
<emu-t>[</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21253"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="aerg5q0_" id="prod-U5w44WHu">
<emu-t>[</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21254"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_21255"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" optional="" id="_ref_21256"><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AssignmentRestProperty" params="Yield, Await" id="prod-AssignmentRestProperty">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nliyfd0x" id="prod-mUDd8nHs">
<emu-t>...</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21257"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AssignmentPropertyList" params="Yield, Await" id="prod-AssignmentPropertyList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="d7bxrpgd">
<emu-nt params="?Yield, ?Await" id="_ref_21258"><a href="ecmascript-language-expressions.html#prod-AssignmentProperty">AssignmentProperty</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="nzqocjsg" id="prod-Zg8oWRHF">
<emu-nt params="?Yield, ?Await" id="_ref_21259"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21260"><a href="ecmascript-language-expressions.html#prod-AssignmentProperty">AssignmentProperty</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AssignmentElementList" params="Yield, Await" id="prod-AssignmentElementList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="516o8fhi" id="prod-3BNUmQs7">
<emu-nt params="?Yield, ?Await" id="_ref_21261"><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="bvlhnxkw" id="prod-Ud4u6J-Q">
<emu-nt params="?Yield, ?Await" id="_ref_21262"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21263"><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AssignmentElisionElement" params="Yield, Await" id="prod-AssignmentElisionElement">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cv0avln-" id="prod-sl9Zadb9">
<emu-nt optional="" id="_ref_21264"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_21265"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AssignmentProperty" params="Yield, Await" id="prod-AssignmentProperty">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentProperty">AssignmentProperty</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="wctqknbn" id="prod-3q7yGYEa">
<emu-nt params="?Yield, ?Await" id="_ref_21266"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" optional="" id="_ref_21267"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="n656b85q" id="prod-v1dWCZ87">
<emu-nt params="?Yield, ?Await" id="_ref_21268"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>:</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21269"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AssignmentElement" params="Yield, Await" id="prod-AssignmentElement">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jfyxygbf" id="prod-qvQWEQo1">
<emu-nt params="?Yield, ?Await" id="_ref_21270"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" optional="" id="_ref_21271"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AssignmentRestElement" params="Yield, Await" id="prod-AssignmentRestElement">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nliyfd0x" id="prod-DMURMN0m">
<emu-t>...</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_21272"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="DestructuringAssignmentTarget" params="Yield, Await" id="prod-DestructuringAssignmentTarget">
<emu-nt params="Yield, Await"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="t7cmhicy">
<emu-nt params="?Yield, ?Await" id="_ref_21273"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-destructuring-assignment-static-semantics-early-errors">
<h1><span class="secnum">13.15.5.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="AssignmentProperty" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentProperty">AssignmentProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xv93cfyb">
<emu-nt id="_ref_21274"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt>
<emu-nt optional="" id="_ref_21275"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="AssignmentTargetType" id="_ref_6798"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_21276"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> is not <emu-const>simple</emu-const>.
</li>
</ul>
<emu-grammar><emu-production name="AssignmentRestProperty" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="z0cmdp2o">
<emu-t>...</emu-t>
<emu-nt id="_ref_21277"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-nt id="_ref_21278"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is either an <emu-nt id="_ref_21279"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt> or an <emu-nt id="_ref_21280"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt>.
</li>
</ul>
<emu-grammar><emu-production name="DestructuringAssignmentTarget" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="glqbepvz"><emu-nt id="_ref_21281"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
If <emu-nt id="_ref_21282"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is either an <emu-nt id="_ref_21283"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> or an <emu-nt id="_ref_21284"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, <emu-nt id="_ref_21285"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> <emu-xref href="#must-cover" id="_ref_6799"><a href="notational-conventions.html#must-cover">must cover</a></emu-xref> an <emu-nt id="_ref_21286"><a href="ecmascript-language-expressions.html#prod-AssignmentPattern">AssignmentPattern</a></emu-nt>.
</li>
<li>
If <emu-nt id="_ref_21287"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is neither an <emu-nt id="_ref_21288"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> nor an <emu-nt id="_ref_21289"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, it is a Syntax Error if the <emu-xref aoid="AssignmentTargetType" id="_ref_6800"><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype">AssignmentTargetType</a></emu-xref> of <emu-nt id="_ref_21290"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt> is not <emu-const>simple</emu-const>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-runtime-semantics-destructuringassignmentevaluation" type="sdo" aoid="DestructuringAssignmentEvaluation">
<h1><span class="secnum">13.15.5.2</span> Runtime Semantics: DestructuringAssignmentEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6801"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> DestructuringAssignmentEvaluation takes argument <var>value</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6802"><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_6803"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6804"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ObjectAssignmentPattern" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-3gUcVFuf">
<emu-t>{</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="RequireObjectCoercible" id="_ref_6805"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>value</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ObjectAssignmentPattern">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="atdycebx" id="prod-BL-EfQkR">
<emu-t>{</emu-t>
<emu-nt id="_ref_21291"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="gxeg7dx1" id="prod-w0nDUCli">
<emu-t>{</emu-t>
<emu-nt id="_ref_21292"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a></emu-nt>
<emu-t>,</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="RequireObjectCoercible" id="_ref_6806"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>value</var>).</li><li>Perform ?&nbsp;<emu-xref aoid="PropertyDestructuringAssignmentEvaluation" id="_ref_6807"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydestructuringassignmentevaluation" class="e-user-code">PropertyDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21293"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a></emu-nt> with argument <var>value</var>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ObjectAssignmentPattern" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0_acgxxx" id="prod-V79sItM3">
<emu-t>{</emu-t>
<emu-nt id="_ref_21294"><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="RequireObjectCoercible" id="_ref_6808"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>value</var>).</li><li>Let <var>excludedNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6809"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Return ?&nbsp;<emu-xref aoid="RestDestructuringAssignmentEvaluation" id="_ref_6810"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-restdestructuringassignmentevaluation" class="e-user-code">RestDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21295"><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a></emu-nt> with arguments <var>value</var> and <var>excludedNames</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ObjectAssignmentPattern" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ObjectAssignmentPattern">ObjectAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s8lxpw-f" id="prod-c6GsLBP6">
<emu-t>{</emu-t>
<emu-nt id="_ref_21296"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_21297"><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="RequireObjectCoercible" id="_ref_6811"><a href="abstract-operations.html#sec-requireobjectcoercible">RequireObjectCoercible</a></emu-xref>(<var>value</var>).</li><li>Let <var>excludedNames</var> be ?&nbsp;<emu-xref aoid="PropertyDestructuringAssignmentEvaluation" id="_ref_6812"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydestructuringassignmentevaluation" class="e-user-code">PropertyDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21298"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a></emu-nt> with argument <var>value</var>.</li><li>Return ?&nbsp;<emu-xref aoid="RestDestructuringAssignmentEvaluation" id="_ref_6813"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-restdestructuringassignmentevaluation" class="e-user-code">RestDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21299"><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a></emu-nt> with arguments <var>value</var> and <var>excludedNames</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayAssignmentPattern" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArrayAssignmentPattern">ArrayAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mdhsnk3i" id="prod-EbrhbyXb">
<emu-t>[</emu-t>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_6814"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(<var>value</var>, <emu-const>sync</emu-const>).</li><li>Return ?&nbsp;<emu-xref aoid="IteratorClose" id="_ref_6815"><a href="abstract-operations.html#sec-iteratorclose" class="e-user-code">IteratorClose</a></emu-xref>(<var>iteratorRecord</var>, <emu-xref aoid="NormalCompletion" id="_ref_6816"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-const>unused</emu-const>)).</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayAssignmentPattern" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArrayAssignmentPattern">ArrayAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mf_msvtp" id="prod-zzOr3EoW">
<emu-t>[</emu-t>
<emu-nt id="_ref_21300"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_6817"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(<var>value</var>, <emu-const>sync</emu-const>).</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_6818"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6819"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21301"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with argument <var>iteratorRecord</var>).</li><li>If <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>, return ?&nbsp;<emu-xref aoid="IteratorClose" id="_ref_6820"><a href="abstract-operations.html#sec-iteratorclose" class="e-user-code">IteratorClose</a></emu-xref>(<var>iteratorRecord</var>, <var>result</var>).</li><li>Return <var>result</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayAssignmentPattern" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArrayAssignmentPattern">ArrayAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cmqzbdyo" id="prod--ENeYZ8i">
<emu-t>[</emu-t>
<emu-nt optional="" id="_ref_21302"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_21303"><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_6821"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(<var>value</var>, <emu-const>sync</emu-const>).</li><li>If <emu-nt id="_ref_21304"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> is present, then<ol><li>Let <var>status</var> be <emu-xref aoid="Completion" id="_ref_6822"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6823"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21305"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with argument <var>iteratorRecord</var>).</li><li>If <var>status</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6824"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li><emu-xref href="#assert" id="_ref_6825"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>true</emu-val>.</li><li>Return ?&nbsp;<var>status</var>.</li></ol></li></ol></li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_6826"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6827"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21306"><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a></emu-nt> with argument <var>iteratorRecord</var>).</li><li>If <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>, return ?&nbsp;<emu-xref aoid="IteratorClose" id="_ref_6828"><a href="abstract-operations.html#sec-iteratorclose" class="e-user-code">IteratorClose</a></emu-xref>(<var>iteratorRecord</var>, <var>result</var>).</li><li>Return <var>result</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayAssignmentPattern" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArrayAssignmentPattern">ArrayAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gv7ks9wy" id="prod-IYCbjDvt">
<emu-t>[</emu-t>
<emu-nt id="_ref_21307"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_6829"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(<var>value</var>, <emu-const>sync</emu-const>).</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_6830"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6831"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21308"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a></emu-nt> with argument <var>iteratorRecord</var>).</li><li>If <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>, return ?&nbsp;<emu-xref aoid="IteratorClose" id="_ref_6832"><a href="abstract-operations.html#sec-iteratorclose" class="e-user-code">IteratorClose</a></emu-xref>(<var>iteratorRecord</var>, <var>result</var>).</li><li>Return <var>result</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayAssignmentPattern" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ArrayAssignmentPattern">ArrayAssignmentPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ztneawav" id="prod-GIS42l5L">
<emu-t>[</emu-t>
<emu-nt id="_ref_21309"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_21310"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt optional="" id="_ref_21311"><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_6833"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(<var>value</var>, <emu-const>sync</emu-const>).</li><li>Let <var>status</var> be <emu-xref aoid="Completion" id="_ref_6834"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6835"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21312"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a></emu-nt> with argument <var>iteratorRecord</var>).</li><li>If <var>status</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6836"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>If <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>, return ?&nbsp;<emu-xref aoid="IteratorClose" id="_ref_6837"><a href="abstract-operations.html#sec-iteratorclose" class="e-user-code">IteratorClose</a></emu-xref>(<var>iteratorRecord</var>, <var>status</var>).</li><li>Return ?&nbsp;<var>status</var>.</li></ol></li><li>If <emu-nt id="_ref_21313"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> is present, then<ol><li>Set <var>status</var> to <emu-xref aoid="Completion" id="_ref_6838"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6839"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21314"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with argument <var>iteratorRecord</var>).</li><li>If <var>status</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6840"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li><emu-xref href="#assert" id="_ref_6841"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>true</emu-val>.</li><li>Return ?&nbsp;<var>status</var>.</li></ol></li></ol></li><li>If <emu-nt id="_ref_21315"><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a></emu-nt> is present, then<ol><li>Set <var>status</var> to <emu-xref aoid="Completion" id="_ref_6842"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6843"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21316"><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a></emu-nt> with argument <var>iteratorRecord</var>).</li></ol></li><li>If <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>, return ?&nbsp;<emu-xref aoid="IteratorClose" id="_ref_6844"><a href="abstract-operations.html#sec-iteratorclose" class="e-user-code">IteratorClose</a></emu-xref>(<var>iteratorRecord</var>, <var>status</var>).</li><li>Return ?&nbsp;<var>status</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-propertydestructuringassignmentevaluation" type="sdo" aoid="PropertyDestructuringAssignmentEvaluation">
<h1><span class="secnum">13.15.5.3</span> Runtime Semantics: PropertyDestructuringAssignmentEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6845"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> PropertyDestructuringAssignmentEvaluation takes argument <var>value</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6846"><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_6847"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6848"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#property-key" id="_ref_6849"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6850"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It collects a list of all destructured <emu-xref href="#property-key" id="_ref_6851"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AssignmentPropertyList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w2gewbq6" id="prod-ysaEPEoc">
<emu-nt id="_ref_21317"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_21318"><a href="ecmascript-language-expressions.html#prod-AssignmentProperty">AssignmentProperty</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propertyNames</var> be ?&nbsp;<emu-xref aoid="PropertyDestructuringAssignmentEvaluation" id="_ref_6852"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydestructuringassignmentevaluation" class="e-user-code">PropertyDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21319"><a href="ecmascript-language-expressions.html#prod-AssignmentPropertyList">AssignmentPropertyList</a></emu-nt> with argument <var>value</var>.</li><li>Let <var>nextNames</var> be ?&nbsp;<emu-xref aoid="PropertyDestructuringAssignmentEvaluation" id="_ref_6853"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydestructuringassignmentevaluation" class="e-user-code">PropertyDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21320"><a href="ecmascript-language-expressions.html#prod-AssignmentProperty">AssignmentProperty</a></emu-nt> with argument <var>value</var>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_6854"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>propertyNames</var> and <var>nextNames</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentProperty" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentProperty">AssignmentProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xv93cfyb" id="prod-yhW4Xo3o">
<emu-nt id="_ref_21321"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt>
<emu-nt optional="" id="_ref_21322"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>P</var> be the <emu-xref aoid="StringValue" id="_ref_6855"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_21323"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt>.</li><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="ResolveBinding" id="_ref_6856"><a href="executable-code-and-execution-contexts.html#sec-resolvebinding" class="e-user-code">ResolveBinding</a></emu-xref>(<var>P</var>).</li><li>Let <var>v</var> be ?&nbsp;<emu-xref aoid="GetV" id="_ref_6857"><a href="abstract-operations.html#sec-getv" class="e-user-code">GetV</a></emu-xref>(<var>value</var>, <var>P</var>).</li><li>If <emu-nt id="_ref_21324"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> is present and <var>v</var> is <emu-val>undefined</emu-val>, then<ol><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_6858"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_21325"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>) is <emu-val>true</emu-val>, then<ol><li>Set <var>v</var> to ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_6859"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_21326"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> with argument <var>P</var>.</li></ol></li><li>Else,<ol><li>Let <var>defaultValue</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6860"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21327"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>.</li><li>Set <var>v</var> to ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6861"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>defaultValue</var>).</li></ol></li></ol></li><li>Perform ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6862"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>v</var>).</li><li>Return « <var>P</var>&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentProperty" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentProperty">AssignmentProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yayigkhd" id="prod-P2UQDIgF">
<emu-nt id="_ref_21328"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt>
<emu-t>:</emu-t>
<emu-nt id="_ref_21329"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>name</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6863"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21330"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt>.</li><li>Perform ?&nbsp;<emu-xref aoid="KeyedDestructuringAssignmentEvaluation" id="_ref_6864"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-keyeddestructuringassignmentevaluation" class="e-user-code">KeyedDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21331"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a></emu-nt> with arguments <var>value</var> and <var>name</var>.</li><li>Return « <var>name</var>&nbsp;».</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-restdestructuringassignmentevaluation" type="sdo" aoid="RestDestructuringAssignmentEvaluation">
<h1><span class="secnum">13.15.5.4</span> Runtime Semantics: RestDestructuringAssignmentEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6865"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> RestDestructuringAssignmentEvaluation takes arguments <var>value</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6866"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>excludedNames</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_6867"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#property-key" id="_ref_6868"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6869"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6870"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AssignmentRestProperty" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentRestProperty">AssignmentRestProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="z0cmdp2o" id="prod-uer86s2s">
<emu-t>...</emu-t>
<emu-nt id="_ref_21332"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6871"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21333"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li><li>Let <var>restObj</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_6872"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_6873"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>).</li><li>Perform ?&nbsp;<emu-xref aoid="CopyDataProperties" id="_ref_6874"><a href="abstract-operations.html#sec-copydataproperties" class="e-user-code">CopyDataProperties</a></emu-xref>(<var>restObj</var>, <var>value</var>, <var>excludedNames</var>).</li><li>Return ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6875"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>restObj</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-iteratordestructuringassignmentevaluation" type="sdo" aoid="IteratorDestructuringAssignmentEvaluation">
<h1><span class="secnum">13.15.5.5</span> Runtime Semantics: IteratorDestructuringAssignmentEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6876"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> IteratorDestructuringAssignmentEvaluation takes argument <var>iteratorRecord</var> (an <emu-xref href="#sec-iterator-records" id="_ref_6877"><a href="abstract-operations.html#sec-iterator-records">Iterator Record</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6878"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6879"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AssignmentElementList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4rvubdlp" id="prod-wdwg9MFc"><emu-nt id="_ref_21334"><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6880"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21335"><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a></emu-nt> with argument <var>iteratorRecord</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentElementList" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vcxcd5k-" id="prod-LgDa64vV">
<emu-nt id="_ref_21336"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_21337"><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6881"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21338"><a href="ecmascript-language-expressions.html#prod-AssignmentElementList">AssignmentElementList</a></emu-nt> with argument <var>iteratorRecord</var>.</li><li>Return ?&nbsp;<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6882"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21339"><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a></emu-nt> with argument <var>iteratorRecord</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentElisionElement" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gw1kvoap" id="prod-vVbhdjr0"><emu-nt id="_ref_21340"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6883"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21341"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a></emu-nt> with argument <var>iteratorRecord</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentElisionElement" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentElisionElement">AssignmentElisionElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="aw9c7xpu" id="prod-gwNUTqrO">
<emu-nt id="_ref_21342"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt>
<emu-nt id="_ref_21343"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6884"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21344"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with argument <var>iteratorRecord</var>.</li><li>Return ?&nbsp;<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6885"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21345"><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a></emu-nt> with argument <var>iteratorRecord</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Elision" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lhh3u7f7" id="prod-4Wj_oyTQ"><emu-t>,</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>, then<ol><li>Perform ?&nbsp;<emu-xref aoid="IteratorStep" id="_ref_6886"><a href="abstract-operations.html#sec-iteratorstep" class="e-user-code">IteratorStep</a></emu-xref>(<var>iteratorRecord</var>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Elision" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gg0bjle3" id="prod-zWmQntmV">
<emu-nt id="_ref_21346"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt>
<emu-t>,</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="IteratorDestructuringAssignmentEvaluation" id="_ref_6887"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" class="e-user-code">IteratorDestructuringAssignmentEvaluation</a></emu-xref> of <emu-nt id="_ref_21347"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a></emu-nt> with argument <var>iteratorRecord</var>.</li><li>If <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>, then<ol><li>Perform ?&nbsp;<emu-xref aoid="IteratorStep" id="_ref_6888"><a href="abstract-operations.html#sec-iteratorstep" class="e-user-code">IteratorStep</a></emu-xref>(<var>iteratorRecord</var>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentElement" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="pzzkz5gu" id="prod-L7cVew9S">
<emu-nt id="_ref_21348"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>
<emu-nt optional="" id="_ref_21349"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</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_21350"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is neither an <emu-nt id="_ref_21351"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> nor an <emu-nt id="_ref_21352"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, then<ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6889"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21353"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li></ol></li><li>Let <var>value</var> be <emu-val>undefined</emu-val>.</li><li>If <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>next</var> be ?&nbsp;<emu-xref aoid="IteratorStepValue" id="_ref_6890"><a href="abstract-operations.html#sec-iteratorstepvalue" class="e-user-code">IteratorStepValue</a></emu-xref>(<var>iteratorRecord</var>).</li><li>If <var>next</var> is not <emu-const>done</emu-const>, then<ol><li>Set <var>value</var> to <var>next</var>.</li></ol></li></ol></li><li>If <emu-nt id="_ref_21354"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> is present and <var>value</var> is <emu-val>undefined</emu-val>, then<ol><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_6891"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_21355"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>) is <emu-val>true</emu-val> and <emu-xref aoid="IsIdentifierRef" id="_ref_6892"><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref">IsIdentifierRef</a></emu-xref> of <emu-nt id="_ref_21356"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is <emu-val>true</emu-val>, then<ol><li>Let <var>target</var> be the <emu-xref aoid="StringValue" id="_ref_6893"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_21357"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li><li>Let <var>v</var> be ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_6894"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_21358"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> with argument <var>target</var>.</li></ol></li><li>Else,<ol><li>Let <var>defaultValue</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6895"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21359"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>.</li><li>Let <var>v</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6896"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>defaultValue</var>).</li></ol></li></ol></li><li>Else,<ol><li>Let <var>v</var> be <var>value</var>.</li></ol></li><li>If <emu-nt id="_ref_21360"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is either an <emu-nt id="_ref_21361"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> or an <emu-nt id="_ref_21362"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, then<ol><li>Let <var>nestedAssignmentPattern</var> be the <emu-nt id="_ref_21363"><a href="ecmascript-language-expressions.html#prod-AssignmentPattern">AssignmentPattern</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_6897"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_21364"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="DestructuringAssignmentEvaluation" id="_ref_6898"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-destructuringassignmentevaluation" class="e-user-code">DestructuringAssignmentEvaluation</a></emu-xref> of <var>nestedAssignmentPattern</var> with argument <var>v</var>.</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6899"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>v</var>).</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Left to right evaluation order is maintained by evaluating a <emu-nt id="_ref_21365"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> that is not a destructuring pattern prior to accessing the <emu-xref href="#sec-iterator-interface" id="_ref_6900"><a href="control-abstraction-objects.html#sec-iterator-interface">iterator</a></emu-xref> or evaluating the <emu-nt id="_ref_21366"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>.</p>
</div></emu-note>
<emu-grammar><emu-production name="AssignmentRestElement" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentRestElement">AssignmentRestElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="z0cmdp2o" id="prod-NB8JhQlN">
<emu-t>...</emu-t>
<emu-nt id="_ref_21367"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_21368"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is neither an <emu-nt id="_ref_21369"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> nor an <emu-nt id="_ref_21370"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, then<ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6901"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21371"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li></ol></li><li>Let <var>A</var> be !&nbsp;<emu-xref aoid="ArrayCreate" id="_ref_6902"><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, while <var>iteratorRecord</var>.<var class="field">[[Done]]</var> is <emu-val>false</emu-val>,<ol><li>Let <var>next</var> be ?&nbsp;<emu-xref aoid="IteratorStepValue" id="_ref_6903"><a href="abstract-operations.html#sec-iteratorstepvalue" class="e-user-code">IteratorStepValue</a></emu-xref>(<var>iteratorRecord</var>).</li><li>If <var>next</var> is not <emu-const>done</emu-const>, then<ol><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_6904"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>A</var>, !&nbsp;<emu-xref aoid="ToString" id="_ref_6905"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_6906"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>n</var>)), <var>next</var>).</li><li>Set <var>n</var> to <var>n</var> + 1.</li></ol></li></ol></li><li>If <emu-nt id="_ref_21372"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is neither an <emu-nt id="_ref_21373"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> nor an <emu-nt id="_ref_21374"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, then<ol><li>Return ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6907"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>A</var>).</li></ol></li><li>Let <var>nestedAssignmentPattern</var> be the <emu-nt id="_ref_21375"><a href="ecmascript-language-expressions.html#prod-AssignmentPattern">AssignmentPattern</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_6908"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_21376"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="DestructuringAssignmentEvaluation" id="_ref_6909"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-destructuringassignmentevaluation" class="e-user-code">DestructuringAssignmentEvaluation</a></emu-xref> of <var>nestedAssignmentPattern</var> with argument <var>A</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-keyeddestructuringassignmentevaluation" type="sdo" aoid="KeyedDestructuringAssignmentEvaluation">
<h1><span class="secnum">13.15.5.6</span> Runtime Semantics: KeyedDestructuringAssignmentEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_6910"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> KeyedDestructuringAssignmentEvaluation takes arguments <var>value</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_6911"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>propertyName</var> (a <emu-xref href="#property-key" id="_ref_6912"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_6913"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_6914"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AssignmentElement" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentElement">AssignmentElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="pzzkz5gu" id="prod-M4lsIchc">
<emu-nt id="_ref_21377"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>
<emu-nt optional="" id="_ref_21378"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</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_21379"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is neither an <emu-nt id="_ref_21380"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> nor an <emu-nt id="_ref_21381"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, then<ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6915"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21382"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li></ol></li><li>Let <var>v</var> be ?&nbsp;<emu-xref aoid="GetV" id="_ref_6916"><a href="abstract-operations.html#sec-getv" class="e-user-code">GetV</a></emu-xref>(<var>value</var>, <var>propertyName</var>).</li><li>If <emu-nt id="_ref_21383"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> is present and <var>v</var> is <emu-val>undefined</emu-val>, then<ol><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_6917"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_21384"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>) is <emu-val>true</emu-val> and <emu-xref aoid="IsIdentifierRef" id="_ref_6918"><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref">IsIdentifierRef</a></emu-xref> of <emu-nt id="_ref_21385"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is <emu-val>true</emu-val>, then<ol><li>Let <var>target</var> be the <emu-xref aoid="StringValue" id="_ref_6919"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_21386"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li><li>Let <var>rhsValue</var> be ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_6920"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_21387"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> with argument <var>target</var>.</li></ol></li><li>Else,<ol><li>Let <var>defaultValue</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6921"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21388"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>.</li><li>Let <var>rhsValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6922"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>defaultValue</var>).</li></ol></li></ol></li><li>Else,<ol><li>Let <var>rhsValue</var> be <var>v</var>.</li></ol></li><li>If <emu-nt id="_ref_21389"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt> is either an <emu-nt id="_ref_21390"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt> or an <emu-nt id="_ref_21391"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>, then<ol><li>Let <var>assignmentPattern</var> be the <emu-nt id="_ref_21392"><a href="ecmascript-language-expressions.html#prod-AssignmentPattern">AssignmentPattern</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_6923"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_21393"><a href="ecmascript-language-expressions.html#prod-DestructuringAssignmentTarget">DestructuringAssignmentTarget</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="DestructuringAssignmentEvaluation" id="_ref_6924"><a href="ecmascript-language-expressions.html#sec-runtime-semantics-destructuringassignmentevaluation" class="e-user-code">DestructuringAssignmentEvaluation</a></emu-xref> of <var>assignmentPattern</var> with argument <var>rhsValue</var>.</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="PutValue" id="_ref_6925"><a href="ecmascript-data-types-and-values.html#sec-putvalue" class="e-user-code">PutValue</a></emu-xref>(<var>lRef</var>, <var>rhsValue</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-comma-operator">
<h1><span class="secnum">13.16</span> Comma Operator ( <code>,</code> )</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="Expression" params="In, Yield, Await" id="prod-Expression">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dtjihnfx" id="prod-0GReIdCH">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21394"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="ookiljzl" id="prod-lT8vYmn_">
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21395"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="?In, ?Yield, ?Await" id="_ref_21396"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-comma-operator-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">13.16.1</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="Expression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cwoazx1t" id="prod-9ohd9wHn">
<emu-nt id="_ref_21397"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_21398"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6926"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21399"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>.</li><li>Perform ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6927"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>lRef</var>).</li><li>Let <var>rRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_6928"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_21400"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="GetValue" id="_ref_6929"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rRef</var>).</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><emu-xref aoid="GetValue" id="_ref_6930"><a href="ecmascript-data-types-and-values.html#sec-getvalue">GetValue</a></emu-xref> must be called even though its value is not used because it may have observable side-effects.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
</emu-clause></div></body>