Files
ask262/spec-built/multipage/ordinary-and-exotic-objects-behaviours.html
T
2026-03-26 17:35:36 +05:30

1731 lines
998 KiB
HTML
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"><style>
.unicode-property-table {
table-layout: fixed;
width: 100%;
font-size: 80%;
}
#metadata-block {
margin: 4em 0;
padding: 10px;
border: 1px solid #ee8421;
}
#metadata-block h1 {
font-size: 1.5em;
margin-top: 0;
}
#metadata-block > ul {
list-style-type: none;
margin: 0; padding: 0;
}
#ecma-logo {
width: 500px;
}
.corner-cell {
position: relative;
height: 2lh;
}
.corner-cell .slash {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(to bottom left, transparent calc(50% - 1px), gray, transparent calc(50% + 1px));
}
.corner-cell > .column {
position: absolute;
bottom: 0.4em;
left: 1em;
}
.corner-cell > .row {
position: absolute;
top: 0.4em;
right: 1em;
}
</style>
<style media="print">
/**
* ECMA-262-specific hacks. Shouldn't require a ton of maintenance; audit if
* visual inspection results in unexpected page breaks.
*
* For print version, the table captioned "Module fields after the initial Evaluate() call" _may_ need to set the row
* EVALUATING-ASYNC to one cell with a colspan of 5. It typically does not fit on the page, but the cell merging is
* not a perfectly accurate solution and will not be merged back in to the specification.
* See https://github.com/tc39/ecma262/pull/3623#issuecomment-3029366960
*/
/* Make sure tables are wide enough for their captions */
table {
min-width: 135mm;
}
/* 2.2 Examples of legacy/normative-optional are small enough to be aggressive against breaks */
#sec-conformance [example],
/* 16.2.1.xxx many tables */
#sec-example-cyclic-module-record-graphs table {
break-inside: avoid-page;
}
/* 12.10.1 long note can break wherever it wants */
#sec-rules-of-automatic-semicolon-insertion > emu-note {
break-before: initial;
break-inside: initial;
}
/* 12.10.X Sections start with an <em> not inside a <p> */
#sec-examples-of-automatic-semicolon-insertion > em,
#sec-interesting-cases-of-automatic-semicolon-insertion > em,
#sec-asi-cases-with-no-lineterminator-here > em {
display: block;
margin-top: 1.25ex;
}
/* 15.1.X missing spacing between intro and first emu-grammar */
#sec-static-semantics-containsexpression > emu-grammar:first-of-type {
margin-top: 2ex;
}
/* 15.3 A very long term combined with inline-block, nowrap, and justified text resulting in weird punctuation */
#sec-arrow-function-definitions > p > emu-grammar {
text-align: left;
}
/* 20.X legacy title */
#sec-object\.prototype\.__proto__ > .attributes-tag {
break-before: avoid-page;
break-after: avoid-page;
}
/* 21.X table middle column is too narrow */
#table-time-zone-identifier-record-fields > figure > table th:nth-of-type(2) {
min-width: 19mm;
}
/* 29.X extremely long note */
#sec-shared-memory-guidelines > emu-note {
break-inside: auto;
}
.unicode-property-table {
table-layout: initial;
width: auto;
font-size: 90%;
}
.unicode-property-table th:first-of-type {
width: 33%;
}
.corner-cell {
background-image: url(data:image/svg+xml;base64,PHN2ZyBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaGVpZ2h0PSI0NiIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSIgd2lkdGg9IjI0MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMzE1LjI2NiAzOTYuMzQzIDI0MS4zOTQgNDUuMTU1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMxNC45MyAtMzk1LjkzNSkiLz48L3N2Zz4=);
background-repeat: no-repeat;
background-size: 100% 3em;
height: 3em;
padding: 0;
vertical-align: inherit;
position: static;
}
.corner-cell .slash {
display: none;
}
.corner-cell > .column, .corner-cell > .row {
display: block;
position: relative;
}
.corner-cell > .row {
text-align: right;
top: -0.75em
}
.corner-cell > .column {
text-align: left;
bottom: -1.25em;
}
</style>
<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><style>
@media print {
@page :left {
@bottom-right {
content: '© Ecma International 2026';
}
}
@page :right {
@bottom-left {
content: '© Ecma International 2026';
}
}
@page :first {
@bottom-left {
content: '';
}
@bottom-right {
content: '';
}
}
@page :blank {
@bottom-left {
content: '';
}
@bottom-right {
content: '';
}
}
}
</style><style>
@import url("https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/styles/base16/solarized-light.min.css");
@import url("https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/styles/a11y-dark.min.css") (prefers-color-scheme: dark);
</style><link rel="canonical" href="../#sec-ordinary-and-exotic-objects-behaviours"></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-ordinary-and-exotic-objects-behaviours">
<h1><span class="secnum">10</span> Ordinary and Exotic Objects Behaviours</h1>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots">
<h1><span class="secnum">10.1</span> Ordinary Object Internal Methods and Internal Slots</h1>
<p>All <emu-xref href="#ordinary-object" id="_ref_4439"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref> have an internal slot called <var class="field">[[Prototype]]</var>. The value of this internal slot is either <emu-val>null</emu-val> or an object and is used for implementing inheritance. Assume a property named <var>P</var> is missing from an <emu-xref href="#ordinary-object" id="_ref_4440"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> but exists on its <var class="field">[[Prototype]]</var> object. If <var>P</var> refers to a <emu-xref href="#sec-object-type" id="_ref_4441"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref> on the <var class="field">[[Prototype]]</var> object, <var>O</var> inherits it for get access, making it behave as if <var>P</var> was a property of <var>O</var>. If <var>P</var> refers to a writable <emu-xref href="#sec-object-type" id="_ref_4442"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref> on the <var class="field">[[Prototype]]</var> object, set access of <var>P</var> on <var>O</var> creates a new <emu-xref href="#sec-object-type" id="_ref_4443"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref> named <var>P</var> on <var>O</var>. If <var>P</var> refers to a non-writable <emu-xref href="#sec-object-type" id="_ref_4444"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref> on the <var class="field">[[Prototype]]</var> object, set access of <var>P</var> on <var>O</var> fails. If <var>P</var> refers to an <emu-xref href="#sec-object-type" id="_ref_4445"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> on the <var class="field">[[Prototype]]</var> object, the accessor is inherited by <var>O</var> for both get access and set access.</p>
<p>Every <emu-xref href="#ordinary-object" id="_ref_4446"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> has a Boolean-valued <var class="field">[[Extensible]]</var> internal slot which is used to fulfill the extensibility-related internal method invariants specified in <emu-xref href="#sec-invariants-of-the-essential-internal-methods" id="_ref_270"><a href="ecmascript-data-types-and-values.html#sec-invariants-of-the-essential-internal-methods">6.1.7.3</a></emu-xref>. Namely, once the value of an object's <var class="field">[[Extensible]]</var> internal slot has been set to <emu-val>false</emu-val>, it is no longer possible to add properties to the object, to modify the value of the object's <var class="field">[[Prototype]]</var> internal slot, or to subsequently change the value of <var class="field">[[Extensible]]</var> to <emu-val>true</emu-val>.</p>
<p>In the following algorithm descriptions, assume <var>O</var> is an <emu-xref href="#ordinary-object" id="_ref_4447"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>, <var>P</var> is a <emu-xref href="#property-key" id="_ref_4448"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> value, <var>V</var> is any <emu-xref href="#sec-ecmascript-language-types" id="_ref_4449"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>, and <var>Desc</var> is a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4450"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> record.</p>
<p>Each <emu-xref href="#ordinary-object" id="_ref_4451"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> internal method delegates to a similarly-named abstract operation. If such an abstract operation depends on another internal method, then the internal method is invoked on <var>O</var> rather than calling the similarly-named abstract operation directly. These semantics ensure that <emu-xref href="#exotic-object" id="_ref_4452"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic objects</a></emu-xref> have their overridden internal methods invoked when <emu-xref href="#ordinary-object" id="_ref_4453"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> internal methods are applied to them.</p>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof" type="internal method">
<h1><span class="secnum">10.1.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</h1>
<p>The <var class="field">[[GetPrototypeOf]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4454"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4455"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either an Object or <emu-val>null</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-xref aoid="OrdinaryGetPrototypeOf" id="_ref_4456"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetprototypeof">OrdinaryGetPrototypeOf</a></emu-xref>(<var>O</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinarygetprototypeof" type="abstract operation" aoid="OrdinaryGetPrototypeOf">
<h1><span class="secnum">10.1.1.1</span> OrdinaryGetPrototypeOf ( <var>O</var> )</h1>
<p>The abstract operation OrdinaryGetPrototypeOf takes argument <var>O</var> (an Object) and returns an Object or <emu-val>null</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <var>O</var>.<var class="field">[[Prototype]]</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-setprototypeof-v" type="internal method">
<h1><span class="secnum">10.1.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</h1>
<p>The <var class="field">[[SetPrototypeOf]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4457"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes argument <var>V</var> (an Object or <emu-val>null</emu-val>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4458"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-xref aoid="OrdinarySetPrototypeOf" id="_ref_4459"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarysetprototypeof">OrdinarySetPrototypeOf</a></emu-xref>(<var>O</var>, <var>V</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinarysetprototypeof" type="abstract operation" aoid="OrdinarySetPrototypeOf">
<h1><span class="secnum">10.1.2.1</span> OrdinarySetPrototypeOf ( <var>O</var>, <var>V</var> )</h1>
<p>The abstract operation OrdinarySetPrototypeOf takes arguments <var>O</var> (an Object) and <var>V</var> (an Object or <emu-val>null</emu-val>) and returns a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>current</var> be <var>O</var>.<var class="field">[[Prototype]]</var>.</li><li>If <emu-xref aoid="SameValue" id="_ref_4460"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>V</var>, <var>current</var>) is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Let <var>extensible</var> be <var>O</var>.<var class="field">[[Extensible]]</var>.</li><li>If <var>extensible</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Let <var>p</var> be <var>V</var>.</li><li>Let <var>done</var> be <emu-val>false</emu-val>.</li><li id="step-ordinarysetprototypeof-loop">Repeat, while <var>done</var> is <emu-val>false</emu-val>,<ol><li>If <var>p</var> is <emu-val>null</emu-val>, then<ol><li>Set <var>done</var> to <emu-val>true</emu-val>.</li></ol></li><li>Else if <emu-xref aoid="SameValue" id="_ref_4461"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>p</var>, <var>O</var>) is <emu-val>true</emu-val>, then<ol><li>Return <emu-val>false</emu-val>.</li></ol></li><li>Else,<ol><li>If <var>p</var>.<var class="field">[[GetPrototypeOf]]</var> is not the <emu-xref href="#ordinary-object" id="_ref_4462"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> internal method defined in <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof" id="_ref_271"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof">10.1.1</a></emu-xref>, set <var>done</var> to <emu-val>true</emu-val>.</li><li>Else, set <var>p</var> to <var>p</var>.<var class="field">[[Prototype]]</var>.</li></ol></li></ol></li><li>Set <var>O</var>.<var class="field">[[Prototype]]</var> to <var>V</var>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The loop in step <emu-xref href="#step-ordinarysetprototypeof-loop" id="_ref_272"><a href="ordinary-and-exotic-objects-behaviours.html#step-ordinarysetprototypeof-loop">7</a></emu-xref> guarantees that there will be no cycles in any prototype chain that only includes objects that use the <emu-xref href="#ordinary-object" id="_ref_4463"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> definitions for <var class="field">[[GetPrototypeOf]]</var> and <var class="field">[[SetPrototypeOf]]</var>.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-isextensible" type="internal method">
<h1><span class="secnum">10.1.3</span> <var class="field">[[IsExtensible]]</var> ( )</h1>
<p>The <var class="field">[[IsExtensible]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4464"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4465"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-xref aoid="OrdinaryIsExtensible" id="_ref_4466"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryisextensible">OrdinaryIsExtensible</a></emu-xref>(<var>O</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinaryisextensible" type="abstract operation" aoid="OrdinaryIsExtensible">
<h1><span class="secnum">10.1.3.1</span> OrdinaryIsExtensible ( <var>O</var> )</h1>
<p>The abstract operation OrdinaryIsExtensible takes argument <var>O</var> (an Object) and returns a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <var>O</var>.<var class="field">[[Extensible]]</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-preventextensions" type="internal method">
<h1><span class="secnum">10.1.4</span> <var class="field">[[PreventExtensions]]</var> ( )</h1>
<p>The <var class="field">[[PreventExtensions]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4467"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4468"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-val>true</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-xref aoid="OrdinaryPreventExtensions" id="_ref_4469"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarypreventextensions">OrdinaryPreventExtensions</a></emu-xref>(<var>O</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinarypreventextensions" type="abstract operation" aoid="OrdinaryPreventExtensions">
<h1><span class="secnum">10.1.4.1</span> OrdinaryPreventExtensions ( <var>O</var> )</h1>
<p>The abstract operation OrdinaryPreventExtensions takes argument <var>O</var> (an Object) and returns <emu-val>true</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Set <var>O</var>.<var class="field">[[Extensible]]</var> to <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-getownproperty-p" type="internal method">
<h1><span class="secnum">10.1.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[GetOwnProperty]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4470"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_4471"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4472"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4473"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-xref aoid="OrdinaryGetOwnProperty" id="_ref_4474"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a></emu-xref>(<var>O</var>, <var>P</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinarygetownproperty" type="abstract operation" aoid="OrdinaryGetOwnProperty">
<h1><span class="secnum">10.1.5.1</span> OrdinaryGetOwnProperty ( <var>O</var>, <var>P</var> )</h1>
<p>The abstract operation OrdinaryGetOwnProperty takes arguments <var>O</var> (an Object) and <var>P</var> (a <emu-xref href="#property-key" id="_ref_4475"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4476"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>O</var> does not have an own property with key <var>P</var>, return <emu-val>undefined</emu-val>.</li><li>Let <var>D</var> be a newly created <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4477"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> with no fields.</li><li>Let <var>X</var> be <var>O</var>'s own property whose key is <var>P</var>.</li><li>If <var>X</var> is a <emu-xref href="#sec-object-type" id="_ref_4478"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref>, then<ol><li>Set <var>D</var>.<var class="field">[[Value]]</var> to the value of <var>X</var>'s <var class="field">[[Value]]</var> attribute.</li><li>Set <var>D</var>.<var class="field">[[Writable]]</var> to the value of <var>X</var>'s <var class="field">[[Writable]]</var> attribute.</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_4479"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>X</var> is an <emu-xref href="#sec-object-type" id="_ref_4480"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref>.</li><li>Set <var>D</var>.<var class="field">[[Get]]</var> to the value of <var>X</var>'s <var class="field">[[Get]]</var> attribute.</li><li>Set <var>D</var>.<var class="field">[[Set]]</var> to the value of <var>X</var>'s <var class="field">[[Set]]</var> attribute.</li></ol></li><li>Set <var>D</var>.<var class="field">[[Enumerable]]</var> to the value of <var>X</var>'s <var class="field">[[Enumerable]]</var> attribute.</li><li>Set <var>D</var>.<var class="field">[[Configurable]]</var> to the value of <var>X</var>'s <var class="field">[[Configurable]]</var> attribute.</li><li>Return <var>D</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc" type="internal method">
<h1><span class="secnum">10.1.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</h1>
<p>The <var class="field">[[DefineOwnProperty]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4481"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_4482"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4483"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4484"><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_4485"><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>Return ?&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_4486"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty" class="e-user-code">OrdinaryDefineOwnProperty</a></emu-xref>(<var>O</var>, <var>P</var>, <var>Desc</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinarydefineownproperty" type="abstract operation" aoid="OrdinaryDefineOwnProperty">
<h1><span class="secnum">10.1.6.1</span> OrdinaryDefineOwnProperty ( <var>O</var>, <var>P</var>, <var>Desc</var> )</h1>
<p>The abstract operation OrdinaryDefineOwnProperty takes arguments <var>O</var> (an Object), <var>P</var> (a <emu-xref href="#property-key" id="_ref_4487"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4488"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4489"><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_4490"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>current</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>Let <var>extensible</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_4491"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>O</var>).</li><li>Return <emu-xref aoid="ValidateAndApplyPropertyDescriptor" id="_ref_4492"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validateandapplypropertydescriptor">ValidateAndApplyPropertyDescriptor</a></emu-xref>(<var>O</var>, <var>P</var>, <var>extensible</var>, <var>Desc</var>, <var>current</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-iscompatiblepropertydescriptor" type="abstract operation" aoid="IsCompatiblePropertyDescriptor">
<h1><span class="secnum">10.1.6.2</span> IsCompatiblePropertyDescriptor ( <var>Extensible</var>, <var>Desc</var>, <var>Current</var> )</h1>
<p>The abstract operation IsCompatiblePropertyDescriptor takes arguments <var>Extensible</var> (a Boolean), <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4493"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>), and <var>Current</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4494"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>) and returns a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-xref aoid="ValidateAndApplyPropertyDescriptor" id="_ref_4495"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validateandapplypropertydescriptor">ValidateAndApplyPropertyDescriptor</a></emu-xref>(<emu-val>undefined</emu-val>, <emu-val>""</emu-val>, <var>Extensible</var>, <var>Desc</var>, <var>Current</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-validateandapplypropertydescriptor" type="abstract operation" aoid="ValidateAndApplyPropertyDescriptor">
<h1><span class="secnum">10.1.6.3</span> ValidateAndApplyPropertyDescriptor ( <var>O</var>, <var>P</var>, <var>extensible</var>, <var>Desc</var>, <var>current</var> )</h1>
<p>The abstract operation ValidateAndApplyPropertyDescriptor takes arguments <var>O</var> (an Object or <emu-val>undefined</emu-val>), <var>P</var> (a <emu-xref href="#property-key" id="_ref_4496"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), <var>extensible</var> (a Boolean), <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4497"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>), and <var>current</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4498"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>) and returns a Boolean. It returns <emu-val>true</emu-val> if and only if <var>Desc</var> can be applied as the property of an object with specified <var>extensibility</var> and current property <var>current</var> while upholding <emu-xref href="#sec-invariants-of-the-essential-internal-methods" id="_ref_273"><a href="ecmascript-data-types-and-values.html#sec-invariants-of-the-essential-internal-methods">invariants</a></emu-xref>. When such application is possible and <var>O</var> is not <emu-val>undefined</emu-val>, it is performed for the property named <var>P</var> (which is created if necessary). It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4499"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>P</var> is a <emu-xref href="#property-key" id="_ref_4500"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>.</li><li>If <var>current</var> is <emu-val>undefined</emu-val>, then<ol><li>If <var>extensible</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>O</var> is <emu-val>undefined</emu-val>, return <emu-val>true</emu-val>.</li><li>If <emu-xref aoid="IsAccessorDescriptor" id="_ref_4501"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>Desc</var>) is <emu-val>true</emu-val>, then<ol><li>Create an own <emu-xref href="#sec-object-type" id="_ref_4502"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> named <var>P</var> of object <var>O</var> whose <var class="field">[[Get]]</var>, <var class="field">[[Set]]</var>, <var class="field">[[Enumerable]]</var>, and <var class="field">[[Configurable]]</var> attributes are set to the value of the corresponding field in <var>Desc</var> if <var>Desc</var> has that field, or to the attribute's <emu-xref href="#table-object-property-attributes" id="_ref_274"><a href="ecmascript-data-types-and-values.html#table-object-property-attributes">default value</a></emu-xref> otherwise.</li></ol></li><li>Else,<ol><li>Create an own <emu-xref href="#sec-object-type" id="_ref_4503"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref> named <var>P</var> of object <var>O</var> whose <var class="field">[[Value]]</var>, <var class="field">[[Writable]]</var>, <var class="field">[[Enumerable]]</var>, and <var class="field">[[Configurable]]</var> attributes are set to the value of the corresponding field in <var>Desc</var> if <var>Desc</var> has that field, or to the attribute's <emu-xref href="#table-object-property-attributes" id="_ref_275"><a href="ecmascript-data-types-and-values.html#table-object-property-attributes">default value</a></emu-xref> otherwise.</li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></li><li><emu-xref href="#assert" id="_ref_4504"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>current</var> is a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4505"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">fully populated Property Descriptor</a></emu-xref>.</li><li>If <var>Desc</var> does not have any fields, return <emu-val>true</emu-val>.</li><li>If <var>current</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, then<ol><li>If <var>Desc</var> has a <var class="field">[[Configurable]]</var> field and <var>Desc</var>.<var class="field">[[Configurable]]</var> is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has an <var class="field">[[Enumerable]]</var> field and <var>Desc</var>.<var class="field">[[Enumerable]]</var> is not <var>current</var>.<var class="field">[[Enumerable]]</var>, return <emu-val>false</emu-val>.</li><li>If <emu-xref aoid="IsGenericDescriptor" id="_ref_4506"><a href="ecmascript-data-types-and-values.html#sec-isgenericdescriptor">IsGenericDescriptor</a></emu-xref>(<var>Desc</var>) is <emu-val>false</emu-val> and <emu-xref aoid="IsAccessorDescriptor" id="_ref_4507"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>Desc</var>) is not <emu-xref aoid="IsAccessorDescriptor" id="_ref_4508"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>current</var>), return <emu-val>false</emu-val>.</li><li>If <emu-xref aoid="IsAccessorDescriptor" id="_ref_4509"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>current</var>) is <emu-val>true</emu-val>, then<ol><li>If <var>Desc</var> has a <var class="field">[[Get]]</var> field and <emu-xref aoid="SameValue" id="_ref_4510"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>Desc</var>.<var class="field">[[Get]]</var>, <var>current</var>.<var class="field">[[Get]]</var>) is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has a <var class="field">[[Set]]</var> field and <emu-xref aoid="SameValue" id="_ref_4511"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>Desc</var>.<var class="field">[[Set]]</var>, <var>current</var>.<var class="field">[[Set]]</var>) is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li></ol></li><li>Else if <var>current</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, then<ol><li>If <var>Desc</var> has a <var class="field">[[Writable]]</var> field and <var>Desc</var>.<var class="field">[[Writable]]</var> is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>NOTE: <emu-xref aoid="SameValue" id="_ref_4512"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref> returns <emu-val>true</emu-val> for <emu-val>NaN</emu-val> values which may be distinguishable by other means. Returning here ensures that any existing property of <var>O</var> remains unmodified.</li><li>If <var>Desc</var> has a <var class="field">[[Value]]</var> field, return <emu-xref aoid="SameValue" id="_ref_4513"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>Desc</var>.<var class="field">[[Value]]</var>, <var>current</var>.<var class="field">[[Value]]</var>).</li></ol></li></ol></li><li>If <var>O</var> is not <emu-val>undefined</emu-val>, then<ol><li>If <emu-xref aoid="IsDataDescriptor" id="_ref_4514"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>current</var>) is <emu-val>true</emu-val> and <emu-xref aoid="IsAccessorDescriptor" id="_ref_4515"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>Desc</var>) is <emu-val>true</emu-val>, then<ol><li>If <var>Desc</var> has a <var class="field">[[Configurable]]</var> field, let <var>configurable</var> be <var>Desc</var>.<var class="field">[[Configurable]]</var>; else let <var>configurable</var> be <var>current</var>.<var class="field">[[Configurable]]</var>.</li><li>If <var>Desc</var> has an <var class="field">[[Enumerable]]</var> field, let <var>enumerable</var> be <var>Desc</var>.<var class="field">[[Enumerable]]</var>; else let <var>enumerable</var> be <var>current</var>.<var class="field">[[Enumerable]]</var>.</li><li>Replace the property named <var>P</var> of object <var>O</var> with an <emu-xref href="#sec-object-type" id="_ref_4516"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> whose <var class="field">[[Configurable]]</var> and <var class="field">[[Enumerable]]</var> attributes are set to <var>configurable</var> and <var>enumerable</var>, respectively, and whose <var class="field">[[Get]]</var> and <var class="field">[[Set]]</var> attributes are set to the value of the corresponding field in <var>Desc</var> if <var>Desc</var> has that field, or to the attribute's <emu-xref href="#table-object-property-attributes" id="_ref_276"><a href="ecmascript-data-types-and-values.html#table-object-property-attributes">default value</a></emu-xref> otherwise.</li></ol></li><li>Else if <emu-xref aoid="IsAccessorDescriptor" id="_ref_4517"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>current</var>) is <emu-val>true</emu-val> and <emu-xref aoid="IsDataDescriptor" id="_ref_4518"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>Desc</var>) is <emu-val>true</emu-val>, then<ol><li>If <var>Desc</var> has a <var class="field">[[Configurable]]</var> field, let <var>configurable</var> be <var>Desc</var>.<var class="field">[[Configurable]]</var>; else let <var>configurable</var> be <var>current</var>.<var class="field">[[Configurable]]</var>.</li><li>If <var>Desc</var> has an <var class="field">[[Enumerable]]</var> field, let <var>enumerable</var> be <var>Desc</var>.<var class="field">[[Enumerable]]</var>; else let <var>enumerable</var> be <var>current</var>.<var class="field">[[Enumerable]]</var>.</li><li>Replace the property named <var>P</var> of object <var>O</var> with a <emu-xref href="#sec-object-type" id="_ref_4519"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref> whose <var class="field">[[Configurable]]</var> and <var class="field">[[Enumerable]]</var> attributes are set to <var>configurable</var> and <var>enumerable</var>, respectively, and whose <var class="field">[[Value]]</var> and <var class="field">[[Writable]]</var> attributes are set to the value of the corresponding field in <var>Desc</var> if <var>Desc</var> has that field, or to the attribute's <emu-xref href="#table-object-property-attributes" id="_ref_277"><a href="ecmascript-data-types-and-values.html#table-object-property-attributes">default value</a></emu-xref> otherwise.</li></ol></li><li>Else,<ol><li>For each field of <var>Desc</var>, set the corresponding attribute of the property named <var>P</var> of object <var>O</var> to the value of the field.</li></ol></li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-hasproperty-p" type="internal method">
<h1><span class="secnum">10.1.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[HasProperty]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4520"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_4521"><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_4522"><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_4523"><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>Return ?&nbsp;<emu-xref aoid="OrdinaryHasProperty" id="_ref_4524"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryhasproperty" class="e-user-code">OrdinaryHasProperty</a></emu-xref>(<var>O</var>, <var>P</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinaryhasproperty" type="abstract operation" aoid="OrdinaryHasProperty">
<h1><span class="secnum">10.1.7.1</span> OrdinaryHasProperty ( <var>O</var>, <var>P</var> )</h1>
<p>The abstract operation OrdinaryHasProperty takes arguments <var>O</var> (an Object) and <var>P</var> (a <emu-xref href="#property-key" id="_ref_4525"><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_4526"><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_4527"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>hasOwn</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>hasOwn</var> is not <emu-val>undefined</emu-val>, return <emu-val>true</emu-val>.</li><li>Let <var>parent</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li><li>If <var>parent</var> is not <emu-val>null</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>parent</var>.<var class="field">[[HasProperty]]</var>(<var>P</var>)</span>.</li></ol></li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver" type="internal method">
<h1><span class="secnum">10.1.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Get]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4528"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_4529"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4530"><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_4531"><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_4532"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4533"><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>Return ?&nbsp;<emu-xref aoid="OrdinaryGet" id="_ref_4534"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryget" class="e-user-code">OrdinaryGet</a></emu-xref>(<var>O</var>, <var>P</var>, <var>Receiver</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinaryget" type="abstract operation" aoid="OrdinaryGet">
<h1><span class="secnum">10.1.8.1</span> OrdinaryGet ( <var>O</var>, <var>P</var>, <var>Receiver</var> )</h1>
<p>The abstract operation OrdinaryGet takes arguments <var>O</var> (an Object), <var>P</var> (a <emu-xref href="#property-key" id="_ref_4535"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4536"><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_4537"><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_4538"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4539"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>desc</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>desc</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>parent</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li><li>If <var>parent</var> is <emu-val>null</emu-val>, return <emu-val>undefined</emu-val>.</li><li>Return ?&nbsp;<span class="e-user-code"><var>parent</var>.<var class="field">[[Get]]</var>(<var>P</var>, <var>Receiver</var>)</span>.</li></ol></li><li>If <emu-xref aoid="IsDataDescriptor" id="_ref_4540"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>desc</var>) is <emu-val>true</emu-val>, return <var>desc</var>.<var class="field">[[Value]]</var>.</li><li><emu-xref href="#assert" id="_ref_4541"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsAccessorDescriptor" id="_ref_4542"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>desc</var>) is <emu-val>true</emu-val>.</li><li>Let <var>getter</var> be <var>desc</var>.<var class="field">[[Get]]</var>.</li><li>If <var>getter</var> is <emu-val>undefined</emu-val>, return <emu-val>undefined</emu-val>.</li><li>Return ?&nbsp;<emu-xref aoid="Call" id="_ref_4543"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>getter</var>, <var>Receiver</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-set-p-v-receiver" type="internal method">
<h1><span class="secnum">10.1.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Set]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4544"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_4545"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), <var>V</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4546"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4547"><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_4548"><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_4549"><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>Return ?&nbsp;<emu-xref aoid="OrdinarySet" id="_ref_4550"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryset" class="e-user-code">OrdinarySet</a></emu-xref>(<var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinaryset" type="abstract operation" aoid="OrdinarySet">
<h1><span class="secnum">10.1.9.1</span> OrdinarySet ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var> )</h1>
<p>The abstract operation OrdinarySet takes arguments <var>O</var> (an Object), <var>P</var> (a <emu-xref href="#property-key" id="_ref_4551"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), <var>V</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4552"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4553"><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_4554"><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_4555"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>ownDesc</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>Return ?&nbsp;<emu-xref aoid="OrdinarySetWithOwnDescriptor" id="_ref_4556"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarysetwithowndescriptor" class="e-user-code">OrdinarySetWithOwnDescriptor</a></emu-xref>(<var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>, <var>ownDesc</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-ordinarysetwithowndescriptor" type="abstract operation" aoid="OrdinarySetWithOwnDescriptor">
<h1><span class="secnum">10.1.9.2</span> OrdinarySetWithOwnDescriptor ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>, <var>ownDesc</var> )</h1>
<p>The abstract operation OrdinarySetWithOwnDescriptor takes arguments <var>O</var> (an Object), <var>P</var> (a <emu-xref href="#property-key" id="_ref_4557"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), <var>V</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4558"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4559"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>ownDesc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_4560"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4561"><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_4562"><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>ownDesc</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>parent</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li><li>If <var>parent</var> is not <emu-val>null</emu-val>, return ?&nbsp;<span class="e-user-code"><var>parent</var>.<var class="field">[[Set]]</var>(<var>P</var>, <var>V</var>, <var>Receiver</var>)</span>.</li><li>Set <var>ownDesc</var> to the PropertyDescriptor { <var class="field">[[Value]]</var>: <emu-val>undefined</emu-val>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}.</li></ol></li><li>If <emu-xref aoid="IsDataDescriptor" id="_ref_4563"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>ownDesc</var>) is <emu-val>true</emu-val>, then<ol><li>If <var>ownDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Receiver</var> <emu-xref href="#sec-object-type" id="_ref_4564"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, return <emu-val>false</emu-val>.</li><li>Let <var>existingDescriptor</var> be ?&nbsp;<span class="e-user-code"><var>Receiver</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>existingDescriptor</var> is <emu-val>undefined</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_4565"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>Receiver</var> does not currently have a property <var>P</var>.</li><li>Return ?&nbsp;<emu-xref aoid="CreateDataProperty" id="_ref_4566"><a href="abstract-operations.html#sec-createdataproperty" class="e-user-code">CreateDataProperty</a></emu-xref>(<var>Receiver</var>, <var>P</var>, <var>V</var>).</li></ol></li><li>If <emu-xref aoid="IsAccessorDescriptor" id="_ref_4567"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>existingDescriptor</var>) is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>existingDescriptor</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Let <var>valueDesc</var> be the PropertyDescriptor { <var class="field">[[Value]]</var>: <var>V</var>&nbsp;}.</li><li>Return ?&nbsp;<span class="e-user-code"><var>Receiver</var>.<var class="field">[[DefineOwnProperty]]</var>(<var>P</var>, <var>valueDesc</var>)</span>.</li></ol></li><li><emu-xref href="#assert" id="_ref_4568"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsAccessorDescriptor" id="_ref_4569"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>ownDesc</var>) is <emu-val>true</emu-val>.</li><li>Let <var>setter</var> be <var>ownDesc</var>.<var class="field">[[Set]]</var>.</li><li>If <var>setter</var> is <emu-val>undefined</emu-val>, return <emu-val>false</emu-val>.</li><li>Perform ?&nbsp;<emu-xref aoid="Call" id="_ref_4570"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>setter</var>, <var>Receiver</var>, « <var>V</var>&nbsp;»).</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-delete-p" type="internal method">
<h1><span class="secnum">10.1.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[Delete]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4571"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_4572"><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_4573"><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_4574"><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>Return ?&nbsp;<emu-xref aoid="OrdinaryDelete" id="_ref_4575"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydelete" class="e-user-code">OrdinaryDelete</a></emu-xref>(<var>O</var>, <var>P</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinarydelete" type="abstract operation" aoid="OrdinaryDelete">
<h1><span class="secnum">10.1.10.1</span> OrdinaryDelete ( <var>O</var>, <var>P</var> )</h1>
<p>The abstract operation OrdinaryDelete takes arguments <var>O</var> (an Object) and <var>P</var> (a <emu-xref href="#property-key" id="_ref_4576"><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_4577"><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_4578"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>desc</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>desc</var> is <emu-val>undefined</emu-val>, return <emu-val>true</emu-val>.</li><li>If <var>desc</var>.<var class="field">[[Configurable]]</var> is <emu-val>true</emu-val>, then<ol><li>Remove the own property with name <var>P</var> from <var>O</var>.</li><li>Return <emu-val>true</emu-val>.</li></ol></li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys" type="internal method">
<h1><span class="secnum">10.1.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</h1>
<p>The <var class="field">[[OwnPropertyKeys]]</var> internal method of an <emu-xref href="#ordinary-object" id="_ref_4579"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> <var>O</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4580"><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_4581"><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_4582"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-xref aoid="OrdinaryOwnPropertyKeys" id="_ref_4583"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryownpropertykeys">OrdinaryOwnPropertyKeys</a></emu-xref>(<var>O</var>).</li></ol></emu-alg>
<emu-clause id="sec-ordinaryownpropertykeys" type="abstract operation" aoid="OrdinaryOwnPropertyKeys">
<h1><span class="secnum">10.1.11.1</span> OrdinaryOwnPropertyKeys ( <var>O</var> )</h1>
<p>The abstract operation OrdinaryOwnPropertyKeys takes argument <var>O</var> (an Object) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4584"><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_4585"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>keys</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4586"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each own <emu-xref href="#property-key" id="_ref_4587"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>O</var> such that <var>P</var> is an <emu-xref href="#array-index" id="_ref_4588"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref>, in ascending numeric index order, do<ol><li>Append <var>P</var> to <var>keys</var>.</li></ol></li><li>For each own <emu-xref href="#property-key" id="_ref_4589"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>O</var> such that <var>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_4590"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> and <var>P</var> is not an <emu-xref href="#array-index" id="_ref_4591"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref>, in ascending chronological order of property creation, do<ol><li>Append <var>P</var> to <var>keys</var>.</li></ol></li><li>For each own <emu-xref href="#property-key" id="_ref_4592"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>O</var> such that <var>P</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_4593"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, in ascending chronological order of property creation, do<ol><li>Append <var>P</var> to <var>keys</var>.</li></ol></li><li>Return <var>keys</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ordinaryobjectcreate" type="abstract operation" oldids="sec-objectcreate" aoid="OrdinaryObjectCreate"><span id="sec-objectcreate"></span>
<h1><span class="secnum">10.1.12</span> OrdinaryObjectCreate ( <var>proto</var> [ , <var>additionalInternalSlotsList</var> ] )</h1>
<p>The abstract operation OrdinaryObjectCreate takes argument <var>proto</var> (an Object or <emu-val>null</emu-val>) and optional argument <var>additionalInternalSlotsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4594"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of names of internal slots) and returns an Object. It is used to specify the runtime creation of new <emu-xref href="#ordinary-object" id="_ref_4595"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref>. <var>additionalInternalSlotsList</var> contains the names of additional internal slots that must be defined as part of the object, beyond <var class="field">[[Prototype]]</var> and <var class="field">[[Extensible]]</var>. If <var>additionalInternalSlotsList</var> is not provided, a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4596"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> is used. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>internalSlotsList</var> be « <var class="field">[[Prototype]]</var>, <var class="field">[[Extensible]]</var>&nbsp;».</li><li>If <var>additionalInternalSlotsList</var> is present, set <var>internalSlotsList</var> to the <emu-xref href="#list-concatenation" id="_ref_4597"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>internalSlotsList</var> and <var>additionalInternalSlotsList</var>.</li><li>Let <var>O</var> be <emu-xref aoid="MakeBasicObject" id="_ref_4598"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref>(<var>internalSlotsList</var>).</li><li>Set <var>O</var>.<var class="field">[[Prototype]]</var> to <var>proto</var>.</li><li>Return <var>O</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Although OrdinaryObjectCreate does little more than call <emu-xref aoid="MakeBasicObject" id="_ref_4599"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref>, its use communicates the intention to create an <emu-xref href="#ordinary-object" id="_ref_4600"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>, and not an exotic one. Thus, within this specification, it is not called by any algorithm that subsequently modifies the internal methods of the object in ways that would make the result non-ordinary. Operations that create <emu-xref href="#exotic-object" id="_ref_4601"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic objects</a></emu-xref> invoke <emu-xref aoid="MakeBasicObject" id="_ref_4602"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref> directly.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-ordinarycreatefromconstructor" type="abstract operation" aoid="OrdinaryCreateFromConstructor">
<h1><span class="secnum">10.1.13</span> OrdinaryCreateFromConstructor ( <var>constructor</var>, <var>intrinsicDefaultProto</var> [ , <var>internalSlotsList</var> ] )</h1>
<p>The abstract operation OrdinaryCreateFromConstructor takes arguments <var>constructor</var> (a <emu-xref href="#function-object" id="_ref_4603"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>intrinsicDefaultProto</var> (a String) and optional argument <var>internalSlotsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4604"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of names of internal slots) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4605"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4606"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It creates an <emu-xref href="#ordinary-object" id="_ref_4607"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> whose <var class="field">[[Prototype]]</var> value is retrieved from a <emu-xref href="#constructor" id="_ref_4608"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>'s <emu-val>"prototype"</emu-val> property, if it exists. Otherwise the intrinsic named by <var>intrinsicDefaultProto</var> is used for <var class="field">[[Prototype]]</var>. <var>internalSlotsList</var> contains the names of additional internal slots that must be defined as part of the object. If <var>internalSlotsList</var> is not provided, a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4609"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> is used. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4610"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>intrinsicDefaultProto</var> is this specification's name of an intrinsic object. The corresponding object must be an intrinsic that is intended to be used as the <var class="field">[[Prototype]]</var> value of an object.</li><li>Let <var>proto</var> be ?&nbsp;<emu-xref aoid="GetPrototypeFromConstructor" id="_ref_4611"><a href="ordinary-and-exotic-objects-behaviours.html#sec-getprototypefromconstructor" class="e-user-code">GetPrototypeFromConstructor</a></emu-xref>(<var>constructor</var>, <var>intrinsicDefaultProto</var>).</li><li>If <var>internalSlotsList</var> is present, let <var>slotsList</var> be <var>internalSlotsList</var>.</li><li>Else, let <var>slotsList</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4612"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Return <emu-xref aoid="OrdinaryObjectCreate" id="_ref_4613"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<var>proto</var>, <var>slotsList</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-getprototypefromconstructor" type="abstract operation" aoid="GetPrototypeFromConstructor">
<h1><span class="secnum">10.1.14</span> GetPrototypeFromConstructor ( <var>constructor</var>, <var>intrinsicDefaultProto</var> )</h1>
<p>The abstract operation GetPrototypeFromConstructor takes arguments <var>constructor</var> (a <emu-xref href="#function-object" id="_ref_4614"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>intrinsicDefaultProto</var> (a String) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4615"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4616"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It determines the <var class="field">[[Prototype]]</var> value that should be used to create an object corresponding to a specific <emu-xref href="#constructor" id="_ref_4617"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>. The value is retrieved from the <emu-xref href="#constructor" id="_ref_4618"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>'s <emu-val>"prototype"</emu-val> property, if it exists. Otherwise the intrinsic named by <var>intrinsicDefaultProto</var> is used for <var class="field">[[Prototype]]</var>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4619"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>intrinsicDefaultProto</var> is this specification's name of an intrinsic object. The corresponding object must be an intrinsic that is intended to be used as the <var class="field">[[Prototype]]</var> value of an object.</li><li>Let <var>proto</var> be ?&nbsp;<emu-xref aoid="Get" id="_ref_4620"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>constructor</var>, <emu-val>"prototype"</emu-val>).</li><li>If <var>proto</var> <emu-xref href="#sec-object-type" id="_ref_4621"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, then<ol><li>Let <var>realm</var> be ?&nbsp;<emu-xref aoid="GetFunctionRealm" id="_ref_4622"><a href="abstract-operations.html#sec-getfunctionrealm">GetFunctionRealm</a></emu-xref>(<var>constructor</var>).</li><li>Set <var>proto</var> to <var>realm</var>'s intrinsic object named <var>intrinsicDefaultProto</var>.</li></ol></li><li>Return <var>proto</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>If <var>constructor</var> does not supply a <var class="field">[[Prototype]]</var> value, the default value that is used is obtained from the <emu-xref href="#realm" id="_ref_4623"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref> of the <var>constructor</var> function rather than from the <emu-xref href="#running-execution-context" id="_ref_4624"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-requireinternalslot" type="abstract operation" aoid="RequireInternalSlot">
<h1><span class="secnum">10.1.15</span> RequireInternalSlot ( <var>O</var>, <var>internalSlot</var> )</h1>
<p>The abstract operation RequireInternalSlot takes arguments <var>O</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4625"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>internalSlot</var> (an internal slot name) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4626"><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 a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4627"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It throws an exception unless <var>O</var> <emu-xref href="#sec-object-type" id="_ref_4628"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref> and has the given internal slot. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>O</var> <emu-xref href="#sec-object-type" id="_ref_4629"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>O</var> does not have an <var>internalSlot</var> internal slot, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ecmascript-function-objects">
<h1><span class="secnum">10.2</span> ECMAScript Function Objects</h1>
<p>ECMAScript <emu-xref href="#function-object" id="_ref_4630"><a href="ecmascript-data-types-and-values.html#function-object">function objects</a></emu-xref> encapsulate parameterized ECMAScript code closed over a lexical environment and support the dynamic evaluation of that code. An ECMAScript <emu-xref href="#function-object" id="_ref_4631"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> is an <emu-xref href="#ordinary-object" id="_ref_4632"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> and has the same internal slots and the same internal methods as other <emu-xref href="#ordinary-object" id="_ref_4633"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref>. The code of an ECMAScript <emu-xref href="#function-object" id="_ref_4634"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> may be either <emu-xref href="#sec-strict-mode-code" id="_ref_4635"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref> (<emu-xref href="#sec-strict-mode-code" id="_ref_278"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">11.2.2</a></emu-xref>) or <emu-xref href="#non-strict-code" id="_ref_4636"><a href="ecmascript-language-source-code.html#non-strict-code">non-strict code</a></emu-xref>. An ECMAScript <emu-xref href="#function-object" id="_ref_4637"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> whose code is <emu-xref href="#sec-strict-mode-code" id="_ref_4638"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref> is called a <dfn id="strict-function" variants="strict functions" tabindex="-1">strict function</dfn>. One whose code is not <emu-xref href="#sec-strict-mode-code" id="_ref_4639"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref> is called a <dfn id="non-strict-function" variants="non-strict functions" tabindex="-1">non-strict function</dfn>.</p>
<p>In addition to <var class="field">[[Extensible]]</var> and <var class="field">[[Prototype]]</var>, ECMAScript <emu-xref href="#function-object" id="_ref_4640"><a href="ecmascript-data-types-and-values.html#function-object">function objects</a></emu-xref> also have the internal slots listed in <emu-xref href="#table-internal-slots-of-ecmascript-function-objects" id="_ref_279"><a href="ordinary-and-exotic-objects-behaviours.html#table-internal-slots-of-ecmascript-function-objects">Table 25</a></emu-xref>.</p>
<emu-table id="table-internal-slots-of-ecmascript-function-objects" caption="Internal Slots of ECMAScript Function Objects" oldids="table-27"><figure><figcaption>Table 25: Internal Slots of ECMAScript Function Objects</figcaption><span id="table-27"></span>
<table>
<thead>
<tr>
<th>
Internal Slot
</th>
<th>
Type
</th>
<th>
Description
</th>
</tr>
</thead>
<tbody><tr>
<td>
<var class="field">[[Environment]]</var>
</td>
<td>
an <emu-xref href="#sec-environment-records" id="_ref_4641"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>
</td>
<td>
The <emu-xref href="#sec-environment-records" id="_ref_4642"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> that the function was closed over. Used as the outer environment when evaluating the code of the function.
</td>
</tr>
<tr>
<td>
<var class="field">[[PrivateEnvironment]]</var>
</td>
<td>
a <emu-xref href="#privateenvironment-record" id="_ref_4643"><a href="executable-code-and-execution-contexts.html#privateenvironment-record">PrivateEnvironment Record</a></emu-xref> or <emu-val>null</emu-val>
</td>
<td>
The <emu-xref href="#privateenvironment-record" id="_ref_4644"><a href="executable-code-and-execution-contexts.html#privateenvironment-record">PrivateEnvironment Record</a></emu-xref> for <emu-xref href="#sec-private-names" id="_ref_4645"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Names</a></emu-xref> that the function was closed over. <emu-val>null</emu-val> if this function is not syntactically contained within a class. Used as the outer PrivateEnvironment for inner classes when evaluating the code of the function.
</td>
</tr>
<tr>
<td>
<var class="field">[[FormalParameters]]</var>
</td>
<td>
a <emu-xref href="#sec-syntactic-grammar" id="_ref_4646"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>
</td>
<td>
The root parse node of the source text that defines the function's formal parameter list.
</td>
</tr>
<tr>
<td>
<var class="field">[[ECMAScriptCode]]</var>
</td>
<td>
a <emu-xref href="#sec-syntactic-grammar" id="_ref_4647"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>
</td>
<td>
The root parse node of the source text that defines the function's body.
</td>
</tr>
<tr>
<td>
<var class="field">[[ConstructorKind]]</var>
</td>
<td>
<emu-const>base</emu-const> or <emu-const>derived</emu-const>
</td>
<td>
Whether or not the function is a derived class <emu-xref href="#constructor" id="_ref_4648"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>.
</td>
</tr>
<tr>
<td>
<var class="field">[[Realm]]</var>
</td>
<td>
a <emu-xref href="#realm-record" id="_ref_4649"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>
</td>
<td>
The <emu-xref href="#realm" id="_ref_4650"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref> in which the function was created and which provides any intrinsic objects that are accessed when evaluating the function.
</td>
</tr>
<tr>
<td>
<var class="field">[[ScriptOrModule]]</var>
</td>
<td>
a <emu-xref href="#script-record" id="_ref_4651"><a href="ecmascript-language-scripts-and-modules.html#script-record">Script Record</a></emu-xref> or a <emu-xref href="#sec-abstract-module-records" id="_ref_4652"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>
</td>
<td>
The script or module in which the function was created.
</td>
</tr>
<tr>
<td>
<var class="field">[[ThisMode]]</var>
</td>
<td>
<emu-const>lexical</emu-const>, <emu-const>strict</emu-const>, or <emu-const>global</emu-const>
</td>
<td>
Defines how <code>this</code> references are interpreted within the formal parameters and code body of the function. <emu-const>lexical</emu-const> means that <code>this</code> refers to the <emu-val>this</emu-val> value of a lexically enclosing function. <emu-const>strict</emu-const> means that the <emu-val>this</emu-val> value is used exactly as provided by an invocation of the function. <emu-const>global</emu-const> means that a <emu-val>this</emu-val> value of <emu-val>undefined</emu-val> or <emu-val>null</emu-val> is interpreted as a reference to the <emu-xref href="#sec-global-object" id="_ref_4653"><a href="global-object.html#sec-global-object">global object</a></emu-xref>, and any other <emu-val>this</emu-val> value is first passed to <emu-xref aoid="ToObject" id="_ref_4654"><a href="abstract-operations.html#sec-toobject">ToObject</a></emu-xref>.
</td>
</tr>
<tr>
<td>
<var class="field">[[Strict]]</var>
</td>
<td>
a Boolean
</td>
<td>
<emu-val>true</emu-val> if this is a <emu-xref href="#strict-function" id="_ref_4655"><a href="ordinary-and-exotic-objects-behaviours.html#strict-function">strict function</a></emu-xref>, <emu-val>false</emu-val> if this is a <emu-xref href="#non-strict-function" id="_ref_4656"><a href="ordinary-and-exotic-objects-behaviours.html#non-strict-function">non-strict function</a></emu-xref>.
</td>
</tr>
<tr>
<td>
<var class="field">[[HomeObject]]</var>
</td>
<td>
an Object
</td>
<td>
If the function uses <code>super</code>, this is the object whose <var class="field">[[GetPrototypeOf]]</var> provides the object where <code>super</code> property lookups begin.
</td>
</tr>
<tr>
<td>
<var class="field">[[SourceText]]</var>
</td>
<td>
a sequence of Unicode code points
</td>
<td>
The <emu-xref href="#sec-source-text" id="_ref_280"><a href="ecmascript-language-source-code.html#sec-source-text">source text</a></emu-xref> that defines the function.
</td>
</tr>
<tr>
<td>
<var class="field">[[Fields]]</var>
</td>
<td>
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4657"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-classfielddefinition-record-specification-type" id="_ref_4658"><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type">ClassFieldDefinition Records</a></emu-xref>
</td>
<td>
If the function is a class, this is a list of <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4659"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Records</a></emu-xref> representing the non-static fields and corresponding initializers of the class.
</td>
</tr>
<tr>
<td>
<var class="field">[[PrivateMethods]]</var>
</td>
<td>
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4660"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-privateelement-specification-type" id="_ref_4661"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElements</a></emu-xref>
</td>
<td>
If the function is a class, this is a list representing the non-static private methods and accessors of the class.
</td>
</tr>
<tr>
<td>
<var class="field">[[ClassFieldInitializerName]]</var>
</td>
<td>
a String, a Symbol, a <emu-xref href="#sec-private-names" id="_ref_4662"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>, or <emu-const>empty</emu-const>
</td>
<td>
If the function is created as the initializer of a class field, the name to use for <emu-xref aoid="NamedEvaluation" id="_ref_4663"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation">NamedEvaluation</a></emu-xref> of the field; <emu-const>empty</emu-const> otherwise.
</td>
</tr>
<tr>
<td>
<var class="field">[[IsClassConstructor]]</var>
</td>
<td>
a Boolean
</td>
<td>
Indicates whether the function is a class <emu-xref href="#constructor" id="_ref_4664"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>. (If <emu-val>true</emu-val>, invoking the function's <var class="field">[[Call]]</var> will immediately throw a <emu-val>TypeError</emu-val> exception.)
</td>
</tr>
</tbody></table>
</figure></emu-table>
<p>All ECMAScript <emu-xref href="#function-object" id="_ref_4665"><a href="ecmascript-data-types-and-values.html#function-object">function objects</a></emu-xref> have the <var class="field">[[Call]]</var> internal method defined here. ECMAScript functions that are also <emu-xref href="#constructor" id="_ref_4666"><a href="ecmascript-data-types-and-values.html#constructor">constructors</a></emu-xref> in addition have the <var class="field">[[Construct]]</var> internal method.</p>
<emu-clause id="sec-ecmascript-function-objects-call-thisargument-argumentslist" type="internal method">
<h1><span class="secnum">10.2.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</h1>
<p>The <var class="field">[[Call]]</var> internal method of an ECMAScript <emu-xref href="#function-object" id="_ref_4667"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> <var>F</var> takes arguments <var>thisArgument</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4668"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4669"><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_4670"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4671"><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_4672"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4673"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>callerContext</var> be the <emu-xref href="#running-execution-context" id="_ref_4674"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>calleeContext</var> be <emu-xref aoid="PrepareForOrdinaryCall" id="_ref_4675"><a href="ordinary-and-exotic-objects-behaviours.html#sec-prepareforordinarycall">PrepareForOrdinaryCall</a></emu-xref>(<var>F</var>, <emu-val>undefined</emu-val>).</li><li><emu-xref href="#assert" id="_ref_4676"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>calleeContext</var> is now the <emu-xref href="#running-execution-context" id="_ref_4677"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>If <var>F</var>.<var class="field">[[IsClassConstructor]]</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>error</var> be a newly created <emu-val>TypeError</emu-val> object.</li><li>NOTE: <var>error</var> is created in <var>calleeContext</var> with <var>F</var>'s associated <emu-xref href="#realm-record" id="_ref_4678"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>.</li><li>Remove <var>calleeContext</var> from the <emu-xref href="#execution-context-stack" id="_ref_4679"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> and restore <var>callerContext</var> as the <emu-xref href="#running-execution-context" id="_ref_4680"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Return <emu-xref aoid="ThrowCompletion" id="_ref_4681"><a href="ecmascript-data-types-and-values.html#sec-throwcompletion">ThrowCompletion</a></emu-xref>(<var>error</var>).</li></ol></li><li>Perform <emu-xref aoid="OrdinaryCallBindThis" id="_ref_4682"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallbindthis">OrdinaryCallBindThis</a></emu-xref>(<var>F</var>, <var>calleeContext</var>, <var>thisArgument</var>).</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_4683"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="OrdinaryCallEvaluateBody" id="_ref_4684"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallevaluatebody" class="e-user-code">OrdinaryCallEvaluateBody</a></emu-xref>(<var>F</var>, <var>argumentsList</var>)).</li><li id="step-call-pop-context-stack">Remove <var>calleeContext</var> from the <emu-xref href="#execution-context-stack" id="_ref_4685"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> and restore <var>callerContext</var> as the <emu-xref href="#running-execution-context" id="_ref_4686"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>If <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4687"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref>, return <var>result</var>.<var class="field">[[Value]]</var>.</li><li><emu-xref href="#assert" id="_ref_4688"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4689"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>.</li><li>Return ?&nbsp;<var>result</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>When <var>calleeContext</var> is removed from the <emu-xref href="#execution-context-stack" id="_ref_4690"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> in step <emu-xref href="#step-call-pop-context-stack" id="_ref_281"><a href="ordinary-and-exotic-objects-behaviours.html#step-call-pop-context-stack">7</a></emu-xref> it must not be destroyed if it is suspended and retained for later resumption by an accessible Generator.</p>
</div></emu-note>
<emu-clause id="sec-prepareforordinarycall" type="abstract operation" aoid="PrepareForOrdinaryCall">
<h1><span class="secnum">10.2.1.1</span> PrepareForOrdinaryCall ( <var>F</var>, <var>newTarget</var> )</h1>
<p>The abstract operation PrepareForOrdinaryCall takes arguments <var>F</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_4691"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>newTarget</var> (an Object or <emu-val>undefined</emu-val>) and returns an <emu-xref href="#sec-execution-contexts" id="_ref_4692"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>callerContext</var> be the <emu-xref href="#running-execution-context" id="_ref_4693"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>calleeContext</var> be a new <emu-xref href="#ecmascript-code-execution-context" id="_ref_4694"><a href="executable-code-and-execution-contexts.html#ecmascript-code-execution-context">ECMAScript code execution context</a></emu-xref>.</li><li>Set the Function of <var>calleeContext</var> to <var>F</var>.</li><li>Let <var>calleeRealm</var> be <var>F</var>.<var class="field">[[Realm]]</var>.</li><li>Set the <emu-xref href="#realm" id="_ref_4695"><a href="executable-code-and-execution-contexts.html#realm">Realm</a></emu-xref> of <var>calleeContext</var> to <var>calleeRealm</var>.</li><li>Set the ScriptOrModule of <var>calleeContext</var> to <var>F</var>.<var class="field">[[ScriptOrModule]]</var>.</li><li>Let <var>localEnv</var> be <emu-xref aoid="NewFunctionEnvironment" id="_ref_4696"><a href="executable-code-and-execution-contexts.html#sec-newfunctionenvironment">NewFunctionEnvironment</a></emu-xref>(<var>F</var>, <var>newTarget</var>).</li><li>Set the LexicalEnvironment of <var>calleeContext</var> to <var>localEnv</var>.</li><li>Set the VariableEnvironment of <var>calleeContext</var> to <var>localEnv</var>.</li><li>Set the PrivateEnvironment of <var>calleeContext</var> to <var>F</var>.<var class="field">[[PrivateEnvironment]]</var>.</li><li>If <var>callerContext</var> is not already suspended, suspend <var>callerContext</var>.</li><li>Push <var>calleeContext</var> onto the <emu-xref href="#execution-context-stack" id="_ref_4697"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>; <var>calleeContext</var> is now the <emu-xref href="#running-execution-context" id="_ref_4698"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>NOTE: Any exception objects produced after this point are associated with <var>calleeRealm</var>.</li><li>Return <var>calleeContext</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-ordinarycallbindthis" type="abstract operation" aoid="OrdinaryCallBindThis">
<h1><span class="secnum">10.2.1.2</span> OrdinaryCallBindThis ( <var>F</var>, <var>calleeContext</var>, <var>thisArgument</var> )</h1>
<p>The abstract operation OrdinaryCallBindThis takes arguments <var>F</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_4699"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>), <var>calleeContext</var> (an <emu-xref href="#sec-execution-contexts" id="_ref_4700"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref>), and <var>thisArgument</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4701"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>thisMode</var> be <var>F</var>.<var class="field">[[ThisMode]]</var>.</li><li>If <var>thisMode</var> is <emu-const>lexical</emu-const>, return <emu-const>unused</emu-const>.</li><li>Let <var>calleeRealm</var> be <var>F</var>.<var class="field">[[Realm]]</var>.</li><li>Let <var>localEnv</var> be the LexicalEnvironment of <var>calleeContext</var>.</li><li>If <var>thisMode</var> is <emu-const>strict</emu-const>, then<ol><li>Let <var>thisValue</var> be <var>thisArgument</var>.</li></ol></li><li>Else,<ol><li>If <var>thisArgument</var> is either <emu-val>undefined</emu-val> or <emu-val>null</emu-val>, then<ol><li>Let <var>globalEnv</var> be <var>calleeRealm</var>.<var class="field">[[GlobalEnv]]</var>.</li><li><emu-xref href="#assert" id="_ref_4702"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>globalEnv</var> is a <emu-xref href="#sec-global-environment-records" id="_ref_4703"><a href="executable-code-and-execution-contexts.html#sec-global-environment-records">Global Environment Record</a></emu-xref>.</li><li>Let <var>thisValue</var> be <var>globalEnv</var>.<var class="field">[[GlobalThisValue]]</var>.</li></ol></li><li>Else,<ol><li>Let <var>thisValue</var> be !&nbsp;<emu-xref aoid="ToObject" id="_ref_4704"><a href="abstract-operations.html#sec-toobject">ToObject</a></emu-xref>(<var>thisArgument</var>).</li><li>NOTE: <emu-xref aoid="ToObject" id="_ref_4705"><a href="abstract-operations.html#sec-toobject">ToObject</a></emu-xref> produces wrapper objects using <var>calleeRealm</var>.</li></ol></li></ol></li><li><emu-xref href="#assert" id="_ref_4706"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>localEnv</var> is a <emu-xref href="#sec-function-environment-records" id="_ref_4707"><a href="executable-code-and-execution-contexts.html#sec-function-environment-records">Function Environment Record</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_4708"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: The next step never returns an <emu-xref href="#sec-completion-record-specification-type" id="_ref_4709"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref> because <var>localEnv</var>.<var class="field">[[ThisBindingStatus]]</var> is not <emu-const>initialized</emu-const>.</li><li>Perform !&nbsp;<emu-xref aoid="BindThisValue" id="_ref_4710"><a href="executable-code-and-execution-contexts.html#sec-bindthisvalue">BindThisValue</a></emu-xref>(<var>localEnv</var>, <var>thisValue</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-evaluatebody" type="sdo" aoid="EvaluateBody">
<h1><span class="secnum">10.2.1.3</span> Runtime Semantics: EvaluateBody</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_4711"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> EvaluateBody takes arguments <var>functionObject</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_4712"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4713"><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_4714"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4715"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4716"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="FunctionBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xn8an8nx" id="prod-xc-5PFkl"><emu-nt id="_ref_19491"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateFunctionBody" id="_ref_4717"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluatefunctionbody" class="e-user-code">EvaluateFunctionBody</a></emu-xref> of <emu-nt id="_ref_19492"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> with arguments <var>functionObject</var> and <var>argumentsList</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ConciseBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="39f4t7jo" id="prod-ph5_rCcA"><emu-nt id="_ref_19493"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateConciseBody" id="_ref_4718"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateconcisebody" class="e-user-code">EvaluateConciseBody</a></emu-xref> of <emu-nt id="_ref_19494"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt> with arguments <var>functionObject</var> and <var>argumentsList</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="GeneratorBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqzbkm-h" id="prod-dp9uKN5f"><emu-nt id="_ref_19495"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateGeneratorBody" id="_ref_4719"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluategeneratorbody" class="e-user-code">EvaluateGeneratorBody</a></emu-xref> of <emu-nt id="_ref_19496"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> with arguments <var>functionObject</var> and <var>argumentsList</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncGeneratorBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqzbkm-h" id="prod-_F5bCEpP"><emu-nt id="_ref_19497"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateAsyncGeneratorBody" id="_ref_4720"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncgeneratorbody" class="e-user-code">EvaluateAsyncGeneratorBody</a></emu-xref> of <emu-nt id="_ref_19498"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> with arguments <var>functionObject</var> and <var>argumentsList</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncFunctionBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqzbkm-h" id="prod-V5mALOgb"><emu-nt id="_ref_19499"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateAsyncFunctionBody" id="_ref_4721"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncfunctionbody" class="e-user-code">EvaluateAsyncFunctionBody</a></emu-xref> of <emu-nt id="_ref_19500"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> with arguments <var>functionObject</var> and <var>argumentsList</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncConciseBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="39f4t7jo" id="prod--uh40sBe"><emu-nt id="_ref_19501"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="EvaluateAsyncConciseBody" id="_ref_4722"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncconcisebody" class="e-user-code">EvaluateAsyncConciseBody</a></emu-xref> of <emu-nt id="_ref_19502"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt> with arguments <var>functionObject</var> and <var>argumentsList</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Initializer">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="_d0ijvnh" id="prod-pu8sYeYA">
<emu-t>=</emu-t>
<emu-nt id="_ref_19503"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4723"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>argumentsList</var> is empty.</li><li><emu-xref href="#assert" id="_ref_4724"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>functionObject</var>.<var class="field">[[ClassFieldInitializerName]]</var> is not <emu-const>empty</emu-const>.</li><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_4725"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_19504"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>) is <emu-val>true</emu-val>, then<ol><li>Let <var>value</var> be ?&nbsp;<emu-xref aoid="NamedEvaluation" id="_ref_4726"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_19505"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> with argument <var>functionObject</var>.<var class="field">[[ClassFieldInitializerName]]</var>.</li></ol></li><li>Else,<ol><li>Let <var>rhs</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_4727"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_19506"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>value</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_4728"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rhs</var>).</li></ol></li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_4729"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<var>value</var>).</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Even though field initializers constitute a function boundary, calling <emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_4730"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation">FunctionDeclarationInstantiation</a></emu-xref> does not have any observable effect and so is omitted.</p>
</div></emu-note>
<emu-grammar><emu-production name="ClassStaticBlockBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockBody">ClassStaticBlockBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="oh0jsomm" id="prod-X0MRkB7d"><emu-nt id="_ref_19507"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4731"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>argumentsList</var> is empty.</li><li>Return ?&nbsp;<emu-xref aoid="EvaluateClassStaticBlockBody" id="_ref_4732"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateclassstaticblockbody" class="e-user-code">EvaluateClassStaticBlockBody</a></emu-xref> of <emu-nt id="_ref_19508"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockBody">ClassStaticBlockBody</a></emu-nt> with argument <var>functionObject</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-ordinarycallevaluatebody" type="abstract operation" aoid="OrdinaryCallEvaluateBody">
<h1><span class="secnum">10.2.1.4</span> OrdinaryCallEvaluateBody ( <var>F</var>, <var>argumentsList</var> )</h1>
<p>The abstract operation OrdinaryCallEvaluateBody takes arguments <var>F</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_4733"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4734"><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_4735"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4736"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4737"><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>Return ?&nbsp;<emu-xref aoid="EvaluateBody" id="_ref_4738"><a href="ordinary-and-exotic-objects-behaviours.html#sec-runtime-semantics-evaluatebody" class="e-user-code">EvaluateBody</a></emu-xref> of <var>F</var>.<var class="field">[[ECMAScriptCode]]</var> with arguments <var>F</var> and <var>argumentsList</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-ecmascript-function-objects-construct-argumentslist-newtarget" type="internal method">
<h1><span class="secnum">10.2.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</h1>
<p>The <var class="field">[[Construct]]</var> internal method of an ECMAScript <emu-xref href="#function-object" id="_ref_4739"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> <var>F</var> takes arguments <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4740"><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_4741"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and <var>newTarget</var> (a <emu-xref href="#constructor" id="_ref_4742"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4743"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4744"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>callerContext</var> be the <emu-xref href="#running-execution-context" id="_ref_4745"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>kind</var> be <var>F</var>.<var class="field">[[ConstructorKind]]</var>.</li><li>If <var>kind</var> is <emu-const>base</emu-const>, then<ol><li>Let <var>thisArgument</var> be ?&nbsp;<emu-xref aoid="OrdinaryCreateFromConstructor" id="_ref_4746"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycreatefromconstructor" class="e-user-code">OrdinaryCreateFromConstructor</a></emu-xref>(<var>newTarget</var>, <emu-val>"%Object.prototype%"</emu-val>).</li></ol></li><li>Let <var>calleeContext</var> be <emu-xref aoid="PrepareForOrdinaryCall" id="_ref_4747"><a href="ordinary-and-exotic-objects-behaviours.html#sec-prepareforordinarycall">PrepareForOrdinaryCall</a></emu-xref>(<var>F</var>, <var>newTarget</var>).</li><li><emu-xref href="#assert" id="_ref_4748"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>calleeContext</var> is now the <emu-xref href="#running-execution-context" id="_ref_4749"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>If <var>kind</var> is <emu-const>base</emu-const>, then<ol><li>Perform <emu-xref aoid="OrdinaryCallBindThis" id="_ref_4750"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallbindthis">OrdinaryCallBindThis</a></emu-xref>(<var>F</var>, <var>calleeContext</var>, <var>thisArgument</var>).</li><li>Let <var>initializeResult</var> be <emu-xref aoid="Completion" id="_ref_4751"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="InitializeInstanceElements" id="_ref_4752"><a href="abstract-operations.html#sec-initializeinstanceelements" class="e-user-code">InitializeInstanceElements</a></emu-xref>(<var>thisArgument</var>, <var>F</var>)).</li><li>If <var>initializeResult</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_4753"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Remove <var>calleeContext</var> from the <emu-xref href="#execution-context-stack" id="_ref_4754"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> and restore <var>callerContext</var> as the <emu-xref href="#running-execution-context" id="_ref_4755"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Return ?&nbsp;<var>initializeResult</var>.</li></ol></li></ol></li><li>Let <var>constructorEnv</var> be the LexicalEnvironment of <var>calleeContext</var>.</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_4756"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="OrdinaryCallEvaluateBody" id="_ref_4757"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallevaluatebody" class="e-user-code">OrdinaryCallEvaluateBody</a></emu-xref>(<var>F</var>, <var>argumentsList</var>)).</li><li>Remove <var>calleeContext</var> from the <emu-xref href="#execution-context-stack" id="_ref_4758"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> and restore <var>callerContext</var> as the <emu-xref href="#running-execution-context" id="_ref_4759"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>If <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4760"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>, then<ol><li>Return ?&nbsp;<var>result</var>.</li></ol></li><li><emu-xref href="#assert" id="_ref_4761"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4762"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref>.</li><li>If <var>result</var>.<var class="field">[[Value]]</var> <emu-xref href="#sec-object-type" id="_ref_4763"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>, return <var>result</var>.<var class="field">[[Value]]</var>.</li><li>If <var>kind</var> is <emu-const>base</emu-const>, return <var>thisArgument</var>.</li><li>If <var>result</var>.<var class="field">[[Value]]</var> is not <emu-val>undefined</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>thisBinding</var> be ?&nbsp;<var>constructorEnv</var>.<emu-xref aoid="GetThisBinding" id="_ref_4764"><a href="executable-code-and-execution-contexts.html#abstract-getthisbinding">GetThisBinding</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_4765"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>thisBinding</var> <emu-xref href="#sec-object-type" id="_ref_4766"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Return <var>thisBinding</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-ordinaryfunctioncreate" type="abstract operation" oldids="sec-functionallocate,sec-functioninitialize,sec-functioncreate,sec-generatorfunctioncreate,sec-asyncgeneratorfunctioncreate,sec-async-functions-abstract-operations-async-function-create" aoid="OrdinaryFunctionCreate"><span id="sec-async-functions-abstract-operations-async-function-create"></span><span id="sec-asyncgeneratorfunctioncreate"></span><span id="sec-generatorfunctioncreate"></span><span id="sec-functioncreate"></span><span id="sec-functioninitialize"></span><span id="sec-functionallocate"></span>
<h1><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> )</h1>
<p>The abstract operation OrdinaryFunctionCreate takes arguments <var>functionPrototype</var> (an Object), <var>sourceText</var> (a sequence of Unicode code points), <var>ParameterList</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_4767"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>), <var>Body</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_4768"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>), <var>thisMode</var> (<emu-const>lexical-this</emu-const> or <emu-const>non-lexical-this</emu-const>), <var>env</var> (an <emu-xref href="#sec-environment-records" id="_ref_4769"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>), and <var>privateEnv</var> (a <emu-xref href="#privateenvironment-record" id="_ref_4770"><a href="executable-code-and-execution-contexts.html#privateenvironment-record">PrivateEnvironment Record</a></emu-xref> or <emu-val>null</emu-val>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_4771"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is used to specify the runtime creation of a new function with a default <var class="field">[[Call]]</var> internal method and no <var class="field">[[Construct]]</var> internal method (although one may be subsequently added by an operation such as <emu-xref aoid="MakeConstructor" id="_ref_4772"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor">MakeConstructor</a></emu-xref>). <var>sourceText</var> is the source text of the syntactic definition of the function to be created. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>internalSlotsList</var> be the internal slots listed in <emu-xref href="#table-internal-slots-of-ecmascript-function-objects" id="_ref_282"><a href="ordinary-and-exotic-objects-behaviours.html#table-internal-slots-of-ecmascript-function-objects">Table 25</a></emu-xref>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_4773"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<var>functionPrototype</var>, <var>internalSlotsList</var>).</li><li>Set <var>F</var>.<var class="field">[[Call]]</var> to the definition specified in <emu-xref href="#sec-ecmascript-function-objects-call-thisargument-argumentslist" id="_ref_283"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-call-thisargument-argumentslist">10.2.1</a></emu-xref>.</li><li>Set <var>F</var>.<var class="field">[[SourceText]]</var> to <var>sourceText</var>.</li><li>Set <var>F</var>.<var class="field">[[FormalParameters]]</var> to <var>ParameterList</var>.</li><li>Set <var>F</var>.<var class="field">[[ECMAScriptCode]]</var> to <var>Body</var>.</li><li>Let <var>Strict</var> be <emu-xref aoid="IsStrict" id="_ref_4774"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<var>Body</var>).</li><li>Set <var>F</var>.<var class="field">[[Strict]]</var> to <var>Strict</var>.</li><li>If <var>thisMode</var> is <emu-const>lexical-this</emu-const>, set <var>F</var>.<var class="field">[[ThisMode]]</var> to <emu-const>lexical</emu-const>.</li><li>Else if <var>Strict</var> is <emu-val>true</emu-val>, set <var>F</var>.<var class="field">[[ThisMode]]</var> to <emu-const>strict</emu-const>.</li><li>Else, set <var>F</var>.<var class="field">[[ThisMode]]</var> to <emu-const>global</emu-const>.</li><li>Set <var>F</var>.<var class="field">[[IsClassConstructor]]</var> to <emu-val>false</emu-val>.</li><li>Set <var>F</var>.<var class="field">[[Environment]]</var> to <var>env</var>.</li><li>Set <var>F</var>.<var class="field">[[PrivateEnvironment]]</var> to <var>privateEnv</var>.</li><li>Set <var>F</var>.<var class="field">[[ScriptOrModule]]</var> to <emu-xref aoid="GetActiveScriptOrModule" id="_ref_4775"><a href="executable-code-and-execution-contexts.html#sec-getactivescriptormodule">GetActiveScriptOrModule</a></emu-xref>().</li><li>Set <var>F</var>.<var class="field">[[Realm]]</var> to <emu-xref href="#current-realm" id="_ref_4776"><a href="executable-code-and-execution-contexts.html#current-realm">the current Realm Record</a></emu-xref>.</li><li>Set <var>F</var>.<var class="field">[[HomeObject]]</var> to <emu-val>undefined</emu-val>.</li><li>Set <var>F</var>.<var class="field">[[Fields]]</var> to a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4777"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Set <var>F</var>.<var class="field">[[PrivateMethods]]</var> to a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4778"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Set <var>F</var>.<var class="field">[[ClassFieldInitializerName]]</var> to <emu-const>empty</emu-const>.</li><li>Let <var>len</var> be the <emu-xref aoid="ExpectedArgumentCount" id="_ref_4779"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-expectedargumentcount">ExpectedArgumentCount</a></emu-xref> of <var>ParameterList</var>.</li><li>Perform <emu-xref aoid="SetFunctionLength" id="_ref_4780"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionlength">SetFunctionLength</a></emu-xref>(<var>F</var>, <var>len</var>).</li><li>Return <var>F</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-addrestrictedfunctionproperties" type="abstract operation" aoid="AddRestrictedFunctionProperties">
<h1><span class="secnum">10.2.4</span> AddRestrictedFunctionProperties ( <var>F</var>, <var>realm</var> )</h1>
<p>The abstract operation AddRestrictedFunctionProperties takes arguments <var>F</var> (a <emu-xref href="#function-object" id="_ref_4781"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>realm</var> (a <emu-xref href="#realm-record" id="_ref_4782"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>) and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4783"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>realm</var>.<var class="field">[[Intrinsics]]</var>.[[<emu-xref href="#sec-%throwtypeerror%" id="_ref_4784"><a href="ordinary-and-exotic-objects-behaviours.html#sec-%throwtypeerror%">%ThrowTypeError%</a></emu-xref>]] exists and has been initialized.</li><li>Let <var>thrower</var> be <var>realm</var>.<var class="field">[[Intrinsics]]</var>.[[<emu-xref href="#sec-%throwtypeerror%" id="_ref_4785"><a href="ordinary-and-exotic-objects-behaviours.html#sec-%throwtypeerror%">%ThrowTypeError%</a></emu-xref>]].</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_4786"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"caller"</emu-val>, PropertyDescriptor { <var class="field">[[Get]]</var>: <var>thrower</var>, <var class="field">[[Set]]</var>: <var>thrower</var>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_4787"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"arguments"</emu-val>, PropertyDescriptor { <var class="field">[[Get]]</var>: <var>thrower</var>, <var class="field">[[Set]]</var>: <var>thrower</var>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-clause id="sec-%throwtypeerror%" type="built-in function">
<h1><span class="secnum">10.2.4.1</span> %ThrowTypeError% ( )</h1>
<p>This function is the <dfn tabindex="-1">%ThrowTypeError%</dfn> intrinsic object.</p>
<p>It is an anonymous built-in <emu-xref href="#function-object" id="_ref_4788"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> that is defined once for each <emu-xref href="#realm" id="_ref_4789"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref>.</p>
<p>It performs the following steps when called:</p>
<emu-alg><ol><li>Throw a <emu-val>TypeError</emu-val> exception.</li></ol></emu-alg>
<p>The value of the <var class="field">[[Extensible]]</var> internal slot of this function is <emu-val>false</emu-val>.</p>
<p>The <emu-val>"length"</emu-val> property of this function has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }.</p>
<p>The <emu-val>"name"</emu-val> property of this function has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }.</p>
</emu-clause>
</emu-clause>
<emu-clause id="sec-makeconstructor" type="abstract operation" aoid="MakeConstructor">
<h1><span class="secnum">10.2.5</span> MakeConstructor ( <var>F</var> [ , <var>writablePrototype</var> [ , <var>prototype</var> ] ] )</h1>
<p>The abstract operation MakeConstructor takes argument <var>F</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_4790"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> or a built-in <emu-xref href="#function-object" id="_ref_4791"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and optional arguments <var>writablePrototype</var> (a Boolean) and <var>prototype</var> (an Object) and returns <emu-const>unused</emu-const>. It converts <var>F</var> into a <emu-xref href="#constructor" id="_ref_4792"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>F</var> is an ECMAScript <emu-xref href="#function-object" id="_ref_4793"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>, then<ol><li><emu-xref href="#assert" id="_ref_4794"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsConstructor" id="_ref_4795"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>F</var>) is <emu-val>false</emu-val>.</li><li><emu-xref href="#assert" id="_ref_4796"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>F</var> is an extensible object that does not have a <emu-val>"prototype"</emu-val> own property.</li><li>Set <var>F</var>.<var class="field">[[Construct]]</var> to the definition specified in <emu-xref href="#sec-ecmascript-function-objects-construct-argumentslist-newtarget" id="_ref_284"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-construct-argumentslist-newtarget">10.2.2</a></emu-xref>.</li></ol></li><li>Else,<ol><li>Set <var>F</var>.<var class="field">[[Construct]]</var> to the definition specified in <emu-xref href="#sec-built-in-function-objects-construct-argumentslist-newtarget" id="_ref_285"><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-construct-argumentslist-newtarget">10.3.2</a></emu-xref>.</li></ol></li><li>Set <var>F</var>.<var class="field">[[ConstructorKind]]</var> to <emu-const>base</emu-const>.</li><li>If <var>writablePrototype</var> is not present, set <var>writablePrototype</var> to <emu-val>true</emu-val>.</li><li>If <var>prototype</var> is not present, then<ol><li>Set <var>prototype</var> to <emu-xref aoid="OrdinaryObjectCreate" id="_ref_4797"><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_4798"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_4799"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>prototype</var>, <emu-val>"constructor"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>F</var>, <var class="field">[[Writable]]</var>: <var>writablePrototype</var>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li></ol></li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_4800"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <var>writablePrototype</var>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-makeclassconstructor" type="abstract operation" aoid="MakeClassConstructor">
<h1><span class="secnum">10.2.6</span> MakeClassConstructor ( <var>F</var> )</h1>
<p>The abstract operation MakeClassConstructor takes argument <var>F</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_4801"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4802"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>F</var>.<var class="field">[[IsClassConstructor]]</var> is <emu-val>false</emu-val>.</li><li>Set <var>F</var>.<var class="field">[[IsClassConstructor]]</var> to <emu-val>true</emu-val>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-makemethod" type="abstract operation" aoid="MakeMethod">
<h1><span class="secnum">10.2.7</span> MakeMethod ( <var>F</var>, <var>homeObject</var> )</h1>
<p>The abstract operation MakeMethod takes arguments <var>F</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_4803"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>homeObject</var> (an Object) and returns <emu-const>unused</emu-const>. It configures <var>F</var> as a method. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4804"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>homeObject</var> is an <emu-xref href="#ordinary-object" id="_ref_4805"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>.</li><li>Set <var>F</var>.<var class="field">[[HomeObject]]</var> to <var>homeObject</var>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-definemethodproperty" oldids="sec-createmethodproperty" type="abstract operation" aoid="DefineMethodProperty"><span id="sec-createmethodproperty"></span>
<h1><span class="secnum">10.2.8</span> DefineMethodProperty ( <var>homeObject</var>, <var>key</var>, <var>closure</var>, <var>enumerable</var> )</h1>
<p>The abstract operation DefineMethodProperty takes arguments <var>homeObject</var> (an Object), <var>key</var> (a <emu-xref href="#property-key" id="_ref_4806"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or <emu-xref href="#sec-private-names" id="_ref_4807"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>), <var>closure</var> (a <emu-xref href="#function-object" id="_ref_4808"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>), and <var>enumerable</var> (a Boolean) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4809"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-privateelement-specification-type" id="_ref_4810"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> or <emu-const>unused</emu-const>, or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_4811"><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><emu-xref href="#assert" id="_ref_4812"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>homeObject</var> is an ordinary, extensible object.</li><li>If <var>key</var> is a <emu-xref href="#sec-private-names" id="_ref_4813"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>, return <emu-xref href="#sec-privateelement-specification-type" id="_ref_4814"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> { <var class="field">[[Key]]</var>: <var>key</var>, <var class="field">[[Kind]]</var>: <emu-const>method</emu-const>, <var class="field">[[Value]]</var>: <var>closure</var>&nbsp;}.</li><li>Let <var>desc</var> be the PropertyDescriptor { <var class="field">[[Value]]</var>: <var>closure</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <var>enumerable</var>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}.</li><li>Perform ?&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_4815"><a href="abstract-operations.html#sec-definepropertyorthrow" class="e-user-code">DefinePropertyOrThrow</a></emu-xref>(<var>homeObject</var>, <var>key</var>, <var>desc</var>).</li><li>NOTE: <emu-xref aoid="DefinePropertyOrThrow" id="_ref_4816"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref> only returns an <emu-xref href="#sec-completion-record-specification-type" id="_ref_4817"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref> when attempting to define a class static method whose <var>key</var> is <emu-val>"prototype"</emu-val>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-setfunctionname" type="abstract operation" aoid="SetFunctionName">
<h1><span class="secnum">10.2.9</span> SetFunctionName ( <var>F</var>, <var>name</var> [ , <var>prefix</var> ] )</h1>
<p>The abstract operation SetFunctionName takes arguments <var>F</var> (a <emu-xref href="#function-object" id="_ref_4818"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>name</var> (a <emu-xref href="#property-key" id="_ref_4819"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or <emu-xref href="#sec-private-names" id="_ref_4820"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>) and optional argument <var>prefix</var> (a String) and returns <emu-const>unused</emu-const>. It adds a <emu-val>"name"</emu-val> property to <var>F</var>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4821"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>F</var> is an extensible object that does not have a <emu-val>"name"</emu-val> own property.</li><li>If <var>name</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_4822"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, then<ol><li>Let <var>description</var> be <var>name</var>.<var class="field">[[Description]]</var>.</li><li>If <var>description</var> is <emu-val>undefined</emu-val>, set <var>name</var> to the empty String.</li><li>Else, set <var>name</var> to the <emu-xref href="#string-concatenation" id="_ref_4823"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <emu-val>"["</emu-val>, <var>description</var>, and <emu-val>"]"</emu-val>.</li></ol></li><li>Else if <var>name</var> is a <emu-xref href="#sec-private-names" id="_ref_4824"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>, then<ol><li>Set <var>name</var> to <var>name</var>.<var class="field">[[Description]]</var>.</li></ol></li><li>If <var>F</var> has an <var class="field">[[InitialName]]</var> internal slot, then<ol><li>Set <var>F</var>.<var class="field">[[InitialName]]</var> to <var>name</var>.</li></ol></li><li>If <var>prefix</var> is present, then<ol><li>Set <var>name</var> to the <emu-xref href="#string-concatenation" id="_ref_4825"><a href="ecmascript-data-types-and-values.html#string-concatenation">string-concatenation</a></emu-xref> of <var>prefix</var>, the code unit 0x0020 (SPACE), and <var>name</var>.</li><li>If <var>F</var> has an <var class="field">[[InitialName]]</var> internal slot, then<ol><li>NOTE: The choice in the following step is made independently each time this Abstract Operation is invoked.</li><li>Optionally, set <var>F</var>.<var class="field">[[InitialName]]</var> to <var>name</var>.</li></ol></li></ol></li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_4826"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"name"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>name</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>true</emu-val>&nbsp;}).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-setfunctionlength" type="abstract operation" aoid="SetFunctionLength">
<h1><span class="secnum">10.2.10</span> SetFunctionLength ( <var>F</var>, <var>length</var> )</h1>
<p>The abstract operation SetFunctionLength takes arguments <var>F</var> (a <emu-xref href="#function-object" id="_ref_4827"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>length</var> (a non-negative <emu-xref href="#integer" id="_ref_4828"><a href="notational-conventions.html#integer">integer</a></emu-xref> or +∞) and returns <emu-const>unused</emu-const>. It adds a <emu-val>"length"</emu-val> property to <var>F</var>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_4829"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>F</var> is an extensible object that does not have a <emu-val>"length"</emu-val> own property.</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_4830"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"length"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <emu-xref aoid="𝔽" id="_ref_4831"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>length</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>true</emu-val>&nbsp;}).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-functiondeclarationinstantiation" type="abstract operation" oldids="sec-web-compat-functiondeclarationinstantiation" aoid="FunctionDeclarationInstantiation"><span id="sec-web-compat-functiondeclarationinstantiation"></span>
<h1><span class="secnum">10.2.11</span> FunctionDeclarationInstantiation ( <var>func</var>, <var>argumentsList</var> )</h1>
<p>The abstract operation FunctionDeclarationInstantiation takes arguments <var>func</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_4832"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4833"><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_4834"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4835"><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 a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4836"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. <var>func</var> is the <emu-xref href="#function-object" id="_ref_4837"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> for which the <emu-xref href="#sec-execution-contexts" id="_ref_4838"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref> is being established.</p>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>When an <emu-xref href="#sec-execution-contexts" id="_ref_4839"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref> is established for evaluating an ECMAScript function a new <emu-xref href="#sec-function-environment-records" id="_ref_4840"><a href="executable-code-and-execution-contexts.html#sec-function-environment-records">Function Environment Record</a></emu-xref> is created and bindings for each formal parameter are instantiated in that <emu-xref href="#sec-environment-records" id="_ref_4841"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>. Each declaration in the function body is also instantiated. If the function's formal parameters do not include any default value initializers then the body declarations are instantiated in the same <emu-xref href="#sec-environment-records" id="_ref_4842"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> as the parameters. If default value parameter initializers exist, a second <emu-xref href="#sec-environment-records" id="_ref_4843"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> is created for the body declarations. Formal parameters and functions are initialized as part of FunctionDeclarationInstantiation. All other bindings are initialized during evaluation of the function body.</p>
</div></emu-note>
<p>It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>calleeContext</var> be the <emu-xref href="#running-execution-context" id="_ref_4845"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>code</var> be <var>func</var>.<var class="field">[[ECMAScriptCode]]</var>.</li><li>Let <var>strict</var> be <var>func</var>.<var class="field">[[Strict]]</var>.</li><li>Let <var>formals</var> be <var>func</var>.<var class="field">[[FormalParameters]]</var>.</li><li>Let <var>parameterNames</var> be the <emu-xref aoid="BoundNames" id="_ref_4846"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>formals</var>.</li><li>If <var>parameterNames</var> has any duplicate entries, let <var>hasDuplicates</var> be <emu-val>true</emu-val>; else let <var>hasDuplicates</var> be <emu-val>false</emu-val>.</li><li>Let <var>simpleParameterList</var> be <emu-xref aoid="IsSimpleParameterList" id="_ref_4847"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <var>formals</var>.</li><li>Let <var>hasParameterExpressions</var> be <emu-xref aoid="ContainsExpression" id="_ref_4848"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <var>formals</var>.</li><li>Let <var>varNames</var> be the <emu-xref aoid="VarDeclaredNames" id="_ref_4849"><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames">VarDeclaredNames</a></emu-xref> of <var>code</var>.</li><li>Let <var>varDeclarations</var> be the <emu-xref aoid="VarScopedDeclarations" id="_ref_4850"><a href="syntax-directed-operations.html#sec-static-semantics-varscopeddeclarations">VarScopedDeclarations</a></emu-xref> of <var>code</var>.</li><li>Let <var>lexicalNames</var> be the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_4851"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <var>code</var>.</li><li>Let <var>functionNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4852"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>functionsToInitialize</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4853"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each element <var>d</var> of <var>varDeclarations</var>, in reverse <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4854"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> order, do<ol><li>If <var>d</var> is neither a <emu-nt id="_ref_19509"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableDeclaration">VariableDeclaration</a></emu-nt> nor a <emu-nt id="_ref_19510"><a href="ecmascript-language-statements-and-declarations.html#prod-ForBinding">ForBinding</a></emu-nt> nor a <emu-nt id="_ref_19511"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>, then<ol><li><emu-xref href="#assert" id="_ref_4855"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>d</var> is either a <emu-nt id="_ref_19512"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>, a <emu-nt id="_ref_19513"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt>, an <emu-nt id="_ref_19514"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt>, or an <emu-nt id="_ref_19515"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt>.</li><li>Let <var>fn</var> be the sole element of the <emu-xref aoid="BoundNames" id="_ref_4856"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>d</var>.</li><li>If <var>functionNames</var> does not contain <var>fn</var>, then<ol><li>Insert <var>fn</var> as the first element of <var>functionNames</var>.</li><li>NOTE: If there are multiple function declarations for the same name, the last declaration is used.</li><li>Insert <var>d</var> as the first element of <var>functionsToInitialize</var>.</li></ol></li></ol></li></ol></li><li>Let <var>argumentsObjectNeeded</var> be <emu-val>true</emu-val>.</li><li>If <var>func</var>.<var class="field">[[ThisMode]]</var> is <emu-const>lexical</emu-const>, then<ol><li>NOTE: Arrow functions never have an arguments object.</li><li>Set <var>argumentsObjectNeeded</var> to <emu-val>false</emu-val>.</li></ol></li><li>Else if <var>parameterNames</var> contains <emu-val>"arguments"</emu-val>, then<ol><li>Set <var>argumentsObjectNeeded</var> to <emu-val>false</emu-val>.</li></ol></li><li>Else if <var>hasParameterExpressions</var> is <emu-val>false</emu-val>, then<ol><li>If <var>functionNames</var> contains <emu-val>"arguments"</emu-val> or <var>lexicalNames</var> contains <emu-val>"arguments"</emu-val>, then<ol><li>Set <var>argumentsObjectNeeded</var> to <emu-val>false</emu-val>.</li></ol></li></ol></li><li>If <var>strict</var> is <emu-val>true</emu-val> or <var>hasParameterExpressions</var> is <emu-val>false</emu-val>, then<ol><li>NOTE: Only a single <emu-xref href="#sec-environment-records" id="_ref_4857"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> is needed for the parameters, since calls to <code>eval</code> in <emu-xref href="#sec-strict-mode-code" id="_ref_4858"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref> cannot create new bindings which are visible outside of the <code>eval</code>.</li><li>Let <var>env</var> be the LexicalEnvironment of <var>calleeContext</var>.</li></ol></li><li>Else,<ol><li>NOTE: A separate <emu-xref href="#sec-environment-records" id="_ref_4859"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> is needed to ensure that bindings created by <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_4860"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref> calls in the formal parameter list are outside the environment where parameters are declared.</li><li>Let <var>calleeEnv</var> be the LexicalEnvironment of <var>calleeContext</var>.</li><li>Let <var>env</var> be <emu-xref aoid="NewDeclarativeEnvironment" id="_ref_4861"><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a></emu-xref>(<var>calleeEnv</var>).</li><li><emu-xref href="#assert" id="_ref_4862"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: The VariableEnvironment of <var>calleeContext</var> and <var>calleeEnv</var> are the same <emu-xref href="#sec-environment-records" id="_ref_4863"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>.</li><li>Set the LexicalEnvironment of <var>calleeContext</var> to <var>env</var>.</li></ol></li><li>For each String <var>paramName</var> of <var>parameterNames</var>, do<ol><li>Let <var>alreadyDeclared</var> be !&nbsp;<var>env</var>.<emu-xref aoid="HasBinding" id="_ref_4864"><a href="executable-code-and-execution-contexts.html#abstract-hasbinding">HasBinding</a></emu-xref>(<var>paramName</var>).</li><li>NOTE: <emu-xref href="#early-error" id="_ref_4865"><a href="error-handling-and-language-extensions.html#early-error">Early errors</a></emu-xref> ensure that duplicate parameter names can only occur in <emu-xref href="#non-strict-function" id="_ref_4866"><a href="ordinary-and-exotic-objects-behaviours.html#non-strict-function">non-strict functions</a></emu-xref> that do not have parameter default values or rest parameters.</li><li>If <var>alreadyDeclared</var> is <emu-val>false</emu-val>, then<ol><li>Perform !&nbsp;<var>env</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_4867"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>paramName</var>, <emu-val>false</emu-val>).</li><li>If <var>hasDuplicates</var> is <emu-val>true</emu-val>, then<ol><li>Perform !&nbsp;<var>env</var>.<emu-xref aoid="InitializeBinding" id="_ref_4868"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>paramName</var>, <emu-val>undefined</emu-val>).</li></ol></li></ol></li></ol></li><li>If <var>argumentsObjectNeeded</var> is <emu-val>true</emu-val>, then<ol><li>If <var>strict</var> is <emu-val>true</emu-val> or <var>simpleParameterList</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>ao</var> be <emu-xref aoid="CreateUnmappedArgumentsObject" id="_ref_4869"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createunmappedargumentsobject">CreateUnmappedArgumentsObject</a></emu-xref>(<var>argumentsList</var>).</li></ol></li><li>Else,<ol><li>NOTE: A mapped argument object is only provided for <emu-xref href="#non-strict-function" id="_ref_4870"><a href="ordinary-and-exotic-objects-behaviours.html#non-strict-function">non-strict functions</a></emu-xref> that don't have a rest parameter, any parameter default value initializers, or any destructured parameters.</li><li>Let <var>ao</var> be <emu-xref aoid="CreateMappedArgumentsObject" id="_ref_4871"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createmappedargumentsobject">CreateMappedArgumentsObject</a></emu-xref>(<var>func</var>, <var>formals</var>, <var>argumentsList</var>, <var>env</var>).</li></ol></li><li>If <var>strict</var> is <emu-val>true</emu-val>, then<ol><li>Perform !&nbsp;<var>env</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_4872"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<emu-val>"arguments"</emu-val>, <emu-val>false</emu-val>).</li><li>NOTE: In <emu-xref href="#sec-strict-mode-code" id="_ref_4873"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref> <emu-xref href="#early-error" id="_ref_4874"><a href="error-handling-and-language-extensions.html#early-error">early errors</a></emu-xref> prevent attempting to assign to this binding, so its mutability is not observable.</li></ol></li><li>Else,<ol><li>Perform !&nbsp;<var>env</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_4875"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<emu-val>"arguments"</emu-val>, <emu-val>false</emu-val>).</li></ol></li><li>Perform !&nbsp;<var>env</var>.<emu-xref aoid="InitializeBinding" id="_ref_4876"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<emu-val>"arguments"</emu-val>, <var>ao</var>).</li><li>Let <var>parameterBindings</var> be the <emu-xref href="#list-concatenation" id="_ref_4877"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>parameterNames</var> and « <emu-val>"arguments"</emu-val>&nbsp;».</li></ol></li><li>Else,<ol><li>Let <var>parameterBindings</var> be <var>parameterNames</var>.</li></ol></li><li>Let <var>iteratorRecord</var> be <emu-xref aoid="CreateListIteratorRecord" id="_ref_4878"><a href="abstract-operations.html#sec-createlistiteratorRecord">CreateListIteratorRecord</a></emu-xref>(<var>argumentsList</var>).</li><li>If <var>hasDuplicates</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>usedEnv</var> be <emu-val>undefined</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>usedEnv</var> be <var>env</var>.</li></ol></li><li>NOTE: The following step cannot return a <emu-xref aoid="ReturnCompletion" id="_ref_4879"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref> because the only way such a completion can arise in expression position is by use of <emu-nt id="_ref_19516"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt>, which is forbidden in parameter lists by Early Error rules in <emu-xref href="#sec-generator-function-definitions-static-semantics-early-errors" id="_ref_286"><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions-static-semantics-early-errors">15.5.1</a></emu-xref> and <emu-xref href="#sec-async-generator-function-definitions-static-semantics-early-errors" id="_ref_287"><a href="ecmascript-language-functions-and-classes.html#sec-async-generator-function-definitions-static-semantics-early-errors">15.6.1</a></emu-xref>.</li><li>Perform ?&nbsp;<emu-xref aoid="IteratorBindingInitialization" id="_ref_4880"><a href="syntax-directed-operations.html#sec-runtime-semantics-iteratorbindinginitialization" class="e-user-code">IteratorBindingInitialization</a></emu-xref> of <var>formals</var> with arguments <var>iteratorRecord</var> and <var>usedEnv</var>.</li><li>If <var>hasParameterExpressions</var> is <emu-val>false</emu-val>, then<ol><li>NOTE: Only a single <emu-xref href="#sec-environment-records" id="_ref_4881"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> is needed for the parameters and top-level vars.</li><li>Let <var>instantiatedVarNames</var> be a copy of the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4882"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> <var>parameterBindings</var>.</li><li>For each element <var>n</var> of <var>varNames</var>, do<ol><li>If <var>instantiatedVarNames</var> does not contain <var>n</var>, then<ol><li>Append <var>n</var> to <var>instantiatedVarNames</var>.</li><li>Perform !&nbsp;<var>env</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_4883"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>n</var>, <emu-val>false</emu-val>).</li><li>Perform !&nbsp;<var>env</var>.<emu-xref aoid="InitializeBinding" id="_ref_4884"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>n</var>, <emu-val>undefined</emu-val>).</li></ol></li></ol></li><li>Let <var>varEnv</var> be <var>env</var>.</li></ol></li><li>Else,<ol><li>NOTE: A separate <emu-xref href="#sec-environment-records" id="_ref_4885"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> is needed to ensure that closures created by expressions in the formal parameter list do not have visibility of declarations in the function body.</li><li>Let <var>varEnv</var> be <emu-xref aoid="NewDeclarativeEnvironment" id="_ref_4886"><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a></emu-xref>(<var>env</var>).</li><li>Set the VariableEnvironment of <var>calleeContext</var> to <var>varEnv</var>.</li><li>Let <var>instantiatedVarNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4887"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each element <var>n</var> of <var>varNames</var>, do<ol><li>If <var>instantiatedVarNames</var> does not contain <var>n</var>, then<ol><li>Append <var>n</var> to <var>instantiatedVarNames</var>.</li><li>Perform !&nbsp;<var>varEnv</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_4888"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>n</var>, <emu-val>false</emu-val>).</li><li>If <var>parameterBindings</var> does not contain <var>n</var>, or if <var>functionNames</var> contains <var>n</var>, then<ol><li>Let <var>initialValue</var> be <emu-val>undefined</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>initialValue</var> be !&nbsp;<var>env</var>.<emu-xref aoid="GetBindingValue" id="_ref_4889"><a href="executable-code-and-execution-contexts.html#abstract-getbindingvalue">GetBindingValue</a></emu-xref>(<var>n</var>, <emu-val>false</emu-val>).</li></ol></li><li>Perform !&nbsp;<var>varEnv</var>.<emu-xref aoid="InitializeBinding" id="_ref_4890"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>n</var>, <var>initialValue</var>).</li><li>NOTE: A var with the same name as a formal parameter initially has the same value as the corresponding initialized parameter.</li></ol></li></ol></li></ol></li><li>If <var>strict</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>lexEnv</var> be <var>varEnv</var>.</li></ol></li><li>Else,<ol><li id="step-functiondeclarationinstantiation-web-compat-insertion-point" normative-optional=""><div class="attributes-tag"><emu-xref href="#sec-conformance" id="_ref_4844"><a href="conformance.html#sec-conformance">Normative Optional</a></emu-xref></div>If the <emu-xref href="#host" id="_ref_4891"><a href="overview.html#host">host</a></emu-xref> is a web browser or otherwise supports <emu-xref href="#sec-block-level-function-declarations-web-legacy-compatibility-semantics" title="" id="_ref_288"><a href="additional-ecmascript-features-for-web-browsers.html#sec-block-level-function-declarations-web-legacy-compatibility-semantics">Block-Level Function Declarations Web Legacy Compatibility Semantics</a></emu-xref>, then<ol><li>For each <emu-nt id="_ref_19517"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <var>f</var> that is directly contained in the <emu-nt id="_ref_19518"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> of any <emu-nt id="_ref_19519"><a href="ecmascript-language-statements-and-declarations.html#prod-Block">Block</a></emu-nt>, <emu-nt id="_ref_19520"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClause">CaseClause</a></emu-nt>, or <emu-nt id="_ref_19521"><a href="ecmascript-language-statements-and-declarations.html#prod-DefaultClause">DefaultClause</a></emu-nt> <var>x</var> such that <var>code</var> <emu-xref aoid="Contains" id="_ref_4892"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <var>x</var> is <emu-val>true</emu-val>, do<ol><li>Let <var>F</var> be the <emu-xref aoid="StringValue" id="_ref_4893"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of the <emu-nt id="_ref_19522"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> of <var>f</var>.</li><li>If replacing the <emu-nt id="_ref_19523"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <var>f</var> with a <emu-nt id="_ref_19524"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt> that has <var>F</var> as a <emu-nt id="_ref_19525"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> would not produce any Early Errors for <var>func</var> and <var>parameterNames</var> does not contain <var>F</var>, then<ol><li>NOTE: A var binding for <var>F</var> is only instantiated here if it is neither a VarDeclaredName, the name of a formal parameter, or another <emu-nt id="_ref_19526"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>.</li><li>If <var>instantiatedVarNames</var> does not contain <var>F</var> and <var>F</var> is not <emu-val>"arguments"</emu-val>, then<ol><li>Perform !&nbsp;<var>varEnv</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_4894"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>F</var>, <emu-val>false</emu-val>).</li><li>Perform !&nbsp;<var>varEnv</var>.<emu-xref aoid="InitializeBinding" id="_ref_4895"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>F</var>, <emu-val>undefined</emu-val>).</li><li>Append <var>F</var> to <var>instantiatedVarNames</var>.</li></ol></li><li id="step-functiondeclarationinstantiation-alt-funcdecl-eval">When the <emu-nt id="_ref_19527"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <var>f</var> is evaluated, perform the following steps in place of the <emu-nt id="_ref_19528"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <emu-xref aoid="Evaluation" id="_ref_4896"><a href="syntax-directed-operations.html#sec-evaluation">Evaluation</a></emu-xref> algorithm provided in <emu-xref href="#sec-function-definitions-runtime-semantics-evaluation" id="_ref_289"><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions-runtime-semantics-evaluation">15.2.6</a></emu-xref>:<ol><li>Let <var>fEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_4897"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s VariableEnvironment.</li><li>Let <var>bEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_4898"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>fObj</var> be !&nbsp;<var>bEnv</var>.<emu-xref aoid="GetBindingValue" id="_ref_4899"><a href="executable-code-and-execution-contexts.html#abstract-getbindingvalue">GetBindingValue</a></emu-xref>(<var>F</var>, <emu-val>false</emu-val>).</li><li>Perform !&nbsp;<var>fEnv</var>.<emu-xref aoid="SetMutableBinding" id="_ref_4900"><a href="executable-code-and-execution-contexts.html#abstract-setmutablebinding">SetMutableBinding</a></emu-xref>(<var>F</var>, <var>fObj</var>, <emu-val>false</emu-val>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></li></ol></li></ol></li></ol></li><li>Let <var>lexEnv</var> be <emu-xref aoid="NewDeclarativeEnvironment" id="_ref_4901"><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a></emu-xref>(<var>varEnv</var>).</li><li>NOTE: <emu-xref href="#non-strict-function" id="_ref_4902"><a href="ordinary-and-exotic-objects-behaviours.html#non-strict-function">Non-strict functions</a></emu-xref> use a separate <emu-xref href="#sec-environment-records" id="_ref_4903"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> for top-level lexical declarations so that a <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_4904"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref> can determine whether any var scoped declarations introduced by the eval code conflict with pre-existing top-level lexically scoped declarations. This is not needed for <emu-xref href="#strict-function" id="_ref_4905"><a href="ordinary-and-exotic-objects-behaviours.html#strict-function">strict functions</a></emu-xref> because a strict <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_4906"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref> always places all declarations into a new <emu-xref href="#sec-environment-records" id="_ref_4907"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>.</li></ol></li><li>Set the LexicalEnvironment of <var>calleeContext</var> to <var>lexEnv</var>.</li><li>Let <var>lexDeclarations</var> be the <emu-xref aoid="LexicallyScopedDeclarations" id="_ref_4908"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallyscopeddeclarations">LexicallyScopedDeclarations</a></emu-xref> of <var>code</var>.</li><li>For each element <var>d</var> of <var>lexDeclarations</var>, do<ol><li>NOTE: A lexically declared name cannot be the same as a function/generator declaration, formal parameter, or a var name. Lexically declared names are only instantiated here but not initialized.</li><li>For each element <var>dn</var> of the <emu-xref aoid="BoundNames" id="_ref_4909"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>d</var>, do<ol><li>If <emu-xref aoid="IsConstantDeclaration" id="_ref_4910"><a href="syntax-directed-operations.html#sec-static-semantics-isconstantdeclaration">IsConstantDeclaration</a></emu-xref> of <var>d</var> is <emu-val>true</emu-val>, then<ol><li>Perform !&nbsp;<var>lexEnv</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_4911"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>dn</var>, <emu-val>true</emu-val>).</li></ol></li><li>Else,<ol><li>Perform !&nbsp;<var>lexEnv</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_4912"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>dn</var>, <emu-val>false</emu-val>).</li></ol></li></ol></li></ol></li><li>Let <var>privateEnv</var> be the PrivateEnvironment of <var>calleeContext</var>.</li><li>For each <emu-xref href="#sec-syntactic-grammar" id="_ref_4913"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref> <var>f</var> of <var>functionsToInitialize</var>, do<ol><li>Let <var>fn</var> be the sole element of the <emu-xref aoid="BoundNames" id="_ref_4914"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>f</var>.</li><li>Let <var>fo</var> be <emu-xref aoid="InstantiateFunctionObject" id="_ref_4915"><a href="syntax-directed-operations.html#sec-runtime-semantics-instantiatefunctionobject">InstantiateFunctionObject</a></emu-xref> of <var>f</var> with arguments <var>lexEnv</var> and <var>privateEnv</var>.</li><li>Perform !&nbsp;<var>varEnv</var>.<emu-xref aoid="SetMutableBinding" id="_ref_4916"><a href="executable-code-and-execution-contexts.html#abstract-setmutablebinding">SetMutableBinding</a></emu-xref>(<var>fn</var>, <var>fo</var>, <emu-val>false</emu-val>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-built-in-function-objects">
<h1><span class="secnum">10.3</span> Built-in Function Objects</h1>
<p>A built-in <emu-xref href="#function-object" id="_ref_4917"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> is an <emu-xref href="#ordinary-object" id="_ref_4918"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>; it must satisfy the requirements for <emu-xref href="#ordinary-object" id="_ref_4919"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref> set out in <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots" id="_ref_290"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots">10.1</a></emu-xref>.</p>
<p>In addition to the internal slots required of every <emu-xref href="#ordinary-object" id="_ref_4920"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> (see <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots" id="_ref_291"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots">10.1</a></emu-xref>), a built-in <emu-xref href="#function-object" id="_ref_4921"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> must also have the following internal slots:</p>
<ul>
<li><var class="field">[[Realm]]</var>, a <emu-xref href="#realm-record" id="_ref_4922"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref> that represents the <emu-xref href="#realm" id="_ref_4923"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref> in which the function was created.</li>
<li><var class="field">[[InitialName]]</var>, a String that is the initial name of the function. It is used by <emu-xref href="#sec-function.prototype.tostring" id="_ref_292"><a href="fundamental-objects.html#sec-function.prototype.tostring">20.2.3.5</a></emu-xref>.</li>
<li><var class="field">[[Async]]</var>, a Boolean that indicates whether the function has async function call and construct behaviour in <emu-xref aoid="BuiltinCallOrConstruct" id="_ref_4924"><a href="ordinary-and-exotic-objects-behaviours.html#sec-builtincallorconstruct">BuiltinCallOrConstruct</a></emu-xref>.</li>
</ul>
<p>The initial value of a built-in <emu-xref href="#function-object" id="_ref_4925"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>'s <var class="field">[[Prototype]]</var> internal slot is <emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_4926"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, unless otherwise specified.</p>
<p>A built-in <emu-xref href="#function-object" id="_ref_4927"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> must have a <var class="field">[[Call]]</var> internal method that conforms to the definition in <emu-xref href="#sec-built-in-function-objects-call-thisargument-argumentslist" id="_ref_293"><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-call-thisargument-argumentslist">10.3.1</a></emu-xref>.</p>
<p>A built-in <emu-xref href="#function-object" id="_ref_4928"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> has a <var class="field">[[Construct]]</var> internal method if and only if it is described as a “<emu-xref href="#constructor" id="_ref_4929"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>”, or some algorithm in this specification explicitly sets its <var class="field">[[Construct]]</var> internal method. Such a <var class="field">[[Construct]]</var> internal method must conform to the definition in <emu-xref href="#sec-built-in-function-objects-construct-argumentslist-newtarget" id="_ref_294"><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-construct-argumentslist-newtarget">10.3.2</a></emu-xref>.</p>
<p>An implementation may provide additional built-in <emu-xref href="#function-object" id="_ref_4930"><a href="ecmascript-data-types-and-values.html#function-object">function objects</a></emu-xref> that are not defined in this specification.</p>
<emu-clause id="sec-built-in-function-objects-call-thisargument-argumentslist" type="internal method">
<h1><span class="secnum">10.3.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</h1>
<p>The <var class="field">[[Call]]</var> internal method of a built-in <emu-xref href="#function-object" id="_ref_4931"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> <var>F</var> takes arguments <var>thisArgument</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4932"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4933"><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_4934"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4935"><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_4936"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4937"><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>Return ?&nbsp;<emu-xref aoid="BuiltinCallOrConstruct" id="_ref_4938"><a href="ordinary-and-exotic-objects-behaviours.html#sec-builtincallorconstruct" class="e-user-code">BuiltinCallOrConstruct</a></emu-xref>(<var>F</var>, <var>thisArgument</var>, <var>argumentsList</var>, <emu-val>undefined</emu-val>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-built-in-function-objects-construct-argumentslist-newtarget" type="internal method">
<h1><span class="secnum">10.3.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</h1>
<p>The <var class="field">[[Construct]]</var> internal method of a built-in <emu-xref href="#function-object" id="_ref_4939"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> <var>F</var> (when the method is present) takes arguments <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4940"><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_4941"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and <var>newTarget</var> (a <emu-xref href="#constructor" id="_ref_4942"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4943"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4944"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>result</var> be ?&nbsp;<emu-xref aoid="BuiltinCallOrConstruct" id="_ref_4945"><a href="ordinary-and-exotic-objects-behaviours.html#sec-builtincallorconstruct" class="e-user-code">BuiltinCallOrConstruct</a></emu-xref>(<var>F</var>, <emu-const>uninitialized</emu-const>, <var>argumentsList</var>, <var>newTarget</var>).</li><li><emu-xref href="#assert" id="_ref_4946"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>result</var> <emu-xref href="#sec-object-type" id="_ref_4947"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Return <var>result</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-builtincallorconstruct" type="abstract operation" aoid="BuiltinCallOrConstruct">
<h1><span class="secnum">10.3.3</span> BuiltinCallOrConstruct ( <var>F</var>, <var>thisArgument</var>, <var>argumentsList</var>, <var>newTarget</var> )</h1>
<p>The abstract operation BuiltinCallOrConstruct takes arguments <var>F</var> (a built-in <emu-xref href="#function-object" id="_ref_4948"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>), <var>thisArgument</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_4949"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or <emu-const>uninitialized</emu-const>), <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4950"><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_4951"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>), and <var>newTarget</var> (a <emu-xref href="#constructor" id="_ref_4952"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> or <emu-val>undefined</emu-val>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4953"><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_4954"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_4955"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>callerContext</var> be the <emu-xref href="#running-execution-context" id="_ref_4956"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>If <var>callerContext</var> is not already suspended, suspend <var>callerContext</var>.</li><li>Let <var>calleeContext</var> be a new <emu-xref href="#sec-execution-contexts" id="_ref_4957"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref>.</li><li>Set the Function of <var>calleeContext</var> to <var>F</var>.</li><li>Let <var>calleeRealm</var> be <var>F</var>.<var class="field">[[Realm]]</var>.</li><li>Set the <emu-xref href="#realm" id="_ref_4958"><a href="executable-code-and-execution-contexts.html#realm">Realm</a></emu-xref> of <var>calleeContext</var> to <var>calleeRealm</var>.</li><li>Set the ScriptOrModule of <var>calleeContext</var> to <emu-val>null</emu-val>.</li><li>Perform any necessary <emu-xref href="#implementation-defined" id="_ref_4959"><a href="overview.html#implementation-defined">implementation-defined</a></emu-xref> initialization of <var>calleeContext</var>.</li><li>Push <var>calleeContext</var> onto the <emu-xref href="#execution-context-stack" id="_ref_4960"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>; <var>calleeContext</var> is now the <emu-xref href="#running-execution-context" id="_ref_4961"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>If <var>F</var>.<var class="field">[[Async]]</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>promiseCapability</var> be !&nbsp;<emu-xref aoid="NewPromiseCapability" id="_ref_4962"><a href="control-abstraction-objects.html#sec-newpromisecapability">NewPromiseCapability</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_4963"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>).</li><li>Let <var>resultsClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_4964"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with no parameters that captures <var>F</var>, <var>thisArgument</var>, <var>argumentsList</var>, and <var>newTarget</var> and performs the following steps when called:<ol><li>Let <var>result</var> be the <emu-xref href="#sec-completion-record-specification-type" id="_ref_4965"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">Completion Record</a></emu-xref> that is <span class="e-user-code">the result of evaluating</span> <var>F</var> in a manner that conforms to the specification of <var>F</var>. If <var>thisArgument</var> is <emu-const>uninitialized</emu-const>, the <emu-val>this</emu-val> value is uninitialized; else <var>thisArgument</var> provides the <emu-val>this</emu-val> value. <var>argumentsList</var> provides the named parameters. <var>newTarget</var> provides the NewTarget value.</li><li>NOTE: If <var>F</var> is defined in this document, “the specification of <var>F</var>” is the behaviour specified for it via algorithm steps or other means.</li><li>Return <emu-xref aoid="Completion" id="_ref_4966"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<var>result</var>).</li></ol></li><li>Perform <emu-xref aoid="AsyncFunctionStart" id="_ref_4967"><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations-async-function-start" class="e-user-code">AsyncFunctionStart</a></emu-xref>(<var>promiseCapability</var>, <var>resultsClosure</var>).</li><li>Remove <var>calleeContext</var> from the <emu-xref href="#execution-context-stack" id="_ref_4968"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> and restore <var>callerContext</var> as the <emu-xref href="#running-execution-context" id="_ref_4969"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Return <var>promiseCapability</var>.<var class="field">[[Promise]]</var>.</li></ol></li><li id="step-call-builtin-function-result">Let <var>result</var> be the <emu-xref href="#sec-completion-record-specification-type" id="_ref_4970"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">Completion Record</a></emu-xref> that is <span class="e-user-code">the result of evaluating</span> <var>F</var> in a manner that conforms to the specification of <var>F</var>. If <var>thisArgument</var> is <emu-const>uninitialized</emu-const>, the <emu-val>this</emu-val> value is uninitialized; else <var>thisArgument</var> provides the <emu-val>this</emu-val> value. <var>argumentsList</var> provides the named parameters. <var>newTarget</var> provides the NewTarget value.</li><li>NOTE: If <var>F</var> is defined in this document, “the specification of <var>F</var>” is the behaviour specified for it via algorithm steps or other means.</li><li>Remove <var>calleeContext</var> from the <emu-xref href="#execution-context-stack" id="_ref_4971"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> and restore <var>callerContext</var> as the <emu-xref href="#running-execution-context" id="_ref_4972"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Return ?&nbsp;<var>result</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>When <var>calleeContext</var> is removed from the <emu-xref href="#execution-context-stack" id="_ref_4973"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> it must not be destroyed if it has been suspended and retained by an accessible Generator for later resumption.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-createbuiltinfunction" type="abstract operation" aoid="CreateBuiltinFunction">
<h1><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> ] ] ] ] )</h1>
<p>The abstract operation CreateBuiltinFunction takes arguments <var>behaviour</var> (an <emu-xref href="#sec-abstract-closure" id="_ref_4974"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref>, a set of algorithm steps, or some other definition of a function's behaviour provided in this specification), <var>length</var> (a non-negative <emu-xref href="#integer" id="_ref_4975"><a href="notational-conventions.html#integer">integer</a></emu-xref> or +∞), <var>name</var> (a <emu-xref href="#property-key" id="_ref_4976"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or a <emu-xref href="#sec-private-names" id="_ref_4977"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>), and <var>additionalInternalSlotsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4978"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of names of internal slots) and optional arguments <var>realm</var> (a <emu-xref href="#realm-record" id="_ref_4979"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>), <var>prototype</var> (an Object or <emu-val>null</emu-val>), <var>prefix</var> (a String), and <var>async</var> (a Boolean) and returns a built-in <emu-xref href="#function-object" id="_ref_4980"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. <var>additionalInternalSlotsList</var> contains the names of additional internal slots that must be defined as part of the object. This operation creates a built-in <emu-xref href="#function-object" id="_ref_4981"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>realm</var> is not present, set <var>realm</var> to <emu-xref href="#current-realm" id="_ref_4982"><a href="executable-code-and-execution-contexts.html#current-realm">the current Realm Record</a></emu-xref>.</li><li>If <var>prototype</var> is not present, set <var>prototype</var> to <var>realm</var>.<var class="field">[[Intrinsics]]</var>.[[<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_4983"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>]].</li><li>If <var>async</var> is not present, set <var>async</var> to <emu-val>false</emu-val>.</li><li>Let <var>internalSlotsList</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_4984"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> containing the names of all the internal slots that <emu-xref href="#sec-built-in-function-objects" id="_ref_295"><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects">10.3</a></emu-xref> requires for the built-in <emu-xref href="#function-object" id="_ref_4985"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> that is about to be created.</li><li>Append to <var>internalSlotsList</var> the elements of <var>additionalInternalSlotsList</var>.</li><li>Let <var>func</var> be a new built-in <emu-xref href="#function-object" id="_ref_4986"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> that, when called, performs the action described by <var>behaviour</var> using the provided arguments as the values of the corresponding parameters specified by <var>behaviour</var>. The new <emu-xref href="#function-object" id="_ref_4987"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> has internal slots whose names are the elements of <var>internalSlotsList</var>, and an <var class="field">[[InitialName]]</var> internal slot.</li><li>Set <var>func</var>.<var class="field">[[Async]]</var> to <var>async</var>.</li><li>Set <var>func</var>.<var class="field">[[Prototype]]</var> to <var>prototype</var>.</li><li>Set <var>func</var>.<var class="field">[[Extensible]]</var> to <emu-val>true</emu-val>.</li><li>Set <var>func</var>.<var class="field">[[Realm]]</var> to <var>realm</var>.</li><li>Set <var>func</var>.<var class="field">[[InitialName]]</var> to <emu-val>null</emu-val>.</li><li>Perform <emu-xref aoid="SetFunctionLength" id="_ref_4988"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionlength">SetFunctionLength</a></emu-xref>(<var>func</var>, <var>length</var>).</li><li>If <var>prefix</var> is not present, then<ol><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_4989"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>func</var>, <var>name</var>).</li></ol></li><li>Else,<ol><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_4990"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>func</var>, <var>name</var>, <var>prefix</var>).</li></ol></li><li>Return <var>func</var>.</li></ol></emu-alg>
<p>Each built-in function defined in this specification is created by calling the CreateBuiltinFunction abstract operation.</p>
</emu-clause>
</emu-clause>
<emu-clause id="sec-built-in-exotic-object-internal-methods-and-slots">
<h1><span class="secnum">10.4</span> Built-in Exotic Object Internal Methods and Slots</h1>
<p>This specification defines several kinds of built-in <emu-xref href="#exotic-object" id="_ref_4991"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic objects</a></emu-xref>. These objects generally behave similar to <emu-xref href="#ordinary-object" id="_ref_4992"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref> except for a few specific situations. The following <emu-xref href="#exotic-object" id="_ref_4993"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic objects</a></emu-xref> use the <emu-xref href="#ordinary-object" id="_ref_4994"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> internal methods except where it is explicitly specified otherwise below:</p>
<emu-clause id="sec-bound-function-exotic-objects">
<h1><span class="secnum">10.4.1</span> Bound Function Exotic Objects</h1>
<p>A <emu-xref href="#bound-function-exotic-object" id="_ref_4995"><a href="ordinary-and-exotic-objects-behaviours.html#bound-function-exotic-object">bound function exotic object</a></emu-xref> is an <emu-xref href="#exotic-object" id="_ref_4996"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> that wraps another <emu-xref href="#function-object" id="_ref_4997"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. A <emu-xref href="#bound-function-exotic-object" id="_ref_4998"><a href="ordinary-and-exotic-objects-behaviours.html#bound-function-exotic-object">bound function exotic object</a></emu-xref> is callable (it has a <var class="field">[[Call]]</var> internal method and may have a <var class="field">[[Construct]]</var> internal method). Calling a <emu-xref href="#bound-function-exotic-object" id="_ref_4999"><a href="ordinary-and-exotic-objects-behaviours.html#bound-function-exotic-object">bound function exotic object</a></emu-xref> generally results in a call of its wrapped function.</p>
<p>An object is a <dfn id="bound-function-exotic-object" variants="bound function exotic objects" tabindex="-1">bound function exotic object</dfn> if its <var class="field">[[Call]]</var> and (if applicable) <var class="field">[[Construct]]</var> internal methods use the following implementations, and its other essential internal methods use the definitions found in <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots" id="_ref_296"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots">10.1</a></emu-xref>. These methods are installed in <emu-xref aoid="BoundFunctionCreate" id="_ref_5000"><a href="ordinary-and-exotic-objects-behaviours.html#sec-boundfunctioncreate">BoundFunctionCreate</a></emu-xref>.</p>
<p><emu-xref href="#bound-function-exotic-object" id="_ref_5001"><a href="ordinary-and-exotic-objects-behaviours.html#bound-function-exotic-object">Bound function exotic objects</a></emu-xref> do not have the internal slots of ECMAScript <emu-xref href="#function-object" id="_ref_5002"><a href="ecmascript-data-types-and-values.html#function-object">function objects</a></emu-xref> listed in <emu-xref href="#table-internal-slots-of-ecmascript-function-objects" id="_ref_297"><a href="ordinary-and-exotic-objects-behaviours.html#table-internal-slots-of-ecmascript-function-objects">Table 25</a></emu-xref>. Instead they have the internal slots listed in <emu-xref href="#table-internal-slots-of-bound-function-exotic-objects" id="_ref_298"><a href="ordinary-and-exotic-objects-behaviours.html#table-internal-slots-of-bound-function-exotic-objects">Table 26</a></emu-xref>, in addition to <var class="field">[[Prototype]]</var> and <var class="field">[[Extensible]]</var>.</p>
<emu-table id="table-internal-slots-of-bound-function-exotic-objects" caption="Internal Slots of Bound Function Exotic Objects" oldids="table-28"><figure><figcaption>Table 26: Internal Slots of Bound Function Exotic Objects</figcaption><span id="table-28"></span>
<table>
<thead>
<tr>
<th>
Internal Slot
</th>
<th>
Type
</th>
<th>
Description
</th>
</tr>
</thead>
<tbody><tr>
<td>
<var class="field">[[BoundTargetFunction]]</var>
</td>
<td>
a callable Object
</td>
<td>
The wrapped <emu-xref href="#function-object" id="_ref_5003"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>.
</td>
</tr>
<tr>
<td>
<var class="field">[[BoundThis]]</var>
</td>
<td>
an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5004"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>
</td>
<td>
The value that is always passed as the <emu-val>this</emu-val> value when calling the wrapped function.
</td>
</tr>
<tr>
<td>
<var class="field">[[BoundArguments]]</var>
</td>
<td>
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5005"><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_5006"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>
</td>
<td>
A list of values whose elements are used as the first arguments to any call to the wrapped function.
</td>
</tr>
</tbody></table>
</figure></emu-table>
<emu-clause id="sec-bound-function-exotic-objects-call-thisargument-argumentslist" type="internal method">
<h1><span class="secnum">10.4.1.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</h1>
<p>The <var class="field">[[Call]]</var> internal method of a <emu-xref href="#bound-function-exotic-object" id="_ref_5007"><a href="ordinary-and-exotic-objects-behaviours.html#bound-function-exotic-object">bound function exotic object</a></emu-xref> <var>F</var> takes arguments <var>thisArgument</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5008"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5009"><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_5010"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5011"><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_5012"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5013"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>target</var> be <var>F</var>.<var class="field">[[BoundTargetFunction]]</var>.</li><li>Let <var>boundThis</var> be <var>F</var>.<var class="field">[[BoundThis]]</var>.</li><li>Let <var>boundArgs</var> be <var>F</var>.<var class="field">[[BoundArguments]]</var>.</li><li>Let <var>args</var> be the <emu-xref href="#list-concatenation" id="_ref_5014"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>boundArgs</var> and <var>argumentsList</var>.</li><li>Return ?&nbsp;<emu-xref aoid="Call" id="_ref_5015"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>target</var>, <var>boundThis</var>, <var>args</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-bound-function-exotic-objects-construct-argumentslist-newtarget" type="internal method">
<h1><span class="secnum">10.4.1.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</h1>
<p>The <var class="field">[[Construct]]</var> internal method of a <emu-xref href="#bound-function-exotic-object" id="_ref_5016"><a href="ordinary-and-exotic-objects-behaviours.html#bound-function-exotic-object">bound function exotic object</a></emu-xref> <var>F</var> takes arguments <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5017"><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_5018"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and <var>newTarget</var> (a <emu-xref href="#constructor" id="_ref_5019"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5020"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5021"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>target</var> be <var>F</var>.<var class="field">[[BoundTargetFunction]]</var>.</li><li><emu-xref href="#assert" id="_ref_5022"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsConstructor" id="_ref_5023"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>target</var>) is <emu-val>true</emu-val>.</li><li>Let <var>boundArgs</var> be <var>F</var>.<var class="field">[[BoundArguments]]</var>.</li><li>Let <var>args</var> be the <emu-xref href="#list-concatenation" id="_ref_5024"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>boundArgs</var> and <var>argumentsList</var>.</li><li>If <emu-xref aoid="SameValue" id="_ref_5025"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>F</var>, <var>newTarget</var>) is <emu-val>true</emu-val>, set <var>newTarget</var> to <var>target</var>.</li><li>Return ?&nbsp;<emu-xref aoid="Construct" id="_ref_5026"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>target</var>, <var>args</var>, <var>newTarget</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-boundfunctioncreate" type="abstract operation" aoid="BoundFunctionCreate">
<h1><span class="secnum">10.4.1.3</span> BoundFunctionCreate ( <var>targetFunction</var>, <var>boundThis</var>, <var>boundArgs</var> )</h1>
<p>The abstract operation BoundFunctionCreate takes arguments <var>targetFunction</var> (a <emu-xref href="#function-object" id="_ref_5027"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>), <var>boundThis</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5028"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>boundArgs</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5029"><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_5030"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5031"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#function-object" id="_ref_5032"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5033"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is used to specify the creation of new <emu-xref href="#bound-function-exotic-object" id="_ref_5034"><a href="ordinary-and-exotic-objects-behaviours.html#bound-function-exotic-object">bound function exotic objects</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>proto</var> be ?&nbsp;<span class="e-user-code"><var>targetFunction</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li><li>Let <var>internalSlotsList</var> be the <emu-xref href="#list-concatenation" id="_ref_5035"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of « <var class="field">[[Prototype]]</var>, <var class="field">[[Extensible]]</var>&nbsp;» and the internal slots listed in <emu-xref href="#table-internal-slots-of-bound-function-exotic-objects" id="_ref_299"><a href="ordinary-and-exotic-objects-behaviours.html#table-internal-slots-of-bound-function-exotic-objects">Table 26</a></emu-xref>.</li><li>Let <var>obj</var> be <emu-xref aoid="MakeBasicObject" id="_ref_5036"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref>(<var>internalSlotsList</var>).</li><li>Set <var>obj</var>.<var class="field">[[Prototype]]</var> to <var>proto</var>.</li><li>Set <var>obj</var>.<var class="field">[[Call]]</var> as specified in <emu-xref href="#sec-bound-function-exotic-objects-call-thisargument-argumentslist" id="_ref_300"><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects-call-thisargument-argumentslist">10.4.1.1</a></emu-xref>.</li><li>If <emu-xref aoid="IsConstructor" id="_ref_5037"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>targetFunction</var>) is <emu-val>true</emu-val>, then<ol><li>Set <var>obj</var>.<var class="field">[[Construct]]</var> as specified in <emu-xref href="#sec-bound-function-exotic-objects-construct-argumentslist-newtarget" id="_ref_301"><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects-construct-argumentslist-newtarget">10.4.1.2</a></emu-xref>.</li></ol></li><li>Set <var>obj</var>.<var class="field">[[BoundTargetFunction]]</var> to <var>targetFunction</var>.</li><li>Set <var>obj</var>.<var class="field">[[BoundThis]]</var> to <var>boundThis</var>.</li><li>Set <var>obj</var>.<var class="field">[[BoundArguments]]</var> to <var>boundArgs</var>.</li><li>Return <var>obj</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-array-exotic-objects">
<h1><span class="secnum">10.4.2</span> Array Exotic Objects</h1>
<p>An Array is an <emu-xref href="#exotic-object" id="_ref_5038"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> that gives special treatment to <emu-xref href="#array-index" id="_ref_5039"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref> <emu-xref href="#property-key" id="_ref_5040"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref> (see <emu-xref href="#sec-object-type" id="_ref_302"><a href="ecmascript-data-types-and-values.html#sec-object-type">6.1.7</a></emu-xref>). A property whose <emu-xref href="#property-name" id="_ref_5041"><a href="ecmascript-data-types-and-values.html#property-name">property name</a></emu-xref> is an <emu-xref href="#array-index" id="_ref_5042"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref> is also called an <em>element</em>. Every Array has a non-configurable <emu-val>"length"</emu-val> property whose value is always a non-negative <emu-xref href="#integral-number" id="_ref_5043"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref> whose <emu-xref href="#mathematical-value" id="_ref_5044"><a href="notational-conventions.html#mathematical-value">mathematical value</a></emu-xref> is strictly less than 2<sup>32</sup>. The value of the <emu-val>"length"</emu-val> property is numerically greater than the name of every own property whose name is an <emu-xref href="#array-index" id="_ref_5045"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref>; whenever an own property of an Array is created or changed, other properties are adjusted as necessary to maintain this invariant. Specifically, whenever an own property is added whose name is an <emu-xref href="#array-index" id="_ref_5046"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref>, the value of the <emu-val>"length"</emu-val> property is changed, if necessary, to be one more than the numeric value of that <emu-xref href="#array-index" id="_ref_5047"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref>; and whenever the value of the <emu-val>"length"</emu-val> property is changed, every own property whose name is an <emu-xref href="#array-index" id="_ref_5048"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref> whose value is not smaller than the new length is deleted. This constraint applies only to own properties of an Array and is unaffected by <emu-val>"length"</emu-val> or <emu-xref href="#array-index" id="_ref_5049"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref> properties that may be inherited from its prototypes.</p>
<p>An object is an <dfn id="array-exotic-object" variants="Array exotic objects" tabindex="-1">Array exotic object</dfn> (or simply, an Array) if its <var class="field">[[DefineOwnProperty]]</var> internal method uses the following implementation, and its other essential internal methods use the definitions found in <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots" id="_ref_303"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots">10.1</a></emu-xref>. These methods are installed in <emu-xref aoid="ArrayCreate" id="_ref_5050"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>.</p>
<emu-clause id="sec-array-exotic-objects-defineownproperty-p-desc" type="internal method">
<h1><span class="secnum">10.4.2.1</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</h1>
<p>The <var class="field">[[DefineOwnProperty]]</var> internal method of an <emu-xref href="#array-exotic-object" id="_ref_5051"><a href="ordinary-and-exotic-objects-behaviours.html#array-exotic-object">Array exotic object</a></emu-xref> <var>A</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5052"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5053"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5054"><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_5055"><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>P</var> is <emu-val>"length"</emu-val>, return ?&nbsp;<emu-xref aoid="ArraySetLength" id="_ref_5056"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraysetlength" class="e-user-code">ArraySetLength</a></emu-xref>(<var>A</var>, <var>Desc</var>).</li><li>If <var>P</var> is an <emu-xref href="#array-index" id="_ref_5057"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref>, then<ol><li>Let <var>lengthDesc</var> be <emu-xref aoid="OrdinaryGetOwnProperty" id="_ref_5058"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>).</li><li><emu-xref href="#assert" id="_ref_5059"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>lengthDesc</var> is not <emu-val>undefined</emu-val>.</li><li><emu-xref href="#assert" id="_ref_5060"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsDataDescriptor" id="_ref_5061"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>lengthDesc</var>) is <emu-val>true</emu-val>.</li><li><emu-xref href="#assert" id="_ref_5062"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>lengthDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>.</li><li>Let <var>length</var> be <var>lengthDesc</var>.<var class="field">[[Value]]</var>.</li><li><emu-xref href="#assert" id="_ref_5063"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>length</var> is a non-negative <emu-xref href="#integral-number" id="_ref_5064"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref>.</li><li>Let <var>index</var> be !&nbsp;<emu-xref aoid="ToUint32" id="_ref_5065"><a href="abstract-operations.html#sec-touint32">ToUint32</a></emu-xref>(<var>P</var>).</li><li>If <var>index</var><var>length</var> and <var>lengthDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Let <var>succeeded</var> be !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5066"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <var>P</var>, <var>Desc</var>).</li><li>If <var>succeeded</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>index</var><var>length</var>, then<ol><li>Set <var>lengthDesc</var>.<var class="field">[[Value]]</var> to <var>index</var> + <emu-val>1</emu-val><sub>𝔽</sub>.</li><li>Set <var>succeeded</var> to !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5067"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>, <var>lengthDesc</var>).</li><li><emu-xref href="#assert" id="_ref_5068"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>succeeded</var> is <emu-val>true</emu-val>.</li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5069"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty" class="e-user-code">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <var>P</var>, <var>Desc</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-arraycreate" type="abstract operation" aoid="ArrayCreate">
<h1><span class="secnum">10.4.2.2</span> ArrayCreate ( <var>length</var> [ , <var>proto</var> ] )</h1>
<p>The abstract operation ArrayCreate takes argument <var>length</var> (a non-negative <emu-xref href="#integer" id="_ref_5070"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and optional argument <var>proto</var> (an Object) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5071"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an <emu-xref href="#array-exotic-object" id="_ref_5072"><a href="ordinary-and-exotic-objects-behaviours.html#array-exotic-object">Array exotic object</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5073"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is used to specify the creation of new Arrays. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>length</var> &gt; 2<sup>32</sup> - 1, throw a <emu-val>RangeError</emu-val> exception.</li><li>If <var>proto</var> is not present, set <var>proto</var> to <emu-xref href="#sec-properties-of-the-array-prototype-object" id="_ref_5074"><a href="indexed-collections.html#sec-properties-of-the-array-prototype-object">%Array.prototype%</a></emu-xref>.</li><li>Let <var>A</var> be <emu-xref aoid="MakeBasicObject" id="_ref_5075"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref><var class="field">[[Prototype]]</var>, <var class="field">[[Extensible]]</var>&nbsp;»).</li><li>Set <var>A</var>.<var class="field">[[Prototype]]</var> to <var>proto</var>.</li><li>Set <var>A</var>.<var class="field">[[DefineOwnProperty]]</var> as specified in <emu-xref href="#sec-array-exotic-objects-defineownproperty-p-desc" id="_ref_304"><a href="ordinary-and-exotic-objects-behaviours.html#sec-array-exotic-objects-defineownproperty-p-desc">10.4.2.1</a></emu-xref>.</li><li>Perform !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5076"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <emu-xref aoid="𝔽" id="_ref_5077"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>length</var>), <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <var>A</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-arrayspeciescreate" type="abstract operation" aoid="ArraySpeciesCreate">
<h1><span class="secnum">10.4.2.3</span> ArraySpeciesCreate ( <var>originalArray</var>, <var>length</var> )</h1>
<p>The abstract operation ArraySpeciesCreate takes arguments <var>originalArray</var> (an Object) and <var>length</var> (a non-negative <emu-xref href="#integer" id="_ref_5078"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5079"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5080"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is used to specify the creation of a new Array or similar object using a <emu-xref href="#constructor" id="_ref_5081"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> function that is derived from <var>originalArray</var>. It does not enforce that the <emu-xref href="#constructor" id="_ref_5082"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> function returns an Array. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>isArray</var> be ?&nbsp;<emu-xref aoid="IsArray" id="_ref_5083"><a href="abstract-operations.html#sec-isarray">IsArray</a></emu-xref>(<var>originalArray</var>).</li><li>If <var>isArray</var> is <emu-val>false</emu-val>, return ?&nbsp;<emu-xref aoid="ArrayCreate" id="_ref_5084"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(<var>length</var>).</li><li>Let <var>C</var> be ?&nbsp;<emu-xref aoid="Get" id="_ref_5085"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>originalArray</var>, <emu-val>"constructor"</emu-val>).</li><li>If <emu-xref aoid="IsConstructor" id="_ref_5086"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>C</var>) is <emu-val>true</emu-val>, then<ol><li>Let <var>thisRealm</var> be <emu-xref href="#current-realm" id="_ref_5087"><a href="executable-code-and-execution-contexts.html#current-realm">the current Realm Record</a></emu-xref>.</li><li>Let <var>realmC</var> be ?&nbsp;<emu-xref aoid="GetFunctionRealm" id="_ref_5088"><a href="abstract-operations.html#sec-getfunctionrealm">GetFunctionRealm</a></emu-xref>(<var>C</var>).</li><li>If <var>thisRealm</var> and <var>realmC</var> are not the same <emu-xref href="#realm-record" id="_ref_5089"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>, then<ol><li>If <emu-xref aoid="SameValue" id="_ref_5090"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>C</var>, <var>realmC</var>.<var class="field">[[Intrinsics]]</var>.[[<emu-xref href="#sec-array-constructor" id="_ref_5091"><a href="indexed-collections.html#sec-array-constructor">%Array%</a></emu-xref>]]) is <emu-val>true</emu-val>, set <var>C</var> to <emu-val>undefined</emu-val>.</li></ol></li></ol></li><li>If <var>C</var> <emu-xref href="#sec-object-type" id="_ref_5092"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>, then<ol><li>Set <var>C</var> to ?&nbsp;<emu-xref aoid="Get" id="_ref_5093"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>C</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_5094"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.species%</a></emu-xref>).</li><li>If <var>C</var> is <emu-val>null</emu-val>, set <var>C</var> to <emu-val>undefined</emu-val>.</li></ol></li><li>If <var>C</var> is <emu-val>undefined</emu-val>, return ?&nbsp;<emu-xref aoid="ArrayCreate" id="_ref_5095"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate">ArrayCreate</a></emu-xref>(<var>length</var>).</li><li>If <emu-xref aoid="IsConstructor" id="_ref_5096"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>C</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_5097"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>C</var>, « <emu-xref aoid="𝔽" id="_ref_5098"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>length</var>)&nbsp;»).</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>If <var>originalArray</var> was created using the standard built-in Array <emu-xref href="#constructor" id="_ref_5099"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> for a <emu-xref href="#realm" id="_ref_5100"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref> that is not the <emu-xref href="#realm" id="_ref_5101"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref> of the <emu-xref href="#running-execution-context" id="_ref_5102"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>, then a new Array is created using the <emu-xref href="#realm" id="_ref_5103"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref> of the <emu-xref href="#running-execution-context" id="_ref_5104"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>. This maintains compatibility with Web browsers that have historically had that behaviour for the <code>Array.prototype</code> methods that now are defined using ArraySpeciesCreate.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-arraysetlength" type="abstract operation" aoid="ArraySetLength">
<h1><span class="secnum">10.4.2.4</span> ArraySetLength ( <var>A</var>, <var>Desc</var> )</h1>
<p>The abstract operation ArraySetLength takes arguments <var>A</var> (an Array) and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5105"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5106"><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_5107"><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>Desc</var> does not have a <var class="field">[[Value]]</var> field, then<ol><li>Return !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5108"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>, <var>Desc</var>).</li></ol></li><li>Let <var>newLenDesc</var> be a copy of <var>Desc</var>.</li><li id="step-arraysetlength-newlen">Let <var>newLen</var> be ?&nbsp;<emu-xref aoid="ToUint32" id="_ref_5109"><a href="abstract-operations.html#sec-touint32" class="e-user-code">ToUint32</a></emu-xref>(<var>Desc</var>.<var class="field">[[Value]]</var>).</li><li id="step-arraysetlength-numberlen">Let <var>numberLen</var> be ?&nbsp;<emu-xref aoid="ToNumber" id="_ref_5110"><a href="abstract-operations.html#sec-tonumber" class="e-user-code">ToNumber</a></emu-xref>(<var>Desc</var>.<var class="field">[[Value]]</var>).</li><li>If <emu-xref aoid="SameValueZero" id="_ref_5111"><a href="abstract-operations.html#sec-samevaluezero">SameValueZero</a></emu-xref>(<var>newLen</var>, <var>numberLen</var>) is <emu-val>false</emu-val>, throw a <emu-val>RangeError</emu-val> exception.</li><li>Set <var>newLenDesc</var>.<var class="field">[[Value]]</var> to <var>newLen</var>.</li><li>Let <var>oldLenDesc</var> be <emu-xref aoid="OrdinaryGetOwnProperty" id="_ref_5112"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>).</li><li><emu-xref href="#assert" id="_ref_5113"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>oldLenDesc</var> is not <emu-val>undefined</emu-val>.</li><li><emu-xref href="#assert" id="_ref_5114"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsDataDescriptor" id="_ref_5115"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>oldLenDesc</var>) is <emu-val>true</emu-val>.</li><li><emu-xref href="#assert" id="_ref_5116"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>oldLenDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>.</li><li>Let <var>oldLen</var> be <var>oldLenDesc</var>.<var class="field">[[Value]]</var>.</li><li>If <var>newLen</var><var>oldLen</var>, then<ol><li>Return !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5117"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>, <var>newLenDesc</var>).</li></ol></li><li>If <var>oldLenDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>newLenDesc</var> does not have a <var class="field">[[Writable]]</var> field or <var>newLenDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>newWritable</var> be <emu-val>true</emu-val>.</li></ol></li><li>Else,<ol><li>NOTE: Setting the <var class="field">[[Writable]]</var> attribute to <emu-val>false</emu-val> is deferred in case any elements cannot be deleted.</li><li>Let <var>newWritable</var> be <emu-val>false</emu-val>.</li><li>Set <var>newLenDesc</var>.<var class="field">[[Writable]]</var> to <emu-val>true</emu-val>.</li></ol></li><li>Let <var>succeeded</var> be !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5118"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>, <var>newLenDesc</var>).</li><li>If <var>succeeded</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>For each own <emu-xref href="#property-key" id="_ref_5119"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>A</var> such that <var>P</var> is an <emu-xref href="#array-index" id="_ref_5120"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref> and !&nbsp;<emu-xref aoid="ToUint32" id="_ref_5121"><a href="abstract-operations.html#sec-touint32">ToUint32</a></emu-xref>(<var>P</var>) ≥ <var>newLen</var>, in descending numeric index order, do<ol><li>Let <var>deleteSucceeded</var> be !&nbsp;<var>A</var>.<var class="field">[[Delete]]</var>(<var>P</var>).</li><li>If <var>deleteSucceeded</var> is <emu-val>false</emu-val>, then<ol><li>Set <var>newLenDesc</var>.<var class="field">[[Value]]</var> to !&nbsp;<emu-xref aoid="ToUint32" id="_ref_5122"><a href="abstract-operations.html#sec-touint32">ToUint32</a></emu-xref>(<var>P</var>) + <emu-val>1</emu-val><sub>𝔽</sub>.</li><li>If <var>newWritable</var> is <emu-val>false</emu-val>, set <var>newLenDesc</var>.<var class="field">[[Writable]]</var> to <emu-val>false</emu-val>.</li><li>Perform !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5123"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>, <var>newLenDesc</var>).</li><li>Return <emu-val>false</emu-val>.</li></ol></li></ol></li><li>If <var>newWritable</var> is <emu-val>false</emu-val>, then<ol><li>Set <var>succeeded</var> to !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5124"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>A</var>, <emu-val>"length"</emu-val>, PropertyDescriptor { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li><emu-xref href="#assert" id="_ref_5125"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>succeeded</var> is <emu-val>true</emu-val>.</li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>In steps <emu-xref href="#step-arraysetlength-newlen" id="_ref_305"><a href="ordinary-and-exotic-objects-behaviours.html#step-arraysetlength-newlen">3</a></emu-xref> and <emu-xref href="#step-arraysetlength-numberlen" id="_ref_306"><a href="ordinary-and-exotic-objects-behaviours.html#step-arraysetlength-numberlen">4</a></emu-xref>, if <var>Desc</var>.<var class="field">[[Value]]</var> is an object then its <code>valueOf</code> method is called twice. This is legacy behaviour that was specified with this effect starting with the 2<sup>nd</sup> Edition of this specification.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
<emu-clause id="sec-string-exotic-objects">
<h1><span class="secnum">10.4.3</span> String Exotic Objects</h1>
<p>A String object is an <emu-xref href="#exotic-object" id="_ref_5126"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> that encapsulates a String value and exposes virtual <emu-xref href="#integer-index" id="_ref_5127"><a href="ecmascript-data-types-and-values.html#integer-index">integer-indexed</a></emu-xref> <emu-xref href="#sec-object-type" id="_ref_5128"><a href="ecmascript-data-types-and-values.html#sec-object-type">data properties</a></emu-xref> corresponding to the individual code unit elements of the String value. <emu-xref href="#string-exotic-object" id="_ref_5129"><a href="ordinary-and-exotic-objects-behaviours.html#string-exotic-object">String exotic objects</a></emu-xref> always have a <emu-xref href="#sec-object-type" id="_ref_5130"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref> named <emu-val>"length"</emu-val> whose value is the length of the encapsulated String value. Both the code unit <emu-xref href="#sec-object-type" id="_ref_5131"><a href="ecmascript-data-types-and-values.html#sec-object-type">data properties</a></emu-xref> and the <emu-val>"length"</emu-val> property are non-writable and non-configurable.</p>
<p>An object is a <dfn id="string-exotic-object" variants="String exotic objects" tabindex="-1">String exotic object</dfn> (or simply, a String object) if its <var class="field">[[GetOwnProperty]]</var>, <var class="field">[[DefineOwnProperty]]</var>, and <var class="field">[[OwnPropertyKeys]]</var> internal methods use the following implementations, and its other essential internal methods use the definitions found in <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots" id="_ref_307"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots">10.1</a></emu-xref>. These methods are installed in <emu-xref aoid="StringCreate" id="_ref_5132"><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringcreate">StringCreate</a></emu-xref>.</p>
<p><emu-xref href="#string-exotic-object" id="_ref_5133"><a href="ordinary-and-exotic-objects-behaviours.html#string-exotic-object">String exotic objects</a></emu-xref> have the same internal slots as <emu-xref href="#ordinary-object" id="_ref_5134"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref>. They also have a <var class="field">[[StringData]]</var> internal slot.</p>
<emu-clause id="sec-string-exotic-objects-getownproperty-p" type="internal method">
<h1><span class="secnum">10.4.3.1</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[GetOwnProperty]]</var> internal method of a <emu-xref href="#string-exotic-object" id="_ref_5135"><a href="ordinary-and-exotic-objects-behaviours.html#string-exotic-object">String exotic object</a></emu-xref> <var>S</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5136"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5137"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5138"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>desc</var> be <emu-xref aoid="OrdinaryGetOwnProperty" id="_ref_5139"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a></emu-xref>(<var>S</var>, <var>P</var>).</li><li>If <var>desc</var> is not <emu-val>undefined</emu-val>, return <var>desc</var>.</li><li>Return <emu-xref aoid="StringGetOwnProperty" id="_ref_5140"><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringgetownproperty">StringGetOwnProperty</a></emu-xref>(<var>S</var>, <var>P</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-string-exotic-objects-defineownproperty-p-desc" type="internal method">
<h1><span class="secnum">10.4.3.2</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</h1>
<p>The <var class="field">[[DefineOwnProperty]]</var> internal method of a <emu-xref href="#string-exotic-object" id="_ref_5141"><a href="ordinary-and-exotic-objects-behaviours.html#string-exotic-object">String exotic object</a></emu-xref> <var>S</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5142"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5143"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5144"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>stringDesc</var> be <emu-xref aoid="StringGetOwnProperty" id="_ref_5145"><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringgetownproperty">StringGetOwnProperty</a></emu-xref>(<var>S</var>, <var>P</var>).</li><li>If <var>stringDesc</var> is not <emu-val>undefined</emu-val>, then<ol><li>Let <var>extensible</var> be <var>S</var>.<var class="field">[[Extensible]]</var>.</li><li>Return <emu-xref aoid="IsCompatiblePropertyDescriptor" id="_ref_5146"><a href="ordinary-and-exotic-objects-behaviours.html#sec-iscompatiblepropertydescriptor">IsCompatiblePropertyDescriptor</a></emu-xref>(<var>extensible</var>, <var>Desc</var>, <var>stringDesc</var>).</li></ol></li><li>Return !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5147"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>S</var>, <var>P</var>, <var>Desc</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-string-exotic-objects-ownpropertykeys" type="internal method">
<h1><span class="secnum">10.4.3.3</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</h1>
<p>The <var class="field">[[OwnPropertyKeys]]</var> internal method of a <emu-xref href="#string-exotic-object" id="_ref_5148"><a href="ordinary-and-exotic-objects-behaviours.html#string-exotic-object">String exotic object</a></emu-xref> <var>O</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5149"><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_5150"><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_5151"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>keys</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5152"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>str</var> be <var>O</var>.<var class="field">[[StringData]]</var>.</li><li><emu-xref href="#assert" id="_ref_5153"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>str</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5154"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>.</li><li>Let <var>len</var> be the length of <var>str</var>.</li><li>For each <emu-xref href="#integer" id="_ref_5155"><a href="notational-conventions.html#integer">integer</a></emu-xref> <var>i</var> such that 0 ≤ <var>i</var> &lt; <var>len</var>, in ascending order, do<ol><li>Append !&nbsp;<emu-xref aoid="ToString" id="_ref_5156"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_5157"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>i</var>)) to <var>keys</var>.</li></ol></li><li>For each own <emu-xref href="#property-key" id="_ref_5158"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>O</var> such that <var>P</var> is an <emu-xref href="#array-index" id="_ref_5159"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref> and !&nbsp;<emu-xref aoid="ToIntegerOrInfinity" id="_ref_5160"><a href="abstract-operations.html#sec-tointegerorinfinity">ToIntegerOrInfinity</a></emu-xref>(<var>P</var>) ≥ <var>len</var>, in ascending numeric index order, do<ol><li>Append <var>P</var> to <var>keys</var>.</li></ol></li><li>For each own <emu-xref href="#property-key" id="_ref_5161"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>O</var> such that <var>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5162"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> and <var>P</var> is not an <emu-xref href="#array-index" id="_ref_5163"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref>, in ascending chronological order of property creation, do<ol><li>Append <var>P</var> to <var>keys</var>.</li></ol></li><li>For each own <emu-xref href="#property-key" id="_ref_5164"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>O</var> such that <var>P</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_5165"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, in ascending chronological order of property creation, do<ol><li>Append <var>P</var> to <var>keys</var>.</li></ol></li><li>Return <var>keys</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-stringcreate" type="abstract operation" aoid="StringCreate">
<h1><span class="secnum">10.4.3.4</span> StringCreate ( <var>value</var>, <var>prototype</var> )</h1>
<p>The abstract operation StringCreate takes arguments <var>value</var> (a String) and <var>prototype</var> (an Object) and returns a <emu-xref href="#string-exotic-object" id="_ref_5166"><a href="ordinary-and-exotic-objects-behaviours.html#string-exotic-object">String exotic object</a></emu-xref>. It is used to specify the creation of new <emu-xref href="#string-exotic-object" id="_ref_5167"><a href="ordinary-and-exotic-objects-behaviours.html#string-exotic-object">String exotic objects</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>S</var> be <emu-xref aoid="MakeBasicObject" id="_ref_5168"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref><var class="field">[[Prototype]]</var>, <var class="field">[[Extensible]]</var>, <var class="field">[[StringData]]</var>&nbsp;»).</li><li>Set <var>S</var>.<var class="field">[[Prototype]]</var> to <var>prototype</var>.</li><li>Set <var>S</var>.<var class="field">[[StringData]]</var> to <var>value</var>.</li><li>Set <var>S</var>.<var class="field">[[GetOwnProperty]]</var> as specified in <emu-xref href="#sec-string-exotic-objects-getownproperty-p" id="_ref_308"><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-getownproperty-p">10.4.3.1</a></emu-xref>.</li><li>Set <var>S</var>.<var class="field">[[DefineOwnProperty]]</var> as specified in <emu-xref href="#sec-string-exotic-objects-defineownproperty-p-desc" id="_ref_309"><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-defineownproperty-p-desc">10.4.3.2</a></emu-xref>.</li><li>Set <var>S</var>.<var class="field">[[OwnPropertyKeys]]</var> as specified in <emu-xref href="#sec-string-exotic-objects-ownpropertykeys" id="_ref_310"><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-ownpropertykeys">10.4.3.3</a></emu-xref>.</li><li>Let <var>length</var> be the length of <var>value</var>.</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_5169"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>S</var>, <emu-val>"length"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <emu-xref aoid="𝔽" id="_ref_5170"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>length</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>Return <var>S</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-stringgetownproperty" type="abstract operation" aoid="StringGetOwnProperty">
<h1><span class="secnum">10.4.3.5</span> StringGetOwnProperty ( <var>S</var>, <var>P</var> )</h1>
<p>The abstract operation StringGetOwnProperty takes arguments <var>S</var> (an Object that has a <var class="field">[[StringData]]</var> internal slot) and <var>P</var> (a <emu-xref href="#property-key" id="_ref_5171"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5172"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5173"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is not a String</a></emu-xref>, return <emu-val>undefined</emu-val>.</li><li>Let <var>index</var> be <emu-xref aoid="CanonicalNumericIndexString" id="_ref_5174"><a href="abstract-operations.html#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a></emu-xref>(<var>P</var>).</li><li>If <var>index</var> is not an <emu-xref href="#integral-number" id="_ref_5175"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref>, return <emu-val>undefined</emu-val>.</li><li>If <var>index</var> is <emu-val>-0</emu-val><sub>𝔽</sub> or <var>index</var> &lt; <emu-val>-0</emu-val><sub>𝔽</sub>, return <emu-val>undefined</emu-val>.</li><li>Let <var>str</var> be <var>S</var>.<var class="field">[[StringData]]</var>.</li><li><emu-xref href="#assert" id="_ref_5176"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>str</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5177"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>.</li><li>Let <var>len</var> be the length of <var>str</var>.</li><li>If <emu-xref aoid="" id="_ref_5178"><a href="notational-conventions.html#%E2%84%9D"></a></emu-xref>(<var>index</var>) ≥ <var>len</var>, return <emu-val>undefined</emu-val>.</li><li>Let <var>resultStr</var> be the <emu-xref href="#substring" id="_ref_5179"><a href="ecmascript-data-types-and-values.html#substring">substring</a></emu-xref> of <var>str</var> from <emu-xref aoid="" id="_ref_5180"><a href="notational-conventions.html#%E2%84%9D"></a></emu-xref>(<var>index</var>) to <emu-xref aoid="" id="_ref_5181"><a href="notational-conventions.html#%E2%84%9D"></a></emu-xref>(<var>index</var>) + 1.</li><li>Return the PropertyDescriptor { <var class="field">[[Value]]</var>: <var>resultStr</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></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-arguments-exotic-objects">
<h1><span class="secnum">10.4.4</span> Arguments Exotic Objects</h1>
<p>Most ECMAScript functions make an arguments object available to their code. Depending upon the characteristics of the function definition, its arguments object is either an <emu-xref href="#ordinary-object" id="_ref_5182"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref> or an <emu-xref href="#arguments-exotic-object" id="_ref_5183"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref>. An <emu-xref href="#arguments-exotic-object" id="_ref_5184"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref> is an <emu-xref href="#exotic-object" id="_ref_5185"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> whose <emu-xref href="#array-index" id="_ref_5186"><a href="ecmascript-data-types-and-values.html#array-index">array index</a></emu-xref> properties map to the formal parameters bindings of an invocation of its associated ECMAScript function.</p>
<p>An object is an <dfn id="arguments-exotic-object" variants="arguments exotic objects" tabindex="-1">arguments exotic object</dfn> if its internal methods use the following implementations, with the ones not specified here using those found in <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots" id="_ref_311"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots">10.1</a></emu-xref>. These methods are installed in <emu-xref aoid="CreateMappedArgumentsObject" id="_ref_5187"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createmappedargumentsobject">CreateMappedArgumentsObject</a></emu-xref>.</p>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>While <emu-xref aoid="CreateUnmappedArgumentsObject" id="_ref_5188"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createunmappedargumentsobject">CreateUnmappedArgumentsObject</a></emu-xref> is grouped into this clause, it creates an <emu-xref href="#ordinary-object" id="_ref_5189"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>, not an <emu-xref href="#arguments-exotic-object" id="_ref_5190"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref>.</p>
</div></emu-note>
<p><emu-xref href="#arguments-exotic-object" id="_ref_5191"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">Arguments exotic objects</a></emu-xref> have the same internal slots as <emu-xref href="#ordinary-object" id="_ref_5192"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref>. They also have a <var class="field">[[ParameterMap]]</var> internal slot. Ordinary arguments objects also have a <var class="field">[[ParameterMap]]</var> internal slot whose value is always <emu-val>undefined</emu-val>. For ordinary argument objects the <var class="field">[[ParameterMap]]</var> internal slot is only used by <code>Object.prototype.toString</code> (<emu-xref href="#sec-object.prototype.tostring" id="_ref_312"><a href="fundamental-objects.html#sec-object.prototype.tostring">20.1.3.6</a></emu-xref>) to identify them as such.</p>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>The <emu-xref href="#integer-index" id="_ref_5193"><a href="ecmascript-data-types-and-values.html#integer-index">integer-indexed</a></emu-xref> <emu-xref href="#sec-object-type" id="_ref_5194"><a href="ecmascript-data-types-and-values.html#sec-object-type">data properties</a></emu-xref> of an <emu-xref href="#arguments-exotic-object" id="_ref_5195"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref> whose numeric name values are less than the number of formal parameters of the corresponding <emu-xref href="#function-object" id="_ref_5196"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> initially share their values with the corresponding argument bindings in the function's <emu-xref href="#sec-execution-contexts" id="_ref_5197"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref>. This means that changing the property changes the corresponding value of the argument binding and vice-versa. This correspondence is broken if such a property is deleted and then redefined or if the property is changed into an <emu-xref href="#sec-object-type" id="_ref_5198"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref>. If the arguments object is an <emu-xref href="#ordinary-object" id="_ref_5199"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>, the values of its properties are simply a copy of the arguments passed to the function and there is no dynamic linkage between the property values and the formal parameter values.</p>
</div></emu-note>
<emu-note><span class="note">Note 3</span><div class="note-contents">
<p>The ParameterMap object and its property values are used as a device for specifying the arguments object correspondence to argument bindings. The ParameterMap object and the objects that are the values of its properties are not directly observable from ECMAScript code. An ECMAScript implementation does not need to actually create or use such objects to implement the specified semantics.</p>
</div></emu-note>
<emu-note><span class="note">Note 4</span><div class="note-contents">
<p>Ordinary arguments objects define a non-configurable <emu-xref href="#sec-object-type" id="_ref_5200"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> named <emu-val>"callee"</emu-val> which throws a <emu-val>TypeError</emu-val> exception on access. The <emu-val>"callee"</emu-val> property has a more specific meaning for <emu-xref href="#arguments-exotic-object" id="_ref_5201"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic objects</a></emu-xref>, which are created only for some class of <emu-xref href="#non-strict-function" id="_ref_5202"><a href="ordinary-and-exotic-objects-behaviours.html#non-strict-function">non-strict functions</a></emu-xref>. The definition of this property in the ordinary variant exists to ensure that it is not defined in any other manner by conforming ECMAScript implementations.</p>
</div></emu-note>
<emu-note><span class="note">Note 5</span><div class="note-contents">
<p>ECMAScript implementations of <emu-xref href="#arguments-exotic-object" id="_ref_5203"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic objects</a></emu-xref> have historically contained an <emu-xref href="#sec-object-type" id="_ref_5204"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> named <emu-val>"caller"</emu-val>. Prior to ECMAScript 2017, this specification included the definition of a throwing <emu-val>"caller"</emu-val> property on ordinary arguments objects. Since implementations do not contain this extension any longer, ECMAScript 2017 dropped the requirement for a throwing <emu-val>"caller"</emu-val> accessor.</p>
</div></emu-note>
<emu-clause id="sec-arguments-exotic-objects-getownproperty-p" type="internal method">
<h1><span class="secnum">10.4.4.1</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[GetOwnProperty]]</var> internal method of an <emu-xref href="#arguments-exotic-object" id="_ref_5205"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref> <var>args</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5206"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5207"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5208"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>desc</var> be <emu-xref aoid="OrdinaryGetOwnProperty" id="_ref_5209"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a></emu-xref>(<var>args</var>, <var>P</var>).</li><li>If <var>desc</var> is <emu-val>undefined</emu-val>, return <emu-val>undefined</emu-val>.</li><li>Let <var>map</var> be <var>args</var>.<var class="field">[[ParameterMap]]</var>.</li><li>Let <var>isMapped</var> be !&nbsp;<emu-xref aoid="HasOwnProperty" id="_ref_5210"><a href="abstract-operations.html#sec-hasownproperty">HasOwnProperty</a></emu-xref>(<var>map</var>, <var>P</var>).</li><li>If <var>isMapped</var> is <emu-val>true</emu-val>, then<ol><li>Set <var>desc</var>.<var class="field">[[Value]]</var> to !&nbsp;<emu-xref aoid="Get" id="_ref_5211"><a href="abstract-operations.html#sec-get-o-p">Get</a></emu-xref>(<var>map</var>, <var>P</var>).</li></ol></li><li>Return <var>desc</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-arguments-exotic-objects-defineownproperty-p-desc" type="internal method">
<h1><span class="secnum">10.4.4.2</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</h1>
<p>The <var class="field">[[DefineOwnProperty]]</var> internal method of an <emu-xref href="#arguments-exotic-object" id="_ref_5212"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref> <var>args</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5213"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5214"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5215"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>map</var> be <var>args</var>.<var class="field">[[ParameterMap]]</var>.</li><li>Let <var>isMapped</var> be !&nbsp;<emu-xref aoid="HasOwnProperty" id="_ref_5216"><a href="abstract-operations.html#sec-hasownproperty">HasOwnProperty</a></emu-xref>(<var>map</var>, <var>P</var>).</li><li>Let <var>newArgDesc</var> be <var>Desc</var>.</li><li>If <var>isMapped</var> is <emu-val>true</emu-val> and <emu-xref aoid="IsDataDescriptor" id="_ref_5217"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>Desc</var>) is <emu-val>true</emu-val>, then<ol><li>If <var>Desc</var> does not have a <var class="field">[[Value]]</var> field, <var>Desc</var> has a <var class="field">[[Writable]]</var> field, and <var>Desc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, then<ol><li>Set <var>newArgDesc</var> to a copy of <var>Desc</var>.</li><li>Set <var>newArgDesc</var>.<var class="field">[[Value]]</var> to !&nbsp;<emu-xref aoid="Get" id="_ref_5218"><a href="abstract-operations.html#sec-get-o-p">Get</a></emu-xref>(<var>map</var>, <var>P</var>).</li></ol></li></ol></li><li>Let <var>allowed</var> be !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5219"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>args</var>, <var>P</var>, <var>newArgDesc</var>).</li><li>If <var>allowed</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>isMapped</var> is <emu-val>true</emu-val>, then<ol><li>If <emu-xref aoid="IsAccessorDescriptor" id="_ref_5220"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>Desc</var>) is <emu-val>true</emu-val>, then<ol><li>Perform !&nbsp;<var>map</var>.<var class="field">[[Delete]]</var>(<var>P</var>).</li></ol></li><li>Else,<ol><li>If <var>Desc</var> has a <var class="field">[[Value]]</var> field, then<ol><li><emu-xref href="#assert" id="_ref_5221"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: The following Set will succeed, since formal parameters mapped by arguments objects are always writable.</li><li>Perform !&nbsp;<emu-xref aoid="Set" id="_ref_5222"><a href="abstract-operations.html#sec-set-o-p-v-throw">Set</a></emu-xref>(<var>map</var>, <var>P</var>, <var>Desc</var>.<var class="field">[[Value]]</var>, <emu-val>false</emu-val>).</li></ol></li><li>If <var>Desc</var> has a <var class="field">[[Writable]]</var> field and <var>Desc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, then<ol><li>Perform !&nbsp;<var>map</var>.<var class="field">[[Delete]]</var>(<var>P</var>).</li></ol></li></ol></li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-arguments-exotic-objects-get-p-receiver" type="internal method">
<h1><span class="secnum">10.4.4.3</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Get]]</var> internal method of an <emu-xref href="#arguments-exotic-object" id="_ref_5223"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref> <var>args</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5224"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5225"><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_5226"><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_5227"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5228"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>map</var> be <var>args</var>.<var class="field">[[ParameterMap]]</var>.</li><li>Let <var>isMapped</var> be !&nbsp;<emu-xref aoid="HasOwnProperty" id="_ref_5229"><a href="abstract-operations.html#sec-hasownproperty">HasOwnProperty</a></emu-xref>(<var>map</var>, <var>P</var>).</li><li>If <var>isMapped</var> is <emu-val>false</emu-val>, return ?&nbsp;<emu-xref aoid="OrdinaryGet" id="_ref_5230"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryget" class="e-user-code">OrdinaryGet</a></emu-xref>(<var>args</var>, <var>P</var>, <var>Receiver</var>).</li><li><emu-xref href="#assert" id="_ref_5231"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>map</var> contains a formal parameter mapping for <var>P</var>.</li><li>Return !&nbsp;<emu-xref aoid="Get" id="_ref_5232"><a href="abstract-operations.html#sec-get-o-p">Get</a></emu-xref>(<var>map</var>, <var>P</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-arguments-exotic-objects-set-p-v-receiver" type="internal method">
<h1><span class="secnum">10.4.4.4</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Set]]</var> internal method of an <emu-xref href="#arguments-exotic-object" id="_ref_5233"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref> <var>args</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5234"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), <var>V</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5235"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5236"><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_5237"><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_5238"><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 <emu-xref aoid="SameValue" id="_ref_5239"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>args</var>, <var>Receiver</var>) is <emu-val>false</emu-val>, then<ol><li>Let <var>isMapped</var> be <emu-val>false</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>map</var> be <var>args</var>.<var class="field">[[ParameterMap]]</var>.</li><li>Let <var>isMapped</var> be !&nbsp;<emu-xref aoid="HasOwnProperty" id="_ref_5240"><a href="abstract-operations.html#sec-hasownproperty">HasOwnProperty</a></emu-xref>(<var>map</var>, <var>P</var>).</li></ol></li><li>If <var>isMapped</var> is <emu-val>true</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_5241"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: The following Set will succeed, since formal parameters mapped by arguments objects are always writable.</li><li>Perform !&nbsp;<emu-xref aoid="Set" id="_ref_5242"><a href="abstract-operations.html#sec-set-o-p-v-throw">Set</a></emu-xref>(<var>map</var>, <var>P</var>, <var>V</var>, <emu-val>false</emu-val>).</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="OrdinarySet" id="_ref_5243"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryset" class="e-user-code">OrdinarySet</a></emu-xref>(<var>args</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-arguments-exotic-objects-delete-p" type="internal method">
<h1><span class="secnum">10.4.4.5</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[Delete]]</var> internal method of an <emu-xref href="#arguments-exotic-object" id="_ref_5244"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref> <var>args</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5245"><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_5246"><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_5247"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>map</var> be <var>args</var>.<var class="field">[[ParameterMap]]</var>.</li><li>Let <var>isMapped</var> be !&nbsp;<emu-xref aoid="HasOwnProperty" id="_ref_5248"><a href="abstract-operations.html#sec-hasownproperty">HasOwnProperty</a></emu-xref>(<var>map</var>, <var>P</var>).</li><li>Let <var>result</var> be ?&nbsp;<emu-xref aoid="OrdinaryDelete" id="_ref_5249"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydelete" class="e-user-code">OrdinaryDelete</a></emu-xref>(<var>args</var>, <var>P</var>).</li><li>If <var>result</var> is <emu-val>true</emu-val> and <var>isMapped</var> is <emu-val>true</emu-val>, then<ol><li>Perform !&nbsp;<var>map</var>.<var class="field">[[Delete]]</var>(<var>P</var>).</li></ol></li><li>Return <var>result</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-createunmappedargumentsobject" type="abstract operation" aoid="CreateUnmappedArgumentsObject">
<h1><span class="secnum">10.4.4.6</span> CreateUnmappedArgumentsObject ( <var>argumentsList</var> )</h1>
<p>The abstract operation CreateUnmappedArgumentsObject takes argument <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5250"><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_5251"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns an <emu-xref href="#ordinary-object" id="_ref_5252"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>len</var> be the number of elements in <var>argumentsList</var>.</li><li>Let <var>obj</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_5253"><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_5254"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>, « <var class="field">[[ParameterMap]]</var>&nbsp;»).</li><li>Set <var>obj</var>.<var class="field">[[ParameterMap]]</var> to <emu-val>undefined</emu-val>.</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_5255"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>obj</var>, <emu-val>"length"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <emu-xref aoid="𝔽" id="_ref_5256"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>len</var>), <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li><li>Let <var>index</var> be 0.</li><li>Repeat, while <var>index</var> &lt; <var>len</var>,<ol><li>Let <var>val</var> be <var>argumentsList</var>[<var>index</var>].</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_5257"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>obj</var>, !&nbsp;<emu-xref aoid="ToString" id="_ref_5258"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_5259"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>index</var>)), <var>val</var>).</li><li>Set <var>index</var> to <var>index</var> + 1.</li></ol></li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_5260"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>obj</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_5261"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.iterator%</a></emu-xref>, PropertyDescriptor { <var class="field">[[Value]]</var>: %Array.prototype.values%, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_5262"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>obj</var>, <emu-val>"callee"</emu-val>, PropertyDescriptor { <var class="field">[[Get]]</var>: <emu-xref href="#sec-%throwtypeerror%" id="_ref_5263"><a href="ordinary-and-exotic-objects-behaviours.html#sec-%throwtypeerror%">%ThrowTypeError%</a></emu-xref>, <var class="field">[[Set]]</var>: <emu-xref href="#sec-%throwtypeerror%" id="_ref_5264"><a href="ordinary-and-exotic-objects-behaviours.html#sec-%throwtypeerror%">%ThrowTypeError%</a></emu-xref>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <var>obj</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-createmappedargumentsobject" type="abstract operation" aoid="CreateMappedArgumentsObject">
<h1><span class="secnum">10.4.4.7</span> CreateMappedArgumentsObject ( <var>func</var>, <var>formals</var>, <var>argumentsList</var>, <var>env</var> )</h1>
<p>The abstract operation CreateMappedArgumentsObject takes arguments <var>func</var> (an Object), <var>formals</var> (a <emu-xref href="#sec-syntactic-grammar" id="_ref_5265"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>), <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5266"><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_5267"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>), and <var>env</var> (an <emu-xref href="#sec-environment-records" id="_ref_5268"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>) and returns an <emu-xref href="#arguments-exotic-object" id="_ref_5269"><a href="ordinary-and-exotic-objects-behaviours.html#arguments-exotic-object">arguments exotic object</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_5270"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>formals</var> does not contain a rest parameter, any binding patterns, or any initializers. It may contain duplicate identifiers.</li><li>Let <var>len</var> be the number of elements in <var>argumentsList</var>.</li><li>Let <var>obj</var> be <emu-xref aoid="MakeBasicObject" id="_ref_5271"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref><var class="field">[[Prototype]]</var>, <var class="field">[[Extensible]]</var>, <var class="field">[[ParameterMap]]</var>&nbsp;»).</li><li>Set <var>obj</var>.<var class="field">[[GetOwnProperty]]</var> as specified in <emu-xref href="#sec-arguments-exotic-objects-getownproperty-p" id="_ref_313"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-getownproperty-p">10.4.4.1</a></emu-xref>.</li><li>Set <var>obj</var>.<var class="field">[[DefineOwnProperty]]</var> as specified in <emu-xref href="#sec-arguments-exotic-objects-defineownproperty-p-desc" id="_ref_314"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-defineownproperty-p-desc">10.4.4.2</a></emu-xref>.</li><li>Set <var>obj</var>.<var class="field">[[Get]]</var> as specified in <emu-xref href="#sec-arguments-exotic-objects-get-p-receiver" id="_ref_315"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-get-p-receiver">10.4.4.3</a></emu-xref>.</li><li>Set <var>obj</var>.<var class="field">[[Set]]</var> as specified in <emu-xref href="#sec-arguments-exotic-objects-set-p-v-receiver" id="_ref_316"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-set-p-v-receiver">10.4.4.4</a></emu-xref>.</li><li>Set <var>obj</var>.<var class="field">[[Delete]]</var> as specified in <emu-xref href="#sec-arguments-exotic-objects-delete-p" id="_ref_317"><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-delete-p">10.4.4.5</a></emu-xref>.</li><li>Set <var>obj</var>.<var class="field">[[Prototype]]</var> to <emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_5272"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>.</li><li>Let <var>map</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_5273"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-val>null</emu-val>).</li><li>Set <var>obj</var>.<var class="field">[[ParameterMap]]</var> to <var>map</var>.</li><li>Let <var>parameterNames</var> be the <emu-xref aoid="BoundNames" id="_ref_5274"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>formals</var>.</li><li>Let <var>numberOfParameters</var> be the number of elements in <var>parameterNames</var>.</li><li>Let <var>index</var> be 0.</li><li>Repeat, while <var>index</var> &lt; <var>len</var>,<ol><li>Let <var>val</var> be <var>argumentsList</var>[<var>index</var>].</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_5275"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>obj</var>, !&nbsp;<emu-xref aoid="ToString" id="_ref_5276"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_5277"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>index</var>)), <var>val</var>).</li><li>Set <var>index</var> to <var>index</var> + 1.</li></ol></li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_5278"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>obj</var>, <emu-val>"length"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <emu-xref aoid="𝔽" id="_ref_5279"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>len</var>), <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li><li>Let <var>mappedNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5280"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Set <var>index</var> to <var>numberOfParameters</var> - 1.</li><li>Repeat, while <var>index</var> ≥ 0,<ol><li>Let <var>name</var> be <var>parameterNames</var>[<var>index</var>].</li><li>If <var>mappedNames</var> does not contain <var>name</var>, then<ol><li>Append <var>name</var> to <var>mappedNames</var>.</li><li>If <var>index</var> &lt; <var>len</var>, then<ol><li>Let <var>g</var> be <emu-xref aoid="MakeArgGetter" id="_ref_5281"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makearggetter">MakeArgGetter</a></emu-xref>(<var>name</var>, <var>env</var>).</li><li>Let <var>p</var> be <emu-xref aoid="MakeArgSetter" id="_ref_5282"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeargsetter">MakeArgSetter</a></emu-xref>(<var>name</var>, <var>env</var>).</li><li>Perform !&nbsp;<var>map</var>.<var class="field">[[DefineOwnProperty]]</var>(! <emu-xref aoid="ToString" id="_ref_5283"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_5284"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>index</var>)), PropertyDescriptor { <var class="field">[[Set]]</var>: <var>p</var>, <var class="field">[[Get]]</var>: <var>g</var>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li></ol></li></ol></li><li>Set <var>index</var> to <var>index</var> - 1.</li></ol></li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_5285"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>obj</var>, <emu-xref href="#sec-well-known-symbols" id="_ref_5286"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.iterator%</a></emu-xref>, PropertyDescriptor { <var class="field">[[Value]]</var>: %Array.prototype.values%, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_5287"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>obj</var>, <emu-val>"callee"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>func</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}).</li><li>Return <var>obj</var>.</li></ol></emu-alg>
<emu-clause id="sec-makearggetter" type="abstract operation" aoid="MakeArgGetter">
<h1><span class="secnum">10.4.4.7.1</span> MakeArgGetter ( <var>name</var>, <var>env</var> )</h1>
<p>The abstract operation MakeArgGetter takes arguments <var>name</var> (a String) and <var>env</var> (an <emu-xref href="#sec-environment-records" id="_ref_5288"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>) and returns a <emu-xref href="#function-object" id="_ref_5289"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It creates a built-in <emu-xref href="#function-object" id="_ref_5290"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> that when executed returns the value bound for <var>name</var> in <var>env</var>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>getterClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_5291"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with no parameters that captures <var>name</var> and <var>env</var> and performs the following steps when called:<ol><li>Return <emu-xref aoid="NormalCompletion" id="_ref_5292"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(! <var>env</var>.<emu-xref aoid="GetBindingValue" id="_ref_5293"><a href="executable-code-and-execution-contexts.html#abstract-getbindingvalue">GetBindingValue</a></emu-xref>(<var>name</var>, <emu-val>false</emu-val>)).</li></ol></li><li>Let <var>getter</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_5294"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>getterClosure</var>, 0, <emu-val>""</emu-val>, «&nbsp;»).</li><li>NOTE: <var>getter</var> is never directly accessible to ECMAScript code.</li><li>Return <var>getter</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-makeargsetter" type="abstract operation" aoid="MakeArgSetter">
<h1><span class="secnum">10.4.4.7.2</span> MakeArgSetter ( <var>name</var>, <var>env</var> )</h1>
<p>The abstract operation MakeArgSetter takes arguments <var>name</var> (a String) and <var>env</var> (an <emu-xref href="#sec-environment-records" id="_ref_5295"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>) and returns a <emu-xref href="#function-object" id="_ref_5296"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It creates a built-in <emu-xref href="#function-object" id="_ref_5297"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> that when executed sets the value bound for <var>name</var> in <var>env</var>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>setterClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_5298"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with parameters (<var>value</var>) that captures <var>name</var> and <var>env</var> and performs the following steps when called:<ol><li>Return <emu-xref aoid="NormalCompletion" id="_ref_5299"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(! <var>env</var>.<emu-xref aoid="SetMutableBinding" id="_ref_5300"><a href="executable-code-and-execution-contexts.html#abstract-setmutablebinding">SetMutableBinding</a></emu-xref>(<var>name</var>, <var>value</var>, <emu-val>false</emu-val>)).</li></ol></li><li>Let <var>setter</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_5301"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>setterClosure</var>, 1, <emu-val>""</emu-val>, «&nbsp;»).</li><li>NOTE: <var>setter</var> is never directly accessible to ECMAScript code.</li><li>Return <var>setter</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-typedarray-exotic-objects" oldids="sec-integer-indexed-exotic-objects"><span id="sec-integer-indexed-exotic-objects"></span>
<h1><span class="secnum">10.4.5</span> TypedArray Exotic Objects</h1>
<p>A <emu-xref href="#typedarray" id="_ref_5302"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> is an <emu-xref href="#exotic-object" id="_ref_5303"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> that performs special handling of <emu-xref href="#property-key" id="_ref_5304"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref> that are <emu-xref href="#sec-canonicalnumericindexstring" id="_ref_5305"><a href="abstract-operations.html#sec-canonicalnumericindexstring">canonical numeric strings</a></emu-xref>, using the subset that are in-bounds <emu-xref href="#integer-index" id="_ref_5306"><a href="ecmascript-data-types-and-values.html#integer-index">integer indices</a></emu-xref> to index elements of uniform type and enforcing the invariant that the remainder are absent without incurring prototype chain traversal.</p>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Because <emu-xref aoid="ToString" id="_ref_5307"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<var>n</var>) for any Number <var>n</var> is a <emu-xref href="#sec-canonicalnumericindexstring" id="_ref_5308"><a href="abstract-operations.html#sec-canonicalnumericindexstring">canonical numeric string</a></emu-xref>, an implementation may treat Numbers as <emu-xref href="#property-key" id="_ref_5309"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref> for <emu-xref href="#typedarray" id="_ref_5310"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArrays</a></emu-xref> without actually performing the string conversion.</p>
</div></emu-note>
<p><emu-xref href="#typedarray" id="_ref_5311"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArrays</a></emu-xref> have the same internal slots as <emu-xref href="#ordinary-object" id="_ref_5312"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary objects</a></emu-xref> and additionally <var class="field">[[ViewedArrayBuffer]]</var>, <var class="field">[[TypedArrayName]]</var>, <var class="field">[[ContentType]]</var>, <var class="field">[[ByteLength]]</var>, <var class="field">[[ByteOffset]]</var>, and <var class="field">[[ArrayLength]]</var> internal slots.</p>
<p>An object is a <dfn id="typedarray" oldids="integer-indexed-exotic-object" variants="TypedArrays" tabindex="-1"><span id="integer-indexed-exotic-object"></span>TypedArray</dfn> if its <var class="field">[[PreventExtensions]]</var>, <var class="field">[[GetOwnProperty]]</var>, <var class="field">[[HasProperty]]</var>, <var class="field">[[DefineOwnProperty]]</var>, <var class="field">[[Get]]</var>, <var class="field">[[Set]]</var>, <var class="field">[[Delete]]</var>, and <var class="field">[[OwnPropertyKeys]]</var>, internal methods use the definitions in this section, and its other essential internal methods use the definitions found in <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots" id="_ref_318"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots">10.1</a></emu-xref>. These methods are installed by <emu-xref aoid="TypedArrayCreate" id="_ref_5313"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraycreate">TypedArrayCreate</a></emu-xref>.</p>
<emu-clause id="sec-typedarray-preventextensions" type="internal method">
<h1><span class="secnum">10.4.5.1</span> <var class="field">[[PreventExtensions]]</var> ( )</h1>
<p>The <var class="field">[[PreventExtensions]]</var> internal method of a <emu-xref href="#typedarray" id="_ref_5314"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> <var>O</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5315"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>NOTE: The extensibility-related invariants specified in <emu-xref href="#sec-invariants-of-the-essential-internal-methods" id="_ref_319"><a href="ecmascript-data-types-and-values.html#sec-invariants-of-the-essential-internal-methods">6.1.7.3</a></emu-xref> do not allow this method to return <emu-val>true</emu-val> when <var>O</var> can gain (or lose and then regain) properties, which might occur for properties with <emu-xref href="#integer-index" id="_ref_5316"><a href="ecmascript-data-types-and-values.html#integer-index">integer index</a></emu-xref> names when its underlying buffer is resized.</li><li>If <emu-xref aoid="IsTypedArrayFixedLength" id="_ref_5317"><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayfixedlength">IsTypedArrayFixedLength</a></emu-xref>(<var>O</var>) is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <emu-xref aoid="OrdinaryPreventExtensions" id="_ref_5318"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarypreventextensions">OrdinaryPreventExtensions</a></emu-xref>(<var>O</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarray-getownproperty" oldids="sec-integer-indexed-exotic-objects-getownproperty-p" type="internal method"><span id="sec-integer-indexed-exotic-objects-getownproperty-p"></span>
<h1><span class="secnum">10.4.5.2</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[GetOwnProperty]]</var> internal method of a <emu-xref href="#typedarray" id="_ref_5319"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5320"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5321"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5322"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5323"><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>numericIndex</var> be <emu-xref aoid="CanonicalNumericIndexString" id="_ref_5324"><a href="abstract-operations.html#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a></emu-xref>(<var>P</var>).</li><li>If <var>numericIndex</var> is not <emu-val>undefined</emu-val>, then<ol><li>Let <var>value</var> be <emu-xref aoid="TypedArrayGetElement" id="_ref_5325"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraygetelement">TypedArrayGetElement</a></emu-xref>(<var>O</var>, <var>numericIndex</var>).</li><li>If <var>value</var> is <emu-val>undefined</emu-val>, return <emu-val>undefined</emu-val>.</li><li>Return the PropertyDescriptor { <var class="field">[[Value]]</var>: <var>value</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}.</li></ol></li></ol></li><li>Return <emu-xref aoid="OrdinaryGetOwnProperty" id="_ref_5326"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a></emu-xref>(<var>O</var>, <var>P</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarray-hasproperty" oldids="sec-integer-indexed-exotic-objects-hasproperty-p" type="internal method"><span id="sec-integer-indexed-exotic-objects-hasproperty-p"></span>
<h1><span class="secnum">10.4.5.3</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[HasProperty]]</var> internal method of a <emu-xref href="#typedarray" id="_ref_5327"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5328"><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_5329"><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_5330"><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>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5331"><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>numericIndex</var> be <emu-xref aoid="CanonicalNumericIndexString" id="_ref_5332"><a href="abstract-operations.html#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a></emu-xref>(<var>P</var>).</li><li>If <var>numericIndex</var> is not <emu-val>undefined</emu-val>, return <emu-xref aoid="IsValidIntegerIndex" id="_ref_5333"><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex">IsValidIntegerIndex</a></emu-xref>(<var>O</var>, <var>numericIndex</var>).</li></ol></li><li>Return ?&nbsp;<emu-xref aoid="OrdinaryHasProperty" id="_ref_5334"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryhasproperty" class="e-user-code">OrdinaryHasProperty</a></emu-xref>(<var>O</var>, <var>P</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarray-defineownproperty" oldids="sec-integer-indexed-exotic-objects-defineownproperty-p-desc" type="internal method"><span id="sec-integer-indexed-exotic-objects-defineownproperty-p-desc"></span>
<h1><span class="secnum">10.4.5.4</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</h1>
<p>The <var class="field">[[DefineOwnProperty]]</var> internal method of a <emu-xref href="#typedarray" id="_ref_5335"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5336"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5337"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5338"><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_5339"><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>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5340"><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>numericIndex</var> be <emu-xref aoid="CanonicalNumericIndexString" id="_ref_5341"><a href="abstract-operations.html#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a></emu-xref>(<var>P</var>).</li><li>If <var>numericIndex</var> is not <emu-val>undefined</emu-val>, then<ol><li>If <emu-xref aoid="IsValidIntegerIndex" id="_ref_5342"><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex">IsValidIntegerIndex</a></emu-xref>(<var>O</var>, <var>numericIndex</var>) is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has a <var class="field">[[Configurable]]</var> field and <var>Desc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has an <var class="field">[[Enumerable]]</var> field and <var>Desc</var>.<var class="field">[[Enumerable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <emu-xref aoid="IsAccessorDescriptor" id="_ref_5343"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>Desc</var>) is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has a <var class="field">[[Writable]]</var> field and <var>Desc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has a <var class="field">[[Value]]</var> field, perform ?&nbsp;<emu-xref aoid="TypedArraySetElement" id="_ref_5344"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraysetelement" class="e-user-code">TypedArraySetElement</a></emu-xref>(<var>O</var>, <var>numericIndex</var>, <var>Desc</var>.<var class="field">[[Value]]</var>).</li><li>Return <emu-val>true</emu-val>.</li></ol></li></ol></li><li>Return !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5345"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>O</var>, <var>P</var>, <var>Desc</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarray-get" oldids="sec-integer-indexed-exotic-objects-get-p-receiver" type="internal method"><span id="sec-integer-indexed-exotic-objects-get-p-receiver"></span>
<h1><span class="secnum">10.4.5.5</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Get]]</var> internal method of a <emu-xref href="#typedarray" id="_ref_5346"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5347"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5348"><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_5349"><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_5350"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5351"><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>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5352"><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>numericIndex</var> be <emu-xref aoid="CanonicalNumericIndexString" id="_ref_5353"><a href="abstract-operations.html#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a></emu-xref>(<var>P</var>).</li><li>If <var>numericIndex</var> is not <emu-val>undefined</emu-val>, then<ol><li>Return <emu-xref aoid="TypedArrayGetElement" id="_ref_5354"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraygetelement">TypedArrayGetElement</a></emu-xref>(<var>O</var>, <var>numericIndex</var>).</li></ol></li></ol></li><li>Return ?&nbsp;<emu-xref aoid="OrdinaryGet" id="_ref_5355"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryget" class="e-user-code">OrdinaryGet</a></emu-xref>(<var>O</var>, <var>P</var>, <var>Receiver</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarray-set" oldids="sec-integer-indexed-exotic-objects-set-p-v-receiver" type="internal method"><span id="sec-integer-indexed-exotic-objects-set-p-v-receiver"></span>
<h1><span class="secnum">10.4.5.6</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Set]]</var> internal method of a <emu-xref href="#typedarray" id="_ref_5356"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5357"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), <var>V</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5358"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5359"><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_5360"><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_5361"><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>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5362"><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>numericIndex</var> be <emu-xref aoid="CanonicalNumericIndexString" id="_ref_5363"><a href="abstract-operations.html#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a></emu-xref>(<var>P</var>).</li><li>If <var>numericIndex</var> is not <emu-val>undefined</emu-val>, then<ol><li>If <emu-xref aoid="SameValue" id="_ref_5364"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>O</var>, <var>Receiver</var>) is <emu-val>true</emu-val>, then<ol><li>Perform ?&nbsp;<emu-xref aoid="TypedArraySetElement" id="_ref_5365"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraysetelement" class="e-user-code">TypedArraySetElement</a></emu-xref>(<var>O</var>, <var>numericIndex</var>, <var>V</var>).</li><li>Return <emu-val>true</emu-val>.</li></ol></li><li>If <emu-xref aoid="IsValidIntegerIndex" id="_ref_5366"><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex">IsValidIntegerIndex</a></emu-xref>(<var>O</var>, <var>numericIndex</var>) is <emu-val>false</emu-val>, return <emu-val>true</emu-val>.</li></ol></li></ol></li><li>Return ?&nbsp;<emu-xref aoid="OrdinarySet" id="_ref_5367"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryset" class="e-user-code">OrdinarySet</a></emu-xref>(<var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarray-delete" oldids="sec-integer-indexed-exotic-objects-delete-p" type="internal method"><span id="sec-integer-indexed-exotic-objects-delete-p"></span>
<h1><span class="secnum">10.4.5.7</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[Delete]]</var> internal method of a <emu-xref href="#typedarray" id="_ref_5368"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5369"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5370"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5371"><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>numericIndex</var> be <emu-xref aoid="CanonicalNumericIndexString" id="_ref_5372"><a href="abstract-operations.html#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a></emu-xref>(<var>P</var>).</li><li>If <var>numericIndex</var> is not <emu-val>undefined</emu-val>, then<ol><li>If <emu-xref aoid="IsValidIntegerIndex" id="_ref_5373"><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex">IsValidIntegerIndex</a></emu-xref>(<var>O</var>, <var>numericIndex</var>) is <emu-val>false</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></li></ol></li><li>Return !&nbsp;<emu-xref aoid="OrdinaryDelete" id="_ref_5374"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydelete">OrdinaryDelete</a></emu-xref>(<var>O</var>, <var>P</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarray-ownpropertykeys" oldids="sec-integer-indexed-exotic-objects-ownpropertykeys" type="internal method"><span id="sec-integer-indexed-exotic-objects-ownpropertykeys"></span>
<h1><span class="secnum">10.4.5.8</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</h1>
<p>The <var class="field">[[OwnPropertyKeys]]</var> internal method of a <emu-xref href="#typedarray" id="_ref_5375"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> <var>O</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5376"><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_5377"><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_5378"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>taRecord</var> be <emu-xref aoid="MakeTypedArrayWithBufferWitnessRecord" id="_ref_5379"><a href="ordinary-and-exotic-objects-behaviours.html#sec-maketypedarraywithbufferwitnessrecord">MakeTypedArrayWithBufferWitnessRecord</a></emu-xref>(<var>O</var>, <emu-const>seq-cst</emu-const>).</li><li>Let <var>keys</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5380"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>If <emu-xref aoid="IsTypedArrayOutOfBounds" id="_ref_5381"><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayoutofbounds">IsTypedArrayOutOfBounds</a></emu-xref>(<var>taRecord</var>) is <emu-val>false</emu-val>, then<ol><li>Let <var>length</var> be <emu-xref aoid="TypedArrayLength" id="_ref_5382"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraylength">TypedArrayLength</a></emu-xref>(<var>taRecord</var>).</li><li>For each <emu-xref href="#integer" id="_ref_5383"><a href="notational-conventions.html#integer">integer</a></emu-xref> <var>i</var> such that 0 ≤ <var>i</var> &lt; <var>length</var>, in ascending order, do<ol><li>Append !&nbsp;<emu-xref aoid="ToString" id="_ref_5384"><a href="abstract-operations.html#sec-tostring">ToString</a></emu-xref>(<emu-xref aoid="𝔽" id="_ref_5385"><a href="notational-conventions.html#%F0%9D%94%BD">𝔽</a></emu-xref>(<var>i</var>)) to <var>keys</var>.</li></ol></li></ol></li><li>For each own <emu-xref href="#property-key" id="_ref_5386"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>O</var> such that <var>P</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_5387"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref> and <var>P</var> is not an <emu-xref href="#integer-index" id="_ref_5388"><a href="ecmascript-data-types-and-values.html#integer-index">integer index</a></emu-xref>, in ascending chronological order of property creation, do<ol><li>Append <var>P</var> to <var>keys</var>.</li></ol></li><li>For each own <emu-xref href="#property-key" id="_ref_5389"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> <var>P</var> of <var>O</var> such that <var>P</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_5390"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, in ascending chronological order of property creation, do<ol><li>Append <var>P</var> to <var>keys</var>.</li></ol></li><li>Return <var>keys</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarray-with-buffer-witness-records" oldids="sec-integer-indexed-object-with-buffer-witness-records"><span id="sec-integer-indexed-object-with-buffer-witness-records"></span>
<h1><span class="secnum">10.4.5.9</span> TypedArray With Buffer Witness Records</h1>
<p>An <dfn variants="TypedArray With Buffer Witness Records" tabindex="-1">TypedArray With Buffer Witness Record</dfn> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5391"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> value used to encapsulate a <emu-xref href="#typedarray" id="_ref_5392"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> along with a cached byte length of the viewed buffer. It is used to help ensure there is a single <emu-xref href="#sec-memory-model-fundamentals" id="_ref_5393"><a href="memory-model.html#sec-memory-model-fundamentals">ReadSharedMemory</a></emu-xref> event of the byte length data block when the viewed buffer is a <emu-xref href="#sec-fixed-length-and-growable-sharedarraybuffer-objects" id="_ref_5394"><a href="structured-data.html#sec-fixed-length-and-growable-sharedarraybuffer-objects">growable SharedArrayBuffer</a></emu-xref>.</p>
<p>TypedArray With Buffer Witness Records have the fields listed in <emu-xref href="#table-typedarray-with-buffer-witness-record-fields" id="_ref_320"><a href="ordinary-and-exotic-objects-behaviours.html#table-typedarray-with-buffer-witness-record-fields">Table 27</a></emu-xref>.</p>
<emu-table id="table-typedarray-with-buffer-witness-record-fields" oldids="table-integer-indexed-object-with-buffer-witness-record-fields" caption="TypedArray With Buffer Witness Record Fields"><figure><figcaption>Table 27: <emu-xref href="#sec-typedarray-with-buffer-witness-records" id="_ref_5395"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records">TypedArray With Buffer Witness Record</a></emu-xref> Fields</figcaption><span id="table-integer-indexed-object-with-buffer-witness-record-fields"></span>
<table>
<thead>
<tr>
<th>
Field Name
</th>
<th>
Value
</th>
<th>
Meaning
</th>
</tr>
</thead>
<tbody><tr>
<td>
<var class="field">[[Object]]</var>
</td>
<td>
a <emu-xref href="#typedarray" id="_ref_5396"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref>
</td>
<td>
The <emu-xref href="#typedarray" id="_ref_5397"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> whose buffer's byte length is loaded.
</td>
</tr>
<tr>
<td>
<var class="field">[[CachedBufferByteLength]]</var>
</td>
<td>
a non-negative <emu-xref href="#integer" id="_ref_5398"><a href="notational-conventions.html#integer">integer</a></emu-xref> or <emu-const>detached</emu-const>
</td>
<td>
The byte length of the object's <var class="field">[[ViewedArrayBuffer]]</var> when the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5399"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> was created.
</td>
</tr>
</tbody></table>
</figure></emu-table>
</emu-clause>
<emu-clause id="sec-maketypedarraywithbufferwitnessrecord" oldids="sec-makeintegerindexedobjectwithbufferwitnessrecord" type="abstract operation" aoid="MakeTypedArrayWithBufferWitnessRecord"><span id="sec-makeintegerindexedobjectwithbufferwitnessrecord"></span>
<h1><span class="secnum">10.4.5.10</span> MakeTypedArrayWithBufferWitnessRecord ( <var>obj</var>, <var>order</var> )</h1>
<p>The abstract operation MakeTypedArrayWithBufferWitnessRecord takes arguments <var>obj</var> (a <emu-xref href="#typedarray" id="_ref_5400"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref>) and <var>order</var> (<emu-const>seq-cst</emu-const> or <emu-const>unordered</emu-const>) and returns a <emu-xref href="#sec-typedarray-with-buffer-witness-records" id="_ref_5401"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records">TypedArray With Buffer Witness Record</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>buffer</var> be <var>obj</var>.<var class="field">[[ViewedArrayBuffer]]</var>.</li><li>If <emu-xref aoid="IsDetachedBuffer" id="_ref_5402"><a href="structured-data.html#sec-isdetachedbuffer">IsDetachedBuffer</a></emu-xref>(<var>buffer</var>) is <emu-val>true</emu-val>, then<ol><li>Let <var>byteLength</var> be <emu-const>detached</emu-const>.</li></ol></li><li>Else,<ol><li>Let <var>byteLength</var> be <emu-xref aoid="ArrayBufferByteLength" id="_ref_5403"><a href="structured-data.html#sec-arraybufferbytelength">ArrayBufferByteLength</a></emu-xref>(<var>buffer</var>, <var>order</var>).</li></ol></li><li>Return the <emu-xref href="#sec-typedarray-with-buffer-witness-records" id="_ref_5404"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records">TypedArray With Buffer Witness Record</a></emu-xref> { <var class="field">[[Object]]</var>: <var>obj</var>, <var class="field">[[CachedBufferByteLength]]</var>: <var>byteLength</var>&nbsp;}.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarraycreate" oldids="sec-integerindexedobjectcreate" type="abstract operation" aoid="TypedArrayCreate"><span id="sec-integerindexedobjectcreate"></span>
<h1><span class="secnum">10.4.5.11</span> TypedArrayCreate ( <var>prototype</var> )</h1>
<p>The abstract operation TypedArrayCreate takes argument <var>prototype</var> (an Object) and returns a <emu-xref href="#typedarray" id="_ref_5405"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref>. It is used to specify the creation of new <emu-xref href="#typedarray" id="_ref_5406"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArrays</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>internalSlotsList</var> be « <var class="field">[[Prototype]]</var>, <var class="field">[[Extensible]]</var>, <var class="field">[[ViewedArrayBuffer]]</var>, <var class="field">[[TypedArrayName]]</var>, <var class="field">[[ContentType]]</var>, <var class="field">[[ByteLength]]</var>, <var class="field">[[ByteOffset]]</var>, <var class="field">[[ArrayLength]]</var>&nbsp;».</li><li>Let <var>A</var> be <emu-xref aoid="MakeBasicObject" id="_ref_5407"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref>(<var>internalSlotsList</var>).</li><li>Set <var>A</var>.<var class="field">[[PreventExtensions]]</var> as specified in <emu-xref href="#sec-typedarray-preventextensions" id="_ref_321"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-preventextensions">10.4.5.1</a></emu-xref>.</li><li>Set <var>A</var>.<var class="field">[[GetOwnProperty]]</var> as specified in <emu-xref href="#sec-typedarray-getownproperty" id="_ref_322"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-getownproperty">10.4.5.2</a></emu-xref>.</li><li>Set <var>A</var>.<var class="field">[[HasProperty]]</var> as specified in <emu-xref href="#sec-typedarray-hasproperty" id="_ref_323"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-hasproperty">10.4.5.3</a></emu-xref>.</li><li>Set <var>A</var>.<var class="field">[[DefineOwnProperty]]</var> as specified in <emu-xref href="#sec-typedarray-defineownproperty" id="_ref_324"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-defineownproperty">10.4.5.4</a></emu-xref>.</li><li>Set <var>A</var>.<var class="field">[[Get]]</var> as specified in <emu-xref href="#sec-typedarray-get" id="_ref_325"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-get">10.4.5.5</a></emu-xref>.</li><li>Set <var>A</var>.<var class="field">[[Set]]</var> as specified in <emu-xref href="#sec-typedarray-set" id="_ref_326"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-set">10.4.5.6</a></emu-xref>.</li><li>Set <var>A</var>.<var class="field">[[Delete]]</var> as specified in <emu-xref href="#sec-typedarray-delete" id="_ref_327"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-delete">10.4.5.7</a></emu-xref>.</li><li>Set <var>A</var>.<var class="field">[[OwnPropertyKeys]]</var> as specified in <emu-xref href="#sec-typedarray-ownpropertykeys" id="_ref_328"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-ownpropertykeys">10.4.5.8</a></emu-xref>.</li><li>Set <var>A</var>.<var class="field">[[Prototype]]</var> to <var>prototype</var>.</li><li>Return <var>A</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarraybytelength" oldids="sec-integerindexedobjectbytelength" type="abstract operation" aoid="TypedArrayByteLength"><span id="sec-integerindexedobjectbytelength"></span>
<h1><span class="secnum">10.4.5.12</span> TypedArrayByteLength ( <var>taRecord</var> )</h1>
<p>The abstract operation TypedArrayByteLength takes argument <var>taRecord</var> (a <emu-xref href="#sec-typedarray-with-buffer-witness-records" id="_ref_5408"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records">TypedArray With Buffer Witness Record</a></emu-xref>) and returns a non-negative <emu-xref href="#integer" id="_ref_5409"><a href="notational-conventions.html#integer">integer</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_5410"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsTypedArrayOutOfBounds" id="_ref_5411"><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayoutofbounds">IsTypedArrayOutOfBounds</a></emu-xref>(<var>taRecord</var>) is <emu-val>false</emu-val>.</li><li>Let <var>O</var> be <var>taRecord</var>.<var class="field">[[Object]]</var>.</li><li>If <var>O</var>.<var class="field">[[ByteLength]]</var> is not <emu-const>auto</emu-const>, return <var>O</var>.<var class="field">[[ByteLength]]</var>.</li><li>Let <var>length</var> be <emu-xref aoid="TypedArrayLength" id="_ref_5412"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraylength">TypedArrayLength</a></emu-xref>(<var>taRecord</var>).</li><li>Let <var>elementSize</var> be <emu-xref aoid="TypedArrayElementSize" id="_ref_5413"><a href="indexed-collections.html#sec-typedarrayelementsize">TypedArrayElementSize</a></emu-xref>(<var>O</var>).</li><li>NOTE: The returned byte length is always an <emu-xref href="#integer" id="_ref_5414"><a href="notational-conventions.html#integer">integer</a></emu-xref> multiple of <var>elementSize</var>, even when the underlying buffer has been resized to a non-<emu-xref href="#integer" id="_ref_5415"><a href="notational-conventions.html#integer">integer</a></emu-xref> multiple.</li><li>Return <var>length</var> × <var>elementSize</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarraylength" oldids="sec-integerindexedobjectlength" type="abstract operation" aoid="TypedArrayLength"><span id="sec-integerindexedobjectlength"></span>
<h1><span class="secnum">10.4.5.13</span> TypedArrayLength ( <var>taRecord</var> )</h1>
<p>The abstract operation TypedArrayLength takes argument <var>taRecord</var> (a <emu-xref href="#sec-typedarray-with-buffer-witness-records" id="_ref_5416"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records">TypedArray With Buffer Witness Record</a></emu-xref>) and returns a non-negative <emu-xref href="#integer" id="_ref_5417"><a href="notational-conventions.html#integer">integer</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_5418"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsTypedArrayOutOfBounds" id="_ref_5419"><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayoutofbounds">IsTypedArrayOutOfBounds</a></emu-xref>(<var>taRecord</var>) is <emu-val>false</emu-val>.</li><li>Let <var>O</var> be <var>taRecord</var>.<var class="field">[[Object]]</var>.</li><li>If <var>O</var>.<var class="field">[[ArrayLength]]</var> is not <emu-const>auto</emu-const>, return <var>O</var>.<var class="field">[[ArrayLength]]</var>.</li><li><emu-xref href="#assert" id="_ref_5420"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsFixedLengthArrayBuffer" id="_ref_5421"><a href="structured-data.html#sec-isfixedlengtharraybuffer">IsFixedLengthArrayBuffer</a></emu-xref>(<var>O</var>.<var class="field">[[ViewedArrayBuffer]]</var>) is <emu-val>false</emu-val>.</li><li>Let <var>byteOffset</var> be <var>O</var>.<var class="field">[[ByteOffset]]</var>.</li><li>Let <var>elementSize</var> be <emu-xref aoid="TypedArrayElementSize" id="_ref_5422"><a href="indexed-collections.html#sec-typedarrayelementsize">TypedArrayElementSize</a></emu-xref>(<var>O</var>).</li><li>Let <var>byteLength</var> be <var>taRecord</var>.<var class="field">[[CachedBufferByteLength]]</var>.</li><li><emu-xref href="#assert" id="_ref_5423"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>byteLength</var> is not <emu-const>detached</emu-const>.</li><li>Return <emu-xref aoid="floor" id="_ref_5424"><a href="notational-conventions.html#eqn-floor">floor</a></emu-xref>((<var>byteLength</var> - <var>byteOffset</var>) / <var>elementSize</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-istypedarrayoutofbounds" oldids="sec-isintegerindexedobjectoutofbounds" type="abstract operation" aoid="IsTypedArrayOutOfBounds"><span id="sec-isintegerindexedobjectoutofbounds"></span>
<h1><span class="secnum">10.4.5.14</span> IsTypedArrayOutOfBounds ( <var>taRecord</var> )</h1>
<p>The abstract operation IsTypedArrayOutOfBounds takes argument <var>taRecord</var> (a <emu-xref href="#sec-typedarray-with-buffer-witness-records" id="_ref_5425"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records">TypedArray With Buffer Witness Record</a></emu-xref>) and returns a Boolean. It checks if any of the object's numeric properties reference a value at an index not contained within the underlying buffer's bounds. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>O</var> be <var>taRecord</var>.<var class="field">[[Object]]</var>.</li><li>Let <var>bufferByteLength</var> be <var>taRecord</var>.<var class="field">[[CachedBufferByteLength]]</var>.</li><li>If <emu-xref aoid="IsDetachedBuffer" id="_ref_5426"><a href="structured-data.html#sec-isdetachedbuffer">IsDetachedBuffer</a></emu-xref>(<var>O</var>.<var class="field">[[ViewedArrayBuffer]]</var>) is <emu-val>true</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_5427"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>bufferByteLength</var> is <emu-const>detached</emu-const>.</li><li>Return <emu-val>true</emu-val>.</li></ol></li><li><emu-xref href="#assert" id="_ref_5428"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>bufferByteLength</var> is a non-negative <emu-xref href="#integer" id="_ref_5429"><a href="notational-conventions.html#integer">integer</a></emu-xref>.</li><li>Let <var>byteOffsetStart</var> be <var>O</var>.<var class="field">[[ByteOffset]]</var>.</li><li>If <var>O</var>.<var class="field">[[ArrayLength]]</var> is <emu-const>auto</emu-const>, then<ol><li>Let <var>byteOffsetEnd</var> be <var>bufferByteLength</var>.</li></ol></li><li>Else,<ol><li>Let <var>elementSize</var> be <emu-xref aoid="TypedArrayElementSize" id="_ref_5430"><a href="indexed-collections.html#sec-typedarrayelementsize">TypedArrayElementSize</a></emu-xref>(<var>O</var>).</li><li>Let <var>arrayByteLength</var> be <var>O</var>.<var class="field">[[ArrayLength]]</var> × <var>elementSize</var>.</li><li>Let <var>byteOffsetEnd</var> be <var>byteOffsetStart</var> + <var>arrayByteLength</var>.</li></ol></li><li>NOTE: A 0-length <emu-xref href="#typedarray" id="_ref_5431"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> whose <var class="field">[[ByteOffset]]</var> is <var>bufferByteLength</var> is not considered out-of-bounds.</li><li>If <var>byteOffsetStart</var> &gt; <var>bufferByteLength</var> or <var>byteOffsetEnd</var> &gt; <var>bufferByteLength</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-istypedarrayfixedlength" type="abstract operation" aoid="IsTypedArrayFixedLength">
<h1><span class="secnum">10.4.5.15</span> IsTypedArrayFixedLength ( <var>O</var> )</h1>
<p>The abstract operation IsTypedArrayFixedLength takes argument <var>O</var> (a <emu-xref href="#typedarray" id="_ref_5432"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref>) and returns a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>O</var>.<var class="field">[[ArrayLength]]</var> is <emu-const>auto</emu-const>, return <emu-val>false</emu-val>.</li><li>Let <var>buffer</var> be <var>O</var>.<var class="field">[[ViewedArrayBuffer]]</var>.</li><li>If <emu-xref aoid="IsFixedLengthArrayBuffer" id="_ref_5433"><a href="structured-data.html#sec-isfixedlengtharraybuffer">IsFixedLengthArrayBuffer</a></emu-xref>(<var>buffer</var>) is <emu-val>false</emu-val> and <emu-xref aoid="IsSharedArrayBuffer" id="_ref_5434"><a href="structured-data.html#sec-issharedarraybuffer">IsSharedArrayBuffer</a></emu-xref>(<var>buffer</var>) is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-isvalidintegerindex" type="abstract operation" aoid="IsValidIntegerIndex">
<h1><span class="secnum">10.4.5.16</span> IsValidIntegerIndex ( <var>O</var>, <var>index</var> )</h1>
<p>The abstract operation IsValidIntegerIndex takes arguments <var>O</var> (a <emu-xref href="#typedarray" id="_ref_5435"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref>) and <var>index</var> (a Number) and returns a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>If <emu-xref aoid="IsDetachedBuffer" id="_ref_5436"><a href="structured-data.html#sec-isdetachedbuffer">IsDetachedBuffer</a></emu-xref>(<var>O</var>.<var class="field">[[ViewedArrayBuffer]]</var>) is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>index</var> is not an <emu-xref href="#integral-number" id="_ref_5437"><a href="notational-conventions.html#integral-number">integral Number</a></emu-xref>, return <emu-val>false</emu-val>.</li><li>If <var>index</var> is <emu-val>-0</emu-val><sub>𝔽</sub> or <var>index</var> &lt; <emu-val>-0</emu-val><sub>𝔽</sub>, return <emu-val>false</emu-val>.</li><li>Let <var>taRecord</var> be <emu-xref aoid="MakeTypedArrayWithBufferWitnessRecord" id="_ref_5438"><a href="ordinary-and-exotic-objects-behaviours.html#sec-maketypedarraywithbufferwitnessrecord">MakeTypedArrayWithBufferWitnessRecord</a></emu-xref>(<var>O</var>, <emu-const>unordered</emu-const>).</li><li>NOTE: Bounds checking is not a synchronizing operation when <var>O</var>'s backing buffer is a <emu-xref href="#sec-fixed-length-and-growable-sharedarraybuffer-objects" id="_ref_5439"><a href="structured-data.html#sec-fixed-length-and-growable-sharedarraybuffer-objects">growable SharedArrayBuffer</a></emu-xref>.</li><li>If <emu-xref aoid="IsTypedArrayOutOfBounds" id="_ref_5440"><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayoutofbounds">IsTypedArrayOutOfBounds</a></emu-xref>(<var>taRecord</var>) is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>Let <var>length</var> be <emu-xref aoid="TypedArrayLength" id="_ref_5441"><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraylength">TypedArrayLength</a></emu-xref>(<var>taRecord</var>).</li><li>If <emu-xref aoid="" id="_ref_5442"><a href="notational-conventions.html#%E2%84%9D"></a></emu-xref>(<var>index</var>) ≥ <var>length</var>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarraygetelement" oldids="sec-integerindexedelementget" type="abstract operation" aoid="TypedArrayGetElement"><span id="sec-integerindexedelementget"></span>
<h1><span class="secnum">10.4.5.17</span> TypedArrayGetElement ( <var>O</var>, <var>index</var> )</h1>
<p>The abstract operation TypedArrayGetElement takes arguments <var>O</var> (a <emu-xref href="#typedarray" id="_ref_5443"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref>) and <var>index</var> (a Number) and returns a Number, a BigInt, or <emu-val>undefined</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>If <emu-xref aoid="IsValidIntegerIndex" id="_ref_5444"><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex">IsValidIntegerIndex</a></emu-xref>(<var>O</var>, <var>index</var>) is <emu-val>false</emu-val>, return <emu-val>undefined</emu-val>.</li><li>Let <var>offset</var> be <var>O</var>.<var class="field">[[ByteOffset]]</var>.</li><li>Let <var>elementSize</var> be <emu-xref aoid="TypedArrayElementSize" id="_ref_5445"><a href="indexed-collections.html#sec-typedarrayelementsize">TypedArrayElementSize</a></emu-xref>(<var>O</var>).</li><li>Let <var>byteIndexInBuffer</var> be (<emu-xref aoid="" id="_ref_5446"><a href="notational-conventions.html#%E2%84%9D"></a></emu-xref>(<var>index</var>) × <var>elementSize</var>) + <var>offset</var>.</li><li>Let <var>elementType</var> be <emu-xref aoid="TypedArrayElementType" id="_ref_5447"><a href="indexed-collections.html#sec-typedarrayelementtype">TypedArrayElementType</a></emu-xref>(<var>O</var>).</li><li>Return <emu-xref aoid="GetValueFromBuffer" id="_ref_5448"><a href="structured-data.html#sec-getvaluefrombuffer">GetValueFromBuffer</a></emu-xref>(<var>O</var>.<var class="field">[[ViewedArrayBuffer]]</var>, <var>byteIndexInBuffer</var>, <var>elementType</var>, <emu-val>true</emu-val>, <emu-const>unordered</emu-const>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-typedarraysetelement" oldids="sec-integerindexedelementset" type="abstract operation" aoid="TypedArraySetElement"><span id="sec-integerindexedelementset"></span>
<h1><span class="secnum">10.4.5.18</span> TypedArraySetElement ( <var>O</var>, <var>index</var>, <var>value</var> )</h1>
<p>The abstract operation TypedArraySetElement takes arguments <var>O</var> (a <emu-xref href="#typedarray" id="_ref_5449"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref>), <var>index</var> (a Number), and <var>value</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5450"><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_5451"><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 a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5452"><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>O</var>.<var class="field">[[ContentType]]</var> is <emu-const>bigint</emu-const>, let <var>numValue</var> be ?&nbsp;<emu-xref aoid="ToBigInt" id="_ref_5453"><a href="abstract-operations.html#sec-tobigint" class="e-user-code">ToBigInt</a></emu-xref>(<var>value</var>).</li><li>Else, let <var>numValue</var> be ?&nbsp;<emu-xref aoid="ToNumber" id="_ref_5454"><a href="abstract-operations.html#sec-tonumber" class="e-user-code">ToNumber</a></emu-xref>(<var>value</var>).</li><li>If <emu-xref aoid="IsValidIntegerIndex" id="_ref_5455"><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex">IsValidIntegerIndex</a></emu-xref>(<var>O</var>, <var>index</var>) is <emu-val>true</emu-val>, then<ol><li>Let <var>offset</var> be <var>O</var>.<var class="field">[[ByteOffset]]</var>.</li><li>Let <var>elementSize</var> be <emu-xref aoid="TypedArrayElementSize" id="_ref_5456"><a href="indexed-collections.html#sec-typedarrayelementsize">TypedArrayElementSize</a></emu-xref>(<var>O</var>).</li><li>Let <var>byteIndexInBuffer</var> be (<emu-xref aoid="" id="_ref_5457"><a href="notational-conventions.html#%E2%84%9D"></a></emu-xref>(<var>index</var>) × <var>elementSize</var>) + <var>offset</var>.</li><li>Let <var>elementType</var> be <emu-xref aoid="TypedArrayElementType" id="_ref_5458"><a href="indexed-collections.html#sec-typedarrayelementtype">TypedArrayElementType</a></emu-xref>(<var>O</var>).</li><li>Perform <emu-xref aoid="SetValueInBuffer" id="_ref_5459"><a href="structured-data.html#sec-setvalueinbuffer">SetValueInBuffer</a></emu-xref>(<var>O</var>.<var class="field">[[ViewedArrayBuffer]]</var>, <var>byteIndexInBuffer</var>, <var>elementType</var>, <var>numValue</var>, <emu-val>true</emu-val>, <emu-const>unordered</emu-const>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>This operation always appears to succeed, but it has no effect when attempting to write past the end of a <emu-xref href="#typedarray" id="_ref_5460"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> or to a <emu-xref href="#typedarray" id="_ref_5461"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> which is backed by a detached ArrayBuffer.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-isarraybufferviewoutofbounds" type="abstract operation" aoid="IsArrayBufferViewOutOfBounds">
<h1><span class="secnum">10.4.5.19</span> IsArrayBufferViewOutOfBounds ( <var>O</var> )</h1>
<p>The abstract operation IsArrayBufferViewOutOfBounds takes argument <var>O</var> (a <emu-xref href="#typedarray" id="_ref_5462"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref> or a DataView) and returns a Boolean. It checks if either any of a <emu-xref href="#typedarray" id="_ref_5463"><a href="ordinary-and-exotic-objects-behaviours.html#typedarray">TypedArray</a></emu-xref>'s numeric properties or a DataView object's methods can reference a value at an index not contained within the underlying data block's bounds. This abstract operation exists as a convenience for upstream specifications. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>O</var> has a <var class="field">[[DataView]]</var> internal slot, then<ol><li>Let <var>viewRecord</var> be <emu-xref aoid="MakeDataViewWithBufferWitnessRecord" id="_ref_5464"><a href="structured-data.html#sec-makedataviewwithbufferwitnessrecord">MakeDataViewWithBufferWitnessRecord</a></emu-xref>(<var>O</var>, <emu-const>seq-cst</emu-const>).</li><li>Return <emu-xref aoid="IsViewOutOfBounds" id="_ref_5465"><a href="structured-data.html#sec-isviewoutofbounds">IsViewOutOfBounds</a></emu-xref>(<var>viewRecord</var>).</li></ol></li><li>Let <var>taRecord</var> be <emu-xref aoid="MakeTypedArrayWithBufferWitnessRecord" id="_ref_5466"><a href="ordinary-and-exotic-objects-behaviours.html#sec-maketypedarraywithbufferwitnessrecord">MakeTypedArrayWithBufferWitnessRecord</a></emu-xref>(<var>O</var>, <emu-const>seq-cst</emu-const>).</li><li>Return <emu-xref aoid="IsTypedArrayOutOfBounds" id="_ref_5467"><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayoutofbounds">IsTypedArrayOutOfBounds</a></emu-xref>(<var>taRecord</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects">
<h1><span class="secnum">10.4.6</span> Module Namespace Exotic Objects</h1>
<p>A <emu-xref href="#module-namespace-exotic-object" id="_ref_5468"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> is an <emu-xref href="#exotic-object" id="_ref_5469"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> that exposes the bindings exported from an ECMAScript <emu-nt id="_ref_19529"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> (See <emu-xref href="#sec-exports" id="_ref_329"><a href="ecmascript-language-scripts-and-modules.html#sec-exports">16.2.3</a></emu-xref>). There is a one-to-one correspondence between the String-keyed own properties of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5470"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> and the binding names exported by the <emu-nt id="_ref_19530"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>. The exported bindings include any bindings that are indirectly exported using <code>export *</code> export items. Each String-valued own <emu-xref href="#property-key" id="_ref_5471"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> is the <emu-xref aoid="StringValue" id="_ref_5472"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of the corresponding exported binding name. These are the only String-keyed properties of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5473"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref>. Each such property has the attributes { <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }. <emu-xref href="#module-namespace-exotic-object" id="_ref_5474"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">Module namespace exotic objects</a></emu-xref> are not extensible.</p>
<p>An object is a <dfn id="module-namespace-exotic-object" variants="module namespace exotic objects" tabindex="-1">module namespace exotic object</dfn> if its <var class="field">[[GetPrototypeOf]]</var>, <var class="field">[[SetPrototypeOf]]</var>, <var class="field">[[IsExtensible]]</var>, <var class="field">[[PreventExtensions]]</var>, <var class="field">[[GetOwnProperty]]</var>, <var class="field">[[DefineOwnProperty]]</var>, <var class="field">[[HasProperty]]</var>, <var class="field">[[Get]]</var>, <var class="field">[[Set]]</var>, <var class="field">[[Delete]]</var>, and <var class="field">[[OwnPropertyKeys]]</var> internal methods use the definitions in this section, and its other essential internal methods use the definitions found in <emu-xref href="#sec-ordinary-object-internal-methods-and-internal-slots" id="_ref_330"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots">10.1</a></emu-xref>. These methods are installed by <emu-xref aoid="ModuleNamespaceCreate" id="_ref_5475"><a href="ordinary-and-exotic-objects-behaviours.html#sec-modulenamespacecreate">ModuleNamespaceCreate</a></emu-xref>.</p>
<p><emu-xref href="#module-namespace-exotic-object" id="_ref_5476"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">Module namespace exotic objects</a></emu-xref> have the internal slots defined in <emu-xref href="#table-internal-slots-of-module-namespace-exotic-objects" id="_ref_331"><a href="ordinary-and-exotic-objects-behaviours.html#table-internal-slots-of-module-namespace-exotic-objects">Table 28</a></emu-xref>.</p>
<emu-table id="table-internal-slots-of-module-namespace-exotic-objects" caption="Internal Slots of Module Namespace Exotic Objects" oldids="table-29"><figure><figcaption>Table 28: Internal Slots of Module Namespace Exotic Objects</figcaption><span id="table-29"></span>
<table>
<thead>
<tr>
<th>
Internal Slot
</th>
<th>
Type
</th>
<th>
Description
</th>
</tr>
</thead>
<tbody><tr>
<td>
<var class="field">[[Module]]</var>
</td>
<td>
a <emu-xref href="#sec-abstract-module-records" id="_ref_5477"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>
</td>
<td>
The <emu-xref href="#sec-abstract-module-records" id="_ref_5478"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> whose exports this namespace exposes.
</td>
</tr>
<tr>
<td>
<var class="field">[[Exports]]</var>
</td>
<td>
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5479"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings
</td>
<td>
A <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5480"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose elements are the String values of the exported names exposed as own properties of this object. The list is sorted according to <emu-xref href="#lexicographic-code-unit-order" id="_ref_5481"><a href="ecmascript-data-types-and-values.html#lexicographic-code-unit-order">lexicographic code unit order</a></emu-xref>.
</td>
</tr>
</tbody></table>
</figure></emu-table>
<emu-clause id="sec-module-namespace-exotic-objects-getprototypeof" type="internal method">
<h1><span class="secnum">10.4.6.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</h1>
<p>The <var class="field">[[GetPrototypeOf]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5482"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5483"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-val>null</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-val>null</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-setprototypeof-v" type="internal method">
<h1><span class="secnum">10.4.6.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</h1>
<p>The <var class="field">[[SetPrototypeOf]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5484"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> <var>O</var> takes argument <var>V</var> (an Object or <emu-val>null</emu-val>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5485"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>Return !&nbsp;<emu-xref aoid="SetImmutablePrototype" id="_ref_5486"><a href="ordinary-and-exotic-objects-behaviours.html#sec-set-immutable-prototype">SetImmutablePrototype</a></emu-xref>(<var>O</var>, <var>V</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-isextensible" type="internal method">
<h1><span class="secnum">10.4.6.3</span> <var class="field">[[IsExtensible]]</var> ( )</h1>
<p>The <var class="field">[[IsExtensible]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5487"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5488"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-val>false</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-preventextensions" type="internal method">
<h1><span class="secnum">10.4.6.4</span> <var class="field">[[PreventExtensions]]</var> ( )</h1>
<p>The <var class="field">[[PreventExtensions]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5489"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5490"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-val>true</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-getownproperty-p" type="internal method">
<h1><span class="secnum">10.4.6.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[GetOwnProperty]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5491"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5492"><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_5493"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5494"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>, or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5495"><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>P</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_5496"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, return <emu-xref aoid="OrdinaryGetOwnProperty" id="_ref_5497"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a></emu-xref>(<var>O</var>, <var>P</var>).</li><li>Let <var>exports</var> be <var>O</var>.<var class="field">[[Exports]]</var>.</li><li>If <var>exports</var> does not contain <var>P</var>, return <emu-val>undefined</emu-val>.</li><li>Let <var>value</var> be ?&nbsp;<var>O</var>.<var class="field">[[Get]]</var>(<var>P</var>, <var>O</var>).</li><li>Return PropertyDescriptor { <var class="field">[[Value]]</var>: <var>value</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-defineownproperty-p-desc" type="internal method">
<h1><span class="secnum">10.4.6.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</h1>
<p>The <var class="field">[[DefineOwnProperty]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5498"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5499"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5500"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5501"><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_5502"><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>P</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_5503"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, return !&nbsp;<emu-xref aoid="OrdinaryDefineOwnProperty" id="_ref_5504"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a></emu-xref>(<var>O</var>, <var>P</var>, <var>Desc</var>).</li><li>Let <var>current</var> be ?&nbsp;<var>O</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>).</li><li>If <var>current</var> is <emu-val>undefined</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has a <var class="field">[[Configurable]]</var> field and <var>Desc</var>.<var class="field">[[Configurable]]</var> is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has an <var class="field">[[Enumerable]]</var> field and <var>Desc</var>.<var class="field">[[Enumerable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <emu-xref aoid="IsAccessorDescriptor" id="_ref_5505"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>Desc</var>) is <emu-val>true</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has a <var class="field">[[Writable]]</var> field and <var>Desc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>Desc</var> has a <var class="field">[[Value]]</var> field, return <emu-xref aoid="SameValue" id="_ref_5506"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>Desc</var>.<var class="field">[[Value]]</var>, <var>current</var>.<var class="field">[[Value]]</var>).</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-hasproperty-p" type="internal method">
<h1><span class="secnum">10.4.6.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[HasProperty]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5507"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5508"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5509"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>P</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_5510"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, return !&nbsp;<emu-xref aoid="OrdinaryHasProperty" id="_ref_5511"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryhasproperty">OrdinaryHasProperty</a></emu-xref>(<var>O</var>, <var>P</var>).</li><li>Let <var>exports</var> be <var>O</var>.<var class="field">[[Exports]]</var>.</li><li>If <var>exports</var> contains <var>P</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-get-p-receiver" type="internal method">
<h1><span class="secnum">10.4.6.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Get]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5512"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5513"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5514"><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_5515"><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_5516"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5517"><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>P</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_5518"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, then<ol><li>Return !&nbsp;<emu-xref aoid="OrdinaryGet" id="_ref_5519"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryget">OrdinaryGet</a></emu-xref>(<var>O</var>, <var>P</var>, <var>Receiver</var>).</li></ol></li><li>Let <var>exports</var> be <var>O</var>.<var class="field">[[Exports]]</var>.</li><li>If <var>exports</var> does not contain <var>P</var>, return <emu-val>undefined</emu-val>.</li><li>Let <var>m</var> be <var>O</var>.<var class="field">[[Module]]</var>.</li><li>Let <var>binding</var> be <var>m</var>.<emu-xref aoid="ResolveExport" id="_ref_5520"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref>(<var>P</var>).</li><li><emu-xref href="#assert" id="_ref_5521"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>binding</var> is a <emu-xref href="#resolvedbinding-record" id="_ref_5522"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref>.</li><li>Let <var>targetModule</var> be <var>binding</var>.<var class="field">[[Module]]</var>.</li><li><emu-xref href="#assert" id="_ref_5523"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>targetModule</var> is not <emu-val>undefined</emu-val>.</li><li>If <var>binding</var>.<var class="field">[[BindingName]]</var> is <emu-const>namespace</emu-const>, then<ol><li>Return <emu-xref aoid="GetModuleNamespace" id="_ref_5524"><a href="ecmascript-language-scripts-and-modules.html#sec-getmodulenamespace">GetModuleNamespace</a></emu-xref>(<var>targetModule</var>).</li></ol></li><li>Let <var>targetEnv</var> be <var>targetModule</var>.<var class="field">[[Environment]]</var>.</li><li>If <var>targetEnv</var> is <emu-const>empty</emu-const>, throw a <emu-val>ReferenceError</emu-val> exception.</li><li>Return ?&nbsp;<var>targetEnv</var>.<emu-xref aoid="GetBindingValue" id="_ref_5525"><a href="executable-code-and-execution-contexts.html#abstract-getbindingvalue">GetBindingValue</a></emu-xref>(<var>binding</var>.<var class="field">[[BindingName]]</var>, <emu-val>true</emu-val>).</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><emu-xref aoid="ResolveExport" id="_ref_5526"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref> is side-effect free. Each time this operation is called with a specific <var>exportName</var>, <var>resolveSet</var> pair as arguments it must return the same result. An implementation might choose to pre-compute or cache the <emu-xref aoid="ResolveExport" id="_ref_5527"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref> results for the <var class="field">[[Exports]]</var> of each <emu-xref href="#module-namespace-exotic-object" id="_ref_5528"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-set-p-v-receiver" type="internal method">
<h1><span class="secnum">10.4.6.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Set]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5529"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5530"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), <var>V</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5531"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5532"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5533"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-val>false</emu-val>. It performs the following steps when called:</p>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-delete-p" type="internal method">
<h1><span class="secnum">10.4.6.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[Delete]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5534"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5535"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5536"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>P</var> <emu-xref href="#sec-ecmascript-language-types-symbol-type" id="_ref_5537"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type">is a Symbol</a></emu-xref>, then<ol><li>Return !&nbsp;<emu-xref aoid="OrdinaryDelete" id="_ref_5538"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydelete">OrdinaryDelete</a></emu-xref>(<var>O</var>, <var>P</var>).</li></ol></li><li>Let <var>exports</var> be <var>O</var>.<var class="field">[[Exports]]</var>.</li><li>If <var>exports</var> contains <var>P</var>, return <emu-val>false</emu-val>.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-module-namespace-exotic-objects-ownpropertykeys" type="internal method">
<h1><span class="secnum">10.4.6.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</h1>
<p>The <var class="field">[[OwnPropertyKeys]]</var> internal method of a <emu-xref href="#module-namespace-exotic-object" id="_ref_5539"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> <var>O</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5540"><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_5541"><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_5542"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>exports</var> be <var>O</var>.<var class="field">[[Exports]]</var>.</li><li>Let <var>symbolKeys</var> be <emu-xref aoid="OrdinaryOwnPropertyKeys" id="_ref_5543"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryownpropertykeys">OrdinaryOwnPropertyKeys</a></emu-xref>(<var>O</var>).</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_5544"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>exports</var> and <var>symbolKeys</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-modulenamespacecreate" type="abstract operation" aoid="ModuleNamespaceCreate">
<h1><span class="secnum">10.4.6.12</span> ModuleNamespaceCreate ( <var>module</var>, <var>exports</var> )</h1>
<p>The abstract operation ModuleNamespaceCreate takes arguments <var>module</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_5545"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and <var>exports</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5546"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings) and returns a <emu-xref href="#module-namespace-exotic-object" id="_ref_5547"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref>. It is used to specify the creation of new <emu-xref href="#module-namespace-exotic-object" id="_ref_5548"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic objects</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_5549"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Namespace]]</var> is <emu-const>empty</emu-const>.</li><li>Let <var>internalSlotsList</var> be the internal slots listed in <emu-xref href="#table-internal-slots-of-module-namespace-exotic-objects" id="_ref_332"><a href="ordinary-and-exotic-objects-behaviours.html#table-internal-slots-of-module-namespace-exotic-objects">Table 28</a></emu-xref>.</li><li>Let <var>M</var> be <emu-xref aoid="MakeBasicObject" id="_ref_5550"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref>(<var>internalSlotsList</var>).</li><li>Set <var>M</var>'s essential internal methods to the definitions specified in <emu-xref href="#sec-module-namespace-exotic-objects" id="_ref_333"><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects">10.4.6</a></emu-xref>.</li><li>Set <var>M</var>.<var class="field">[[Module]]</var> to <var>module</var>.</li><li>Let <var>sortedExports</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5551"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose elements are the elements of <var>exports</var>, sorted according to <emu-xref href="#lexicographic-code-unit-order" id="_ref_5552"><a href="ecmascript-data-types-and-values.html#lexicographic-code-unit-order">lexicographic code unit order</a></emu-xref>.</li><li>Set <var>M</var>.<var class="field">[[Exports]]</var> to <var>sortedExports</var>.</li><li>Create own properties of <var>M</var> corresponding to the definitions in <emu-xref href="#sec-module-namespace-objects" id="_ref_334"><a href="reflection.html#sec-module-namespace-objects">28.3</a></emu-xref>.</li><li>Set <var>module</var>.<var class="field">[[Namespace]]</var> to <var>M</var>.</li><li>Return <var>M</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-immutable-prototype-exotic-objects">
<h1><span class="secnum">10.4.7</span> Immutable Prototype Exotic Objects</h1>
<p>An <emu-xref href="#immutable-prototype-exotic-object" id="_ref_5553"><a href="ordinary-and-exotic-objects-behaviours.html#immutable-prototype-exotic-object">immutable prototype exotic object</a></emu-xref> is an <emu-xref href="#exotic-object" id="_ref_5554"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> that has a <var class="field">[[Prototype]]</var> internal slot that will not change once it is initialized.</p>
<p>An object is an <dfn id="immutable-prototype-exotic-object" variants="immutable prototype exotic objects" tabindex="-1">immutable prototype exotic object</dfn> if its <var class="field">[[SetPrototypeOf]]</var> internal method uses the following implementation. (Its other essential internal methods may use any implementation, depending on the specific <emu-xref href="#immutable-prototype-exotic-object" id="_ref_5555"><a href="ordinary-and-exotic-objects-behaviours.html#immutable-prototype-exotic-object">immutable prototype exotic object</a></emu-xref> in question.)</p>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Unlike other <emu-xref href="#exotic-object" id="_ref_5556"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic objects</a></emu-xref>, there is not a dedicated creation abstract operation provided for <emu-xref href="#immutable-prototype-exotic-object" id="_ref_5557"><a href="ordinary-and-exotic-objects-behaviours.html#immutable-prototype-exotic-object">immutable prototype exotic objects</a></emu-xref>. This is because they are only used by <emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_5558"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref> and by <emu-xref href="#host-environment" id="_ref_5559"><a href="overview.html#host-environment">host environments</a></emu-xref>, and in <emu-xref href="#host-environment" id="_ref_5560"><a href="overview.html#host-environment">host environments</a></emu-xref>, the relevant objects are potentially exotic in other ways and thus need their own dedicated creation operation.</p>
</div></emu-note>
<emu-clause id="sec-immutable-prototype-exotic-objects-setprototypeof-v" type="internal method">
<h1><span class="secnum">10.4.7.1</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</h1>
<p>The <var class="field">[[SetPrototypeOf]]</var> internal method of an <emu-xref href="#immutable-prototype-exotic-object" id="_ref_5561"><a href="ordinary-and-exotic-objects-behaviours.html#immutable-prototype-exotic-object">immutable prototype exotic object</a></emu-xref> <var>O</var> takes argument <var>V</var> (an Object or <emu-val>null</emu-val>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5562"><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_5563"><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>Return ?&nbsp;<emu-xref aoid="SetImmutablePrototype" id="_ref_5564"><a href="ordinary-and-exotic-objects-behaviours.html#sec-set-immutable-prototype" class="e-user-code">SetImmutablePrototype</a></emu-xref>(<var>O</var>, <var>V</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-set-immutable-prototype" type="abstract operation" aoid="SetImmutablePrototype">
<h1><span class="secnum">10.4.7.2</span> SetImmutablePrototype ( <var>O</var>, <var>V</var> )</h1>
<p>The abstract operation SetImmutablePrototype takes arguments <var>O</var> (an Object) and <var>V</var> (an Object or <emu-val>null</emu-val>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5565"><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_5566"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>current</var> be ?&nbsp;<span class="e-user-code"><var>O</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li><li>If <emu-xref aoid="SameValue" id="_ref_5567"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>V</var>, <var>current</var>) is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots">
<h1><span class="secnum">10.5</span> Proxy Object Internal Methods and Internal Slots</h1>
<p>A Proxy object is an <emu-xref href="#exotic-object" id="_ref_5568"><a href="ecmascript-data-types-and-values.html#exotic-object">exotic object</a></emu-xref> whose essential internal methods are partially implemented using ECMAScript code. Every Proxy object has an internal slot called <var class="field">[[ProxyHandler]]</var>. The value of <var class="field">[[ProxyHandler]]</var> is an object, called the proxy's <em>handler object</em>, or <emu-val>null</emu-val>. Methods (see <emu-xref href="#table-proxy-handler-methods" id="_ref_335"><a href="ordinary-and-exotic-objects-behaviours.html#table-proxy-handler-methods">Table 29</a></emu-xref>) of a handler object may be used to augment the implementation for one or more of the Proxy object's internal methods. Every Proxy object also has an internal slot called <var class="field">[[ProxyTarget]]</var> whose value is either an object or <emu-val>null</emu-val>. This object is called the proxy's <em>target object</em>.</p>
<p>An object is a <dfn id="proxy-exotic-object" variants="Proxy exotic objects" tabindex="-1">Proxy exotic object</dfn> if its essential internal methods (including <var class="field">[[Call]]</var> and <var class="field">[[Construct]]</var>, if applicable) use the definitions in this section. These internal methods are installed in <emu-xref aoid="ProxyCreate" id="_ref_5569"><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxycreate">ProxyCreate</a></emu-xref>.</p>
<emu-table id="table-proxy-handler-methods" caption="Proxy Handler Methods" oldids="table-30"><figure><figcaption>Table 29: Proxy Handler Methods</figcaption><span id="table-30"></span>
<table>
<thead>
<tr>
<th>
Internal Method
</th>
<th>
Handler Method
</th>
</tr>
</thead>
<tbody><tr>
<td>
<var class="field">[[GetPrototypeOf]]</var>
</td>
<td>
<code>getPrototypeOf</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[SetPrototypeOf]]</var>
</td>
<td>
<code>setPrototypeOf</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[IsExtensible]]</var>
</td>
<td>
<code>isExtensible</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[PreventExtensions]]</var>
</td>
<td>
<code>preventExtensions</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[GetOwnProperty]]</var>
</td>
<td>
<code>getOwnPropertyDescriptor</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[DefineOwnProperty]]</var>
</td>
<td>
<code>defineProperty</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[HasProperty]]</var>
</td>
<td>
<code>has</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[Get]]</var>
</td>
<td>
<code>get</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[Set]]</var>
</td>
<td>
<code>set</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[Delete]]</var>
</td>
<td>
<code>deleteProperty</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[OwnPropertyKeys]]</var>
</td>
<td>
<code>ownKeys</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[Call]]</var>
</td>
<td>
<code>apply</code>
</td>
</tr>
<tr>
<td>
<var class="field">[[Construct]]</var>
</td>
<td>
<code>construct</code>
</td>
</tr>
</tbody></table>
</figure></emu-table>
<p>When a handler method is called to provide the implementation of a Proxy object internal method, the handler method is passed the proxy's target object as a parameter. A proxy's handler object does not necessarily have a method corresponding to every essential internal method. Invoking an internal method on the proxy results in the invocation of the corresponding internal method on the proxy's target object if the handler object does not have a method corresponding to the internal trap.</p>
<p>The <var class="field">[[ProxyHandler]]</var> and <var class="field">[[ProxyTarget]]</var> internal slots of a Proxy object are always initialized when the object is created and typically may not be modified. Some Proxy objects are created in a manner that permits them to be subsequently <em>revoked</em>. When a proxy is revoked, its <var class="field">[[ProxyHandler]]</var> and <var class="field">[[ProxyTarget]]</var> internal slots are set to <emu-val>null</emu-val> causing subsequent invocations of internal methods on that Proxy object to throw a <emu-val>TypeError</emu-val> exception.</p>
<p>Because Proxy objects permit the implementation of internal methods to be provided by arbitrary ECMAScript code, it is possible to define a Proxy object whose handler methods violates the invariants defined in <emu-xref href="#sec-invariants-of-the-essential-internal-methods" id="_ref_336"><a href="ecmascript-data-types-and-values.html#sec-invariants-of-the-essential-internal-methods">6.1.7.3</a></emu-xref>. Some of the internal method invariants defined in <emu-xref href="#sec-invariants-of-the-essential-internal-methods" id="_ref_337"><a href="ecmascript-data-types-and-values.html#sec-invariants-of-the-essential-internal-methods">6.1.7.3</a></emu-xref> are essential integrity invariants. These invariants are explicitly enforced by the Proxy object internal methods specified in this section. An ECMAScript implementation must be robust in the presence of all possible invariant violations.</p>
<p>In the following algorithm descriptions, assume <var>O</var> is an ECMAScript Proxy object, <var>P</var> is a <emu-xref href="#property-key" id="_ref_5570"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> value, <var>V</var> is any <emu-xref href="#sec-ecmascript-language-types" id="_ref_5571"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> and <var>Desc</var> is a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5572"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> record.</p>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-getprototypeof" type="internal method">
<h1><span class="secnum">10.5.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</h1>
<p>The <var class="field">[[GetPrototypeOf]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5573"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5574"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either an Object or <emu-val>null</emu-val>, or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5575"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5576"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5577"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5578"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5579"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"getPrototypeOf"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li></ol></li><li>Let <var>handlerProto</var> be ?&nbsp;<emu-xref aoid="Call" id="_ref_5580"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>&nbsp;»).</li><li>If <var>handlerProto</var> <emu-xref href="#sec-object-type" id="_ref_5581"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref> and <var>handlerProto</var> is not <emu-val>null</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5582"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>If <var>extensibleTarget</var> is <emu-val>true</emu-val>, return <var>handlerProto</var>.</li><li>Let <var>targetProto</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li><li>If <emu-xref aoid="SameValue" id="_ref_5583"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>handlerProto</var>, <var>targetProto</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <var>handlerProto</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[GetPrototypeOf]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[GetPrototypeOf]]</var> must be either an Object or <emu-val>null</emu-val>.
</li>
<li>
If the target object is not extensible, <var class="field">[[GetPrototypeOf]]</var> applied to the Proxy object must return the same value as <var class="field">[[GetPrototypeOf]]</var> applied to the Proxy object's target object.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v" type="internal method">
<h1><span class="secnum">10.5.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</h1>
<p>The <var class="field">[[SetPrototypeOf]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5584"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes argument <var>V</var> (an Object or <emu-val>null</emu-val>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5585"><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_5586"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5587"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5588"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5589"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5590"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"setPrototypeOf"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[SetPrototypeOf]]</var>(<var>V</var>)</span>.</li></ol></li><li>Let <var>booleanTrapResult</var> be <emu-xref aoid="ToBoolean" id="_ref_5591"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_5592"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>V</var>&nbsp;»)).</li><li>If <var>booleanTrapResult</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5593"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>If <var>extensibleTarget</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Let <var>targetProto</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li><li>If <emu-xref aoid="SameValue" id="_ref_5594"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>V</var>, <var>targetProto</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[SetPrototypeOf]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[SetPrototypeOf]]</var> <emu-xref href="#sec-ecmascript-language-types-boolean-type" id="_ref_5595"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type">is a Boolean</a></emu-xref> value.
</li>
<li>
If the target object is not extensible, the argument value must be the same as the result of <var class="field">[[GetPrototypeOf]]</var> applied to target object.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-isextensible" type="internal method">
<h1><span class="secnum">10.5.3</span> <var class="field">[[IsExtensible]]</var> ( )</h1>
<p>The <var class="field">[[IsExtensible]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5596"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5597"><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_5598"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5599"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5600"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5601"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5602"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"isExtensible"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5603"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li></ol></li><li>Let <var>booleanTrapResult</var> be <emu-xref aoid="ToBoolean" id="_ref_5604"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_5605"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>&nbsp;»)).</li><li>Let <var>targetResult</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5606"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>If <var>booleanTrapResult</var> is not <var>targetResult</var>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <var>booleanTrapResult</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[IsExtensible]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[IsExtensible]]</var> <emu-xref href="#sec-ecmascript-language-types-boolean-type" id="_ref_5607"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type">is a Boolean</a></emu-xref> value.
</li>
<li>
<var class="field">[[IsExtensible]]</var> applied to the Proxy object must return the same value as <var class="field">[[IsExtensible]]</var> applied to the Proxy object's target object with the same argument.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-preventextensions" type="internal method">
<h1><span class="secnum">10.5.4</span> <var class="field">[[PreventExtensions]]</var> ( )</h1>
<p>The <var class="field">[[PreventExtensions]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5608"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5609"><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_5610"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5611"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5612"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5613"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5614"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"preventExtensions"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[PreventExtensions]]</var>()</span>.</li></ol></li><li>Let <var>booleanTrapResult</var> be <emu-xref aoid="ToBoolean" id="_ref_5615"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_5616"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>&nbsp;»)).</li><li>If <var>booleanTrapResult</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5617"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>If <var>extensibleTarget</var> is <emu-val>true</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>Return <var>booleanTrapResult</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[PreventExtensions]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[PreventExtensions]]</var> <emu-xref href="#sec-ecmascript-language-types-boolean-type" id="_ref_5618"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type">is a Boolean</a></emu-xref> value.
</li>
<li>
<var class="field">[[PreventExtensions]]</var> applied to the Proxy object only returns <emu-val>true</emu-val> if <var class="field">[[IsExtensible]]</var> applied to the Proxy object's target object is <emu-val>false</emu-val>.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p" type="internal method">
<h1><span class="secnum">10.5.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[GetOwnProperty]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5619"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5620"><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_5621"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5622"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> or <emu-val>undefined</emu-val>, or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5623"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5624"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5625"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5626"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5627"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"getOwnPropertyDescriptor"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li></ol></li><li>Let <var>trapResultObj</var> be ?&nbsp;<emu-xref aoid="Call" id="_ref_5628"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>P</var>&nbsp;»).</li><li>If <var>trapResultObj</var> <emu-xref href="#sec-object-type" id="_ref_5629"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref> and <var>trapResultObj</var> is not <emu-val>undefined</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>targetDesc</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>trapResultObj</var> is <emu-val>undefined</emu-val>, then<ol><li>If <var>targetDesc</var> is <emu-val>undefined</emu-val>, return <emu-val>undefined</emu-val>.</li><li>If <var>targetDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5630"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>If <var>extensibleTarget</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <emu-val>undefined</emu-val>.</li></ol></li><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5631"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>Let <var>resultDesc</var> be ?&nbsp;<emu-xref aoid="ToPropertyDescriptor" id="_ref_5632"><a href="ecmascript-data-types-and-values.html#sec-topropertydescriptor" class="e-user-code">ToPropertyDescriptor</a></emu-xref>(<var>trapResultObj</var>).</li><li>Perform <emu-xref aoid="CompletePropertyDescriptor" id="_ref_5633"><a href="ecmascript-data-types-and-values.html#sec-completepropertydescriptor">CompletePropertyDescriptor</a></emu-xref>(<var>resultDesc</var>).</li><li>Let <var>valid</var> be <emu-xref aoid="IsCompatiblePropertyDescriptor" id="_ref_5634"><a href="ordinary-and-exotic-objects-behaviours.html#sec-iscompatiblepropertydescriptor">IsCompatiblePropertyDescriptor</a></emu-xref>(<var>extensibleTarget</var>, <var>resultDesc</var>, <var>targetDesc</var>).</li><li>If <var>valid</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>resultDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, then<ol><li>If <var>targetDesc</var> is <emu-val>undefined</emu-val> or <var>targetDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>true</emu-val>, then<ol><li>Throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>If <var>resultDesc</var> has a <var class="field">[[Writable]]</var> field and <var>resultDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_5635"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>targetDesc</var> has a <var class="field">[[Writable]]</var> field.</li><li>If <var>targetDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>true</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li></ol></li><li>Return <var>resultDesc</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[GetOwnProperty]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[GetOwnProperty]]</var> must be either an Object or <emu-val>undefined</emu-val>.
</li>
<li>
A property cannot be reported as non-existent, if it exists as a non-configurable own property of the target object.
</li>
<li>
A property cannot be reported as non-existent, if it exists as an own property of a non-extensible target object.
</li>
<li>
A property cannot be reported as existent, if it does not exist as an own property of the target object and the target object is not extensible.
</li>
<li>
A property cannot be reported as non-configurable, unless it exists as a non-configurable own property of the target object.
</li>
<li>
A property cannot be reported as both non-configurable and non-writable, unless it exists as a non-configurable, non-writable own property of the target object.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc" type="internal method">
<h1><span class="secnum">10.5.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</h1>
<p>The <var class="field">[[DefineOwnProperty]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5636"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5637"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Desc</var> (a <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5638"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5639"><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_5640"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5641"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5642"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5643"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5644"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"defineProperty"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[DefineOwnProperty]]</var>(<var>P</var>, <var>Desc</var>)</span>.</li></ol></li><li>Let <var>descObj</var> be <emu-xref aoid="FromPropertyDescriptor" id="_ref_5645"><a href="ecmascript-data-types-and-values.html#sec-frompropertydescriptor">FromPropertyDescriptor</a></emu-xref>(<var>Desc</var>).</li><li>Let <var>booleanTrapResult</var> be <emu-xref aoid="ToBoolean" id="_ref_5646"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_5647"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>P</var>, <var>descObj</var>&nbsp;»)).</li><li>If <var>booleanTrapResult</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Let <var>targetDesc</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5648"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>If <var>Desc</var> has a <var class="field">[[Configurable]]</var> field and <var>Desc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>settingConfigFalse</var> be <emu-val>true</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>settingConfigFalse</var> be <emu-val>false</emu-val>.</li></ol></li><li>If <var>targetDesc</var> is <emu-val>undefined</emu-val>, then<ol><li>If <var>extensibleTarget</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>settingConfigFalse</var> is <emu-val>true</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>Else,<ol><li>If <emu-xref aoid="IsCompatiblePropertyDescriptor" id="_ref_5649"><a href="ordinary-and-exotic-objects-behaviours.html#sec-iscompatiblepropertydescriptor">IsCompatiblePropertyDescriptor</a></emu-xref>(<var>extensibleTarget</var>, <var>Desc</var>, <var>targetDesc</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>settingConfigFalse</var> is <emu-val>true</emu-val> and <var>targetDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>true</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <emu-xref aoid="IsDataDescriptor" id="_ref_5650"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>targetDesc</var>) is <emu-val>true</emu-val>, <var>targetDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, and <var>targetDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>true</emu-val>, then<ol><li>If <var>Desc</var> has a <var class="field">[[Writable]]</var> field and <var>Desc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[DefineOwnProperty]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[DefineOwnProperty]]</var> <emu-xref href="#sec-ecmascript-language-types-boolean-type" id="_ref_5651"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type">is a Boolean</a></emu-xref> value.
</li>
<li>
A property cannot be added, if the target object is not extensible.
</li>
<li>
A property cannot be non-configurable, unless there exists a corresponding non-configurable own property of the target object.
</li>
<li>
A non-configurable property cannot be non-writable, unless there exists a corresponding non-configurable, non-writable own property of the target object.
</li>
<li>
If a property has a corresponding target object property then applying the <emu-xref href="#sec-property-descriptor-specification-type" id="_ref_5652"><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type">Property Descriptor</a></emu-xref> of the property to the target object using <var class="field">[[DefineOwnProperty]]</var> will not throw an exception.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p" type="internal method">
<h1><span class="secnum">10.5.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[HasProperty]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5653"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5654"><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_5655"><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_5656"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5657"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5658"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5659"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5660"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"has"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[HasProperty]]</var>(<var>P</var>)</span>.</li></ol></li><li>Let <var>booleanTrapResult</var> be <emu-xref aoid="ToBoolean" id="_ref_5661"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_5662"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>P</var>&nbsp;»)).</li><li>If <var>booleanTrapResult</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>targetDesc</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>targetDesc</var> is not <emu-val>undefined</emu-val>, then<ol><li>If <var>targetDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5663"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>If <var>extensibleTarget</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li></ol></li><li>Return <var>booleanTrapResult</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[HasProperty]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[HasProperty]]</var> <emu-xref href="#sec-ecmascript-language-types-boolean-type" id="_ref_5664"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type">is a Boolean</a></emu-xref> value.
</li>
<li>
A property cannot be reported as non-existent, if it exists as a non-configurable own property of the target object.
</li>
<li>
A property cannot be reported as non-existent, if it exists as an own property of the target object and the target object is not extensible.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver" type="internal method">
<h1><span class="secnum">10.5.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Get]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5665"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5666"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5667"><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_5668"><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_5669"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5670"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5671"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5672"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5673"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5674"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"get"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[Get]]</var>(<var>P</var>, <var>Receiver</var>)</span>.</li></ol></li><li>Let <var>trapResult</var> be ?&nbsp;<emu-xref aoid="Call" id="_ref_5675"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>P</var>, <var>Receiver</var>&nbsp;»).</li><li>Let <var>targetDesc</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>targetDesc</var> is not <emu-val>undefined</emu-val> and <var>targetDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, then<ol><li>If <emu-xref aoid="IsDataDescriptor" id="_ref_5676"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>targetDesc</var>) is <emu-val>true</emu-val> and <var>targetDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, then<ol><li>If <emu-xref aoid="SameValue" id="_ref_5677"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>trapResult</var>, <var>targetDesc</var>.<var class="field">[[Value]]</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>If <emu-xref aoid="IsAccessorDescriptor" id="_ref_5678"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>targetDesc</var>) is <emu-val>true</emu-val> and <var>targetDesc</var>.<var class="field">[[Get]]</var> is <emu-val>undefined</emu-val>, then<ol><li>If <var>trapResult</var> is not <emu-val>undefined</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li></ol></li><li>Return <var>trapResult</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[Get]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The value reported for a property must be the same as the value of the corresponding target object property if the target object property is a non-writable, non-configurable own <emu-xref href="#sec-object-type" id="_ref_5679"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref>.
</li>
<li>
The value reported for a property must be <emu-val>undefined</emu-val> if the corresponding target object property is a non-configurable own <emu-xref href="#sec-object-type" id="_ref_5680"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> that has <emu-val>undefined</emu-val> as its <var class="field">[[Get]]</var> attribute.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver" type="internal method">
<h1><span class="secnum">10.5.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</h1>
<p>The <var class="field">[[Set]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5681"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes arguments <var>P</var> (a <emu-xref href="#property-key" id="_ref_5682"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>), <var>V</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5683"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>), and <var>Receiver</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5684"><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_5685"><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_5686"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5687"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5688"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5689"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5690"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"set"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[Set]]</var>(<var>P</var>, <var>V</var>, <var>Receiver</var>)</span>.</li></ol></li><li>Let <var>booleanTrapResult</var> be <emu-xref aoid="ToBoolean" id="_ref_5691"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_5692"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>&nbsp;»)).</li><li>If <var>booleanTrapResult</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Let <var>targetDesc</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>targetDesc</var> is not <emu-val>undefined</emu-val> and <var>targetDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, then<ol><li>If <emu-xref aoid="IsDataDescriptor" id="_ref_5693"><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor">IsDataDescriptor</a></emu-xref>(<var>targetDesc</var>) is <emu-val>true</emu-val> and <var>targetDesc</var>.<var class="field">[[Writable]]</var> is <emu-val>false</emu-val>, then<ol><li>If <emu-xref aoid="SameValue" id="_ref_5694"><a href="abstract-operations.html#sec-samevalue">SameValue</a></emu-xref>(<var>V</var>, <var>targetDesc</var>.<var class="field">[[Value]]</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>If <emu-xref aoid="IsAccessorDescriptor" id="_ref_5695"><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor">IsAccessorDescriptor</a></emu-xref>(<var>targetDesc</var>) is <emu-val>true</emu-val>, then<ol><li>If <var>targetDesc</var>.<var class="field">[[Set]]</var> is <emu-val>undefined</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li></ol></li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[Set]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[Set]]</var> <emu-xref href="#sec-ecmascript-language-types-boolean-type" id="_ref_5696"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type">is a Boolean</a></emu-xref> value.
</li>
<li>
Cannot change the value of a property to be different from the value of the corresponding target object property if the corresponding target object property is a non-writable, non-configurable own <emu-xref href="#sec-object-type" id="_ref_5697"><a href="ecmascript-data-types-and-values.html#sec-object-type">data property</a></emu-xref>.
</li>
<li>
Cannot set the value of a property if the corresponding target object property is a non-configurable own <emu-xref href="#sec-object-type" id="_ref_5698"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> that has <emu-val>undefined</emu-val> as its <var class="field">[[Set]]</var> attribute.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-delete-p" type="internal method">
<h1><span class="secnum">10.5.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</h1>
<p>The <var class="field">[[Delete]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5699"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes argument <var>P</var> (a <emu-xref href="#property-key" id="_ref_5700"><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_5701"><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_5702"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5703"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5704"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5705"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5706"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"deleteProperty"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[Delete]]</var>(<var>P</var>)</span>.</li></ol></li><li>Let <var>booleanTrapResult</var> be <emu-xref aoid="ToBoolean" id="_ref_5707"><a href="abstract-operations.html#sec-toboolean">ToBoolean</a></emu-xref>(? <emu-xref aoid="Call" id="_ref_5708"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>P</var>&nbsp;»)).</li><li>If <var>booleanTrapResult</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Let <var>targetDesc</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>P</var>)</span>.</li><li>If <var>targetDesc</var> is <emu-val>undefined</emu-val>, return <emu-val>true</emu-val>.</li><li>If <var>targetDesc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5709"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>If <var>extensibleTarget</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[Delete]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[Delete]]</var> <emu-xref href="#sec-ecmascript-language-types-boolean-type" id="_ref_5710"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type">is a Boolean</a></emu-xref> value.
</li>
<li>
A property cannot be reported as deleted, if it exists as a non-configurable own property of the target object.
</li>
<li>
A property cannot be reported as deleted, if it exists as an own property of the target object and the target object is non-extensible.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys" type="internal method">
<h1><span class="secnum">10.5.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</h1>
<p>The <var class="field">[[OwnPropertyKeys]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5711"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5712"><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_5713"><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_5714"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5715"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5716"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5717"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5718"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5719"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"ownKeys"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[OwnPropertyKeys]]</var>()</span>.</li></ol></li><li>Let <var>trapResultArray</var> be ?&nbsp;<emu-xref aoid="Call" id="_ref_5720"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>&nbsp;»).</li><li>Let <var>trapResult</var> be ?&nbsp;<emu-xref aoid="CreateListFromArrayLike" id="_ref_5721"><a href="abstract-operations.html#sec-createlistfromarraylike" class="e-user-code">CreateListFromArrayLike</a></emu-xref>(<var>trapResultArray</var>, <emu-const>property-key</emu-const>).</li><li>If <var>trapResult</var> contains any duplicate entries, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>extensibleTarget</var> be ?&nbsp;<emu-xref aoid="IsExtensible" id="_ref_5722"><a href="abstract-operations.html#sec-isextensible-o" class="e-user-code">IsExtensible</a></emu-xref>(<var>target</var>).</li><li>Let <var>targetKeys</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[OwnPropertyKeys]]</var>()</span>.</li><li><emu-xref href="#assert" id="_ref_5723"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>targetKeys</var> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5724"><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_5725"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_5726"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>targetKeys</var> contains no duplicate entries.</li><li>Let <var>targetConfigurableKeys</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5727"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>targetNonconfigurableKeys</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5728"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each element <var>key</var> of <var>targetKeys</var>, do<ol><li>Let <var>desc</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>key</var>)</span>.</li><li>If <var>desc</var> is not <emu-val>undefined</emu-val> and <var>desc</var>.<var class="field">[[Configurable]]</var> is <emu-val>false</emu-val>, then<ol><li>Append <var>key</var> to <var>targetNonconfigurableKeys</var>.</li></ol></li><li>Else,<ol><li>Append <var>key</var> to <var>targetConfigurableKeys</var>.</li></ol></li></ol></li><li>If <var>extensibleTarget</var> is <emu-val>true</emu-val> and <var>targetNonconfigurableKeys</var> is empty, then<ol><li>Return <var>trapResult</var>.</li></ol></li><li>Let <var>uncheckedResultKeys</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5729"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose elements are the elements of <var>trapResult</var>.</li><li>For each element <var>key</var> of <var>targetNonconfigurableKeys</var>, do<ol><li>If <var>uncheckedResultKeys</var> does not contain <var>key</var>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Remove <var>key</var> from <var>uncheckedResultKeys</var>.</li></ol></li><li>If <var>extensibleTarget</var> is <emu-val>true</emu-val>, return <var>trapResult</var>.</li><li>For each element <var>key</var> of <var>targetConfigurableKeys</var>, do<ol><li>If <var>uncheckedResultKeys</var> does not contain <var>key</var>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Remove <var>key</var> from <var>uncheckedResultKeys</var>.</li></ol></li><li>If <var>uncheckedResultKeys</var> is not empty, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return <var>trapResult</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><var class="field">[[OwnPropertyKeys]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[OwnPropertyKeys]]</var> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5730"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.
</li>
<li>
The returned <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5731"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> contains no duplicate entries.
</li>
<li>
Each element of the returned <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5732"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> is a <emu-xref href="#property-key" id="_ref_5733"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>.
</li>
<li>
The result <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5734"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> must contain the keys of all non-configurable own properties of the target object.
</li>
<li>
If the target object is not extensible, then the result <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5735"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> must contain all the keys of the own properties of the target object and no other values.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist" type="internal method">
<h1><span class="secnum">10.5.12</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</h1>
<p>The <var class="field">[[Call]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5736"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes arguments <var>thisArgument</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5737"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5738"><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_5739"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5740"><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_5741"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5742"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5743"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5744"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5745"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5746"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"apply"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<emu-xref aoid="Call" id="_ref_5747"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>target</var>, <var>thisArgument</var>, <var>argumentsList</var>).</li></ol></li><li>Let <var>argArray</var> be <emu-xref aoid="CreateArrayFromList" id="_ref_5748"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(<var>argumentsList</var>).</li><li>Return ?&nbsp;<emu-xref aoid="Call" id="_ref_5749"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>thisArgument</var>, <var>argArray</var>&nbsp;»).</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>A <emu-xref href="#proxy-exotic-object" id="_ref_5750"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> only has a <var class="field">[[Call]]</var> internal method if the initial value of its <var class="field">[[ProxyTarget]]</var> internal slot is an object that has a <var class="field">[[Call]]</var> internal method.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget" type="internal method">
<h1><span class="secnum">10.5.13</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</h1>
<p>The <var class="field">[[Construct]]</var> internal method of a <emu-xref href="#proxy-exotic-object" id="_ref_5751"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> <var>O</var> takes arguments <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_5752"><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_5753"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and <var>newTarget</var> (a <emu-xref href="#constructor" id="_ref_5754"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5755"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an Object or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5756"><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>Perform ?&nbsp;<emu-xref aoid="ValidateNonRevokedProxy" id="_ref_5757"><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy">ValidateNonRevokedProxy</a></emu-xref>(<var>O</var>).</li><li>Let <var>target</var> be <var>O</var>.<var class="field">[[ProxyTarget]]</var>.</li><li><emu-xref href="#assert" id="_ref_5758"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <emu-xref aoid="IsConstructor" id="_ref_5759"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>target</var>) is <emu-val>true</emu-val>.</li><li>Let <var>handler</var> be <var>O</var>.<var class="field">[[ProxyHandler]]</var>.</li><li><emu-xref href="#assert" id="_ref_5760"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5761"><a href="ecmascript-data-types-and-values.html#sec-object-type">is an Object</a></emu-xref>.</li><li>Let <var>trap</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_5762"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>handler</var>, <emu-val>"construct"</emu-val>).</li><li>If <var>trap</var> is <emu-val>undefined</emu-val>, then<ol><li>Return ?&nbsp;<emu-xref aoid="Construct" id="_ref_5763"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>target</var>, <var>argumentsList</var>, <var>newTarget</var>).</li></ol></li><li>Let <var>argArray</var> be <emu-xref aoid="CreateArrayFromList" id="_ref_5764"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(<var>argumentsList</var>).</li><li>Let <var>newObj</var> be ?&nbsp;<emu-xref aoid="Call" id="_ref_5765"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>trap</var>, <var>handler</var>, « <var>target</var>, <var>argArray</var>, <var>newTarget</var>&nbsp;»).</li><li>If <var>newObj</var> <emu-xref href="#sec-object-type" id="_ref_5766"><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 <var>newObj</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>A <emu-xref href="#proxy-exotic-object" id="_ref_5767"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> only has a <var class="field">[[Construct]]</var> internal method if the initial value of its <var class="field">[[ProxyTarget]]</var> internal slot is an object that has a <var class="field">[[Construct]]</var> internal method.</p>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p><var class="field">[[Construct]]</var> for Proxy objects enforces the following invariants:</p>
<ul>
<li>
The result of <var class="field">[[Construct]]</var> must be an Object.
</li>
</ul>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-validatenonrevokedproxy" type="abstract operation" aoid="ValidateNonRevokedProxy">
<h1><span class="secnum">10.5.14</span> ValidateNonRevokedProxy ( <var>proxy</var> )</h1>
<p>The abstract operation ValidateNonRevokedProxy takes argument <var>proxy</var> (a <emu-xref href="#proxy-exotic-object" id="_ref_5768"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5769"><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 a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5770"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It throws a <emu-val>TypeError</emu-val> exception if <var>proxy</var> has been revoked. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>proxy</var>.<var class="field">[[ProxyTarget]]</var> is <emu-val>null</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li><emu-xref href="#assert" id="_ref_5771"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>proxy</var>.<var class="field">[[ProxyHandler]]</var> is not <emu-val>null</emu-val>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-proxycreate" type="abstract operation" aoid="ProxyCreate">
<h1><span class="secnum">10.5.15</span> ProxyCreate ( <var>target</var>, <var>handler</var> )</h1>
<p>The abstract operation ProxyCreate takes arguments <var>target</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5772"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and <var>handler</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_5773"><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_5774"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#proxy-exotic-object" id="_ref_5775"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_5776"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is used to specify the creation of new Proxy objects. It performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_5777"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>handler</var> <emu-xref href="#sec-object-type" id="_ref_5778"><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>P</var> be <emu-xref aoid="MakeBasicObject" id="_ref_5779"><a href="abstract-operations.html#sec-makebasicobject">MakeBasicObject</a></emu-xref><var class="field">[[ProxyHandler]]</var>, <var class="field">[[ProxyTarget]]</var>&nbsp;»).</li><li>Set <var>P</var>'s essential internal methods, except for <var class="field">[[Call]]</var> and <var class="field">[[Construct]]</var>, to the definitions specified in <emu-xref href="#sec-proxy-object-internal-methods-and-internal-slots" id="_ref_338"><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots">10.5</a></emu-xref>.</li><li>If <emu-xref aoid="IsCallable" id="_ref_5780"><a href="abstract-operations.html#sec-iscallable">IsCallable</a></emu-xref>(<var>target</var>) is <emu-val>true</emu-val>, then<ol><li>Set <var>P</var>.<var class="field">[[Call]]</var> as specified in <emu-xref href="#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist" id="_ref_339"><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist">10.5.12</a></emu-xref>.</li><li>If <emu-xref aoid="IsConstructor" id="_ref_5781"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>target</var>) is <emu-val>true</emu-val>, then<ol><li>Set <var>P</var>.<var class="field">[[Construct]]</var> as specified in <emu-xref href="#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget" id="_ref_340"><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget">10.5.13</a></emu-xref>.</li></ol></li></ol></li><li>Set <var>P</var>.<var class="field">[[ProxyTarget]]</var> to <var>target</var>.</li><li>Set <var>P</var>.<var class="field">[[ProxyHandler]]</var> to <var>handler</var>.</li><li>Return <var>P</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause></div></body>