jarib/webidl

View on GitHub
support/webidl-spec-2018-09-03.html

Summary

Maintainability
Test Coverage
<!DOCTYPE html><html lang="en"><head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  <meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport">
  <title>Web IDL</title>
<style data-fill-with="stylesheet">/******************************************************************************
 *                   Style sheet for the W3C specifications                   *
 *
 * Special classes handled by this style sheet include:
 *
 * Indices
 *   - .toc for the Table of Contents (<ol class="toc">)
 *     + <span class="secno"> for the section numbers
 *   - #toc for the Table of Contents (<nav id="toc">)
 *   - ul.index for Indices (<a href="#ref">term</a><span>, in §N.M</span>)
 *   - table.index for Index Tables (e.g. for properties or elements)
 *
 * Structural Markup
 *   - table.data for general data tables
 *     -> use 'scope' attribute, <colgroup>, <thead>, and <tbody> for best results !
 *     -> use <table class='complex data'> for extra-complex tables
 *     -> use <td class='long'> for paragraph-length cell content
 *     -> use <td class='pre'> when manual line breaks/indentation would help readability
 *   - dl.switch for switch statements
 *   - ol.algorithm for algorithms (helps to visualize nesting)
 *   - .figure and .caption (HTML4) and figure and figcaption (HTML5)
 *     -> .sidefigure for right-floated figures
 *   - ins/del
 *
 * Code
 *   - pre and code
 *
 * Special Sections
 *   - .note       for informative notes             (div, p, span, aside, details)
 *   - .example    for informative examples          (div, p, pre, span)
 *   - .issue      for issues                        (div, p, span)
 *   - .assertion  for assertions                    (div, p, span)
 *   - .advisement for loud normative statements     (div, p, strong)
 *   - .annoying-warning for spec obsoletion notices (div, aside, details)
 *
 * Definition Boxes
 *   - pre.def   for WebIDL definitions
 *   - table.def for tables that define other entities (e.g. CSS properties)
 *   - dl.def    for definition lists that define other entitles (e.g. HTML elements)
 *
 * Numbering
 *   - .secno for section numbers in .toc and headings (<span class='secno'>3.2</span>)
 *   - .marker for source-inserted example/figure/issue numbers (<span class='marker'>Issue 4</span>)
 *   - ::before styled for CSS-generated issue/example/figure numbers:
 *     -> Documents wishing to use this only need to add
 *        figcaption::before,
 *        .caption::before { content: "Figure "  counter(figure) " ";  }
 *        .example::before { content: "Example " counter(example) " "; }
 *        .issue::before   { content: "Issue "   counter(issue) " ";   }
 *
 * Header Stuff (ignore, just don't conflict with these classes)
 *   - .head for the header
 *   - .copyright for the copyright
 *
 * Miscellaneous
 *   - .overlarge for things that should be as wide as possible, even if
 *     that overflows the body text area. This can be used on an item or
 *     on its container, depending on the effect desired.
 *     Note that this styling basically doesn't help at all when printing,
 *     since A4 paper isn't much wider than the max-width here.
 *     It's better to design things to fit into a narrower measure if possible.
 *   - js-added ToC jump links (see fixup.js)
 *
 ******************************************************************************/

/******************************************************************************/
/*                                   Body                                     */
/******************************************************************************/

    body {
        counter-reset: example figure issue;

        /* Layout */
        max-width: 50em;               /* limit line length to 50em for readability   */
        margin: 0 auto;                /* center text within page                     */
        padding: 1.6em 1.5em 2em 50px; /* assume 16px font size for downlevel clients */
        padding: 1.6em 1.5em 2em calc(26px + 1.5em); /* leave space for status flag     */

        /* Typography */
        line-height: 1.5;
        font-family: sans-serif;
        widows: 2;
        orphans: 2;
        word-wrap: break-word;
        overflow-wrap: break-word;
        hyphens: auto;

        /* Colors */
        color: black;
        background: white top left fixed no-repeat;
        background-size: 25px auto;
    }


/******************************************************************************/
/*                         Front Matter & Navigation                          */
/******************************************************************************/

/** Header ********************************************************************/

    div.head { margin-bottom: 1em }
    div.head hr { border-style: solid; }

    div.head h1 {
        font-weight: bold;
        margin: 0 0 .1em;
        font-size: 220%;
    }

    div.head h2 { margin-bottom: 1.5em;}

/** W3C Logo ******************************************************************/

    .head .logo {
        float: right;
        margin: 0.4rem 0 0.2rem .4rem;
    }

    .head img[src*="logos/W3C"] {
        display: block;
        border: solid #1a5e9a;
        border-width: .65rem .7rem .6rem;
        border-radius: .4rem;
        background: #1a5e9a;
        color: white;
        font-weight: bold;
    }

    .head a:hover > img[src*="logos/W3C"],
    .head a:focus > img[src*="logos/W3C"] {
        opacity: .8;
    }

    .head a:active > img[src*="logos/W3C"] {
        background: #c00;
        border-color: #c00;
    }

    /* see also additional rules in Link Styling section */

/** Copyright *****************************************************************/

    p.copyright,
    p.copyright small { font-size: small }

/** Back to Top / ToC Toggle **************************************************/

    @media print {
        #toc-nav {
            display: none;
        }
    }
    @media not print {
        #toc-nav {
            position: fixed;
            z-index: 2;
            bottom: 0; left: 0;
            margin: 0;
            min-width: 1.33em;
            border-top-right-radius: 2rem;
            box-shadow: 0 0 2px;
            font-size: 1.5em;
            color: black;
        }
        #toc-nav > a {
            display: block;
            white-space: nowrap;

            height: 1.33em;
            padding: .1em 0.3em;
            margin: 0;

            background: white;
            box-shadow: 0 0 2px;
            border: none;
            border-top-right-radius: 1.33em;
            background: white;
        }
        #toc-nav > #toc-jump {
            padding-bottom: 2em;
            margin-bottom: -1.9em;
        }

        #toc-nav > a:hover,
        #toc-nav > a:focus {
            background: #f8f8f8;
        }
        #toc-nav > a:not(:hover):not(:focus) {
            color: #707070;
        }

        /* statusbar gets in the way on keyboard focus; remove once browsers fix */
        #toc-nav > a[href="#toc"]:not(:hover):focus:last-child {
            padding-bottom: 1.5rem;
        }

        #toc-nav:not(:hover) > a:not(:focus) > span + span {
            /* Ideally this uses :focus-within on #toc-nav */
            display: none;
        }
        #toc-nav > a > span + span {
            padding-right: 0.2em;
        }

        #toc-toggle-inline {
            vertical-align: 0.05em;
            font-size: 80%;
            color: gray;
            color: hsla(203,20%,40%,.7);
            border-style: none;
            background: transparent;
            position: relative;
        }
        #toc-toggle-inline:hover:not(:active),
        #toc-toggle-inline:focus:not(:active) {
            text-shadow: 1px 1px silver;
            top: -1px;
            left: -1px;
        }

        #toc-nav :active {
            color: #C00;
        }
    }

/** ToC Sidebar ***************************************************************/

    /* Floating sidebar */
    @media screen {
        body.toc-sidebar #toc {
            position: fixed;
            top: 0; bottom: 0;
            left: 0;
            width: 23.5em;
            max-width: 80%;
            max-width: calc(100% - 2em - 26px);
            overflow: auto;
            padding: 0 1em;
            padding-left: 42px;
            padding-left: calc(1em + 26px);
            background: inherit;
            background-color: #f7f8f9;
            z-index: 1;
            box-shadow: -.1em 0 .25em rgba(0,0,0,.1) inset;
        }
        body.toc-sidebar #toc h2 {
            margin-top: .8rem;
            font-variant: small-caps;
            font-variant: all-small-caps;
            text-transform: lowercase;
            font-weight: bold;
            color: gray;
            color: hsla(203,20%,40%,.7);
        }
        body.toc-sidebar #toc-jump:not(:focus) {
            width: 0;
            height: 0;
            padding: 0;
            position: absolute;
            overflow: hidden;
        }
    }
    /* Hide main scroller when only the ToC is visible anyway */
    @media screen and (max-width: 28em) {
        body.toc-sidebar {
            overflow: hidden;
        }
    }

    /* Sidebar with its own space */
    @media screen and (min-width: 78em) {
        body:not(.toc-inline) #toc {
            position: fixed;
            top: 0; bottom: 0;
            left: 0;
            width: 23.5em;
            overflow: auto;
            padding: 0 1em;
            padding-left: 42px;
            padding-left: calc(1em + 26px);
            background: inherit;
            background-color: #f7f8f9;
            z-index: 1;
            box-shadow: -.1em 0 .25em rgba(0,0,0,.1) inset;
        }
        body:not(.toc-inline) #toc h2 {
            margin-top: .8rem;
            font-variant: small-caps;
            font-variant: all-small-caps;
            text-transform: lowercase;
            font-weight: bold;
            color: gray;
            color: hsla(203,20%,40%,.7);
        }

        body:not(.toc-inline) {
            padding-left: 29em;
        }
        /* See also Overflow section at the bottom */

        body:not(.toc-inline) #toc-jump:not(:focus) {
            width: 0;
            height: 0;
            padding: 0;
            position: absolute;
            overflow: hidden;
        }
    }
    @media screen and (min-width: 90em) {
        body:not(.toc-inline) {
            margin: 0 4em;
        }
    }

/******************************************************************************/
/*                                Sectioning                                  */
/******************************************************************************/

/** Headings ******************************************************************/

    h1, h2, h3, h4, h5, h6, dt {
        page-break-after: avoid;
        page-break-inside: avoid;
        font: 100% sans-serif;   /* Reset all font styling to clear out UA styles */
        font-family: inherit;    /* Inherit the font family. */
        line-height: 1.2;        /* Keep wrapped headings compact */
        hyphens: manual;         /* Hyphenated headings look weird */
    }

    h2, h3, h4, h5, h6 {
        margin-top: 3rem;
    }

    h1, h2, h3 {
        color: #005A9C;
        background: transparent;
    }

    h1 { font-size: 170%; }
    h2 { font-size: 140%; }
    h3 { font-size: 120%; }
    h4 { font-weight: bold; }
    h5 { font-style: italic; }
    h6 { font-variant: small-caps; }
    dt { font-weight: bold; }

/** Subheadings ***************************************************************/

    h1 + h2,
    #subtitle {
        /* #subtitle is a subtitle in an H2 under the H1 */
        margin-top: 0;
    }
    h2 + h3,
    h3 + h4,
    h4 + h5,
    h5 + h6 {
        margin-top: 1.2em; /* = 1 x line-height */
    }

/** Section divider ***********************************************************/

    :not(.head) > hr {
        font-size: 1.5em;
        text-align: center;
        margin: 1em auto;
        height: auto;
        border: transparent solid 0;
        background: transparent;
    }
    :not(.head) > hr::before {
        content: "\2727\2003\2003\2727\2003\2003\2727";
    }

/******************************************************************************/
/*                            Paragraphs and Lists                            */
/******************************************************************************/

    p {
        margin: 1em 0;
    }

    dd > p:first-child,
    li > p:first-child {
        margin-top: 0;
    }

    ul, ol {
        margin-left: 0;
        padding-left: 2em;
    }

    li {
        margin: 0.25em 0 0.5em;
        padding: 0;
    }

    dl dd {
        margin: 0 0 .5em 2em;
    }

    .head dd + dd { /* compact for header */
        margin-top: -.5em;
    }

    /* Style for algorithms */
    ol.algorithm ol:not(.algorithm),
    .algorithm > ol ol:not(.algorithm) {
     border-left: 0.5em solid #DEF;
    }

    /* Put nice boxes around each algorithm. */
    [data-algorithm]:not(.heading) {
      padding: .5em;
      border: thin solid #ddd; border-radius: .5em;
      margin: .5em calc(-0.5em - 1px);
    }
    [data-algorithm]:not(.heading) > :first-child {
      margin-top: 0;
    }
    [data-algorithm]:not(.heading) > :last-child {
      margin-bottom: 0;
    }

    /* Style for switch/case <dl>s */
    dl.switch > dd > ol.only,
    dl.switch > dd > .only > ol {
     margin-left: 0;
    }
    dl.switch > dd > ol.algorithm,
    dl.switch > dd > .algorithm > ol {
     margin-left: -2em;
    }
    dl.switch {
     padding-left: 2em;
    }
    dl.switch > dt {
     text-indent: -1.5em;
     margin-top: 1em;
    }
    dl.switch > dt + dt {
     margin-top: 0;
    }
    dl.switch > dt::before {
     content: '\21AA';
     padding: 0 0.5em 0 0;
     display: inline-block;
     width: 1em;
     text-align: right;
     line-height: 0.5em;
    }

/** Terminology Markup ********************************************************/


/******************************************************************************/
/*                                 Inline Markup                              */
/******************************************************************************/

/** Terminology Markup ********************************************************/
    dfn   { /* Defining instance */
        font-weight: bolder;
    }
    a > i { /* Instance of term */
        font-style: normal;
    }
    dt dfn code, code.idl {
        font-size: medium;
    }
    dfn var {
        font-style: normal;
    }

/** Change Marking ************************************************************/

    del { color: red;  text-decoration: line-through; }
    ins { color: #080; text-decoration: underline;    }

/** Miscellaneous improvements to inline formatting ***************************/

    sup {
        vertical-align: super;
        font-size: 80%
    }

/******************************************************************************/
/*                                    Code                                    */
/******************************************************************************/

/** General monospace/pre rules ***********************************************/

    pre, code, samp {
        font-family: Menlo, Consolas, "DejaVu Sans Mono", Monaco, monospace;
        font-size: .9em;
        page-break-inside: avoid;
        hyphens: none;
        text-transform: none;
    }
    pre code,
    code code {
        font-size: 100%;
    }

    pre {
        margin-top: 1em;
        margin-bottom: 1em;
        overflow: auto;
    }

/** Inline Code fragments *****************************************************/

  /* Do something nice. */

/******************************************************************************/
/*                                    Links                                   */
/******************************************************************************/

/** General Hyperlinks ********************************************************/

    /* We hyperlink a lot, so make it less intrusive */
    a[href] {
        color: #034575;
        text-decoration: none;
        border-bottom: 1px solid #707070;
        /* Need a bit of extending for it to look okay */
        padding: 0 1px 0;
        margin: 0 -1px 0;
    }
    a:visited {
        border-bottom-color: #BBB;
    }

    /* Use distinguishing colors when user is interacting with the link */
    a[href]:focus,
    a[href]:hover {
        background: #f8f8f8;
        background: rgba(75%, 75%, 75%, .25);
        border-bottom-width: 3px;
        margin-bottom: -2px;
    }
    a[href]:active {
        color: #C00;
        border-color: #C00;
    }

    /* Backout above styling for W3C logo */
    .head .logo,
    .head .logo a {
        border: none;
        text-decoration: none;
        background: transparent;
    }

/******************************************************************************/
/*                                    Images                                  */
/******************************************************************************/

    img {
        border-style: none;
    }

    /* For autogen numbers, add
       .caption::before, figcaption::before { content: "Figure " counter(figure) ". "; }
    */

    figure, .figure, .sidefigure {
        page-break-inside: avoid;
        text-align: center;
        margin: 2.5em 0;
    }
    .figure img,    .sidefigure img,    figure img,
    .figure object, .sidefigure object, figure object {
        max-width: 100%;
        margin: auto;
    }
    .figure pre, .sidefigure pre, figure pre {
        text-align: left;
        display: table;
        margin: 1em auto;
    }
    .figure table, figure table {
        margin: auto;
    }
    @media screen and (min-width: 20em) {
        .sidefigure {
            float: right;
            width: 50%;
            margin: 0 0 0.5em 0.5em
        }
    }
    .caption, figcaption, caption {
        font-style: italic;
        font-size: 90%;
    }
    .caption::before, figcaption::before, figcaption > .marker {
        font-weight: bold;
    }
    .caption, figcaption {
        counter-increment: figure;
    }

    /* DL list is indented 2em, but figure inside it is not */
    dd > .figure, dd > figure { margin-left: -2em }

/******************************************************************************/
/*                             Colored Boxes                                  */
/******************************************************************************/

    .issue, .note, .example, .assertion, .advisement, blockquote {
        padding: .5em;
        border: .5em;
        border-left-style: solid;
        page-break-inside: avoid;
    }
    span.issue, span.note {
        padding: .1em .5em .15em;
        border-right-style: solid;
    }

    .issue,
    .note,
    .example,
    .advisement,
    .assertion,
    blockquote {
        margin: 1em auto;
    }
    .note  > p:first-child,
    .issue > p:first-child,
    blockquote > :first-child {
        margin-top: 0;
    }
    blockquote > :last-child {
        margin-bottom: 0;
    }

/** Blockquotes ***************************************************************/

    blockquote {
        border-color: silver;
    }

/** Open issue ****************************************************************/

    .issue {
        border-color: #E05252;
        background: #FBE9E9;
        counter-increment: issue;
        overflow: auto;
    }
    .issue::before, .issue > .marker {
        text-transform: uppercase;
        color: #AE1E1E;
        padding-right: 1em;
        text-transform: uppercase;
    }
    /* Add .issue::before { content: "Issue " counter(issue) " "; } for autogen numbers,
       or use class="marker" to mark up the issue number in source. */

/** Example *******************************************************************/

    .example {
        border-color: #E0CB52;
        background: #FCFAEE;
        counter-increment: example;
        overflow: auto;
        clear: both;
    }
    .example::before, .example > .marker {
        text-transform: uppercase;
        color: #827017;
        min-width: 7.5em;
        display: block;
    }
    /* Add .example::before { content: "Example " counter(example) " "; } for autogen numbers,
       or use class="marker" to mark up the example number in source. */

/** Non-normative Note ********************************************************/

    .note {
        border-color: #52E052;
        background: #E9FBE9;
        overflow: auto;
    }

    .note::before, .note > .marker,
    details.note > summary::before,
    details.note > summary > .marker {
        text-transform: uppercase;
        display: block;
        color: hsl(120, 70%, 30%);
    }
    /* Add .note::before { content: "Note"; } for autogen label,
       or use class="marker" to mark up the label in source. */

    details.note > summary {
        display: block;
        color: hsl(120, 70%, 30%);
    }
    details.note[open] > summary {
        border-bottom: 1px silver solid;
    }

/** Assertion Box *************************************************************/
    /*  for assertions in algorithms */

    .assertion {
        border-color: #AAA;
        background: #EEE;
    }

/** Advisement Box ************************************************************/
    /*  for attention-grabbing normative statements */

    .advisement {
        border-color: orange;
        border-style: none solid;
        background: #FFEECC;
    }
    strong.advisement {
        display: block;
        text-align: center;
    }
    .advisement > .marker {
        color: #B35F00;
    }

/** Spec Obsoletion Notice ****************************************************/
    /* obnoxious obsoletion notice for older/abandoned specs. */

    details {
        display: block;
    }
    summary {
        font-weight: bolder;
    }

    .annoying-warning:not(details),
    details.annoying-warning:not([open]) > summary,
    details.annoying-warning[open] {
        background: #fdd;
        color: red;
        font-weight: bold;
        padding: .75em 1em;
        border: thick red;
        border-style: solid;
        border-radius: 1em;
    }
    .annoying-warning :last-child {
        margin-bottom: 0;
    }

@media not print {
    details.annoying-warning[open] {
        position: fixed;
        left: 1em;
        right: 1em;
        bottom: 1em;
        z-index: 1000;
    }
}

    details.annoying-warning:not([open]) > summary {
        text-align: center;
    }

/** Entity Definition Boxes ***************************************************/

    .def {
        padding: .5em 1em;
        background: #DEF;
        margin: 1.2em 0;
        border-left: 0.5em solid #8CCBF2;
    }

/******************************************************************************/
/*                                    Tables                                  */
/******************************************************************************/

    th, td {
        text-align: left;
        text-align: start;
    }

/** Property/Descriptor Definition Tables *************************************/

    table.def {
        /* inherits .def box styling, see above */
        width: 100%;
        border-spacing: 0;
    }

    table.def td,
    table.def th {
        padding: 0.5em;
        vertical-align: baseline;
        border-bottom: 1px solid #bbd7e9;
    }

    table.def > tbody > tr:last-child th,
    table.def > tbody > tr:last-child td {
        border-bottom: 0;
    }

    table.def th {
        font-style: italic;
        font-weight: normal;
        padding-left: 1em;
        width: 3em;
    }

    /* For when values are extra-complex and need formatting for readability */
    table td.pre {
        white-space: pre-wrap;
    }

    /* A footnote at the bottom of a def table */
    table.def           td.footnote {
        padding-top: 0.6em;
    }
    table.def           td.footnote::before {
        content: " ";
        display: block;
        height: 0.6em;
        width: 4em;
        border-top: thin solid;
    }

/** Data tables (and properly marked-up index tables) *************************/
    /*
         <table class="data"> highlights structural relationships in a table
         when correct markup is used (e.g. thead/tbody, th vs. td, scope attribute)

         Use class="complex data" for particularly complicated tables --
         (This will draw more lines: busier, but clearer.)

         Use class="long" on table cells with paragraph-like contents
         (This will adjust text alignment accordingly.)
         Alternately use class="longlastcol" on tables, to have the last column assume "long".
    */

    table {
        word-wrap: normal;
        overflow-wrap: normal;
        hyphens: manual;
    }

    table.data,
    table.index {
        margin: 1em auto;
        border-collapse: collapse;
        border: hidden;
        width: 100%;
    }
    table.data caption,
    table.index caption {
        max-width: 50em;
        margin: 0 auto 1em;
    }

    table.data td,  table.data th,
    table.index td, table.index th {
        padding: 0.5em 1em;
        border-width: 1px;
        border-color: silver;
        border-top-style: solid;
    }

    table.data thead td:empty {
        padding: 0;
        border: 0;
    }

    table.data  thead,
    table.index thead,
    table.data  tbody,
    table.index tbody {
        border-bottom: 2px solid;
    }

    table.data colgroup,
    table.index colgroup {
        border-left: 2px solid;
    }

    table.data  tbody th:first-child,
    table.index tbody th:first-child  {
        border-right: 2px solid;
        border-top: 1px solid silver;
        padding-right: 1em;
    }

    table.data th[colspan],
    table.data td[colspan] {
        text-align: center;
    }

    table.complex.data th,
    table.complex.data td {
        border: 1px solid silver;
        text-align: center;
    }

    table.data.longlastcol td:last-child,
    table.data td.long {
     vertical-align: baseline;
     text-align: left;
    }

    table.data img {
        vertical-align: middle;
    }


/*
Alternate table alignment rules

    table.data,
    table.index {
        text-align: center;
    }

    table.data  thead th[scope="row"],
    table.index thead th[scope="row"] {
        text-align: right;
    }

    table.data  tbody th:first-child,
    table.index tbody th:first-child  {
        text-align: right;
    }

Possible extra rowspan handling

    table.data  tbody th[rowspan]:not([rowspan='1']),
    table.index tbody th[rowspan]:not([rowspan='1']),
    table.data  tbody td[rowspan]:not([rowspan='1']),
    table.index tbody td[rowspan]:not([rowspan='1']) {
        border-left: 1px solid silver;
    }

    table.data  tbody th[rowspan]:first-child,
    table.index tbody th[rowspan]:first-child,
    table.data  tbody td[rowspan]:first-child,
    table.index tbody td[rowspan]:first-child{
        border-left: 0;
        border-right: 1px solid silver;
    }
*/

/******************************************************************************/
/*                                  Indices                                   */
/******************************************************************************/


/** Table of Contents *********************************************************/

    .toc a {
        /* More spacing; use padding to make it part of the click target. */
        padding-top: 0.1rem;
        /* Larger, more consistently-sized click target */
        display: block;
        /* Reverse color scheme */
        color: black;
        border-color: #3980B5;
        border-bottom-width: 3px !important;
        margin-bottom: 0px !important;
    }
    .toc a:visited {
        border-color: #054572;
    }
    .toc a:not(:focus):not(:hover) {
        /* Allow colors to cascade through from link styling */
        border-bottom-color: transparent;
    }

    .toc, .toc ol, .toc ul, .toc li {
        list-style: none; /* Numbers must be inlined into source */
        /* because generated content isn't search/selectable and markers can't do multilevel yet */
        margin:  0;
        padding: 0;
        line-height: 1.1rem; /* consistent spacing */
    }

    /* ToC not indented until third level, but font style & margins show hierarchy */
    .toc > li             { font-weight: bold;   }
    .toc > li li          { font-weight: normal; }
    .toc > li li li       { font-size:   95%;    }
    .toc > li li li li    { font-size:   90%;    }
    .toc > li li li li .secno { font-size: 85%; }
    .toc > li li li li li { font-size:   85%;    }
    .toc > li li li li li .secno { font-size: 100%; }

    /* @supports not (display:grid) { */
        .toc > li             { margin: 1.5rem 0;    }
        .toc > li li          { margin: 0.3rem 0;    }
        .toc > li li li       { margin-left: 2rem;   }

        /* Section numbers in a column of their own */
        .toc .secno {
            float: left;
            width: 4rem;
            white-space: nowrap;
        }

        .toc li {
            clear: both;
        }

        :not(li) > .toc              { margin-left:  5rem; }
        .toc .secno                  { margin-left: -5rem; }
        .toc > li li li .secno       { margin-left: -7rem; }
        .toc > li li li li .secno    { margin-left: -9rem; }
        .toc > li li li li li .secno { margin-left: -11rem; }

        /* Tighten up indentation in narrow ToCs */
        @media (max-width: 30em) {
            :not(li) > .toc              { margin-left:  4rem; }
            .toc .secno                  { margin-left: -4rem; }
            .toc > li li li              { margin-left:  1rem; }
            .toc > li li li .secno       { margin-left: -5rem; }
            .toc > li li li li .secno    { margin-left: -6rem; }
            .toc > li li li li li .secno { margin-left: -7rem; }
        }
    /* } */

    @supports (display:grid) {
        /* Use #toc over .toc to override non-@supports rules. */
        #toc {
            display: grid;
            align-content: start;
            grid-template-columns: auto 1fr;
            grid-column-gap: 1rem;
            column-gap: 1rem;
            grid-row-gap: .6rem;
            row-gap: .6rem;
        }
        #toc h2 {
            grid-column: 1 / -1;
            margin-bottom: 0;
        }
        #toc ol,
        #toc li,
        #toc a {
            display: contents;
            /* Switch <a> to subgrid when supported */
        }
        #toc span {
            margin: 0;
        }
        #toc > .toc > li > a > span {
            /* The spans of the top-level list,
               comprising the first items of each top-level section. */
            margin-top: 1.1rem;
        }
        #toc#toc .secno { /* Ugh, need more specificity to override base.css */
            grid-column: 1;
            width: auto;
            margin-left: 0;
        }
        #toc .content {
            grid-column: 2;
            width: auto;
            margin-right: 1rem;
        }
        #toc .content:hover {
            background: rgba(75%, 75%, 75%, .25);
            border-bottom: 3px solid #054572;
            margin-bottom: -3px;
        }
        #toc li li li .content {
            margin-left: 1rem;
        }
        #toc li li li li .content {
            margin-left: 2rem;
        }
    }


/** Index *********************************************************************/

    /* Index Lists: Layout */
    ul.index       { margin-left: 0; columns: 15em; text-indent: 1em hanging; }
    ul.index li    { margin-left: 0; list-style: none; break-inside: avoid; }
    ul.index li li { margin-left: 1em }
    ul.index dl    { margin-top: 0; }
    ul.index dt    { margin: .2em 0 .2em 20px;}
    ul.index dd    { margin: .2em 0 .2em 40px;}
    /* Index Lists: Typography */
    ul.index ul,
    ul.index dl { font-size: smaller; }
    @media not print {
        ul.index li span {
            white-space: nowrap;
            color: transparent; }
        ul.index li a:hover + span,
        ul.index li a:focus + span {
            color: #707070;
        }
    }

/** Index Tables *****************************************************/
    /* See also the data table styling section, which this effectively subclasses */

    table.index {
        font-size: small;
        border-collapse: collapse;
        border-spacing: 0;
        text-align: left;
        margin: 1em 0;
    }

    table.index td,
    table.index th {
        padding: 0.4em;
    }

    table.index tr:hover td:not([rowspan]),
    table.index tr:hover th:not([rowspan]) {
        background: #f7f8f9;
    }

    /* The link in the first column in the property table (formerly a TD) */
    table.index th:first-child a {
        font-weight: bold;
    }

/******************************************************************************/
/*                                    Print                                   */
/******************************************************************************/

    @media print {
        /* Pages have their own margins. */
        html {
            margin: 0;
        }
        /* Serif for print. */
        body {
            font-family: serif;
        }
    }
    @page {
        margin: 1.5cm 1.1cm;
    }

/******************************************************************************/
/*                                    Legacy                                  */
/******************************************************************************/

    /* This rule is inherited from past style sheets. No idea what it's for. */
    .hide { display: none }



/******************************************************************************/
/*                             Overflow Control                               */
/******************************************************************************/

    .figure .caption, .sidefigure .caption, figcaption {
        /* in case figure is overlarge, limit caption to 50em */
        max-width: 50rem;
        margin-left: auto;
        margin-right: auto;
    }
    .overlarge > table {
        /* limit preferred width of table */
        max-width: 50em;
        margin-left: auto;
        margin-right: auto;
    }

    @media (min-width: 55em) {
        .overlarge {
            margin-left: calc(13px + 26.5rem - 50vw);
            margin-right: calc(13px + 26.5rem - 50vw);
            max-width: none;
        }
    }
    @media screen and (min-width: 78em) {
        body:not(.toc-inline) .overlarge {
            /* 30.5em body padding 50em content area */
            margin-left: calc(40em - 50vw) !important;
            margin-right: calc(40em - 50vw) !important;
        }
    }
    @media screen and (min-width: 90em) {
        body:not(.toc-inline) .overlarge {
            /* 4em html margin 30.5em body padding 50em content area */
            margin-left: 0 !important;
            margin-right: calc(84.5em - 100vw) !important;
        }
    }

    @media not print {
        .overlarge {
            overflow-x: auto;
            /* See Lea Verou's explanation background-attachment:
             * http://lea.verou.me/2012/04/background-attachment-local/
             *
            background: top left  / 4em 100% linear-gradient(to right,  #ffffff, rgba(255, 255, 255, 0)) local,
                        top right / 4em 100% linear-gradient(to left, #ffffff, rgba(255, 255, 255, 0)) local,
                        top left  / 1em 100% linear-gradient(to right,  #c3c3c5, rgba(195, 195, 197, 0)) scroll,
                        top right / 1em 100% linear-gradient(to left, #c3c3c5, rgba(195, 195, 197, 0)) scroll,
                        white;
            background-repeat: no-repeat;
            */
        }
    }
</style>
  <link href="https://www.w3.org/StyleSheets/TR/2016/W3C-ED" rel="stylesheet" type="text/css">
  <meta content="Bikeshed version a816d78e14132d4d4d2ee44ccaf1b8bc90ac75d5" name="generator">
  <link href="https://heycam.github.io/webidl/" rel="canonical">
<style>
        pre.set {
          font-size: 80%;
        }

        .syntax .n,
        .syntax .nv {
          font-style: italic;
        }

        .mute,
        .deprecated,
        .deprecated a,
        .deprecated code {
          color: #9D937D;
        }

        .deprecated a:visited,
        .deprecated a {
            border-bottom-color: #9D937D;
        }


        emu-val {
            font-weight: bold;
        }

        emu-nt {
            font-family: sans-serif;
            font-style: italic;
            white-space: nowrap;
        }

        emu-t {
            font-family: Menlo, Consolas, "DejaVu Sans Mono", Monaco, monospace;
            font-weight: bold;
            white-space: nowrap;
        }

        emu-t.regex {
            font-family: sans-serif;
            font-weight: bold;
        }

        emu-t a[href],
        emu-nt a[href] {
            color: inherit;
            border-bottom: 1px solid transparent;
        }

        emu-t a[href]:focus,
        emu-nt a[href]:focus,
        emu-t a[href]:hover,
        emu-nt a[href]:hover {
            background: #f8f8f8;
            background: rgba(75%, 75%, 75%, .25);
            border-bottom: 3px solid #707070;
            margin-bottom: -2px;
        }

        /* start bug fix, see: https://github.com/tobie/webidl/issues/24 */
        pre.grammar {
            padding-bottom: 1px
        }
        /* end bug fix */

        dt p {
            display: inline;
        }

        .char {
            font-size: 85%
        }

        #distinguishable-table {
          font-size: 80%;
          border-collapse: collapse;
          width: auto;
        }

        #distinguishable-table th {
          text-align: right;
        }

        #distinguishable-table tr:first-child th {
          white-space: nowrap;
          text-align: center;
        }

        #distinguishable-table .belowdiagonal {
          background: #ddd;
        }

        #distinguishable-table td {
          text-align: center;
          padding: 5px 10px;
        }

        .csstransforms #distinguishable-table tr:first-child th {
          text-align: left;
          border: none;
          height: 100px;
          padding: 0;
        }

        .csstransforms #distinguishable-table td {
          text-align: center;
          width: 30px;
          padding: 10px 5px;
          height: 19px
        }

        /* Firefox needs the extra DIV for some reason, otherwise the text disappears if you rotate */
        .csstransforms #distinguishable-table tr:first-child th div {
          -webkit-transform: translate(26px, 31px) rotate(315deg);
          transform: translate(26px, 31px) rotate(315deg);
          width: 30px;
        }

        .csstransforms #distinguishable-table tr:first-child th div span {
          border-bottom: 1px solid #ccc;
          padding: 5px 10px;
          display: block;
          min-width: 120px;
          text-align: left
        }

        .csstransforms #distinguishable-table tr:first-child th:last-child div span {
          border-bottom: none;
        }

        #toc .current,
        #toc .current-parent {
          border-right-width: 3px;
          border-right-style: solid;
          border-right-color: #3980B5;
        }

        #toc .current {
          background: rgba(75%, 75%, 75%, .25);
          border-right-color: #054572;
        }
</style>
<style>/* style-md-lists */

/* This is a weird hack for me not yet following the commonmark spec
   regarding paragraph and lists. */
[data-md] > :first-child {
    margin-top: 0;
}
[data-md] > :last-child {
    margin-bottom: 0;
}</style>
<style>/* style-selflinks */

.heading, .issue, .note, .example, li, dt {
    position: relative;
}
a.self-link {
    position: absolute;
    top: 0;
    left: calc(-1 * (3.5rem - 26px));
    width: calc(3.5rem - 26px);
    height: 2em;
    text-align: center;
    border: none;
    transition: opacity .2s;
    opacity: .5;
}
a.self-link:hover {
    opacity: 1;
}
.heading > a.self-link {
    font-size: 83%;
}
li > a.self-link {
    left: calc(-1 * (3.5rem - 26px) - 2em);
}
dfn > a.self-link {
    top: auto;
    left: auto;
    opacity: 0;
    width: 1.5em;
    height: 1.5em;
    background: gray;
    color: white;
    font-style: normal;
    transition: opacity .2s, background-color .2s, color .2s;
}
dfn:hover > a.self-link {
    opacity: 1;
}
dfn > a.self-link:hover {
    color: black;
}

a.self-link::before            { content: "¶"; }
.heading > a.self-link::before { content: "§"; }
dfn > a.self-link::before      { content: "#"; }</style>
<style>/* style-counters */

body {
    counter-reset: example figure issue;
}
.issue {
    counter-increment: issue;
}
.issue:not(.no-marker)::before {
    content: "Issue " counter(issue);
}

.example {
    counter-increment: example;
}
.example:not(.no-marker)::before {
    content: "Example " counter(example);
}
.invalid.example:not(.no-marker)::before,
.illegal.example:not(.no-marker)::before {
    content: "Invalid Example" counter(example);
}

figcaption {
    counter-increment: figure;
}
figcaption:not(.no-marker)::before {
    content: "Figure " counter(figure) " ";
}</style>
<style>/* style-var-click-highlighting */

    var { cursor: pointer; }
    var.selected0 { background-color: #F4D200; box-shadow: 0 0 0 2px #F4D200; }
    var.selected1 { background-color: #FF87A2; box-shadow: 0 0 0 2px #FF87A2; }
    var.selected2 { background-color: #96E885; box-shadow: 0 0 0 2px #96E885; }
    var.selected3 { background-color: #3EEED2; box-shadow: 0 0 0 2px #3EEED2; }
    var.selected4 { background-color: #EACFB6; box-shadow: 0 0 0 2px #EACFB6; }
    var.selected5 { background-color: #82DDFF; box-shadow: 0 0 0 2px #82DDFF; }
    var.selected6 { background-color: #FFBCF2; box-shadow: 0 0 0 2px #FFBCF2; }
    </style>
<style>/* style-autolinks */

.css.css, .property.property, .descriptor.descriptor {
    color: #005a9c;
    font-size: inherit;
    font-family: inherit;
}
.css::before, .property::before, .descriptor::before {
    content: "‘";
}
.css::after, .property::after, .descriptor::after {
    content: "’";
}
.property, .descriptor {
    /* Don't wrap property and descriptor names */
    white-space: nowrap;
}
.type { /* CSS value <type> */
    font-style: italic;
}
pre .property::before, pre .property::after {
    content: "";
}
[data-link-type="property"]::before,
[data-link-type="propdesc"]::before,
[data-link-type="descriptor"]::before,
[data-link-type="value"]::before,
[data-link-type="function"]::before,
[data-link-type="at-rule"]::before,
[data-link-type="selector"]::before,
[data-link-type="maybe"]::before {
    content: "‘";
}
[data-link-type="property"]::after,
[data-link-type="propdesc"]::after,
[data-link-type="descriptor"]::after,
[data-link-type="value"]::after,
[data-link-type="function"]::after,
[data-link-type="at-rule"]::after,
[data-link-type="selector"]::after,
[data-link-type="maybe"]::after {
    content: "’";
}

[data-link-type].production::before,
[data-link-type].production::after,
.prod [data-link-type]::before,
.prod [data-link-type]::after {
    content: "";
}

[data-link-type=element],
[data-link-type=element-attr] {
    font-family: Menlo, Consolas, "DejaVu Sans Mono", monospace;
    font-size: .9em;
}
[data-link-type=element]::before { content: "<" }
[data-link-type=element]::after  { content: ">" }

[data-link-type=biblio] {
    white-space: pre;
}</style>
<style>/* style-dfn-panel */

.dfn-panel {
    position: absolute;
    z-index: 35;
    height: auto;
    width: -webkit-fit-content;
    width: fit-content;
    max-width: 300px;
    max-height: 500px;
    overflow: auto;
    padding: 0.5em 0.75em;
    font: small Helvetica Neue, sans-serif, Droid Sans Fallback;
    background: #DDDDDD;
    color: black;
    border: outset 0.2em;
}
.dfn-panel:not(.on) { display: none; }
.dfn-panel * { margin: 0; padding: 0; text-indent: 0; }
.dfn-panel > b { display: block; }
.dfn-panel a { color: black; }
.dfn-panel a:not(:hover) { text-decoration: none !important; border-bottom: none !important; }
.dfn-panel > b + b { margin-top: 0.25em; }
.dfn-panel ul { padding: 0; }
.dfn-panel li { list-style: inside; }
.dfn-panel.activated {
    display: inline-block;
    position: fixed;
    left: .5em;
    bottom: 2em;
    margin: 0 auto;
    max-width: calc(100vw - 1.5em - .4em - .5em);
    max-height: 30vh;
}

.dfn-paneled { cursor: pointer; }
</style>
<style>/* style-syntax-highlighting */
pre.idl.highlight { color: #708090; }
.highlight:not(.idl) { background: hsl(24, 20%, 95%); }
code.highlight { padding: .1em; border-radius: .3em; }
pre.highlight, pre > code.highlight { display: block; padding: 1em; margin: .5em 0; overflow: auto; border-radius: 0; }
c-[a] { color: #990055 } /* Keyword.Declaration */
c-[b] { color: #990055 } /* Keyword.Type */
c-[c] { color: #708090 } /* Comment */
c-[d] { color: #708090 } /* Comment.Multiline */
c-[e] { color: #0077aa } /* Name.Attribute */
c-[f] { color: #669900 } /* Name.Tag */
c-[g] { color: #222222 } /* Name.Variable */
c-[k] { color: #990055 } /* Keyword */
c-[l] { color: #000000 } /* Literal */
c-[m] { color: #000000 } /* Literal.Number */
c-[n] { color: #0077aa } /* Name */
c-[o] { color: #999999 } /* Operator */
c-[p] { color: #999999 } /* Punctuation */
c-[s] { color: #a67f59 } /* Literal.String */
c-[t] { color: #a67f59 } /* Literal.String.Single */
c-[u] { color: #a67f59 } /* Literal.String.Double */
c-[cp] { color: #708090 } /* Comment.Preproc */
c-[c1] { color: #708090 } /* Comment.Single */
c-[cs] { color: #708090 } /* Comment.Special */
c-[kc] { color: #990055 } /* Keyword.Constant */
c-[kn] { color: #990055 } /* Keyword.Namespace */
c-[kp] { color: #990055 } /* Keyword.Pseudo */
c-[kr] { color: #990055 } /* Keyword.Reserved */
c-[ld] { color: #000000 } /* Literal.Date */
c-[nc] { color: #0077aa } /* Name.Class */
c-[no] { color: #0077aa } /* Name.Constant */
c-[nd] { color: #0077aa } /* Name.Decorator */
c-[ni] { color: #0077aa } /* Name.Entity */
c-[ne] { color: #0077aa } /* Name.Exception */
c-[nf] { color: #0077aa } /* Name.Function */
c-[nl] { color: #0077aa } /* Name.Label */
c-[nn] { color: #0077aa } /* Name.Namespace */
c-[py] { color: #0077aa } /* Name.Property */
c-[ow] { color: #999999 } /* Operator.Word */
c-[mb] { color: #000000 } /* Literal.Number.Bin */
c-[mf] { color: #000000 } /* Literal.Number.Float */
c-[mh] { color: #000000 } /* Literal.Number.Hex */
c-[mi] { color: #000000 } /* Literal.Number.Integer */
c-[mo] { color: #000000 } /* Literal.Number.Oct */
c-[sb] { color: #a67f59 } /* Literal.String.Backtick */
c-[sc] { color: #a67f59 } /* Literal.String.Char */
c-[sd] { color: #a67f59 } /* Literal.String.Doc */
c-[se] { color: #a67f59 } /* Literal.String.Escape */
c-[sh] { color: #a67f59 } /* Literal.String.Heredoc */
c-[si] { color: #a67f59 } /* Literal.String.Interpol */
c-[sx] { color: #a67f59 } /* Literal.String.Other */
c-[sr] { color: #a67f59 } /* Literal.String.Regex */
c-[ss] { color: #a67f59 } /* Literal.String.Symbol */
c-[vc] { color: #0077aa } /* Name.Variable.Class */
c-[vg] { color: #0077aa } /* Name.Variable.Global */
c-[vi] { color: #0077aa } /* Name.Variable.Instance */
c-[il] { color: #000000 } /* Literal.Number.Integer.Long */
</style>
 </head><body class="h-entry">
  <div class="head">
   <p data-fill-with="logo"><a class="logo" href="https://www.w3.org/"> <img alt="W3C" height="48" src="https://www.w3.org/StyleSheets/TR/2016/logos/W3C" width="72"> </a> </p>
   <h1 class="p-name no-ref" id="title">Web IDL</h1>
   <h2 class="no-num no-toc no-ref heading settled" id="subtitle"><span class="content">Editor’s Draft, <time class="dt-updated" datetime="2018-08-20">20 August 2018</time></span></h2>
   <div data-fill-with="spec-metadata">
    <dl>
     <dt>This version:
     </dt><dd><a class="u-url" href="https://heycam.github.io/webidl/">https://heycam.github.io/webidl/</a>
     </dd><dt>Feedback:
     </dt><dd><span><a href="mailto:public-script-coord@w3.org?subject=%5BWebIDL%5D%20YOUR%20TOPIC%20HERE">public-script-coord@w3.org</a> with subject line “<kbd>[WebIDL] <i data-lt="">… message topic …</i></kbd>” (<a href="https://lists.w3.org/Archives/Public/public-script-coord/" rel="discussion">archives</a>)</span>
     </dd><dd><a href="https://github.com/heycam/webidl">GitHub</a> (<a href="https://github.com/heycam/webidl/issues/new">new issue</a>, <a href="https://github.com/heycam/webidl/issues">open issues</a>, <a href="https://www.w3.org/Bugs/Public/buglist.cgi?product=WebAppsWG&amp;component=WebIDL&amp;resolution=---">legacy bug tracker</a>)
     </dd><dt class="editor">Editors:
     </dt><dd class="editor p-author h-card vcard"><a class="p-name fn u-url url" href="http://mcc.id.au/">Cameron McCormack</a> (<span class="p-org org">Mozilla Corporation</span>) <a class="u-email email" href="mailto:cam@mcc.id.au">cam@mcc.id.au</a>
     </dd><dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:bzbarsky@mit.edu">Boris Zbarsky</a> (<span class="p-org org">Mozilla Corporation</span>)
     </dd><dd class="editor p-author h-card vcard"><a class="p-name fn u-url url" href="http://tobie.me">Tobie Langel</a> <a class="u-email email" href="mailto:tobie@codespeaks.com">tobie@codespeaks.com</a>
    </dd></dl>
   </div>
   <div data-fill-with="warning"></div>
   <p class="copyright" data-fill-with="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 2018 <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup> (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>, <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>, <a href="http://www.keio.ac.jp/">Keio</a>, <a href="http://ev.buaa.edu.cn/">Beihang</a>). W3C <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a href="http://www.w3.org/Consortium/Legal/2015/copyright-software-and-document" rel="license">permissive document license</a> rules apply. </p>
   <hr title="Separator for header">
  </div>
  <div class="p-summary" data-fill-with="abstract">
   <h2 class="no-num no-toc no-ref heading settled" id="abstract"><span class="content">Abstract</span></h2>
   <p>This document defines an interface definition language, Web IDL,

that can be used to describe interfaces that are intended to be
implemented in web browsers. Web IDL is an IDL variant with a
number of features that allow the behavior of common script objects in
the web platform to be specified more readily. How interfaces
described with Web IDL correspond to constructs within ECMAScript
execution environments is also detailed in this document.
It is expected that this document acts
as a guide to implementors of already-published specifications,
and that newly published specifications reference this
document to ensure conforming implementations of interfaces
are interoperable.</p>
  </div>
  <h2 class="no-num no-toc no-ref heading settled" id="status"><span class="content">Status of this document</span></h2>
  <div data-fill-with="status">
   <p> This is a public copy of the editors’ draft.
  It is provided for discussion only and may change at any moment.
  Its publication here does not imply endorsement of its contents
  by <abbr title="World Wide Web Consortium">W3C</abbr>.
  Don’t cite this document other than as work in progress. </p>
   <p> <strong>Changes to this document may be tracked at <a href="https://github.com/heycam/webidl">https://github.com/heycam/webidl</a>.</strong> </p>
   <p> <a href="https://github.com/heycam/webidl/issues">GitHub issues</a> are preferred for discussion of this specification.
  There is also a <a href="https://lists.w3.org/Archives/Public/public-script-coord/">historical mailing-list archive</a>. </p>
   <p> This document was produced by the <a href="https://www.w3.org/WebPlatform/WG/">Web Platform Working Group</a>. </p>
   <p> This document was produced by a group operating under the <a href="https://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>. <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a href="https://www.w3.org/2004/01/pp-impl/83482/status" rel="disclosure">public list of any patent disclosures</a> made in connection with the deliverables of the group;
  that page also includes instructions for disclosing a patent.
  An individual who has actual knowledge of a patent which the individual believes contains <a href="https://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the information in accordance with <a href="https://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>. </p>
   <p> This document is governed by the <a href="https://www.w3.org/2017/Process-20170301/" id="w3c_process_revision①">1 March 2017 <abbr title="World Wide Web Consortium">W3C</abbr> Process Document</a>. </p>
   <p></p>
  </div>
  <div data-fill-with="at-risk"></div>
  <nav data-fill-with="table-of-contents" id="toc">
   <h2 class="no-num no-toc no-ref" id="contents">Table of Contents</h2>
   <ol class="toc" role="directory">
    <li><a href="#introduction"><span class="secno">1</span> <span class="content">Introduction</span></a>
    </li><li>
     <a href="#idl"><span class="secno">2</span> <span class="content">Interface definition language</span></a>
     <ol class="toc">
      <li><a href="#idl-names"><span class="secno">2.1</span> <span class="content">Names</span></a>
      </li><li><a href="#idl-interfaces"><span class="secno">2.2</span> <span class="content">Interfaces</span></a>
      </li><li>
       <a href="#idl-interface-mixins"><span class="secno">2.3</span> <span class="content">Interface mixins</span></a>
       <ol class="toc">
        <li><a href="#using-mixins-and-partials"><span class="secno">2.3.1</span> <span class="content">Using mixins and partials</span></a>
       </li></ol>
      </li><li>
       <a href="#idl-members"><span class="secno">2.4</span> <span class="content">Members</span></a>
       <ol class="toc">
        <li><a href="#idl-constants"><span class="secno">2.4.1</span> <span class="content">Constants</span></a>
        </li><li><a href="#idl-attributes"><span class="secno">2.4.2</span> <span class="content">Attributes</span></a>
        </li><li>
         <a href="#idl-operations"><span class="secno">2.4.3</span> <span class="content">Operations</span></a>
         <ol class="toc">
          <li><a href="#idl-tojson-operation"><span class="secno">2.4.3.1</span> <span class="content">toJSON</span></a>
         </li></ol>
        </li><li>
         <a href="#idl-special-operations"><span class="secno">2.4.4</span> <span class="content">Special operations</span></a>
         <ol class="toc">
          <li><a href="#idl-stringifiers"><span class="secno">2.4.4.1</span> <span class="content">Stringifiers</span></a>
          </li><li><a href="#idl-indexed-properties"><span class="secno">2.4.4.2</span> <span class="content">Indexed properties</span></a>
          </li><li><a href="#idl-named-properties"><span class="secno">2.4.4.3</span> <span class="content">Named properties</span></a>
         </li></ol>
        </li><li><a href="#idl-static-attributes-and-operations"><span class="secno">2.4.5</span> <span class="content">Static attributes and operations</span></a>
        </li><li>
         <a href="#idl-overloading"><span class="secno">2.4.6</span> <span class="content">Overloading</span></a>
         <ol class="toc">
          <li><a href="#idl-overloading-vs-union"><span class="secno">2.4.6.1</span> <span class="content">Overloading vs. union types</span></a>
         </li></ol>
        </li><li><a href="#idl-iterable"><span class="secno">2.4.7</span> <span class="content">Iterable declarations</span></a>
        </li><li><a href="#idl-maplike"><span class="secno">2.4.8</span> <span class="content">Maplike declarations</span></a>
        </li><li><a href="#idl-setlike"><span class="secno">2.4.9</span> <span class="content">Setlike declarations</span></a>
       </li></ol>
      </li><li><a href="#idl-namespaces"><span class="secno">2.5</span> <span class="content">Namespaces</span></a>
      </li><li><a href="#idl-dictionaries"><span class="secno">2.6</span> <span class="content">Dictionaries</span></a>
      </li><li>
       <a href="#idl-exceptions"><span class="secno">2.7</span> <span class="content">Exceptions</span></a>
       <ol class="toc">
        <li><a href="#idl-DOMException-error-names"><span class="secno">2.7.1</span> <span class="content">Error names</span></a>
       </li></ol>
      </li><li><a href="#idl-enums"><span class="secno">2.8</span> <span class="content">Enumerations</span></a>
      </li><li><a href="#idl-callback-functions"><span class="secno">2.9</span> <span class="content">Callback functions</span></a>
      </li><li><a href="#idl-typedefs"><span class="secno">2.10</span> <span class="content">Typedefs</span></a>
      </li><li><a href="#idl-objects"><span class="secno">2.11</span> <span class="content">Objects implementing interfaces</span></a>
      </li><li>
       <a href="#idl-types"><span class="secno">2.12</span> <span class="content">Types</span></a>
       <ol class="toc">
        <li><a href="#idl-any"><span class="secno">2.12.1</span> <span class="content">any</span></a>
        </li><li><a href="#idl-boolean"><span class="secno">2.12.2</span> <span class="content">boolean</span></a>
        </li><li><a href="#idl-byte"><span class="secno">2.12.3</span> <span class="content">byte</span></a>
        </li><li><a href="#idl-octet"><span class="secno">2.12.4</span> <span class="content">octet</span></a>
        </li><li><a href="#idl-short"><span class="secno">2.12.5</span> <span class="content">short</span></a>
        </li><li><a href="#idl-unsigned-short"><span class="secno">2.12.6</span> <span class="content">unsigned short</span></a>
        </li><li><a href="#idl-long"><span class="secno">2.12.7</span> <span class="content">long</span></a>
        </li><li><a href="#idl-unsigned-long"><span class="secno">2.12.8</span> <span class="content">unsigned long</span></a>
        </li><li><a href="#idl-long-long"><span class="secno">2.12.9</span> <span class="content">long long</span></a>
        </li><li><a href="#idl-unsigned-long-long"><span class="secno">2.12.10</span> <span class="content">unsigned long long</span></a>
        </li><li><a href="#idl-float"><span class="secno">2.12.11</span> <span class="content">float</span></a>
        </li><li><a href="#idl-unrestricted-float"><span class="secno">2.12.12</span> <span class="content">unrestricted float</span></a>
        </li><li><a href="#idl-double"><span class="secno">2.12.13</span> <span class="content">double</span></a>
        </li><li><a href="#idl-unrestricted-double"><span class="secno">2.12.14</span> <span class="content">unrestricted double</span></a>
        </li><li><a href="#idl-DOMString"><span class="secno">2.12.15</span> <span class="content">DOMString</span></a>
        </li><li><a href="#idl-ByteString"><span class="secno">2.12.16</span> <span class="content">ByteString</span></a>
        </li><li><a href="#idl-USVString"><span class="secno">2.12.17</span> <span class="content">USVString</span></a>
        </li><li><a href="#idl-object"><span class="secno">2.12.18</span> <span class="content">object</span></a>
        </li><li><a href="#idl-symbol"><span class="secno">2.12.19</span> <span class="content">symbol</span></a>
        </li><li><a href="#idl-interface"><span class="secno">2.12.20</span> <span class="content">Interface types</span></a>
        </li><li><a href="#idl-dictionary"><span class="secno">2.12.21</span> <span class="content">Dictionary types</span></a>
        </li><li><a href="#idl-enumeration"><span class="secno">2.12.22</span> <span class="content">Enumeration types</span></a>
        </li><li><a href="#idl-callback-function"><span class="secno">2.12.23</span> <span class="content">Callback function types</span></a>
        </li><li><a href="#idl-nullable-type"><span class="secno">2.12.24</span> <span class="content">Nullable types — <var>T</var>?</span></a>
        </li><li><a href="#idl-sequence"><span class="secno">2.12.25</span> <span class="content">Sequence types — sequence&lt;<var>T</var>&gt;</span></a>
        </li><li><a href="#idl-record"><span class="secno">2.12.26</span> <span class="content">Record types — record&lt;<var>K</var>, <var>V</var>&gt;</span></a>
        </li><li><a href="#idl-promise"><span class="secno">2.12.27</span> <span class="content">Promise types — Promise&lt;<var>T</var>&gt;</span></a>
        </li><li><a href="#idl-union"><span class="secno">2.12.28</span> <span class="content">Union types</span></a>
        </li><li><a href="#idl-annotated-types"><span class="secno">2.12.29</span> <span class="content">Annotated types</span></a>
        </li><li><a href="#idl-Error"><span class="secno">2.12.30</span> <span class="content">Error</span></a>
        </li><li><a href="#idl-buffer-source-types"><span class="secno">2.12.31</span> <span class="content">Buffer source types</span></a>
        </li><li><a href="#idl-frozen-array"><span class="secno">2.12.32</span> <span class="content">Frozen array types — FrozenArray&lt;<var>T</var>&gt;</span></a>
       </li></ol>
      </li><li><a href="#idl-extended-attributes"><span class="secno">2.13</span> <span class="content">Extended attributes</span></a>
     </li></ol>
    </li><li>
     <a href="#ecmascript-binding"><span class="secno">3</span> <span class="content">ECMAScript binding</span></a>
     <ol class="toc">
      <li><a href="#es-environment"><span class="secno">3.1</span> <span class="content">ECMAScript environment</span></a>
      </li><li>
       <a href="#es-type-mapping"><span class="secno">3.2</span> <span class="content">ECMAScript type mapping</span></a>
       <ol class="toc">
        <li><a href="#es-any"><span class="secno">3.2.1</span> <span class="content">any</span></a>
        </li><li><a href="#es-void"><span class="secno">3.2.2</span> <span class="content">void</span></a>
        </li><li><a href="#es-boolean"><span class="secno">3.2.3</span> <span class="content">boolean</span></a>
        </li><li>
         <a href="#es-integer-types"><span class="secno">3.2.4</span> <span class="content">Integer types</span></a>
         <ol class="toc">
          <li><a href="#es-byte"><span class="secno">3.2.4.1</span> <span class="content">byte</span></a>
          </li><li><a href="#es-octet"><span class="secno">3.2.4.2</span> <span class="content">octet</span></a>
          </li><li><a href="#es-short"><span class="secno">3.2.4.3</span> <span class="content">short</span></a>
          </li><li><a href="#es-unsigned-short"><span class="secno">3.2.4.4</span> <span class="content">unsigned short</span></a>
          </li><li><a href="#es-long"><span class="secno">3.2.4.5</span> <span class="content">long</span></a>
          </li><li><a href="#es-unsigned-long"><span class="secno">3.2.4.6</span> <span class="content">unsigned long</span></a>
          </li><li><a href="#es-long-long"><span class="secno">3.2.4.7</span> <span class="content">long long</span></a>
          </li><li><a href="#es-unsigned-long-long"><span class="secno">3.2.4.8</span> <span class="content">unsigned long long</span></a>
          </li><li><a href="#es-integer-types-abstract-ops"><span class="secno">3.2.4.9</span> <span class="content">Abstract operations</span></a>
         </li></ol>
        </li><li><a href="#es-float"><span class="secno">3.2.5</span> <span class="content">float</span></a>
        </li><li><a href="#es-unrestricted-float"><span class="secno">3.2.6</span> <span class="content">unrestricted float</span></a>
        </li><li><a href="#es-double"><span class="secno">3.2.7</span> <span class="content">double</span></a>
        </li><li><a href="#es-unrestricted-double"><span class="secno">3.2.8</span> <span class="content">unrestricted double</span></a>
        </li><li><a href="#es-DOMString"><span class="secno">3.2.9</span> <span class="content">DOMString</span></a>
        </li><li><a href="#es-ByteString"><span class="secno">3.2.10</span> <span class="content">ByteString</span></a>
        </li><li><a href="#es-USVString"><span class="secno">3.2.11</span> <span class="content">USVString</span></a>
        </li><li><a href="#es-object"><span class="secno">3.2.12</span> <span class="content">object</span></a>
        </li><li><a href="#es-symbol"><span class="secno">3.2.13</span> <span class="content">symbol</span></a>
        </li><li><a href="#es-interface"><span class="secno">3.2.14</span> <span class="content">Interface types</span></a>
        </li><li><a href="#es-dictionary"><span class="secno">3.2.15</span> <span class="content">Dictionary types</span></a>
        </li><li><a href="#es-enumeration"><span class="secno">3.2.16</span> <span class="content">Enumeration types</span></a>
        </li><li><a href="#es-callback-function"><span class="secno">3.2.17</span> <span class="content">Callback function types</span></a>
        </li><li><a href="#es-nullable-type"><span class="secno">3.2.18</span> <span class="content">Nullable types — <var>T</var>?</span></a>
        </li><li>
         <a href="#es-sequence"><span class="secno">3.2.19</span> <span class="content">Sequences — sequence&lt;<var>T</var>&gt;</span></a>
         <ol class="toc">
          <li><a href="#create-sequence-from-iterable"><span class="secno">3.2.19.1</span> <span class="content">Creating a sequence from an iterable</span></a>
         </li></ol>
        </li><li><a href="#es-record"><span class="secno">3.2.20</span> <span class="content">Records — record&lt;<var>K</var>, <var>V</var>&gt;</span></a>
        </li><li><a href="#es-promise"><span class="secno">3.2.21</span> <span class="content">Promise types — Promise&lt;<var>T</var>&gt;</span></a>
        </li><li><a href="#es-union"><span class="secno">3.2.22</span> <span class="content">Union types</span></a>
        </li><li><a href="#es-Error"><span class="secno">3.2.23</span> <span class="content">Error</span></a>
        </li><li><a href="#es-DOMException"><span class="secno">3.2.24</span> <span class="content">DOMException</span></a>
        </li><li><a href="#es-buffer-source-types"><span class="secno">3.2.25</span> <span class="content">Buffer source types</span></a>
        </li><li>
         <a href="#es-frozen-array"><span class="secno">3.2.26</span> <span class="content">Frozen arrays — FrozenArray&lt;<var>T</var>&gt;</span></a>
         <ol class="toc">
          <li><a href="#create-frozen-array-from-iterable"><span class="secno">3.2.26.1</span> <span class="content">Creating a frozen array from an iterable</span></a>
         </li></ol>
       </li></ol>
      </li><li>
       <a href="#es-extended-attributes"><span class="secno">3.3</span> <span class="content">ECMAScript-specific extended attributes</span></a>
       <ol class="toc">
        <li><a href="#AllowShared"><span class="secno">3.3.1</span> <span class="content">[AllowShared]</span></a>
        </li><li><a href="#Clamp"><span class="secno">3.3.2</span> <span class="content">[Clamp]</span></a>
        </li><li><a href="#Constructor"><span class="secno">3.3.3</span> <span class="content">[Constructor]</span></a>
        </li><li><a href="#Default"><span class="secno">3.3.4</span> <span class="content">[Default]</span></a>
        </li><li><a href="#EnforceRange"><span class="secno">3.3.5</span> <span class="content">[EnforceRange]</span></a>
        </li><li><a href="#Exposed"><span class="secno">3.3.6</span> <span class="content">[Exposed]</span></a>
        </li><li><a href="#Global"><span class="secno">3.3.7</span> <span class="content">[Global]</span></a>
        </li><li><a href="#LegacyNamespace"><span class="secno">3.3.8</span> <span class="content">[LegacyNamespace]</span></a>
        </li><li><a href="#LegacyUnenumerableNamedProperties"><span class="secno">3.3.9</span> <span class="content">[LegacyUnenumerableNamedProperties]</span></a>
        </li><li><a href="#LegacyWindowAlias"><span class="secno">3.3.10</span> <span class="content">[LegacyWindowAlias]</span></a>
        </li><li><a href="#LenientSetter"><span class="secno">3.3.11</span> <span class="content">[LenientSetter]</span></a>
        </li><li><a href="#LenientThis"><span class="secno">3.3.12</span> <span class="content">[LenientThis]</span></a>
        </li><li><a href="#NamedConstructor"><span class="secno">3.3.13</span> <span class="content">[NamedConstructor]</span></a>
        </li><li><a href="#NewObject"><span class="secno">3.3.14</span> <span class="content">[NewObject]</span></a>
        </li><li><a href="#NoInterfaceObject"><span class="secno">3.3.15</span> <span class="content">[NoInterfaceObject]</span></a>
        </li><li><a href="#OverrideBuiltins"><span class="secno">3.3.16</span> <span class="content">[OverrideBuiltins]</span></a>
        </li><li><a href="#PutForwards"><span class="secno">3.3.17</span> <span class="content">[PutForwards]</span></a>
        </li><li><a href="#Replaceable"><span class="secno">3.3.18</span> <span class="content">[Replaceable]</span></a>
        </li><li><a href="#SameObject"><span class="secno">3.3.19</span> <span class="content">[SameObject]</span></a>
        </li><li><a href="#SecureContext"><span class="secno">3.3.20</span> <span class="content">[SecureContext]</span></a>
        </li><li><a href="#TreatNonObjectAsNull"><span class="secno">3.3.21</span> <span class="content">[TreatNonObjectAsNull]</span></a>
        </li><li><a href="#TreatNullAs"><span class="secno">3.3.22</span> <span class="content">[TreatNullAs]</span></a>
        </li><li><a href="#Unforgeable"><span class="secno">3.3.23</span> <span class="content">[Unforgeable]</span></a>
        </li><li><a href="#Unscopable"><span class="secno">3.3.24</span> <span class="content">[Unscopable]</span></a>
       </li></ol>
      </li><li><a href="#es-security"><span class="secno">3.4</span> <span class="content">Security</span></a>
      </li><li><a href="#es-overloads"><span class="secno">3.5</span> <span class="content">Overload resolution algorithm</span></a>
      </li><li>
       <a href="#es-interfaces"><span class="secno">3.6</span> <span class="content">Interfaces</span></a>
       <ol class="toc">
        <li><a href="#interface-object"><span class="secno">3.6.1</span> <span class="content">Interface object</span></a>
        </li><li><a href="#named-constructors"><span class="secno">3.6.2</span> <span class="content">Named constructors</span></a>
        </li><li><a href="#interface-prototype-object"><span class="secno">3.6.3</span> <span class="content">Interface prototype object</span></a>
        </li><li><a href="#legacy-callback-interface-object"><span class="secno">3.6.4</span> <span class="content">Legacy callback interface object</span></a>
        </li><li>
         <a href="#named-properties-object"><span class="secno">3.6.5</span> <span class="content">Named properties object</span></a>
         <ol class="toc">
          <li><a href="#named-properties-object-getownproperty"><span class="secno">3.6.5.1</span> <span class="content">[[GetOwnProperty]]</span></a>
          </li><li><a href="#named-properties-object-defineownproperty"><span class="secno">3.6.5.2</span> <span class="content">[[DefineOwnProperty]]</span></a>
          </li><li><a href="#named-properties-object-delete"><span class="secno">3.6.5.3</span> <span class="content">[[Delete]]</span></a>
          </li><li><a href="#named-properties-object-setprototypeof"><span class="secno">3.6.5.4</span> <span class="content">[[SetPrototypeOf]]</span></a>
          </li><li><a href="#named-properties-object-preventextensions"><span class="secno">3.6.5.5</span> <span class="content">[[PreventExtensions]]</span></a>
         </li></ol>
        </li><li><a href="#es-constants"><span class="secno">3.6.6</span> <span class="content">Constants</span></a>
        </li><li><a href="#es-attributes"><span class="secno">3.6.7</span> <span class="content">Attributes</span></a>
        </li><li>
         <a href="#es-operations"><span class="secno">3.6.8</span> <span class="content">Operations</span></a>
         <ol class="toc">
          <li>
           <a href="#es-default-operations"><span class="secno">3.6.8.1</span> <span class="content">Default operations</span></a>
           <ol class="toc">
            <li><a href="#es-default-tojson"><span class="secno">3.6.8.1.1</span> <span class="content">Default toJSON operation</span></a>
           </li></ol>
          </li><li><a href="#es-stringifier"><span class="secno">3.6.8.2</span> <span class="content">Stringifiers</span></a>
         </li></ol>
        </li><li>
         <a href="#es-iterators"><span class="secno">3.6.9</span> <span class="content">Common iterator behavior</span></a>
         <ol class="toc">
          <li><a href="#es-iterator"><span class="secno">3.6.9.1</span> <span class="content">@@iterator</span></a>
          </li><li><a href="#es-forEach"><span class="secno">3.6.9.2</span> <span class="content">forEach</span></a>
         </li></ol>
        </li><li>
         <a href="#es-iterable"><span class="secno">3.6.10</span> <span class="content">Iterable declarations</span></a>
         <ol class="toc">
          <li><a href="#es-iterable-entries"><span class="secno">3.6.10.1</span> <span class="content">entries</span></a>
          </li><li><a href="#es-iterable-keys"><span class="secno">3.6.10.2</span> <span class="content">keys</span></a>
          </li><li><a href="#es-iterable-values"><span class="secno">3.6.10.3</span> <span class="content">values</span></a>
          </li><li><a href="#es-default-iterator-object"><span class="secno">3.6.10.4</span> <span class="content">Default iterator objects</span></a>
          </li><li><a href="#es-iterator-prototype-object"><span class="secno">3.6.10.5</span> <span class="content">Iterator prototype object</span></a>
         </li></ol>
        </li><li>
         <a href="#es-maplike"><span class="secno">3.6.11</span> <span class="content">Maplike declarations</span></a>
         <ol class="toc">
          <li><a href="#es-map-size"><span class="secno">3.6.11.1</span> <span class="content">size</span></a>
          </li><li><a href="#es-map-entries"><span class="secno">3.6.11.2</span> <span class="content">entries</span></a>
          </li><li><a href="#es-map-keys-values"><span class="secno">3.6.11.3</span> <span class="content">keys and values</span></a>
          </li><li><a href="#es-map-get-has"><span class="secno">3.6.11.4</span> <span class="content">get and has</span></a>
          </li><li><a href="#es-map-clear"><span class="secno">3.6.11.5</span> <span class="content">clear</span></a>
          </li><li><a href="#es-map-delete"><span class="secno">3.6.11.6</span> <span class="content">delete</span></a>
          </li><li><a href="#es-map-set"><span class="secno">3.6.11.7</span> <span class="content">set</span></a>
         </li></ol>
        </li><li>
         <a href="#es-setlike"><span class="secno">3.6.12</span> <span class="content">Setlike declarations</span></a>
         <ol class="toc">
          <li><a href="#es-set-size"><span class="secno">3.6.12.1</span> <span class="content">size</span></a>
          </li><li><a href="#es-set-values"><span class="secno">3.6.12.2</span> <span class="content">values</span></a>
          </li><li><a href="#es-set-entries-keys"><span class="secno">3.6.12.3</span> <span class="content">entries and keys</span></a>
          </li><li><a href="#es-set-has"><span class="secno">3.6.12.4</span> <span class="content">has</span></a>
          </li><li><a href="#es-add-delete"><span class="secno">3.6.12.5</span> <span class="content">add and delete</span></a>
          </li><li><a href="#es-set-clear"><span class="secno">3.6.12.6</span> <span class="content">clear</span></a>
         </li></ol>
       </li></ol>
      </li><li>
       <a href="#es-platform-objects"><span class="secno">3.7</span> <span class="content">Platform objects implementing interfaces</span></a>
       <ol class="toc">
        <li><a href="#platform-object-setprototypeof"><span class="secno">3.7.1</span> <span class="content">[[SetPrototypeOf]]</span></a>
       </li></ol>
      </li><li>
       <a href="#es-legacy-platform-objects"><span class="secno">3.8</span> <span class="content">Legacy platform objects</span></a>
       <ol class="toc">
        <li><a href="#legacy-platform-object-getownproperty"><span class="secno">3.8.1</span> <span class="content">[[GetOwnProperty]]</span></a>
        </li><li><a href="#legacy-platform-object-set"><span class="secno">3.8.2</span> <span class="content">[[Set]]</span></a>
        </li><li><a href="#legacy-platform-object-defineownproperty"><span class="secno">3.8.3</span> <span class="content">[[DefineOwnProperty]]</span></a>
        </li><li><a href="#legacy-platform-object-delete"><span class="secno">3.8.4</span> <span class="content">[[Delete]]</span></a>
        </li><li><a href="#legacy-platform-object-preventextensions"><span class="secno">3.8.5</span> <span class="content">[[PreventExtensions]]</span></a>
        </li><li><a href="#legacy-platform-object-ownpropertykeys"><span class="secno">3.8.6</span> <span class="content">[[OwnPropertyKeys]]</span></a>
        </li><li><a href="#legacy-platform-object-abstract-ops"><span class="secno">3.8.7</span> <span class="content">Abstract operations</span></a>
       </li></ol>
      </li><li><a href="#es-user-objects"><span class="secno">3.9</span> <span class="content">User objects implementing callback interfaces</span></a>
      </li><li><a href="#es-invoking-callback-functions"><span class="secno">3.10</span> <span class="content">Invoking callback functions</span></a>
      </li><li>
       <a href="#es-namespaces"><span class="secno">3.11</span> <span class="content">Namespaces</span></a>
       <ol class="toc">
        <li><a href="#namespace-object"><span class="secno">3.11.1</span> <span class="content">Namespace object</span></a>
       </li></ol>
      </li><li>
       <a href="#es-exceptions"><span class="secno">3.12</span> <span class="content">Exceptions</span></a>
       <ol class="toc">
        <li><a href="#es-DOMException-specialness"><span class="secno">3.12.1</span> <span class="content"><code class="idl"><span>DOMException</span></code> custom bindings</span></a>
        </li><li><a href="#es-exception-objects"><span class="secno">3.12.2</span> <span class="content">Exception objects</span></a>
        </li><li><a href="#es-creating-throwing-exceptions"><span class="secno">3.12.3</span> <span class="content">Creating and throwing exceptions</span></a>
        </li><li><a href="#es-handling-exceptions"><span class="secno">3.12.4</span> <span class="content">Handling exceptions</span></a>
       </li></ol>
     </li></ol>
    </li><li>
     <a href="#common"><span class="secno">4</span> <span class="content">Common definitions</span></a>
     <ol class="toc">
      <li><a href="#ArrayBufferView"><span class="secno">4.1</span> <span class="content">ArrayBufferView</span></a>
      </li><li><a href="#BufferSource"><span class="secno">4.2</span> <span class="content">BufferSource</span></a>
      </li><li><a href="#idl-DOMException"><span class="secno">4.3</span> <span class="content">DOMException</span></a>
      </li><li><a href="#DOMTimeStamp"><span class="secno">4.4</span> <span class="content">DOMTimeStamp</span></a>
      </li><li><a href="#Function"><span class="secno">4.5</span> <span class="content">Function</span></a>
      </li><li><a href="#VoidFunction"><span class="secno">4.6</span> <span class="content">VoidFunction</span></a>
     </li></ol>
    </li><li><a href="#extensibility"><span class="secno">5</span> <span class="content">Extensibility</span></a>
    </li><li><a href="#legacy-constructs"><span class="secno">6</span> <span class="content">Legacy constructs</span></a>
    </li><li><a href="#referencing"><span class="secno">7</span> <span class="content">Referencing this specification</span></a>
    </li><li><a href="#acknowledgements"><span class="secno">8</span> <span class="content">Acknowledgements</span></a>
    </li><li><a href="#idl-grammar"><span class="secno"></span> <span class="content">IDL grammar</span></a>
    </li><li><a href="#conventions"><span class="secno"></span> <span class="content">Document conventions</span></a>
    </li><li><a href="#conformance"><span class="secno"></span> <span class="content">Conformance</span></a>
    </li><li>
     <a href="#index"><span class="secno"></span> <span class="content">Index</span></a>
     <ol class="toc">
      <li><a href="#index-defined-here"><span class="secno"></span> <span class="content">Terms defined by this specification</span></a>
      </li><li><a href="#index-defined-elsewhere"><span class="secno"></span> <span class="content">Terms defined by reference</span></a>
     </li></ol>
    </li><li>
     <a href="#references"><span class="secno"></span> <span class="content">References</span></a>
     <ol class="toc">
      <li><a href="#normative"><span class="secno"></span> <span class="content">Normative References</span></a>
      </li><li><a href="#informative"><span class="secno"></span> <span class="content">Informative References</span></a>
     </li></ol>
    </li><li><a href="#idl-index"><span class="secno"></span> <span class="content">IDL Index</span></a>
   </li></ol>
  </nav>
  <main>
   <h2 class="heading settled" data-level="1" id="introduction"><span class="secno">1. </span><span class="content">Introduction</span><a class="self-link" href="#introduction"></a></h2>
   <p><i>This section is informative.</i></p>
   <p>Technical reports published by the W3C that include programming
language interfaces have typically been described using the
Object Management Group’s Interface Definition Language (IDL) <a data-link-type="biblio" href="#biblio-omgidl">[OMGIDL]</a>.  The IDL provides a means to
describe these interfaces in a language independent manner.  Usually,
additional language binding appendices are included in such
documents which detail how the interfaces described with the IDL
correspond to constructs in the given language.</p>
   <p>However, the bindings in these specifications for the language most
commonly used on the web, ECMAScript, are consistently specified with
low enough precision as to result in interoperability issues.  In
addition, each specification must describe the same basic information,
such as DOM interfaces described in IDL corresponding to properties
on the ECMAScript global object, or the <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long">unsigned long</a></code> IDL type mapping to the Number
type in ECMAScript.</p>
   <p>This specification defines an IDL language similar to OMG IDL
for use by specifications that define interfaces for Web APIs.  A number of extensions are
given to the IDL to support common functionality that previously must
have been written in prose.  In addition, precise language bindings
for the ECMAScript language are given.</p>
   <h2 class="heading settled" data-level="2" id="idl"><span class="secno">2. </span><span class="content">Interface definition language</span><a class="self-link" href="#idl"></a></h2>
   <p>This section describes a language, <em>Web IDL</em>, which can be used to define
interfaces for APIs in the Web platform.  A specification that defines Web APIs
can include one or more <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="IDL fragment" id="dfn-idl-fragment">IDL fragments</dfn> that
describe the interfaces (the state and behavior that objects can exhibit)
for the APIs defined by that specification.
An <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment">IDL fragment</a> is
a sequence of definitions that matches the <emu-nt><a href="#prod-Definitions">Definitions</a></emu-nt> grammar symbol.
The set of <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①">IDL fragments</a> that
an implementation supports is not ordered.
See <a href="#idl-grammar">IDL grammar</a> for the complete grammar and an explanation of the notation used.</p>
   <p>The different kinds of <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="dfn-definition">definitions</dfn> that can appear in an <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②">IDL fragment</a> are: <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface">interfaces</a>, <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface">partial interface definitions</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin">interface mixins</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin">partial mixin definitions</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace">namespaces</a>, <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace">partial namespace definitions</a>, <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary">dictionaries</a>, <a data-link-type="dfn" href="#dfn-partial-dictionary" id="ref-for-dfn-partial-dictionary">partial dictionary definitions</a>, <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef">typedefs</a> and <a data-link-type="dfn" href="#includes-statement" id="ref-for-includes-statement">includes statements</a>.
These are all defined in the following sections.</p>
   <p>Each <a data-link-type="dfn" href="#dfn-definition" id="ref-for-dfn-definition">definition</a> (matching <emu-nt><a href="#prod-Definition">Definition</a></emu-nt>)
can be preceded by a list of <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute">extended attributes</a> (matching <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt>),
which can control how the definition will be handled in language bindings.
The extended attributes defined by this specification that are language binding
agnostic are discussed in <a href="#idl-extended-attributes">§2.13 Extended attributes</a>,
while those specific to the ECMAScript language binding are discussed
in <a href="#es-extended-attributes">§3.3 ECMAScript-specific extended attributes</a>.</p>
<pre class="syntax highlight">[<mark><c- g="">extended_attributes</c-></mark>]
<c- b="">interface</c-> <c- g="">identifier</c-> {
  /* interface_members... */
};
</pre>
<pre class="grammar" id="prod-Definitions"><emu-nt><a href="#prod-Definitions">Definitions</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-Definition">Definition</a></emu-nt> <emu-nt><a href="#prod-Definitions">Definitions</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-Definition"><emu-nt><a href="#prod-Definition">Definition</a></emu-nt> ::
    <emu-nt><a href="#prod-CallbackOrInterfaceOrMixin">CallbackOrInterfaceOrMixin</a></emu-nt>
    <emu-nt><a href="#prod-Namespace">Namespace</a></emu-nt>
    <emu-nt><a href="#prod-Partial">Partial</a></emu-nt>
    <emu-nt><a href="#prod-Dictionary">Dictionary</a></emu-nt>
    <emu-nt><a href="#prod-Enum">Enum</a></emu-nt>
    <emu-nt><a href="#prod-Typedef">Typedef</a></emu-nt>
    <emu-nt><a href="#prod-IncludesStatement">IncludesStatement</a></emu-nt>
</pre>
   <div class="example" id="example-d7d00072">
    <a class="self-link" href="#example-d7d00072"></a> 
    <p>The following is an example of an <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③">IDL fragment</a>.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Paint</c-> { };

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">SolidColor</c-> : <c- n="">Paint</c-> {
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">red</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">green</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">blue</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Pattern</c-> : <c- n="">Paint</c-> {
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">imageURL</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->, <c- g="">Constructor</c->]
<c- b="">interface</c-> <c- g="">GraphicalWindow</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">width</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">height</c->;

  <c- b="">attribute</c-> <c- n="">Paint</c-> <c- g="">currentPaint</c->;

  <c- b="">void</c-> <c- g="">drawRectangle</c->(<c- b="">double</c-> <c- g="">x</c->, <c- b="">double</c-> <c- g="">y</c->, <c- b="">double</c-> <c- g="">width</c->, <c- b="">double</c-> <c- g="">height</c->);

  <c- b="">void</c-> <c- g="">drawText</c->(<c- b="">double</c-> <c- g="">x</c->, <c- b="">double</c-> <c- g="">y</c->, <c- b="">DOMString</c-> <c- g="">text</c->);
};
</pre>
    <p>Here, four <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①">interfaces</a> are being defined.
    The <code class="idl">GraphicalWindow</code> interface has two <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only">read only</a> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute">attributes</a>,
    one writable attribute, and two <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation">operations</a> defined on it.  Objects that implement the <code class="idl">GraphicalWindow</code> interface
    will expose these attributes and operations in a manner appropriate to the
    particular language being used.</p>
    <p>In ECMAScript, the attributes on the IDL interfaces will be exposed as accessor
    properties and the operations as data properties whose value is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects">built-in function object</a> on a
    prototype object for all <code class="idl">GraphicalWindow</code> objects; each ECMAScript object that implements <code class="idl">GraphicalWindow</code> will have that prototype object in its prototype chain.</p>
    <p>The [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor">Constructor</a></code>] that appears on <code class="idl">GraphicalWindow</code> is an <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①">extended attribute</a>.
    This extended attribute causes a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#constructor" id="ref-for-constructor">constructor</a> to exist in ECMAScript implementations,
    so that calling <code>new GraphicalWindow()</code> would return a new object
    that implemented the interface.</p>
   </div>
   <h3 class="heading settled" data-level="2.1" id="idl-names"><span class="secno">2.1. </span><span class="content">Names</span><a class="self-link" href="#idl-names"></a></h3>
   <p>Every <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②">interface</a>, <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①">partial interface definition</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①">namespace</a>, <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace①">partial namespace definition</a>, <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary①">dictionary</a>, <a data-link-type="dfn" href="#dfn-partial-dictionary" id="ref-for-dfn-partial-dictionary①">partial dictionary definition</a>, <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration">enumeration</a>, <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function">callback function</a> and <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef①">typedef</a> (together called <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="named definition" id="dfn-named-definition">named definitions</dfn>)
and every <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant">constant</a>, <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①">attribute</a>,
and <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member">dictionary member</a> has an <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-identifier">identifier</dfn>, as do some <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①">operations</a>.
The identifier is determined by an <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token somewhere
in the declaration:</p>
   <ul>
    <li data-md="">
     <p>For <a data-link-type="dfn" href="#dfn-named-definition" id="ref-for-dfn-named-definition">named definitions</a>,
the <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token that appears
directly after the <emu-t>interface</emu-t>, <emu-t>namespace</emu-t>, <emu-t>dictionary</emu-t>, <emu-t>enum</emu-t> or <emu-t>callback</emu-t> keyword
determines the identifier of that definition.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <mark><c- g="">interface_identifier</c-></mark> { /* interface_members... */ };
<c- b="">partial</c-> <c- b="">interface</c-> <mark><c- g="">interface_identifier</c-></mark> { /* interface_members... */ };
<c- b="">namespace</c-> <mark><c- g="">namespace_identifier</c-></mark> { /* namespace_members... */ };
<c- b="">partial</c-> <c- b="">namespace</c-> <mark><c- g="">namespace_identifier</c-></mark> { /* namespace_members... */ };
<c- b="">dictionary</c-> <mark><c- g="">dictionary_identifier</c-></mark> { /* dictionary_members... */ };
<c- b="">partial</c-> <c- b="">dictionary</c-> <mark><c- g="">dictionary_identifier</c-></mark> { /* dictionary_members... */ };
<c- b="">enum</c-> <mark><c- g="">enumeration_identifier</c-></mark> { <c- s="">"enum"</c->, <c- s="">"values"</c-> /* , ... */ };
<c- b="">callback</c-> <mark><c- g="">callback_identifier</c-></mark> = <c- n="">return_type</c-> (/* arguments... */);
</pre>
    </li><li data-md="">
     <p>For <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②">attributes</a>, <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef②">typedefs</a> and <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①">dictionary members</a>,
the final <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token before the
semicolon at the end of the declaration determines the identifier.</p>
<pre class="syntax highlight">[<c- g="">extended_attributes</c->]
<c- b="">interface</c-> <c- g="">identifier</c-> {
  <c- b="">attribute</c-> <c- n="">type</c-> <mark><c- g="">attribute_identifier</c-></mark>;
};

<c- b="">typedef</c-> <c- n="">type</c-> <mark><c- g="">typedef_identifier</c-></mark>;

<c- b="">dictionary</c-> <c- g="">identifier</c-> {
  <c- n="">type</c-> <mark><c- g="">dictionary_member_identifier</c-></mark>;
};
</pre>
    </li><li data-md="">
     <p>For <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①">constants</a>,
the <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token before the
equals sign determines the identifier.</p>
<pre class="syntax highlight"><c- b="">const</c-> <c- n="">type</c-> <mark><c- g="">constant_identifier</c-></mark> = 42;</pre>
    </li><li data-md="">
     <p>For <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②">operations</a>, the <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token that appears
after the return type but before the opening parenthesis (that is,
one that is matched as part of the <emu-nt><a href="#prod-OptionalIdentifier">OptionalIdentifier</a></emu-nt> grammar symbol in an <emu-nt><a href="#prod-OperationRest">OperationRest</a></emu-nt>) determines the identifier of the operation.  If
there is no such <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token,
then the operation does not have an identifier.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- n="">return_type</c-> <mark><c- g="">operation_identifier</c-></mark>(/* arguments... */);
};
</pre>
   </li></ul>
   <p class="note" role="note"><span>Note:</span> Operations can have no identifier when they are being used to declare a <a data-link-type="dfn" href="#dfn-special-operation" id="ref-for-dfn-special-operation">special kind of operation</a>, such as a getter or setter.</p>
   <p>For all of these constructs, the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier">identifier</a> is the value of the <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token with any leading <span class="char">U+005F LOW LINE ("_")</span> character (underscore) removed.</p>
   <p class="note" role="note"><span>Note:</span> A leading <span class="char">"_"</span> is used to escape an identifier from looking
like a reserved word so that, for example, an interface named "<code>interface</code>" can be
defined.  The leading <span class="char">"_"</span> is dropped to unescape the
identifier.</p>
   <p>Operation arguments can take a slightly wider set of identifiers.  In an operation
declaration, the identifier of an argument is specified immediately after its
type and is given by either an <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token or by one of the keywords that match the <emu-nt><a href="#prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt> symbol.  If one of these keywords is used, it need not be escaped with a leading
underscore.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- n="">return_type</c-> <c- g="">operation_identifier</c->(<c- n="">argument_type</c-> <mark><c- g="">argument_identifier</c-></mark> /* , ... */);
};
</pre>
<pre class="grammar" id="prod-ArgumentNameKeyword"><emu-nt><a href="#prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt> ::
    <emu-t>attribute</emu-t>
    <emu-t>callback</emu-t>
    <emu-t>const</emu-t>
    <emu-t>deleter</emu-t>
    <emu-t>dictionary</emu-t>
    <emu-t>enum</emu-t>
    <emu-t>getter</emu-t>
    <emu-t>includes</emu-t>
    <emu-t>inherit</emu-t>
    <emu-t>interface</emu-t>
    <emu-t>iterable</emu-t>
    <emu-t>maplike</emu-t>
    <emu-t>namespace</emu-t>
    <emu-t>partial</emu-t>
    <emu-t>required</emu-t>
    <emu-t>setlike</emu-t>
    <emu-t>setter</emu-t>
    <emu-t>static</emu-t>
    <emu-t>stringifier</emu-t>
    <emu-t>typedef</emu-t>
    <emu-t>unrestricted</emu-t>
</pre>
   <p>If an <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token is used, then the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①">identifier</a> of the operation argument
is the value of that token with any leading <span class="char">U+005F LOW LINE ("_")</span> character (underscore) removed.
If instead one of the <emu-nt><a href="#prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt> keyword token is used, then the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②">identifier</a> of the operation argument
is simply that token.</p>
   <p>The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③">identifier</a> of any of the abovementioned
IDL constructs must not be "<code>constructor</code>",
"<code>toString</code>",
or begin with a <span class="char">U+005F LOW LINE ("_")</span> character.  These
are known as <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-reserved-identifier">reserved identifiers</dfn>.</p>
   <p>Although the "<code>toJSON</code>" <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④">identifier</a> is not a <a data-link-type="dfn" href="#dfn-reserved-identifier" id="ref-for-dfn-reserved-identifier">reserved identifier</a>,
it must only be used for <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation">regular operations</a> that convert objects to <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types">JSON types</a>,
as described in <a href="#idl-tojson-operation">§2.4.3.1 toJSON</a>.</p>
   <p class="note" role="note"><span>Note:</span> Further restrictions on identifier names for particular constructs may be made
in later sections.</p>
   <p>Within the set of <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④">IDL fragments</a> that a given implementation supports,
the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤">identifier</a> of every <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③">interface</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②">namespace</a>, <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary②">dictionary</a>, <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①">enumeration</a>, <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①">callback function</a> and <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef③">typedef</a> must not
be the same as the identifier of any other <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④">interface</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③">namespace</a>, <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary③">dictionary</a>, <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration②">enumeration</a>, <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②">callback function</a> or <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef④">typedef</a>.</p>
   <p>Within an <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment⑤">IDL fragment</a>, a reference
to a <a data-link-type="dfn" href="#dfn-definition" id="ref-for-dfn-definition①">definition</a> need not appear after
the declaration of the referenced definition.  References can also be made
across <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment⑥">IDL fragments</a>.</p>
   <div class="example" id="example-aac424bf">
    <a class="self-link" href="#example-aac424bf"></a> 
    <p>Therefore, the following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment⑦">IDL fragment</a> is valid:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">B</c-> : <c- n="">A</c-> {
  <c- b="">void</c-> <c- g="">f</c->(<c- n="">SequenceOfLongs</c-> <c- g="">x</c->);
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
};

<c- b="">typedef</c-> <c- b="">sequence</c->&lt;<c- b="">long</c->&gt; <c- g="">SequenceOfLongs</c->;
</pre>
   </div>
   <div class="example" id="example-1192ff1f">
    <a class="self-link" href="#example-1192ff1f"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment⑧">IDL fragment</a> demonstrates how <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥">identifiers</a> are given to definitions and <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member">interface members</a>.</p>
<pre class="highlight">// Typedef identifier: "number"
<c- b="">typedef</c-> <c- b="">double</c-> <c- g="">number</c->;

// Interface identifier: "System"
[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">System</c-> {

  // Operation identifier:          "createObject"
  // Operation argument identifier: "interface"
  <c- b="">object</c-> <c- g="">createObject</c->(<c- b="">DOMString</c-> <c- g="">_interface</c->);

  // Operation argument identifier: "interface"
  <c- b="">sequence</c->&lt;<c- b="">object</c->&gt; <c- g="">getObjects</c->(<c- b="">DOMString</c-> <c- g="">interface</c->);

  // Operation has no identifier; it declares a getter.
  <c- b="">getter</c-> <c- b="">DOMString</c-> (<c- b="">DOMString</c-> <c- g="">keyName</c->);
};

// Interface identifier: "TextField"
[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">TextField</c-> {

  // Attribute identifier: "const"
  <c- b="">attribute</c-> <c- b="">boolean</c-> <c- g="">_const</c->;

  // Attribute identifier: "value"
  <c- b="">attribute</c-> <c- b="">DOMString</c->? <c- g="">_value</c->;
};
</pre>
    <p>Note that while the second <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③">attribute</a> on the <code class="idl">TextField</code> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤">interface</a> need not have been escaped with an underscore (because "<code>value</code>" is
    not a keyword in the IDL grammar), it is still unescaped
    to obtain the attribute’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦">identifier</a>.</p>
   </div>
   <h3 class="heading settled" data-level="2.2" id="idl-interfaces"><span class="secno">2.2. </span><span class="content">Interfaces</span><a class="self-link" href="#idl-interfaces"></a></h3>
   <p><a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment⑨">IDL fragments</a> are used to
describe object oriented systems.  In such systems, objects are entities
that have identity and which are encapsulations of state and behavior.
An <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-interface">interface</dfn> is a definition (matching <emu-t>interface</emu-t> <emu-nt><a href="#prod-InterfaceRest">InterfaceRest</a></emu-nt> or <emu-t>callback</emu-t> <emu-t>interface</emu-t> <emu-nt><a href="#prod-InterfaceRest">InterfaceRest</a></emu-nt>) that declares some
state and behavior that an object implementing that interface will expose.</p>
<pre class="syntax highlight">[<c- g="">extended_attributes</c->]
<c- b="">interface</c-> <c- g="">identifier</c-> {
  /* interface_members... */
};
</pre>
   <p>An interface is a specification of a set of <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="interface member" id="dfn-interface-member">interface members</dfn> (matching <emu-nt><a href="#prod-InterfaceMembers">InterfaceMembers</a></emu-nt>).
These are the <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member">members</a> that appear between the braces in the interface declaration.</p>
   <p>Interfaces in Web IDL describe how objects that implement the
interface behave.  In bindings for object oriented languages, it is
expected that an object that implements a particular IDL interface
provides ways to inspect and modify the object’s state and to
invoke the behavior described by the interface.</p>
   <p>An interface can be defined to <dfn class="dfn-paneled" data-dfn-for="interface" data-dfn-type="dfn" data-export="" id="dfn-inherit">inherit</dfn> from another interface.
If the identifier of the interface is followed by a <span class="char">U+003A COLON (":")</span> character
and an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧">identifier</a>,
then that identifier identifies the inherited interface.
An object that implements an interface that inherits from another
also implements that inherited interface.  The object therefore will also
have members that correspond to the interface members from the inherited interface.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">identifier</c-> : <mark><c- n="">identifier_of_inherited_interface</c-></mark> {
  /* interface_members... */
};
</pre>
   <p>The order that members appear in has significance for property enumeration in the <a href="#es-interfaces">ECMAScript binding</a>.</p>
   <p>Interfaces may specify an interface member that has the same name as
one from an inherited interface.  Objects that implement the derived
interface will expose the member on the derived interface.  It is
language binding specific whether the overridden member can be
accessed on the object.</p>
   <div class="example" id="example-ae483c2d">
    <a class="self-link" href="#example-ae483c2d"></a> 
    <p>Consider the following two interfaces.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">f</c->();
  <c- b="">void</c-> <c- g="">g</c->();
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">B</c-> : <c- n="">A</c-> {
  <c- b="">void</c-> <c- g="">f</c->();
  <c- b="">void</c-> <c- g="">g</c->(<c- b="">DOMString</c-> <c- g="">x</c->);
};
</pre>
    <p>In the ECMAScript language binding, an instance of <code class="idl">B</code> will have a prototype chain that looks like the following:</p>
<pre>[Object.prototype: the Object prototype object]
     ↑
[A.prototype: interface prototype object for A]
     ↑
[B.prototype: interface prototype object for B]
     ↑
[instanceOfB]
</pre>
    <p>Calling <code>instanceOfB.f()</code> in ECMAScript will invoke the f defined
    on <code class="idl">B</code>.  However, the f from <code class="idl">A</code> can still be invoked on an object that implements <code class="idl">B</code> by
    calling <code>A.prototype.f.call(instanceOfB)</code>.</p>
   </div>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-inherited-interfaces">inherited interfaces</dfn> of
a given interface <var>A</var> is the set of all interfaces that <var>A</var> inherits from, directly or indirectly.  If <var>A</var> does not <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit">inherit</a> from another interface, then the set is empty.  Otherwise, the set
includes the interface <var>B</var> that <var>A</var> <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit①">inherits</a> from and all of <var>B</var>’s <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces">inherited interfaces</a>.</p>
   <p>An interface must not be declared such that
its inheritance hierarchy has a cycle.  That is, an interface <var>A</var> cannot inherit from itself, nor can it inherit from another
interface <var>B</var> that inherits from <var>A</var>, and so on.</p>
   <p>Note that general multiple inheritance of interfaces is not supported, and
objects also cannot implement arbitrary sets of interfaces.
Objects can be defined to implement a single given interface <var>A</var>,
which means that it also implements all of <var>A</var>’s <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①">inherited interfaces</a>.
In addition, an <a data-link-type="dfn" href="#includes-statement" id="ref-for-includes-statement①">includes statement</a> can be used
to define that objects implementing an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥">interface</a> <var>A</var> will always also include the <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member">members</a> of the <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①">interface mixins</a> <var>A</var> <a data-link-type="dfn" href="#include" id="ref-for-include">includes</a>.</p>
   <p>Each interface member can be preceded by a list of <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②">extended attributes</a> (matching <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt>),
which can control how the interface member will be handled in language bindings.</p>
<pre class="syntax highlight">[<c- g="">extended_attributes</c->]
<c- b="">interface</c-> <c- g="">identifier</c-> {

  [<mark><c- g="">extended_attributes</c-></mark>]
  <c- b="">const</c-> <c- n="">type</c-> <c- g="">constant_identifier</c-> = 42;

  [<mark><c- g="">extended_attributes</c-></mark>]
  <c- b="">attribute</c-> <c- n="">type</c-> <c- g="">identifier</c->;

  [<mark><c- g="">extended_attributes</c-></mark>]
  <c- n="">return_type</c-> <c- g="">identifier</c->(/* arguments... */);
};
</pre>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-callback-interface">callback interface</dfn> is
an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦">interface</a> that uses the <emu-t>callback</emu-t> keyword at the start of
its definition.  Callback interfaces are ones that can be
implemented by <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object">user objects</a> and not by <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object">platform objects</a>,
as described in <a href="#idl-objects">§2.11 Objects implementing interfaces</a>.</p>
<pre class="syntax highlight"><c- b="">callback</c-> <c- b="">interface</c-> <c- g="">identifier</c-> {
  /* interface_members... */
};
</pre>
   <p class="note" role="note"><span>Note:</span> See also the similarly named <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function③">callback function</a> definition.</p>
   <p><a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface">Callback interfaces</a> must not <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit②">inherit</a> from any non-callback interfaces, and non-callback interfaces must not
inherit from any callback interfaces.
Callback interfaces must not <a data-link-type="dfn" href="#include" id="ref-for-include①">include</a> any <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②">interface mixins</a>.</p>
   <p><a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute">Static attributes</a> and <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation">static operations</a> must not
be defined on a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①">callback interface</a>.</p>
   <div class="advisement">
    <p>Specification authors should not define <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②">callback interfaces</a> that have only a single <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③">operation</a>,
    unless required to describe the requirements of existing APIs.
    Instead, a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function④">callback function</a> should be used.</p>
    <p>The definition of <code class="idl">EventListener</code> as a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface③">callback interface</a> is an example of an existing API that needs to allow <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object①">user objects</a> with a
    given property (in this case <code class="idl">handleEvent</code>) to be considered to implement the interface.
    For new APIs, and those for which there are no compatibility concerns,
    using a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function⑤">callback function</a> will allow
    only a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object">function object</a> (in the ECMAScript
    language binding).</p>
   </div>
   <p class="issue" id="issue-e09bfd6e"><a class="self-link" href="#issue-e09bfd6e"></a> Perhaps this warning shouldn’t apply if you are planning to extend the callback
    interface in the future.  That’s probably a good reason to start off with a single
    operation callback interface. </p>
   <p class="issue" id="issue-e4e9a203"><a class="self-link" href="#issue-e4e9a203"></a> I think we need to support operations not being implemented on a given
    user object implementing a callback interface.  If specs extending an existing
    callback interface, we probably want to be able to avoid calling the
    operations that aren’t implemented (and having some default behavior instead).
    So we should perhaps define a term that means whether the operation is
    implemented, which in the ECMAScript binding would correspond to checking
    for the property’s existence. </p>
   <div class="note" role="note">
    <p>Specification authors wanting to define APIs that take ECMAScript objects
    as “property bag” like function arguments are suggested to use <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary④">dictionaries</a> rather than <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface④">callback interfaces</a>.</p>
    <p>For example, instead of this:</p>
<pre class="highlight"><c- b="">callback</c-> <c- b="">interface</c-> <c- g="">Options</c-> {
  <c- b="">attribute</c-> <c- b="">DOMString</c->? <c- g="">option1</c->;
  <c- b="">attribute</c-> <c- b="">DOMString</c->? <c- g="">option2</c->;
  <c- b="">attribute</c-> <c- b="">long</c->? <c- g="">option3</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">doTask</c->(<c- b="">DOMString</c-> <c- g="">type</c->, <c- n="">Options</c-> <c- g="">options</c->);
};
</pre>
    <p>to be used like this:</p>
<pre class="highlight"><c- a="">var</c-> a <c- o="">=</c-> getA<c- p="">();</c->  <c- c1="">// Get an instance of A.</c->

a<c- p="">.</c->doTask<c- p="">(</c-><c- u="">"something"</c-><c- p="">,</c-> <c- p="">{</c-> option1<c- o="">:</c-> <c- u="">"banana"</c-><c- p="">,</c-> option3<c- o="">:</c-> <c- mi="">100</c-> <c- p="">});</c->
</pre>
    <p>instead write the following:</p>
<pre class="highlight"><c- b="">dictionary</c-> <c- g="">Options</c-> {
  <c- b="">DOMString</c->? <c- g="">option1</c->;
  <c- b="">DOMString</c->? <c- g="">option2</c->;
  <c- b="">long</c->? <c- g="">option3</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">doTask</c->(<c- b="">DOMString</c-> <c- g="">type</c->, <c- b="">optional</c-> <c- n="">Options</c-> <c- g="">options</c->);
};
</pre>
   </div>
   <p>The IDL for interfaces can be split into multiple parts by using <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-partial-interface">partial interface</dfn> definitions
(matching <emu-t>partial</emu-t> <emu-nt><a href="#prod-PartialInterfaceRest">PartialInterfaceRest</a></emu-nt>).
The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨">identifier</a> of a partial
interface definition must be the same
as the identifier of an interface definition.  All of
the members that appear on each of the partial interfaces are considered to be
members of the interface itself.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <mark><c- g="">SomeInterface</c-></mark> {
  /* interface_members... */
};

<c- b="">partial</c-> <c- b="">interface</c-> <mark><c- g="">SomeInterface</c-></mark> {
  /* interface_members... */
};
</pre>
   <p class="note" role="note"><span>Note:</span> Partial interface definitions are intended for use as a specification
editorial aide, allowing the definition of an interface to be separated
over more than one section of the document, and sometimes multiple documents.</p>
   <p>The order of appearance of an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧">interface</a> definition and any of its <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface②">partial interface</a> definitions does not matter.</p>
   <p class="note" role="note"><span>Note:</span> A partial interface definition cannot specify that the interface <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit③">inherits</a> from another interface.
Inheritance must be specified on the original <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨">interface</a> definition.</p>
   <p><a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③">Extended attributes</a> can be specified on <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface③">partial interface</a> definitions, with some
limitations.  The following extended attributes must not
be specified on partial interface definitions:
[<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①">Constructor</a></code>],
[<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias">LegacyWindowAlias</a></code>],
[<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor">NamedConstructor</a></code>],
[<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject">NoInterfaceObject</a></code>].</p>
   <p class="note" role="note"><span>Note:</span> The above list of <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④">extended attributes</a> is all of those defined in this document that are applicable to <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪">interfaces</a> except for
[<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed">Exposed</a></code>],
[<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global">Global</a></code>],
[<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins">OverrideBuiltins</a></code>], and
[<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext">SecureContext</a></code>].</p>
   <p>Any <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤">extended attribute</a> specified
on a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface④">partial interface</a> definition
is considered to appear on the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①">interface</a> itself.</p>
   <p>The relevant language binding determines how interfaces correspond to constructs
in the language.</p>
   <p>The following extended attributes are applicable to interfaces:
[<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor②">Constructor</a></code>],
[<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①">Exposed</a></code>],
[<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①">Global</a></code>],
[<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias①">LegacyWindowAlias</a></code>],
[<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①">NamedConstructor</a></code>],
[<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①">NoInterfaceObject</a></code>],
[<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins①">OverrideBuiltins</a></code>], and
[<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①">SecureContext</a></code>].</p>
   <p>Non-callback <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②">interfaces</a> which are not annotated
with a [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject②">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥">extended attribute</a>,
and <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface⑤">callback interfaces</a> which declare <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②">constants</a> must be annotated with an [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦">extended attribute</a>.</p>
<pre class="grammar" id="prod-CallbackOrInterfaceOrMixin"><emu-nt><a href="#prod-CallbackOrInterfaceOrMixin">CallbackOrInterfaceOrMixin</a></emu-nt> ::
    <emu-t>callback</emu-t> <emu-nt><a href="#prod-CallbackRestOrInterface">CallbackRestOrInterface</a></emu-nt>
    <emu-t>interface</emu-t> <emu-nt><a href="#prod-InterfaceOrMixin">InterfaceOrMixin</a></emu-nt>
</pre>
<pre class="grammar" id="prod-CallbackRestOrInterface"><emu-nt><a href="#prod-CallbackRestOrInterface">CallbackRestOrInterface</a></emu-nt> ::
    <emu-nt><a href="#prod-CallbackRest">CallbackRest</a></emu-nt>
    <emu-t>interface</emu-t> <emu-nt><a href="#prod-InterfaceRest">InterfaceRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-InterfaceOrMixin"><emu-nt><a href="#prod-InterfaceOrMixin">InterfaceOrMixin</a></emu-nt> ::
    <emu-nt><a href="#prod-InterfaceRest">InterfaceRest</a></emu-nt>
    <emu-nt><a href="#prod-MixinRest">MixinRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-InterfaceRest"><emu-nt><a href="#prod-InterfaceRest">InterfaceRest</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Inheritance">Inheritance</a></emu-nt> <emu-t>{</emu-t> <emu-nt><a href="#prod-InterfaceMembers">InterfaceMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-Partial"><emu-nt><a href="#prod-Partial">Partial</a></emu-nt> ::
    <emu-t>partial</emu-t> <emu-nt><a href="#prod-PartialDefinition">PartialDefinition</a></emu-nt>
</pre>
<pre class="grammar" id="prod-PartialDefinition"><emu-nt><a href="#prod-PartialDefinition">PartialDefinition</a></emu-nt> ::
    <emu-t>interface</emu-t> <emu-nt><a href="#prod-PartialInterfaceOrPartialMixin">PartialInterfaceOrPartialMixin</a></emu-nt>
    <emu-nt><a href="#prod-PartialDictionary">PartialDictionary</a></emu-nt>
    <emu-nt><a href="#prod-Namespace">Namespace</a></emu-nt>
</pre>
<pre class="grammar" id="prod-PartialInterfaceOrPartialMixin"><emu-nt><a href="#prod-PartialInterfaceOrPartialMixin">PartialInterfaceOrPartialMixin</a></emu-nt> ::
    <emu-nt><a href="#prod-PartialInterfaceRest">PartialInterfaceRest</a></emu-nt>
    <emu-nt><a href="#prod-MixinRest">MixinRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-PartialInterfaceRest"><emu-nt><a href="#prod-PartialInterfaceRest">PartialInterfaceRest</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#prod-InterfaceMembers">InterfaceMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-InterfaceMembers"><emu-nt><a href="#prod-InterfaceMembers">InterfaceMembers</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-InterfaceMember">InterfaceMember</a></emu-nt> <emu-nt><a href="#prod-InterfaceMembers">InterfaceMembers</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-InterfaceMember"><emu-nt><a href="#prod-InterfaceMember">InterfaceMember</a></emu-nt> ::
    <emu-nt><a href="#prod-Const">Const</a></emu-nt>
    <emu-nt><a href="#prod-Operation">Operation</a></emu-nt>
    <emu-nt><a href="#prod-Stringifier">Stringifier</a></emu-nt>
    <emu-nt><a href="#prod-StaticMember">StaticMember</a></emu-nt>
    <emu-nt><a href="#prod-Iterable">Iterable</a></emu-nt>
    <emu-nt><a href="#prod-ReadOnlyMember">ReadOnlyMember</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteAttribute">ReadWriteAttribute</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt>
</pre>
<pre class="grammar" id="prod-Inheritance"><emu-nt><a href="#prod-Inheritance">Inheritance</a></emu-nt> ::
    <emu-t>:</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
    ε
</pre>
   <div class="example" id="example-0f0ea08a">
    <a class="self-link" href="#example-0f0ea08a"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①⓪">IDL fragment</a> demonstrates the definition of two mutually referential <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③">interfaces</a>.
    Both <code class="idl">Human</code> and <code class="idl">Dog</code> inherit from <code class="idl">Animal</code>.  Objects that implement
    either of those two interfaces will thus have a <code>name</code> attribute.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Animal</c-> {
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">name</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Human</c-> : <c- n="">Animal</c-> {
  <c- b="">attribute</c-> <c- n="">Dog</c->? <c- g="">pet</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Dog</c-> : <c- n="">Animal</c-> {
  <c- b="">attribute</c-> <c- n="">Human</c->? <c- g="">owner</c->;
};
</pre>
   </div>
   <div class="example" id="example-94b927d7">
    <a class="self-link" href="#example-94b927d7"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①①">IDL fragment</a> defines
    simplified versions of a few DOM <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④">interfaces</a>, one of which
    is a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface⑥">callback interface</a>.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Node</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">nodeName</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">Node</c->? <c- g="">parentNode</c->;
  <c- n="">Node</c-> <c- g="">appendChild</c->(<c- n="">Node</c-> <c- g="">newChild</c->);
  <c- b="">void</c-> <c- g="">addEventListener</c->(<c- b="">DOMString</c-> <c- g="">type</c->, <c- n="">EventListener</c-> <c- g="">listener</c->);
};

<c- b="">callback</c-> <c- b="">interface</c-> <c- g="">EventListener</c-> {
  <c- b="">void</c-> <c- g="">handleEvent</c->(<c- n="">Event</c-> <c- g="">event</c->);
};
</pre>
    <p>Since the <code class="idl">EventListener</code> interface is annotated
    callback interface, <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object②">user objects</a> can implement it:</p>
<pre class="highlight"><c- a="">var</c-> node <c- o="">=</c-> getNode<c- p="">();</c->                                <c- c1="">// Obtain an instance of Node.</c->

<c- a="">var</c-> listener <c- o="">=</c-> <c- p="">{</c->
  handleEvent<c- o="">:</c-> <c- a="">function</c-><c- p="">(</c->event<c- p="">)</c-> <c- p="">{</c->
    <c- c1="">// ...</c->
  <c- p="">}</c->
<c- p="">};</c->
node<c- p="">.</c->addEventListener<c- p="">(</c-><c- u="">"click"</c-><c- p="">,</c-> listener<c- p="">);</c->            <c- c1="">// This works.</c->

node<c- p="">.</c->addEventListener<c- p="">(</c-><c- u="">"click"</c-><c- p="">,</c-> <c- a="">function</c-><c- p="">()</c-> <c- p="">{</c-> <c- p="">...</c-> <c- p="">});</c->  <c- c1="">// As does this.</c->
</pre>
    <p>It is not possible for a user object to implement <code class="idl">Node</code>, however:</p>
<pre class="highlight"><c- a="">var</c-> node <c- o="">=</c-> getNode<c- p="">();</c->  <c- c1="">// Obtain an instance of Node.</c->

<c- a="">var</c-> newNode <c- o="">=</c-> <c- p="">{</c->
  nodeName<c- o="">:</c-> <c- u="">"span"</c-><c- p="">,</c->
  parentNode<c- o="">:</c-> <c- kc="">null</c-><c- p="">,</c->
  appendChild<c- o="">:</c-> <c- a="">function</c-><c- p="">(</c->newchild<c- p="">)</c-> <c- p="">{</c->
    <c- c1="">// ...</c->
  <c- p="">},</c->
  addEventListener<c- o="">:</c-> <c- a="">function</c-><c- p="">(</c->type<c- p="">,</c-> listener<c- p="">)</c-> <c- p="">{</c->
    <c- c1="">// ...</c->
  <c- p="">}</c->
<c- p="">};</c->
node<c- p="">.</c->appendChild<c- p="">(</c->newNode<c- p="">);</c->  <c- c1="">// This will throw a TypeError exception.</c->
</pre>
   </div>
   <h3 class="heading settled" data-level="2.3" id="idl-interface-mixins"><span class="secno">2.3. </span><span class="content">Interface mixins</span><a class="self-link" href="#idl-interface-mixins"></a></h3>
   <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="interface-mixin">interface mixin</dfn> is a definition (matching <emu-t>interface</emu-t> <emu-nt><a href="#prod-MixinRest">MixinRest</a></emu-nt>)
that declares state and behavior that can be <a data-link-type="dfn" href="#include" id="ref-for-include②">included</a> by one or more <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤">interfaces</a>,
and that are exposed by objects that implement an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥">interface</a> that <a data-link-type="dfn" href="#include" id="ref-for-include③">includes</a> the <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③">interface mixin</a>.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- b="">mixin</c-> <c- g="">identifier</c-> {
  /* mixin_members... */
};
</pre>
   <p class="note" role="note"><span>Note:</span> <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④">Interface mixins</a>, much like <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface⑤">partial interfaces</a>,
are intended for use as a specification editorial aide,
allowing a coherent set of functionalities to be grouped together,
and included in multiple interfaces, possibly across documents.
They are not meant to be exposed through language bindings.
Guidance on when to choose <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface⑥">partial interfaces</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin⑤">interface mixins</a>,
or <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①">partial interface mixins</a> can be found in <a href="#using-mixins-and-partials">§2.3.1 Using mixins and partials</a>.</p>
   <p>An <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin⑥">interface mixin</a> is a specification of a set of <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="interface mixin member" id="interface-mixin-member">interface mixin members</dfn> (matching <emu-nt><a href="#prod-MixinMembers">MixinMembers</a></emu-nt>),
which are the <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant③">constants</a>, <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①">regular operations</a>, <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute">regular attributes</a>, and <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier">stringifiers</a> that appear between the braces in the <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin⑦">interface mixin</a> declaration.</p>
   <p>These <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant④">constants</a>, <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②">regular operations</a>, <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①">regular attributes</a>, and <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier①">stringifiers</a> describe the behaviors that can be implemented by an object,
as if they were specified on the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦">interface</a> that <a data-link-type="dfn" href="#include" id="ref-for-include④">includes</a> them.</p>
   <p><a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute①">Static attributes</a>, <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①">static operations</a>, <a data-link-type="dfn" href="#dfn-special-operation" id="ref-for-dfn-special-operation①">special operations</a> except for <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier②">stringifiers</a>, and <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration">iterable</a>, <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration">maplike</a>, and <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration">setlike declarations</a> cannot appear in <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin⑧">interface mixin</a> declarations.</p>
   <p>As with interfaces, the IDL for <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin⑨">interface mixins</a> can be split into multiple parts by using <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="partial-interface-mixin">partial interface mixin</dfn> definitions
(matching <emu-t>partial</emu-t> <emu-t>interface</emu-t> <emu-nt><a href="#prod-MixinRest">MixinRest</a></emu-nt>).
The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①⓪">identifier</a> of a <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin②">partial interface mixin</a> <a data-link-type="dfn" href="#dfn-definition" id="ref-for-dfn-definition②">definition</a> must
be the same as the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①①">identifier</a> of an <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①⓪">interface mixin</a> <a data-link-type="dfn" href="#dfn-definition" id="ref-for-dfn-definition③">definition</a>.
All of the <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①">members</a> that appear on each of the <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin③">partial interface mixin</a> <a data-link-type="dfn" href="#dfn-definition" id="ref-for-dfn-definition④">definitions</a> are considered to be <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①">members</a> of the <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①①">interface mixin</a> itself,
and—by extension—of the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧">interfaces</a> that <a data-link-type="dfn" href="#include" id="ref-for-include⑤">include</a> the <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①②">interface mixin</a>.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- b="">mixin</c-> <mark><c- g="">SomeMixin</c-></mark> {
  /* mixin_members... */
};

<c- b="">partial</c-> <c- b="">interface</c-> <c- b="">mixin</c-> <mark><c- g="">SomeMixin</c-></mark> {
  /* mixin_members... */
};
</pre>
   <p>The order that members appear in has significance for property enumeration
in the <a href="#es-namespaces">ECMAScript binding</a>.</p>
   <p>Note that unlike <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨">interfaces</a> or <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary⑤">dictionaries</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①③">interface mixins</a> do not create types.</p>
   <p>Of the extended attributes defined in this specification,
only the [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed③">Exposed</a></code>] and [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext②">SecureContext</a></code>] extended attributes
are applicable to <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①④">interface mixins</a>.</p>
   <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="includes-statement">includes statement</dfn> is a definition
(matching <emu-nt><a href="#prod-IncludesStatement">IncludesStatement</a></emu-nt>)
used to declare that all objects implementing an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⓪">interface</a> <var>I</var> (identified by the first <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①②">identifier</a>)
must additionally include the <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member②">members</a> of <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①⑤">interface mixin</a> <var>M</var> (identified by the second identifier). <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②①">Interface</a> <var>I</var> is said to <dfn class="dfn-paneled" data-dfn-for="interface" data-dfn-type="dfn" data-export="" id="include">include</dfn> <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①⑥">interface mixin</a> <var>M</var>.</p>
<pre class="syntax highlight"><c- n="">interface_identifier</c-> <c- b="">includes</c-> <c- n="">mixin_indentifier</c->;
</pre>
   <p>The first <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①③">identifier</a> must reference a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface⑦">non-callback</a> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②②">interface</a> <var>I</var>.
The second identifier must reference an <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①⑦">interface mixin</a> <var>M</var>.</p>
   <p>Each <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member③">member</a> of <var>M</var> is considered to be
a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②">member</a> of each <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②③">interface</a> <var>I</var>, <var>J</var>, <var>K</var>, … that <a data-link-type="dfn" href="#include" id="ref-for-include⑥">includes</a> <var>M</var>,
as if a copy of each <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member④">member</a> had been made.
So for a given member <var>m</var> of <var>M</var>,
interface <var>I</var> is considered to have a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member③">member</a> <var>m<sub>I</sub></var>,
interface <var>J</var> is considered to have a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member④">member</a> <var>m<sub>J</sub></var>,
interface <var>K</var> is considered to have a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member⑤">member</a> <var>m<sub>K</sub></var>, and so on.
The <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="host-interfaces">host interfaces</dfn> of <var>m<sub>I</sub></var>, <var>m<sub>J</sub></var>,
and <var>m<sub>K</sub></var>, are <var>I</var>, <var>J</var>, and <var>K</var> respectively.</p>
   <p class="note" role="note"><span>Note:</span> In ECMAScript, this implies that each <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation③">regular operation</a> declared as a <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member⑤">member</a> of <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①⑧">interface mixin</a> <var>M</var>,
and exposed as a data property with a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①">built-in function object</a> value,
is a distinct <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②">built-in function object</a> in each <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object">interface prototype object</a> whose associated <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②④">interface</a> <a data-link-type="dfn" href="#include" id="ref-for-include⑦">includes</a> <var>M</var>.
Similarly, for <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④">attributes</a>, each copy of the accessor property has
distinct <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects③">built-in function objects</a> for its getters and setters.</p>
   <p>The order of appearance of <a data-link-type="dfn" href="#includes-statement" id="ref-for-includes-statement②">includes statements</a> affects the order in which <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin①⑨">interface mixin</a> are <a data-link-type="dfn" href="#include" id="ref-for-include⑧">included</a> by their <a data-link-type="dfn" href="#host-interfaces" id="ref-for-host-interfaces">host interface</a>.</p>
   <p class="issue" id="issue-9c6a3cf4"><a class="self-link" href="#issue-9c6a3cf4"></a> <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member⑥">Member</a> order isn’t clearly specified,
in particular when <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②⓪">interface mixins</a> are defined in separate documents.
It is discussed in <a href="https://github.com/heycam/webidl/issues/432">issue #432</a>.</p>
   <p>No <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧">extended attributes</a> defined in this specification are applicable to <a data-link-type="dfn" href="#includes-statement" id="ref-for-includes-statement③">includes statements</a>.</p>
   <div class="example" id="example-mixin">
    <a class="self-link" href="#example-mixin"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①②">IDL fragment</a> defines an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⑤">interface</a>, <code class="idl">Entry</code>,
    and an <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②①">interface mixin</a>, <code class="idl">Observable</code>.
    The <a data-link-type="dfn" href="#includes-statement" id="ref-for-includes-statement④">includes statement</a> specifies that <code class="idl">Observable</code>’s <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member⑦">members</a> are always included on objects implementing <code class="idl">Entry</code>.</p>
<pre class="highlight"><c- b="">interface</c-> <c- g="">Entry</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">short</c-> <c- g="">entryType</c->;
  // ...
};

<c- b="">interface</c-> <c- b="">mixin</c-> <c- g="">Observable</c-> {
  <c- b="">void</c-> <c- g="">addEventListener</c->(<c- b="">DOMString</c-> <c- g="">type</c->,
                        <c- n="">EventListener</c-> <c- g="">listener</c->,
                        <c- b="">boolean</c-> <c- g="">useCapture</c->);
  // ...
};

<c- n="">Entry</c-> <c- b="">includes</c-> <c- n="">Observable</c->;
</pre>
    <p>An ECMAScript implementation would thus have an <code class="idl">addEventListener</code> property in the prototype chain of every <code class="idl">Entry</code>:</p>
<pre class="highlight"><c- a="">var</c-> e <c- o="">=</c-> getEntry<c- p="">();</c->          <c- c1="">// Obtain an instance of Entry.</c->
<c- k="">typeof</c-> e<c- p="">.</c->addEventListener<c- p="">;</c->   <c- c1="">// Evaluates to "function".</c->
</pre>
   </div>
   <div data-fill-with="grammar-CallbackOrInterfaceOrMixin"><pre class="grammar"><emu-nt><a href="#prod-CallbackOrInterfaceOrMixin">CallbackOrInterfaceOrMixin</a></emu-nt> ::
    <emu-t>callback</emu-t> <emu-nt><a href="#prod-CallbackRestOrInterface">CallbackRestOrInterface</a></emu-nt>
    <emu-t>interface</emu-t> <emu-nt><a href="#prod-InterfaceOrMixin">InterfaceOrMixin</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-CallbackRestOrInterfaceOrMixin"></div>
   <div data-fill-with="grammar-InterfaceOrMixin"><pre class="grammar"><emu-nt><a href="#prod-InterfaceOrMixin">InterfaceOrMixin</a></emu-nt> ::
    <emu-nt><a href="#prod-InterfaceRest">InterfaceRest</a></emu-nt>
    <emu-nt><a href="#prod-MixinRest">MixinRest</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-Partial"><pre class="grammar"><emu-nt><a href="#prod-Partial">Partial</a></emu-nt> ::
    <emu-t>partial</emu-t> <emu-nt><a href="#prod-PartialDefinition">PartialDefinition</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-PartialDefinition"><pre class="grammar"><emu-nt><a href="#prod-PartialDefinition">PartialDefinition</a></emu-nt> ::
    <emu-t>interface</emu-t> <emu-nt><a href="#prod-PartialInterfaceOrPartialMixin">PartialInterfaceOrPartialMixin</a></emu-nt>
    <emu-nt><a href="#prod-PartialDictionary">PartialDictionary</a></emu-nt>
    <emu-nt><a href="#prod-Namespace">Namespace</a></emu-nt>
</pre></div>
<pre class="grammar" id="prod-MixinRest"><emu-nt><a href="#prod-MixinRest">MixinRest</a></emu-nt> ::
    <emu-t>mixin</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#prod-MixinMembers">MixinMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-MixinMembers"><emu-nt><a href="#prod-MixinMembers">MixinMembers</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-MixinMember">MixinMember</a></emu-nt> <emu-nt><a href="#prod-MixinMembers">MixinMembers</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-MixinMember"><emu-nt><a href="#prod-MixinMember">MixinMember</a></emu-nt> ::
    <emu-nt><a href="#prod-Const">Const</a></emu-nt>
    <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt>
    <emu-nt><a href="#prod-Stringifier">Stringifier</a></emu-nt>
    <emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-IncludesStatement"><emu-nt><a href="#prod-IncludesStatement">IncludesStatement</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>includes</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>;</emu-t>
</pre>
   <h4 class="heading settled" data-level="2.3.1" id="using-mixins-and-partials"><span class="secno">2.3.1. </span><span class="content">Using mixins and partials</span><a class="self-link" href="#using-mixins-and-partials"></a></h4>
   <p><i>This section is informative.</i></p>
   <p><a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②②">Interface mixins</a> allow the sharing of <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑤">attributes</a>, <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant⑤">constants</a>, and <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④">operations</a> across <em>multiple</em> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⑥">interfaces</a>.
If you’re only planning to extend a single interface,
you might consider using a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface⑦">partial interface</a> instead.</p>
   <p>For example, instead of:</p>
<pre class="highlight"><c- b="">interface</c-> <c- b="">mixin</c-> <c- g="">WindowSessionStorage</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">Storage</c-> <c- g="">sessionStorage</c->;
};
<c- n="">Window</c-> <c- b="">includes</c-> <c- n="">WindowSessionStorage</c->;
</pre>
   <p>do:</p>
<pre class="highlight"><c- b="">partial</c-> <c- b="">interface</c-> <c- g="">Window</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">Storage</c-> <c- g="">sessionStorage</c->;
};
</pre>
   <p>Additionally, you can rely on extending <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②③">interface mixins</a> exposed by other specifications
to target common use cases, such as <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed">exposing</a> a set of <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑥">attributes</a>, <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant⑥">constants</a>, or <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤">operations</a> across both window and worker contexts.</p>
   <p>For example, instead of the common but verbose:</p>
<pre class="highlight"><c- b="">interface</c-> <c- b="">mixin</c-> <c- g="">GlobalCrypto</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">Crypto</c-> <c- g="">crypto</c->;
};

<c- n="">Window</c-> <c- b="">includes</c-> <c- n="">GlobalCrypto</c->;
<c- n="">WorkerGlobalScope</c-> <c- b="">includes</c-> <c- n="">GlobalCrypto</c->;
</pre>
   <p>you can extend the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope" id="ref-for-windoworworkerglobalscope">WindowOrWorkerGlobalScope</a></code> <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②④">interface mixin</a> using a <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin④">partial interface mixin</a>:</p>
<pre class="highlight"><c- b="">partial</c-> <c- b="">interface</c-> <c- b="">mixin</c-> <c- g="">WindowOrWorkerGlobalScope</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">Crypto</c-> <c- g="">crypto</c->;
};
</pre>
   <h3 class="heading settled" data-level="2.4" id="idl-members"><span class="secno">2.4. </span><span class="content">Members</span><a class="self-link" href="#idl-members"></a></h3>
   <p><a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⑦">Interfaces</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②⑤">interface mixins</a>, and <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace④">namespaces</a> are specifications of a set of <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-member">members</dfn> (respectively matching <emu-nt><a href="#prod-InterfaceMembers">InterfaceMembers</a></emu-nt>, <emu-nt><a href="#prod-MixinMembers">MixinMembers</a></emu-nt>, and <emu-nt><a href="#prod-NamespaceMembers">NamespaceMembers</a></emu-nt>),
which are the <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant⑦">constants</a>, <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑦">attributes</a>, <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑥">operations</a>, and
other declarations that appear between the braces of their declarations. <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑧">Attributes</a> describe the state that an object
implementing the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⑧">interface</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②⑥">interface mixin</a>, or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace⑤">namespace</a> will expose,
and <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑦">operations</a> describe the behaviors that can be invoked on the object. <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant⑧">Constants</a> declare named constant values
that are exposed as a convenience to users of objects in the system.</p>
   <p><a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⑨">Interfaces</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②⑦">interface mixins</a>, and <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace⑥">namespaces</a> each support a different set of <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member⑥">members</a>,
which are specified in <a href="#idl-interfaces">§2.2 Interfaces</a>, <a href="#idl-interface-mixins">§2.3 Interface mixins</a>, and <a href="#idl-namespaces">§2.5 Namespaces</a>,
and summarized in the following informative table:</p>
   <table class="data complex non-normative">
    <thead>
     <tr>
      <th>
      </th><th><a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③⓪">Interfaces</a>
      </th><th><a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface⑧">Callback interfaces</a>
      </th><th><a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②⑧">Interface mixins</a>
      </th><th><a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace⑦">Namespaces</a>
    </th></tr></thead><tbody>
     <tr>
      <th><a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant⑨">Constants</a>
      </th><td>●
      </td><td>●
      </td><td>●
      </td><td>
     </td></tr><tr>
      <th><a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute②">Regular attributes</a>
      </th><td>●
      </td><td>●
      </td><td>●
      </td><td>Only <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①">read only</a> attributes
     </td></tr><tr>
      <th><a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute②">Static attributes</a>
      </th><td>●
      </td><td>
      </td><td>
      </td><td>
     </td></tr><tr>
      <th><a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation④">Regular Operations</a>
      </th><td>●
      </td><td>●
      </td><td>●
      </td><td>●
     </td></tr><tr>
      <th><a data-link-type="dfn" href="#dfn-special-operation" id="ref-for-dfn-special-operation②">Special Operations</a>
      </th><td>●
      </td><td>
      </td><td>Only <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier③">stringifiers</a>
      </td><td>
     </td></tr><tr>
      <th><a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation②">Static Operations</a>
      </th><td>●
      </td><td>
      </td><td>
      </td><td>
     </td></tr><tr>
      <th><a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①">Iterable declarations</a>
      </th><td>●
      </td><td>
      </td><td>
      </td><td>
     </td></tr><tr>
      <th><a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①">Maplike declarations</a>
      </th><td>●
      </td><td>
      </td><td>
      </td><td>
     </td></tr><tr>
      <th><a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①">Setlike declarations</a>
      </th><td>●
      </td><td>
      </td><td>
      </td><td>
   </td></tr></tbody></table>
   <h4 class="heading settled" data-level="2.4.1" id="idl-constants"><span class="secno">2.4.1. </span><span class="content">Constants</span><a class="self-link" href="#idl-constants"></a></h4>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-constant">constant</dfn> is a declaration (matching <emu-nt><a href="#prod-Const">Const</a></emu-nt>) used to bind a constant value to a name.
Constants can appear on <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③①">interfaces</a>.</p>
   <p class="advisement"> Constants have in the past primarily been used to define
    named integer codes in the style of an enumeration.  The Web platform
    is moving away from this design pattern in favor of the use of strings.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20Constants">filing an issue</a> before proceeding. </p>
<pre class="syntax highlight"><c- b="">const</c-> <c- n="">type</c-> <c- g="">constant_identifier</c-> = 42;</pre>
   <p>The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①④">identifier</a> of a <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①⓪">constant</a> must not be the same as the identifier
of another <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①">interface member</a> defined on the same interface.
The identifier also must not
be "<code>length</code>", "<code>name</code>" or "<code>prototype</code>".</p>
   <p class="note" role="note"><span>Note:</span> These three names are the names of properties that may exist on <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①">function objects</a> at the time the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②">function object</a> is created in the ECMAScript language binding.</p>
   <p>The type of a constant (matching <emu-nt><a href="#prod-ConstType">ConstType</a></emu-nt>)
must not be any type other than
a <a data-link-type="dfn" href="#dfn-primitive-type" id="ref-for-dfn-primitive-type">primitive type</a> or a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type">nullable</a> primitive type.
If an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①⑤">identifier</a> is used,
it must reference a <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef⑤">typedef</a> whose type is a primitive type or a nullable primitive type.</p>
   <p>The <emu-nt><a href="#prod-ConstValue">ConstValue</a></emu-nt> part of a
constant declaration gives the value of the constant, which can be
one of the two boolean literal tokens (<emu-t>true</emu-t> and <emu-t>false</emu-t>),
the <emu-t>null</emu-t> token, an <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> token,
a <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token,
or one of the three special floating point constant values
(<emu-t>-Infinity</emu-t>, <emu-t>Infinity</emu-t> and <emu-t>NaN</emu-t>).</p>
   <p class="note" role="note"><span>Note:</span> These values – in addition to strings and the empty sequence – can also be used to specify the <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value">default value of a dictionary member</a> or <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value">of an optional argument</a>.  Note that strings and the
empty sequence <code>[]</code> cannot be used as the value of a <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①①">constant</a>.</p>
   <p>The value of the boolean literal tokens <emu-t>true</emu-t> and <emu-t>false</emu-t> are the IDL <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean">boolean</a></code> values <code class="idl">true</code> and <code class="idl">false</code>.</p>
   <div class="algorithm" data-algorithm="value of integer tokens">
    <p>The value of an <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> token
    is an integer whose value is determined as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>S</var> be the sequence of characters matched by the <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> token.</p>
     </li><li data-md="">
      <p>Let <var>sign</var> be −1 if <var>S</var> begins with <span class="char">U+002D HYPHEN-MINUS ("-")</span>, and 1 otherwise.</p>
     </li><li data-md="">
      <p>Let <var>base</var> be the base of the number based on the characters that follow the optional leading <span class="char">U+002D HYPHEN-MINUS ("-")</span> character:</p>
      <dl class="switch">
       <dt data-md=""><span class="char">U+0030 DIGIT ZERO ("0")</span>, <span class="char">U+0058 LATIN CAPITAL LETTER X ("X")</span>
       </dt><dt data-md=""><span class="char">U+0030 DIGIT ZERO ("0")</span>, <span class="char">U+0078 LATIN SMALL LETTER X ("x")</span>
       </dt><dd data-md="">
        <p>The base is 16.</p>
       </dd><dt data-md=""><span class="char">U+0030 DIGIT ZERO ("0")</span>
       </dt><dd data-md="">
        <p>The base is 8.</p>
       </dd><dt data-md=""><span class="char">Otherwise</span>
       </dt><dd data-md="">
        <p>The base is 10.</p>
      </dd></dl>
     </li><li data-md="">
      <p>Let <var>number</var> be the result of interpreting all remaining characters following the optional leading <span class="char">U+002D HYPHEN-MINUS ("-")</span> character and any characters indicating the base as an integer specified in base <var>base</var>.</p>
     </li><li data-md="">
      <p>Return <var>sign</var> × <var>number</var>.</p>
    </li></ol>
   </div>
   <p>The type of an <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> token is the same
as the type of the constant, dictionary member or optional argument it is being used as the value of.
The value of the <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> token must not
lie outside the valid range of values for its type, as given in <a href="#idl-types">§2.12 Types</a>.</p>
   <div class="algorithm" data-algorithm="value of float tokens" id="float-token-value">
     The value of a <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token is
    either an IEEE 754 single-precision floating point number or an IEEE 754
    double-precision floating point number, depending on the type of the
    constant, dictionary member or optional argument it is being used as the value for, determined as follows: 
    <ol>
     <li data-md="">
      <p>Let <var>S</var> be the sequence of characters matched by the <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token.</p>
     </li><li data-md="">
      <p>Let <var>result</var> be the Mathematical Value that would be obtained if <var>S</var> were parsed as an ECMAScript <emu-nt><a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-literals-numeric-literals" id="ref-for-sec-literals-numeric-literals">NumericLiteral</a></emu-nt>.</p>
     </li><li data-md="">
      <p>If the <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token is being
used as the value for a <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float">float</a></code> or <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float">unrestricted float</a></code>, then
the value of the <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token
is the IEEE 754 single-precision floating point number closest to <var>result</var>.</p>
     </li><li data-md="">
      <p>Otherwise, the <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token is being
used as the value for a <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double">double</a></code> or <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double">unrestricted double</a></code>, and
the value of the <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token
is the IEEE 754 double-precision floating point number closest to <var>result</var>. <a data-link-type="biblio" href="#biblio-ieee-754">[IEEE-754]</a></p>
    </li></ol>
   </div>
   <p>The value of a constant value specified as <emu-t>Infinity</emu-t>, <emu-t>-Infinity</emu-t> or <emu-t>NaN</emu-t> is either
an IEEE 754 single-precision floating point number or an IEEE 754
double-precision floating point number, depending on the type of the
constant, dictionary member or optional argument is is being used as the
value for:</p>
   <dl class="switch">
    <dt data-md="">Type <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float①">unrestricted float</a></code>, constant value <emu-t>Infinity</emu-t>
    </dt><dd data-md="">
     <p>The value is the IEEE 754 single-precision positive infinity value.</p>
    </dd><dt data-md="">Type <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double①">unrestricted double</a></code>, constant value <emu-t>Infinity</emu-t>
    </dt><dd data-md="">
     <p>The value is the IEEE 754 double-precision positive infinity value.</p>
    </dd><dt data-md="">Type <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float②">unrestricted float</a></code>, constant value <emu-t>-Infinity</emu-t>
    </dt><dd data-md="">
     <p>The value is the IEEE 754 single-precision negative infinity value.</p>
    </dd><dt data-md="">Type <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double②">unrestricted double</a></code>, constant value <emu-t>-Infinity</emu-t>
    </dt><dd data-md="">
     <p>The value is the IEEE 754 double-precision negative infinity value.</p>
    </dd><dt data-md="">Type <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float③">unrestricted float</a></code>, constant value <emu-t>NaN</emu-t>
    </dt><dd data-md="">
     <p>The value is the IEEE 754 single-precision NaN value with the bit pattern 0x7fc00000.</p>
    </dd><dt data-md="">Type <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double③">unrestricted double</a></code>, constant value <emu-t>NaN</emu-t>
    </dt><dd data-md="">
     <p>The value is the IEEE 754 double-precision NaN value with the bit pattern 0x7ff8000000000000.</p>
   </dd></dl>
   <p>The type of a <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token is the same
as the type of the constant, dictionary member or optional argument it is being used as the value of.
The value of the <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token must not
lie outside the valid range of values for its type, as given in <a href="#idl-types">§2.12 Types</a>.
Also, <emu-t>Infinity</emu-t>, <emu-t>-Infinity</emu-t> and <emu-t>NaN</emu-t> must not
be used as the value of a <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float①">float</a></code> or <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double①">double</a></code>.</p>
   <p>The value of the <emu-t>null</emu-t> token is the special <emu-val>null</emu-val> value that is a member of the <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①">nullable types</a>.  The type of
the <emu-t>null</emu-t> token is the same as the
type of the constant, dictionary member or optional argument it is being used as the value of.</p>
   <p>If <var>VT</var> is the type of the value assigned to a constant, and <var>DT</var> is the type of the constant, dictionary member or optional argument itself, then these types must
be compatible, which is the case if <var>DT</var> and <var>VT</var> are identical,
or <var>DT</var> is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②">nullable type</a> whose <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type">inner type</a> is <var>VT</var>.</p>
   <p><a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①②">Constants</a> are not associated with
particular instances of the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③②">interface</a> on which they appear.  It is language binding specific whether <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①③">constants</a> are exposed on instances.</p>
   <div class="note" role="note">
    <p>The ECMAScript language binding does however
    allow <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①④">constants</a> to be accessed
    through objects implementing the IDL <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③③">interfaces</a> on which the <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①⑤">constants</a> are declared.
    For example, with the following IDL:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">const</c-> <c- b="">short</c-> <c- g="">rambaldi</c-> = 47;
};
</pre>
    <p>the constant value can be accessed in ECMAScript  either as <code>A.rambaldi</code> or <code>instanceOfA.rambaldi</code>.</p>
   </div>
   <p>The following extended attributes are applicable to constants:
[<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed④">Exposed</a></code>],
[<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext③">SecureContext</a></code>].</p>
<pre class="grammar" id="prod-Const"><emu-nt><a href="#prod-Const">Const</a></emu-nt> ::
    <emu-t>const</emu-t> <emu-nt><a href="#prod-ConstType">ConstType</a></emu-nt> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-nt><a href="#prod-ConstValue">ConstValue</a></emu-nt> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-ConstValue"><emu-nt><a href="#prod-ConstValue">ConstValue</a></emu-nt> ::
    <emu-nt><a href="#prod-BooleanLiteral">BooleanLiteral</a></emu-nt>
    <emu-nt><a href="#prod-FloatLiteral">FloatLiteral</a></emu-nt>
    <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t>
    <emu-t>null</emu-t>
</pre>
<pre class="grammar" id="prod-BooleanLiteral"><emu-nt><a href="#prod-BooleanLiteral">BooleanLiteral</a></emu-nt> ::
    <emu-t>true</emu-t>
    <emu-t>false</emu-t>
</pre>
<pre class="grammar" id="prod-FloatLiteral"><emu-nt><a href="#prod-FloatLiteral">FloatLiteral</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-float">float</a></emu-t>
    <emu-t>-Infinity</emu-t>
    <emu-t>Infinity</emu-t>
    <emu-t>NaN</emu-t>
</pre>
<pre class="grammar" id="prod-ConstType"><emu-nt><a href="#prod-ConstType">ConstType</a></emu-nt> ::
    <emu-nt><a href="#prod-PrimitiveType">PrimitiveType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
</pre>
   <div class="example" id="example-221dba30">
    <a class="self-link" href="#example-221dba30"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①③">IDL fragment</a> demonstrates how <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①⑥">constants</a> of the above types can be defined.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Util</c-> {
  <c- b="">const</c-> <c- b="">boolean</c-> <c- g="">DEBUG</c-> = <c- b="">false</c->;
  <c- b="">const</c-> <c- b="">octet</c-> <c- g="">LF</c-> = 10;
  <c- b="">const</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">BIT_MASK</c-> = 0x0000fc00;
  <c- b="">const</c-> <c- b="">double</c-> <c- g="">AVOGADRO</c-> = 6.022e23;
};
</pre>
   </div>
   <h4 class="heading settled" data-level="2.4.2" id="idl-attributes"><span class="secno">2.4.2. </span><span class="content">Attributes</span><a class="self-link" href="#idl-attributes"></a></h4>
   <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-attribute">attribute</dfn> is an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②">interface member</a> (matching <emu-t>inherit</emu-t> <emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>, <emu-t>static</emu-t> <emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>, <emu-t>stringifier</emu-t> <emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>,
or <emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>)
that is used to declare data fields with a given type and <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①⑥">identifier</a> whose value can
be retrieved and (in some cases) changed.  There are two kinds of attributes:</p>
   <ol>
    <li data-md="">
     <p><a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute③">regular attributes</a>, which are those
used to declare that objects implementing the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③④">interface</a> will have a data field member with the given <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①⑦">identifier</a></p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">attribute</c-> <c- n="">type</c-> <c- g="">identifier</c->;
};
</pre>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute③">static attributes</a>, which are used
to declare attributes that are not associated with a particular object implementing the interface</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">static</c-> <c- b="">attribute</c-> <c- n="">type</c-> <c- g="">identifier</c->;
};
</pre>
   </li></ol>
   <p>If an attribute has no <emu-t>static</emu-t> keyword, then it declares a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-regular-attribute">regular attribute</dfn>.  Otherwise,
it declares a <a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute④">static attribute</a>. Note that in addition to being <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member③">interface members</a>, <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only②">read only</a> <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute④">regular attributes</a> can be <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member">namespace members</a> as well.</p>
   <div class="algorithm" data-algorithm="get the underlying value"> To <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="get-the-underlying-value">get the underlying value</dfn> of an attribute <var>attr</var> given a value <var>target</var>,
    return the result of performing the actions listed in the description of <var>attr</var> that occur on getting,
    or those listed in the description of the inherited attribute,
    if <var>attr</var> is declared to inherit its getter, on <var>target</var> if <var>target</var> is not null. </div>
   <p>The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①⑧">identifier</a> of an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑨">attribute</a> must not be the same as the identifier
of another <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member④">interface member</a> defined on the same <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③⑤">interface</a>.
The identifier of a static attribute must not
be "<code>prototype</code>".</p>
   <p>The type of the attribute is given by the type (matching <emu-nt><a href="#prod-Type">Type</a></emu-nt>)
that appears after the <emu-t>attribute</emu-t> keyword.
If the <emu-nt><a href="#prod-Type">Type</a></emu-nt> is an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier①⑨">identifier</a> or an identifier followed by <emu-t>?</emu-t>,
then the identifier must
identify an interface, <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration③">enumeration</a>, <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function⑥">callback function</a> or <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef⑥">typedef</a>.</p>
   <p>The type of the attribute, after resolving typedefs, must not be a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③">nullable</a> or non-nullable version of any of the following types:</p>
   <ul>
    <li data-md="">
     <p>a <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type">sequence type</a></p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary">dictionary type</a></p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#record-type" id="ref-for-record-type">record type</a></p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type">union type</a> that has a nullable or non-nullable sequence type, dictionary,
or record
as one of its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types">flattened member types</a></p>
   </li></ul>
   <p>The attribute is <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-read-only">read only</dfn> if the <emu-t>readonly</emu-t> keyword is used before the <emu-t>attribute</emu-t> keyword.
An object that implements the interface on which a read only attribute
is defined will not allow assignment to that attribute.  It is language
binding specific whether assignment is simply disallowed by the language,
ignored or an exception is thrown.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">type</c-> <c- g="">identifier</c->;
};
</pre>
   <p>Attributes whose type is a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type">promise type</a> must be <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only③">read only</a>. Additionally, they cannot have
any of the <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨">extended attributes</a> [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter">LenientSetter</a></code>], [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards">PutForwards</a></code>], [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable">Replaceable</a></code>], or
[<code class="idl"><a data-link-type="idl" href="#SameObject" id="ref-for-SameObject">SameObject</a></code>].</p>
   <p>A <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute⑤">regular attribute</a> that is not <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only④">read only</a> can be declared to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-inherit-getter">inherit its getter</dfn> from an ancestor interface.  This can be used to make a read only attribute
in an ancestor interface be writable on a derived interface.  An attribute <a data-link-type="dfn" href="#dfn-inherit-getter" id="ref-for-dfn-inherit-getter">inherits its getter</a> if
its declaration includes <emu-t>inherit</emu-t> in the declaration.
The read only attribute from which the attribute inherits its getter
is the attribute with the same identifier on the closest ancestor interface
of the one on which the inheriting attribute is defined.  The attribute
whose getter is being inherited must be
of the same type as the inheriting attribute, and <emu-t>inherit</emu-t> must not appear on a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only⑤">read only</a> attribute or a <a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute⑤">static attribute</a>.</p>
<pre class="syntax highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Ancestor</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">TheType</c-> <c- g="">theIdentifier</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Derived</c-> : <c- n="">Ancestor</c-> {
  <c- b="">inherit</c-> <c- b="">attribute</c-> <c- n="">TheType</c-> <c- g="">theIdentifier</c->;
};
</pre>
   <p>When the <emu-t>stringifier</emu-t> keyword is used
in a <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute⑥">regular attribute</a> declaration, it indicates that objects implementing the
interface will be stringified to the value of the attribute.  See <a href="#idl-stringifiers">§2.4.4.1 Stringifiers</a> for details.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">stringifier</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">identifier</c->;
};
</pre>
   <p id="callback-attribute-exceptions"> If an implementation attempts to get or set the value of an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①⓪">attribute</a> on a <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object③">user object</a> (for example, when a callback object has been supplied to the implementation),
    and that attempt results in an exception being thrown, then, unless otherwise specified, that
    exception will be propagated to the user code that caused the
    implementation to access the attribute.  Similarly, if a value
    returned from getting the attribute cannot be converted to
    an IDL type, then any exception resulting from this will also
    be propagated to the user code that resulted in the implementation
    attempting to get the value of the attribute. </p>
   <p>The following <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪">extended attributes</a> are applicable to regular and static attributes:
[<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed⑤">Exposed</a></code>],
[<code class="idl"><a data-link-type="idl" href="#SameObject" id="ref-for-SameObject①">SameObject</a></code>],
[<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext④">SecureContext</a></code>].</p>
   <p>The following <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①">extended attributes</a> are applicable only to regular attributes:
[<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter①">LenientSetter</a></code>],
[<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis">LenientThis</a></code>],
[<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①">PutForwards</a></code>],
[<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable①">Replaceable</a></code>],
[<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable">Unforgeable</a></code>].</p>
<pre class="grammar" id="prod-ReadOnlyMember"><emu-nt><a href="#prod-ReadOnlyMember">ReadOnlyMember</a></emu-nt> ::
    <emu-t>readonly</emu-t> <emu-nt><a href="#prod-ReadOnlyMemberRest">ReadOnlyMemberRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-ReadOnlyMemberRest"><emu-nt><a href="#prod-ReadOnlyMemberRest">ReadOnlyMemberRest</a></emu-nt> ::
    <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt>
</pre>
<pre class="grammar" id="prod-ReadWriteAttribute"><emu-nt><a href="#prod-ReadWriteAttribute">ReadWriteAttribute</a></emu-nt> ::
    <emu-t>inherit</emu-t> <emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-AttributeRest"><emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt> ::
    <emu-t>attribute</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-nt><a href="#prod-AttributeName">AttributeName</a></emu-nt> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-AttributeName"><emu-nt><a href="#prod-AttributeName">AttributeName</a></emu-nt> ::
    <emu-nt><a href="#prod-AttributeNameKeyword">AttributeNameKeyword</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
</pre>
<pre class="grammar" id="prod-AttributeNameKeyword"><emu-nt><a href="#prod-AttributeNameKeyword">AttributeNameKeyword</a></emu-nt> ::
    <emu-t>required</emu-t>
</pre>
<pre class="grammar" id="prod-ReadOnly"><emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> ::
    <emu-t>readonly</emu-t>
    ε
</pre>
   <div class="example" id="example-ca172334">
    <a class="self-link" href="#example-ca172334"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①④">IDL fragment</a> demonstrates how <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①①">attributes</a> can be declared on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③⑥">interface</a>:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Animal</c-> {

  // A simple attribute that can be set to any string value.
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">name</c->;

  // An attribute whose value can be assigned to.
  <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">short</c-> <c- g="">age</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Person</c-> : <c- n="">Animal</c-> {

  // An attribute whose getter behavior is inherited from Animal, and need not be
  // specified in the description of Person.
  <c- b="">inherit</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">name</c->;
};
</pre>
   </div>
   <h4 class="heading settled" data-level="2.4.3" id="idl-operations"><span class="secno">2.4.3. </span><span class="content">Operations</span><a class="self-link" href="#idl-operations"></a></h4>
   <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-operation">operation</dfn> is an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member⑤">interface member</a> (matching <emu-t>static</emu-t> <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt>, <emu-t>stringifier</emu-t> <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt>, <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt> or <emu-nt><a href="#prod-SpecialOperation">SpecialOperation</a></emu-nt>)
that defines a behavior that can be invoked on objects implementing the interface.
There are three kinds of operation:</p>
   <ol>
    <li data-md="">
     <p><a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation⑤">regular operations</a>, which
are those used to declare that objects implementing the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③⑦">interface</a> will have a method with
the given <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②⓪">identifier</a></p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- n="">return_type</c-> <c- g="">identifier</c->(/* arguments... */);
};
</pre>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-special-operation" id="ref-for-dfn-special-operation③">special operations</a>,
which are used to declare special behavior on objects
implementing the interface, such as object indexing and stringification</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  /* special_keyword */ <c- n="">return_type</c-> <c- g="">identifier</c->(/* arguments... */);
  /* special_keyword */ <c- n="">return_type</c-> (/* arguments... */);
};
</pre>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation③">static operations</a>,
which are used to declare operations that are not associated with
a particular object implementing the interface</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">static</c-> <c- n="">return_type</c-> <c- g="">identifier</c->(/* arguments... */);
};
</pre>
   </li></ol>
   <p>If an operation has an identifier but no <emu-t>static</emu-t> keyword, then it declares a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-regular-operation">regular operation</dfn>.
If the operation has a <a data-link-type="dfn" href="#dfn-special-keyword" id="ref-for-dfn-special-keyword">special keyword</a> used in its declaration (that is, any keyword matching <emu-nt><a href="#prod-Special">Special</a></emu-nt>, or
the <emu-t>stringifier</emu-t> keyword),
then it declares a special operation.  A single operation can declare
both a regular operation and a special operation;
see <a href="#idl-special-operations">§2.4.4 Special operations</a> for details on special operations.
Note that in addition to being <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member⑥">interface members</a>,
regular operations can also be <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member①">namespace members</a>.</p>
   <p>If an operation has no identifier,
then it must be declared to be a special operation
using one of the special keywords.</p>
   <p>The identifier of a <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation⑥">regular operation</a> or <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation④">static operation</a> must not be the same as the identifier
of a <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①⑦">constant</a> or <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①②">attribute</a> defined on the same <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③⑧">interface</a>.
The identifier of a static operation must not be "<code>prototype</code>".</p>
   <p class="note" role="note"><span>Note:</span> The identifier can be the same
as that of another operation on the interface, however.
This is how operation overloading is specified.</p>
   <p>The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②①">identifier</a> of a <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation⑤">static operation</a> also must not be the same as the identifier
of a <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation⑦">regular operation</a> defined on the same <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface③⑨">interface</a>.</p>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-return-type">return type</dfn> of the operation is given
by the type (matching <emu-nt><a href="#prod-ReturnType">ReturnType</a></emu-nt>)
that appears before the operation’s optional <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②②">identifier</a>.
A return type of <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-void"><code>void</code></dfn> indicates that the operation returns no value.
If the return type is an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②③">identifier</a> followed by <emu-t>?</emu-t>,
then the identifier must
identify an interface, dictionary, <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration④">enumeration</a>, <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function⑦">callback function</a> or <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef⑦">typedef</a>.</p>
   <p>An operation’s arguments (matching <emu-nt><a href="#prod-ArgumentList">ArgumentList</a></emu-nt>)
are given between the parentheses in the declaration.  Each individual argument is specified
as a type (matching <emu-nt><a href="#prod-Type">Type</a></emu-nt>) followed by an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②④">identifier</a> (matching <emu-nt><a href="#prod-ArgumentName">ArgumentName</a></emu-nt>).</p>
   <p class="note" role="note"><span>Note:</span> For expressiveness, the identifier of an operation argument can also be specified
as one of the keywords matching the <emu-nt><a href="#prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt> symbol without needing to escape it.</p>
   <p>If the <emu-nt><a href="#prod-Type">Type</a></emu-nt> of an operation argument is an identifier
followed by <emu-t>?</emu-t>,
then the identifier must identify an interface, <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration⑤">enumeration</a>, <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function⑧">callback function</a> or <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef⑧">typedef</a>.
If the operation argument type is an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②⑤">identifier</a> not followed by <emu-t>?</emu-t>, then the identifier must
identify any one of those definitions or a <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary⑥">dictionary</a>.</p>
   <p>If the operation argument type, after resolving typedefs,
is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④">nullable type</a>,
its <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type①">inner type</a> must not be a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary①">dictionary type</a>.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- n="">return_type</c-> <c- g="">identifier</c->(<c- n="">type</c-> <c- g="">identifier</c->, <c- n="">type</c-> <c- g="">identifier</c-> /* , ... */);
};
</pre>
   <p>The identifier of each argument must not be the same
as the identifier of another argument in the same operation declaration.</p>
   <p>Each argument can be preceded by a list of <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②">extended attributes</a> (matching <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt>),
which can control how a value passed as the argument will be handled in
language bindings.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- n="">return_type</c-> <c- g="">identifier</c->([<mark><c- g="">extended_attributes</c-></mark>] <c- n="">type</c-> <c- g="">identifier</c->, [<mark><c- g="">extended_attributes</c-></mark>] <c- n="">type</c-> <c- g="">identifier</c-> /* , ... */);
};
</pre>
   <div class="example" id="example-7ca35e7d">
    <a class="self-link" href="#example-7ca35e7d"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①⑤">IDL fragment</a> demonstrates how <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation⑧">regular operations</a> can be declared on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④⓪">interface</a>:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Dimensions</c-> {
  <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">width</c->;
  <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">height</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Button</c-> {

  // An operation that takes no arguments and returns a boolean.
  <c- b="">boolean</c-> <c- g="">isMouseOver</c->();

  // Overloaded operations.
  <c- b="">void</c-> <c- g="">setDimensions</c->(<c- n="">Dimensions</c-> <c- g="">size</c->);
  <c- b="">void</c-> <c- g="">setDimensions</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">width</c->, <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">height</c->);
};
</pre>
   </div>
   <p>An operation is considered to be <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-variadic">variadic</dfn> if the final argument uses the <emu-t>...</emu-t> token just
after the argument type.  Declaring an operation to be variadic indicates that
the operation can be invoked with any number of arguments after that final argument.
Those extra implied formal arguments are of the same type as the final explicit
argument in the operation declaration.  The final argument can also be omitted
when invoking the operation.  An argument must not
be declared with the <emu-t>...</emu-t> token unless it
is the final argument in the operation’s argument list.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- n="">return_type</c-> <c- g="">identifier</c->(<c- n="">type</c-><mark>...</mark> <c- g="">identifier</c->);
  <c- n="">return_type</c-> <c- g="">identifier</c->(<c- n="">type</c-> <c- g="">identifier</c->, <c- n="">type</c-><mark>...</mark> <c- g="">identifier</c->);
};
</pre>
   <p><a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③">Extended attributes</a> that <a data-link-type="dfn" href="#dfn-xattr-argument-list" id="ref-for-dfn-xattr-argument-list">take an argument list</a> ([<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor③">Constructor</a></code>] and
[<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor②">NamedConstructor</a></code>], of those
defined in this specification) and <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function⑨">callback functions</a> are also considered to be <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic">variadic</a> when the <emu-t>...</emu-t> token is used in their argument lists.</p>
   <div class="example" id="example-ad79e8ac">
    <a class="self-link" href="#example-ad79e8ac"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①⑥">IDL fragment</a> defines an interface that has
    two variadic operations:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">IntegerSet</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">cardinality</c->;

  <c- b="">void</c-> <c- g="">union</c->(<c- b="">long</c->... <c- g="">ints</c->);
  <c- b="">void</c-> <c- g="">intersection</c->(<c- b="">long</c->... <c- g="">ints</c->);
};
</pre>
    <p>In the ECMAScript binding, variadic operations are implemented by
    functions that can accept the subsequent arguments:</p>
<pre class="highlight"><c- a="">var</c-> s <c- o="">=</c-> getIntegerSet<c- p="">();</c->  <c- c1="">// Obtain an instance of IntegerSet.</c->

s<c- p="">.</c->union<c- p="">();</c->                <c- c1="">// Passing no arguments corresponding to 'ints'.</c->
s<c- p="">.</c->union<c- p="">(</c-><c- mi="">1</c-><c- p="">,</c-> <c- mi="">4</c-><c- p="">,</c-> <c- mi="">7</c-><c- p="">);</c->         <c- c1="">// Passing three arguments corresponding to 'ints'.</c->
</pre>
    <p>A binding for a language that does not support variadic functions
    might specify that an explicit array or list of integers be passed
    to such an operation.</p>
   </div>
   <p>An argument is considered to be an <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-optional-argument">optional argument</dfn> if it is declared with the <emu-t>optional</emu-t> keyword.
The final argument of a <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic①">variadic</a> operation
is also considered to be an optional argument. Declaring an argument
to be optional indicates that the argument value can be omitted
when the operation is invoked.  The final argument in an
operation must not explicitly be declared to be
optional if the operation is <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic②">variadic</a>.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- n="">return_type</c-> <c- g="">identifier</c->(<c- n="">type</c-> <c- g="">identifier</c->, <c- b="">optional</c-> <c- n="">type</c-> <c- g="">identifier</c->);
};
</pre>
   <p>Optional arguments can also have a <dfn class="dfn-paneled" data-dfn-for="optional argument" data-dfn-type="dfn" data-export="" id="dfn-optional-argument-default-value">default value</dfn> specified.  If the argument’s identifier is followed by a <span class="char">U+003D EQUALS SIGN ("=")</span> and a value (matching <emu-nt><a href="#prod-DefaultValue">DefaultValue</a></emu-nt>),
then that gives the optional argument its <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value①">default value</a>.
The implicitly optional final argument of a <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic③">variadic</a> operation must not have a default value specified.
The default value is the value to be assumed when the operation is called with the
corresponding argument omitted.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- n="">return_type</c-> <c- g="">identifier</c->(<c- n="">type</c-> <c- g="">identifier</c->, <c- b="">optional</c-> <c- n="">type</c-> <c- g="">identifier</c-> = "value");
};
</pre>
   <p class="advisement"> It is strongly suggested not to use a <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value②">default value</a> of <emu-val>true</emu-val> for <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①">boolean</a></code>-typed arguments,
    as this can be confusing for authors who might otherwise expect the default
    conversion of <emu-val>undefined</emu-val> to be used (i.e., <emu-val>false</emu-val>). </p>
   <p>If the type of an argument is a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary②">dictionary type</a> or a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①">union type</a> that has a dictionary as one
of its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①">flattened member types</a>, and that dictionary type and its ancestors have no <a data-link-type="dfn" href="#required-dictionary-member" id="ref-for-required-dictionary-member">required members</a>, and the argument is either the final argument or is
followed only by <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument">optional arguments</a>, then the argument must be specified as optional. Such
arguments are always considered to have a <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value③">default value</a> of an empty
dictionary, unless otherwise specified.</p>
   <div class="note" role="note">
    <p>This is to encourage API designs that do not require authors to pass an
    empty dictionary value when they wish only to use the dictionary’s
    default values.</p>
    <p>Dictionary types cannot have a default value specified explicitly, so the
    “unless otherwise specified” clause above can only be invoked for
    a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②">union type</a> that has a
    dictionary type as one of its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types②">flattened member types</a>.</p>
   </div>
   <p>When a boolean literal token (<emu-t>true</emu-t> or <emu-t>false</emu-t>),
the <emu-t>null</emu-t> token,
an <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> token, a <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token or one of
the three special floating point literal values (<emu-t>Infinity</emu-t>, <emu-t>-Infinity</emu-t> or <emu-t>NaN</emu-t>) is used as the <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value④">default value</a>,
it is interpreted in the same way as for a <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①⑧">constant</a>.</p>
   <div class="algorithm" data-algorithm="value of string literal tokens" id="string-literal">
     Optional argument default values can also be specified using a <emu-t class="regex"><a href="#prod-string">string</a></emu-t> token, whose value is a <a data-link-type="dfn" href="#dfn-string-type" id="ref-for-dfn-string-type">string type</a> determined as follows: 
    <ol>
     <li data-md="">
      <p>Let <var>S</var> be the sequence of <a data-link-type="dfn" href="http://www.unicode.org/glossary/#unicode_scalar_value" id="ref-for-unicode_scalar_value">Unicode scalar values</a> matched by
the <emu-t class="regex"><a href="#prod-string">string</a></emu-t> token
with its leading and trailing <span class="char">U+0022 QUOTATION MARK ('"')</span> characters removed.</p>
     </li><li data-md="">
      <p>Depending on the type of the argument:</p>
      <dl class="switch">
       <dt data-md=""><code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString">DOMString</a></code>
       </dt><dt data-md="">an <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration⑥">enumeration</a> type
       </dt><dd data-md="">
        <p>The value of the <emu-t class="regex"><a href="#prod-string">string</a></emu-t> token
is the sequence of 16 bit unsigned integer code units
(hereafter referred to just as <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="dfn-code-unit">code units</dfn>)
corresponding to the UTF-16 encoding of <var>S</var>.</p>
       </dd><dt data-md=""><code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString">ByteString</a></code>
       </dt><dd data-md="">
        <p>The value of the <emu-t class="regex"><a href="#prod-string">string</a></emu-t> token
is the sequence of 8 bit unsigned integer code units
corresponding to the UTF-8 encoding of <var>S</var>.</p>
       </dd><dt data-md=""><code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString">USVString</a></code>
       </dt><dd data-md="">
        <p>The value of the <emu-t class="regex"><a href="#prod-string">string</a></emu-t> token is <var>S</var>.</p>
      </dd></dl>
    </li></ol>
   </div>
   <p>If the type of the <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①">optional argument</a> is an <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration⑦">enumeration</a>, then its <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value⑤">default value</a> if specified must
be one of the <a data-link-type="dfn" href="#dfn-enumeration-value" id="ref-for-dfn-enumeration-value">enumeration’s values</a>.</p>
   <p>Optional argument default values can also be specified using the
two token value <code>[]</code>, which represents an empty sequence
value.  The type of this value is the same as the type of the optional
argument it is being used as the default value of.  That type
must be a <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①">sequence type</a>, a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤">nullable type</a> whose <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type②">inner type</a> is a <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type②">sequence type</a> or a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③">union type</a> or <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑥">nullable</a> union type
that has a <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type③">sequence type</a> in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types③">flattened member types</a>.</p>
   <div class="example" id="example-6c1a4d6e">
    <a class="self-link" href="#example-6c1a4d6e"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①⑦">IDL fragment</a> defines an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④①">interface</a> with a single <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑧">operation</a> that can be invoked with two different argument list lengths:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">ColorCreator</c-> {
  <c- b="">object</c-> <c- g="">createColor</c->(<c- b="">double</c-> <c- g="">v1</c->, <c- b="">double</c-> <c- g="">v2</c->, <c- b="">double</c-> <c- g="">v3</c->, <c- b="">optional</c-> <c- b="">double</c-> <c- g="">alpha</c->);
};
</pre>
    <p>It is equivalent to an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④②">interface</a> that has two <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded">overloaded</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑨">operations</a>:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">ColorCreator</c-> {
  <c- b="">object</c-> <c- g="">createColor</c->(<c- b="">double</c-> <c- g="">v1</c->, <c- b="">double</c-> <c- g="">v2</c->, <c- b="">double</c-> <c- g="">v3</c->);
  <c- b="">object</c-> <c- g="">createColor</c->(<c- b="">double</c-> <c- g="">v1</c->, <c- b="">double</c-> <c- g="">v2</c->, <c- b="">double</c-> <c- g="">v3</c->, <c- b="">double</c-> <c- g="">alpha</c->);
};
</pre>
   </div>
   <p id="callback-operation-exceptions"> If an implementation attempts to invoke
    an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①⓪">operation</a> on a <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object④">user object</a> (for example, when a callback object has been supplied to the implementation),
    and that attempt results in an exception being thrown, then,
    unless otherwise specified,
    that exception will be propagated to
    the user code that caused the implementation to invoke the operation.
    Similarly, if a value returned from invoking the operation
    cannot be converted to an IDL type,
    then any exception resulting from this will also
    be propagated to the user code
    that resulted in the implementation attempting to invoke the operation. </p>
   <p>The following extended attributes are applicable to operations:
[<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default">Default</a></code>],
[<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed⑥">Exposed</a></code>],
[<code class="idl"><a data-link-type="idl" href="#NewObject" id="ref-for-NewObject">NewObject</a></code>],
[<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext⑤">SecureContext</a></code>],
[<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable①">Unforgeable</a></code>].</p>
<pre class="grammar" id="prod-DefaultValue"><emu-nt><a href="#prod-DefaultValue">DefaultValue</a></emu-nt> ::
    <emu-nt><a href="#prod-ConstValue">ConstValue</a></emu-nt>
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t>
    <emu-t>[</emu-t> <emu-t>]</emu-t>
</pre>
<pre class="grammar" id="prod-Operation"><emu-nt><a href="#prod-Operation">Operation</a></emu-nt> ::
    <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt>
    <emu-nt><a href="#prod-SpecialOperation">SpecialOperation</a></emu-nt>
</pre>
<pre class="grammar" id="prod-RegularOperation"><emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt> ::
    <emu-nt><a href="#prod-ReturnType">ReturnType</a></emu-nt> <emu-nt><a href="#prod-OperationRest">OperationRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-SpecialOperation"><emu-nt><a href="#prod-SpecialOperation">SpecialOperation</a></emu-nt> ::
    <emu-nt><a href="#prod-Special">Special</a></emu-nt> <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt>
</pre>
<pre class="grammar" id="prod-Special"><emu-nt><a href="#prod-Special">Special</a></emu-nt> ::
    <emu-t>getter</emu-t>
    <emu-t>setter</emu-t>
    <emu-t>deleter</emu-t>
</pre>
<pre class="grammar" id="prod-OperationRest"><emu-nt><a href="#prod-OperationRest">OperationRest</a></emu-nt> ::
    <emu-nt><a href="#prod-OptionalIdentifier">OptionalIdentifier</a></emu-nt> <emu-t>(</emu-t> <emu-nt><a href="#prod-ArgumentList">ArgumentList</a></emu-nt> <emu-t>)</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-OptionalIdentifier"><emu-nt><a href="#prod-OptionalIdentifier">OptionalIdentifier</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
    ε
</pre>
<pre class="grammar" id="prod-ArgumentList"><emu-nt><a href="#prod-ArgumentList">ArgumentList</a></emu-nt> ::
    <emu-nt><a href="#prod-Argument">Argument</a></emu-nt> <emu-nt><a href="#prod-Arguments">Arguments</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-Arguments"><emu-nt><a href="#prod-Arguments">Arguments</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-nt><a href="#prod-Argument">Argument</a></emu-nt> <emu-nt><a href="#prod-Arguments">Arguments</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-Argument"><emu-nt><a href="#prod-Argument">Argument</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-ArgumentRest">ArgumentRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-ArgumentRest"><emu-nt><a href="#prod-ArgumentRest">ArgumentRest</a></emu-nt> ::
    <emu-t>optional</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-nt><a href="#prod-ArgumentName">ArgumentName</a></emu-nt> <emu-nt><a href="#prod-Default">Default</a></emu-nt>
    <emu-nt><a href="#prod-Type">Type</a></emu-nt> <emu-nt><a href="#prod-Ellipsis">Ellipsis</a></emu-nt> <emu-nt><a href="#prod-ArgumentName">ArgumentName</a></emu-nt>
</pre>
<pre class="grammar" id="prod-ArgumentName"><emu-nt><a href="#prod-ArgumentName">ArgumentName</a></emu-nt> ::
    <emu-nt><a href="#prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
</pre>
<pre class="grammar" id="prod-Ellipsis"><emu-nt><a href="#prod-Ellipsis">Ellipsis</a></emu-nt> ::
    <emu-t>...</emu-t>
    ε
</pre>
   <div data-fill-with="grammar-ArgumentNameKeyword"><pre class="grammar"><emu-nt><a href="#prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt> ::
    <emu-t>attribute</emu-t>
    <emu-t>callback</emu-t>
    <emu-t>const</emu-t>
    <emu-t>deleter</emu-t>
    <emu-t>dictionary</emu-t>
    <emu-t>enum</emu-t>
    <emu-t>getter</emu-t>
    <emu-t>includes</emu-t>
    <emu-t>inherit</emu-t>
    <emu-t>interface</emu-t>
    <emu-t>iterable</emu-t>
    <emu-t>maplike</emu-t>
    <emu-t>namespace</emu-t>
    <emu-t>partial</emu-t>
    <emu-t>required</emu-t>
    <emu-t>setlike</emu-t>
    <emu-t>setter</emu-t>
    <emu-t>static</emu-t>
    <emu-t>stringifier</emu-t>
    <emu-t>typedef</emu-t>
    <emu-t>unrestricted</emu-t>
</pre></div>
<pre class="grammar" id="prod-ReturnType"><emu-nt><a href="#prod-ReturnType">ReturnType</a></emu-nt> ::
    <emu-nt><a href="#prod-Type">Type</a></emu-nt>
    <emu-t>void</emu-t>
</pre>
   <h5 class="heading settled" data-level="2.4.3.1" id="idl-tojson-operation"><span class="secno">2.4.3.1. </span><span class="content">toJSON</span><a class="self-link" href="#idl-tojson-operation"></a></h5>
   <p>By declaring a <code>toJSON</code> <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation⑨">regular operation</a>,
an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④③">interface</a> specifies how to convert the objects that implement it to <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types①">JSON types</a>.</p>
   <p>The <code>toJSON</code> <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①⓪">regular operation</a> is reserved for this usage.
It must take zero arguments and return a <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types②">JSON type</a>.</p>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="JSON type" id="dfn-json-types">JSON types</dfn> are:</p>
   <ul>
    <li data-md="">
     <p><a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type">numeric types</a>,</p>
    </li><li data-md="">
     <p><code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean②">boolean</a></code>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-string-type" id="ref-for-dfn-string-type①">string types</a>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑦">nullable types</a> whose <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type③">inner type</a> is a <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types③">JSON type</a>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types">annotated types</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type">inner type</a> is a <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types④">JSON type</a>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④">union types</a> whose <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type">member types</a> are <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types⑤">JSON types</a>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef⑨">typedefs</a> whose <a data-link-type="dfn" href="#type-being-given-a-new-name" id="ref-for-type-being-given-a-new-name">type being given a new name</a> is a <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types⑥">JSON type</a>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type④">sequence types</a> whose parameterized type is a <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types⑦">JSON type</a>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-frozen-array-type" id="ref-for-dfn-frozen-array-type">frozen array types</a> whose parameterized type is a <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types⑧">JSON type</a>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary③">dictionary types</a> where the types of all <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member②">members</a> declared on the dictionary and all its <a data-link-type="dfn" href="#dfn-inherited-dictionaries" id="ref-for-dfn-inherited-dictionaries">inherited dictionaries</a> are <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types⑨">JSON types</a>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record">records</a> where all of their <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-value" id="ref-for-map-value">values</a> are <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types①⓪">JSON types</a>,</p>
    </li><li data-md="">
     <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object">object</a></code>,</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface">interface types</a> that have a <code>toJSON</code> operation declared on themselves or
one of their <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces②">inherited interfaces</a>.</p>
   </li></ul>
   <p>How the <code>toJSON</code> <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①①">regular operation</a> is made available on an object in a language binding,
and how exactly the <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types①①">JSON types</a> are converted into a JSON string,
is language binding specific.</p>
   <p class="note" role="note"><span>Note:</span> In the ECMAScript language binding,
this is done by exposing a <code>toJSON</code> method
which returns the <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types①②">JSON type</a> converted into an ECMAScript value
that can be turned into a JSON string
by the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-json.stringify" id="ref-for-sec-json.stringify">JSON.stringify()</a></code> function.
Additionaly, in the ECMAScript language binding,
the <code>toJSON</code> operation can take a [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default①">Default</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④">extended attribute</a>,
in which case the <a data-link-type="dfn" href="#default-tojson-operation" id="ref-for-default-tojson-operation">default toJSON operation</a> is exposed instead.</p>
   <div class="example" id="tojson-example">
    <a class="self-link" href="#tojson-example"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①⑧">IDL fragment</a> defines an interface <code class="idl">Transaction</code> that has a <code>toJSON</code> method defined in prose:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Transaction</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">from</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">to</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">amount</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">description</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">number</c->;
  <c- n="">TransactionJSON</c-> <c- g="">toJSON</c->();
};

<c- b="">dictionary</c-> <c- g="">TransactionJSON</c-> {
  <c- n="">Account</c-> <c- g="">from</c->;
  <c- n="">Account</c-> <c- g="">to</c->;
  <c- b="">double</c-> <c- g="">amount</c->;
  <c- b="">DOMString</c-> <c- g="">description</c->;
};
</pre>
    <p>The <code>toJSON</code> <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①②">regular operation</a> of <code class="idl">Transaction</code> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④④">interface</a> could be defined as follows:</p>
    <div class="algorithm" data-algorithm="example tojson">
     <p>To invoke the <code>toJSON()</code> operation of the <code class="idl">Transaction</code> interface, run the following steps:</p>
     <ol>
      <li data-md="">
       <p>Let <var>json</var> be a new <code class="idl">TransactionJSON</code> dictionary.</p>
      </li><li data-md="">
       <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate">For each</a> attribute <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②⑥">identifier</a> <var>attr</var> in « "from", "to", "amount", "description" »:</p>
       <ol>
        <li data-md="">
         <p>Let <var>value</var> be result of <a data-link-type="dfn" href="#get-the-underlying-value" id="ref-for-get-the-underlying-value">getting the underlying value</a> of the <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①③">attribute</a> identified by <var>attr</var>,
given this <code class="idl">Transaction</code> object.</p>
        </li><li data-md="">
         <p>Set <var>json</var>[<var>attr</var>] to <var>value</var>.</p>
       </li></ol>
      </li><li data-md="">
       <p>Return <var>json</var>.</p>
     </li></ol>
    </div>
    <p>In the ECMAScript language binding, there would exist a <code>toJSON()</code> method on <code class="idl">Transaction</code> objects:</p>
<pre class="highlight"><c- c1="">// Get an instance of Transaction.</c->
<c- a="">var</c-> txn <c- o="">=</c-> getTransaction<c- p="">();</c->

<c- c1="">// Evaluates to an object like this:</c->
<c- c1="">// {</c->
<c- c1="">//   from: "Bob",</c->
<c- c1="">//   to: "Alice",</c->
<c- c1="">//   amount: 50,</c->
<c- c1="">//   description: "books"</c->
<c- c1="">// }</c->
txn<c- p="">.</c->toJSON<c- p="">();</c->

<c- c1="">// Evaluates to a string like this:</c->
<c- c1="">// '{"from":"Bob","to":"Alice","amount":50,"description":"books"}'</c->
JSON<c- p="">.</c->stringify<c- p="">(</c->txn<c- p="">);</c->
</pre>
   </div>
   <h4 class="heading settled" data-level="2.4.4" id="idl-special-operations"><span class="secno">2.4.4. </span><span class="content">Special operations</span><a class="self-link" href="#idl-special-operations"></a></h4>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-special-operation">special operation</dfn> is a
declaration of a certain kind of special behavior on objects implementing
the interface on which the special operation declarations appear.
Special operations are declared by using a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-special-keyword">special keyword</dfn> in an operation declaration.</p>
   <p>There are four kinds of special operations. The table below indicates
for a given kind of special operation what special keyword
is used to declare it and what the purpose of the special operation is:</p>
   <table class="vert data">
    <tbody>
     <tr>
      <th>Special operation
      </th><th>Keyword
      </th><th>Purpose
     </th></tr><tr>
      <td><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="getter" id="dfn-getter">Getters</dfn>
      </td><td><emu-t>getter</emu-t>
      </td><td>Defines behavior for when an object is indexed for property retrieval.
     </td></tr><tr>
      <td><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="setter" id="dfn-setter">Setters</dfn>
      </td><td><emu-t>setter</emu-t>
      </td><td>Defines behavior for when an object is indexed for property
        assignment or creation.
     </td></tr><tr>
      <td><dfn data-dfn-type="dfn" data-export="" data-lt="deleter" id="dfn-deleter">Deleters<a class="self-link" href="#dfn-deleter"></a></dfn>
      </td><td><emu-t>deleter</emu-t>
      </td><td>Defines behavior for when an object is indexed for property deletion.
     </td></tr><tr>
      <td><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="stringifier" id="dfn-stringifier">Stringifiers</dfn>
      </td><td><emu-t>stringifier</emu-t>
      </td><td>Defines how an object is converted into a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①">DOMString</a></code>.
   </td></tr></tbody></table>
   <p>Not all language bindings support all of the four kinds of special
object behavior.  When special operations are declared using
operations with no identifier, then in language bindings that do
not support the particular kind of special operations there simply
will not be such functionality.</p>
   <div class="example" id="example-42cb8c80">
    <a class="self-link" href="#example-42cb8c80"></a> 
    <p>The following IDL fragment defines an interface with a getter and a setter:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Dictionary</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">propertyCount</c->;

  <c- b="">getter</c-> <c- b="">double</c-> (<c- b="">DOMString</c-> <c- g="">propertyName</c->);
  <c- b="">setter</c-> <c- b="">void</c-> (<c- b="">DOMString</c-> <c- g="">propertyName</c->, <c- b="">double</c-> <c- g="">propertyValue</c->);
};
</pre>
    <p>In language bindings that do not support property getters and setters,
    objects implementing <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary⑦">Dictionary</a> will not
    have that special behavior.</p>
   </div>
   <p>Defining a special operation  with an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②⑦">identifier</a> is equivalent to separating the special operation out into its own
declaration without an identifier.  This approach is allowed to
simplify prose descriptions of an interface’s operations.</p>
   <div class="example" id="example-c990dd71">
    <a class="self-link" href="#example-c990dd71"></a> 
    <p>The following two interfaces are equivalent:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Dictionary</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">propertyCount</c->;

  <c- b="">getter</c-> <c- b="">double</c-> <c- g="">getProperty</c->(<c- b="">DOMString</c-> <c- g="">propertyName</c->);
  <c- b="">setter</c-> <c- b="">void</c-> <c- g="">setProperty</c->(<c- b="">DOMString</c-> <c- g="">propertyName</c->, <c- b="">double</c-> <c- g="">propertyValue</c->);
};
</pre>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Dictionary</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">propertyCount</c->;

  <c- b="">double</c-> <c- g="">getProperty</c->(<c- b="">DOMString</c-> <c- g="">propertyName</c->);
  <c- b="">void</c-> <c- g="">setProperty</c->(<c- b="">DOMString</c-> <c- g="">propertyName</c->, <c- b="">double</c-> <c- g="">propertyValue</c->);

  <c- b="">getter</c-> <c- b="">double</c-> (<c- b="">DOMString</c-> <c- g="">propertyName</c->);
  <c- b="">setter</c-> <c- b="">void</c-> (<c- b="">DOMString</c-> <c- g="">propertyName</c->, <c- b="">double</c-> <c- g="">propertyValue</c->);
};
</pre>
   </div>
   <p>A given <a data-link-type="dfn" href="#dfn-special-keyword" id="ref-for-dfn-special-keyword①">special keyword</a> must not
appear twice on an operation.</p>
   <p>Getters and setters come in two varieties: ones that
take a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②">DOMString</a></code> as a property name,
known as <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="named property getter" id="dfn-named-property-getter">named property getters</dfn> and <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="named property setter" id="dfn-named-property-setter">named property setters</dfn>,
and ones that take an <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long①">unsigned long</a></code> as a property index, known as <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="indexed property getter" id="dfn-indexed-property-getter">indexed property getters</dfn> and <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="indexed property setter" id="dfn-indexed-property-setter">indexed property setters</dfn>.
There is only one variety of deleter: <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="named property deleter" id="dfn-named-property-deleter">named property deleters</dfn>.
See <a href="#idl-indexed-properties" id="ref-for-idl-indexed-properties">§2.4.4.2 Indexed properties</a> and <a href="#idl-named-properties" id="ref-for-idl-named-properties">§2.4.4.3 Named properties</a> for details.</p>
   <p>On a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④⑤">interface</a>,
there must exist at most one
stringifier, at most one <a data-link-type="dfn" href="#dfn-named-property-deleter" id="ref-for-dfn-named-property-deleter">named property deleter</a>,
and at most one of each variety of getter and setter.</p>
   <p>If an interface has a setter of a given variety,
then it must also have a getter of that
variety.  If it has a <a data-link-type="dfn" href="#dfn-named-property-deleter" id="ref-for-dfn-named-property-deleter①">named property deleter</a>,
then it must also have a <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter">named property getter</a>.</p>
   <p>Special operations declared using operations must not
be <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic④">variadic</a> nor have any <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument②">optional arguments</a>.</p>
   <p>Special operations must not be declared on <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface⑨">callback interfaces</a>.</p>
   <p>If an object implements more than one <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④⑥">interface</a> that defines a given special operation, then it is undefined which (if any)
special operation is invoked for that operation.</p>
   <h5 class="heading settled" data-level="2.4.4.1" id="idl-stringifiers"><span class="secno">2.4.4.1. </span><span class="content">Stringifiers</span><a class="self-link" href="#idl-stringifiers"></a></h5>
   <p>When an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④⑦">interface</a> has a <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier④">stringifier</a>, it indicates that objects that implement
the interface have a non-default conversion to a string.  As mentioned above,
stringifiers can be specified using an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①①">operation</a> declared with the <emu-t>stringifier</emu-t> keyword.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">stringifier</c-> <c- b="">DOMString</c-> <c- g="">identifier</c->();
  <c- b="">stringifier</c-> <c- b="">DOMString</c-> ();
};
</pre>
   <p>If an operation used to declare a stringifier does not have an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②⑧">identifier</a>, then prose
accompanying the interface must define
the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-stringification-behavior">stringification behavior</dfn> of the interface.  If the operation does have an identifier,
then the object is converted to a string by invoking the
operation to obtain the string.</p>
   <p>Stringifiers declared with operations must
be declared to take zero arguments and return a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③">DOMString</a></code>.</p>
   <p>As a shorthand, if the <emu-t>stringifier</emu-t> keyword
is declared using an operation with no identifier, then the
operation’s <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type">return type</a> and
argument list can be omitted.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">stringifier</c->;
};
</pre>
   <div class="example" id="example-1878c5ff">
    <a class="self-link" href="#example-1878c5ff"></a> 
    <p>The following two interfaces are equivalent:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">stringifier</c-> <c- b="">DOMString</c-> ();
};
</pre>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">stringifier</c->;
};
</pre>
   </div>
   <p>The <emu-t>stringifier</emu-t> keyword
can also be placed on an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①④">attribute</a>.
In this case, the string to convert the object to is the
value of the attribute.  The <emu-t>stringifier</emu-t> keyword
must not be placed on an attribute unless
it is declared to be of type <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString④">DOMString</a></code> or <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString①">USVString</a></code>.
It also must not be placed on
a <a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute⑥">static attribute</a>.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">stringifier</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">identifier</c->;
};
</pre>
<pre class="grammar" id="prod-Stringifier"><emu-nt><a href="#prod-Stringifier">Stringifier</a></emu-nt> ::
    <emu-t>stringifier</emu-t> <emu-nt><a href="#prod-StringifierRest">StringifierRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-StringifierRest"><emu-nt><a href="#prod-StringifierRest">StringifierRest</a></emu-nt> ::
    <emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt>
    <emu-t>;</emu-t>
</pre>
   <div class="example" id="example-59bb9d95">
    <a class="self-link" href="#example-59bb9d95"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment①⑨">IDL fragment</a> defines an interface that will stringify to the value of its <code class="idl">name</code> attribute:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->, <c- g="">Constructor</c->]
<c- b="">interface</c-> <c- g="">Student</c-> {
  <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">id</c->;
  <c- b="">stringifier</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">name</c->;
};
</pre>
    <p>In the ECMAScript binding, using a <code class="idl">Student</code> object in a context where a string is expected will result in the
    value of the object’s <code class="idl">name</code> property being
    used:</p>
<pre class="highlight"><c- a="">var</c-> s <c- o="">=</c-> <c- k="">new</c-> Student<c- p="">();</c->
s<c- p="">.</c->id <c- o="">=</c-> <c- mi="">12345678</c-><c- p="">;</c->
s<c- p="">.</c->name <c- o="">=</c-> <c- t="">'周杰倫'</c-><c- p="">;</c->

<c- a="">var</c-> greeting <c- o="">=</c-> <c- t="">'Hello, '</c-> <c- o="">+</c-> s <c- o="">+</c-> <c- t="">'!'</c-><c- p="">;</c->  <c- c1="">// Now greeting == 'Hello, 周杰倫!'.</c->
</pre>
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②⓪">IDL fragment</a> defines an interface that has custom stringification behavior that is
    not specified in the IDL itself.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->, <c- g="">Constructor</c->]
<c- b="">interface</c-> <c- g="">Student</c-> {
  <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">id</c->;
  <c- b="">attribute</c-> <c- b="">DOMString</c->? <c- g="">familyName</c->;
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">givenName</c->;

  <c- b="">stringifier</c-> <c- b="">DOMString</c-> ();
};
</pre>
    <p>Thus, prose is required to explain the stringification behavior, such
    as the following paragraph:</p>
    <blockquote>
     <p>Objects that implement the <code class="idl">Student</code> interface must stringify as follows.  If the value of the <code class="idl">familyName</code> attribute is <emu-val>null</emu-val>, the stringification of the
        object is the value of the <code class="idl">givenName</code> attribute.  Otherwise, if the value of the <code class="idl">familyName</code> attribute is not <emu-val>null</emu-val>,
        the stringification of the object is the concatenation of the
        value of the <code class="idl">givenName</code> attribute,
        a single space character, and the value of
        the <code class="idl">familyName</code> attribute.</p>
    </blockquote>
    <p>An ECMAScript implementation of the IDL would behave as follows:</p>
<pre class="highlight"><c- a="">var</c-> s <c- o="">=</c-> <c- k="">new</c-> Student<c- p="">();</c->
s<c- p="">.</c->id <c- o="">=</c-> <c- mi="">12345679</c-><c- p="">;</c->
s<c- p="">.</c->familyName <c- o="">=</c-> <c- t="">'Smithee'</c-><c- p="">;</c->
s<c- p="">.</c->givenName <c- o="">=</c-> <c- t="">'Alan'</c-><c- p="">;</c->

<c- a="">var</c-> greeting <c- o="">=</c-> <c- t="">'Hi '</c-> <c- o="">+</c-> s<c- p="">;</c->  <c- c1="">// Now greeting == 'Hi Alan Smithee'.</c->
</pre>
   </div>
   <h5 class="heading settled dfn-paneled" data-dfn-type="dfn" data-export="" data-level="2.4.4.2" data-lt="Indexed properties" id="idl-indexed-properties"><span class="secno">2.4.4.2. </span><span class="content">Indexed properties</span></h5>
   <p>An <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④⑧">interface</a> that defines an <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter">indexed property getter</a> is said to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-support-indexed-properties">support indexed properties</dfn>.
By extension, a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①">platform object</a> is said to <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties">support indexed properties</a> if
it implements an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface④⑨">interface</a> that itself does.</p>
   <p>If an interface <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties①">supports indexed properties</a>,
then the interface definition must be accompanied by
a description of what indices the object can be indexed with at
any given time. These indices are called the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-supported-property-indices">supported property indices</dfn>.</p>
   <p>Interfaces that <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties②">support indexed properties</a> must define
an <a data-link-type="dfn" href="#dfn-integer-type" id="ref-for-dfn-integer-type">integer-typed</a> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①⑤">attribute</a> named "<code>length</code>".</p>
   <p>Indexed property getters must
be declared to take a single <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long②">unsigned long</a></code> argument.
Indexed property setters must
be declared to take two arguments, where the first is an <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long③">unsigned long</a></code>.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">getter</c-> <c- n="">type</c-> <c- g="">identifier</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">identifier</c->);
  <c- b="">setter</c-> <c- n="">type</c-> <c- g="">identifier</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">identifier</c->, <c- n="">type</c-> <c- g="">identifier</c->);

  <c- b="">getter</c-> <c- n="">type</c-> (<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">identifier</c->);
  <c- b="">setter</c-> <c- n="">type</c-> (<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">identifier</c->, <c- n="">type</c-> <c- g="">identifier</c->);
};
</pre>
   <p>The following requirements apply to the definitions of indexed property getters and setters:</p>
   <ul>
    <li data-md="">
     <p>If an <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter①">indexed property getter</a> was specified using an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①②">operation</a> with an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier②⑨">identifier</a>,
then the value returned when indexing the object with a given <a data-link-type="dfn" href="#dfn-supported-property-indices" id="ref-for-dfn-supported-property-indices">supported property index</a> is the value that would be returned by invoking the operation, passing
the index as its only argument.  If the operation used to declare the indexed property getter
did not have an identifier, then the interface definition must be accompanied
by a description of how to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-determine-the-value-of-an-indexed-property">determine the value of an indexed property</dfn> for a given index.</p>
    </li><li data-md="">
     <p>If an <a data-link-type="dfn" href="#dfn-indexed-property-setter" id="ref-for-dfn-indexed-property-setter">indexed property setter</a> was specified using an operation
with an identifier,
then the behavior that occurs when indexing the object for property assignment with a given supported property index and value
is the same as if the operation is invoked, passing
the index as the first argument and the value as the second argument.  If the operation used to declare the indexed property setter
did not have an identifier, then the interface definition must be accompanied
by a description of how to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-set-the-value-of-an-existing-indexed-property">set the value of an existing indexed property</dfn> and how to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-set-the-value-of-a-new-indexed-property">set the value of a new indexed property</dfn> for a given property index and value.</p>
   </li></ul>
   <div class="note" role="note">
    <p>Note that if an <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter②">indexed property getter</a> or <a data-link-type="dfn" href="#dfn-indexed-property-setter" id="ref-for-dfn-indexed-property-setter①">setter</a> is specified using an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①③">operation</a> with an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③⓪">identifier</a>,
    then indexing an object with an integer that is not a <a data-link-type="dfn" href="#dfn-supported-property-indices" id="ref-for-dfn-supported-property-indices①">supported property index</a> does not necessarily elicit the same behavior as invoking the operation with that index.  The actual behavior in this
    case is language binding specific.</p>
    <p>In the ECMAScript language binding, a regular property lookup is done.  For example, take the following IDL:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">getter</c-> <c- b="">DOMString</c-> <c- g="">toWord</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">index</c->);
};
</pre>
    <p>Assume that an object implementing <code class="idl">A</code> has <a data-link-type="dfn" href="#dfn-supported-property-indices" id="ref-for-dfn-supported-property-indices②">supported property indices</a> in the range 0 ≤ <var>index</var> &lt; 2.  Also assume that toWord is defined to return
    its argument converted into an English word.  The behavior when invoking the <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①④">operation</a> with an out of range index
    is different from indexing the object directly:</p>
<pre class="highlight"><c- a="">var</c-> a <c- o="">=</c-> getA<c- p="">();</c->

a<c- p="">.</c->toWord<c- p="">(</c-><c- mi="">0</c-><c- p="">);</c->  <c- c1="">// Evalautes to "zero".</c->
a<c- p="">[</c-><c- mi="">0</c-><c- p="">];</c->         <c- c1="">// Also evaluates to "zero".</c->

a<c- p="">.</c->toWord<c- p="">(</c-><c- mi="">5</c-><c- p="">);</c->  <c- c1="">// Evaluates to "five".</c->
a<c- p="">[</c-><c- mi="">5</c-><c- p="">];</c->         <c- c1="">// Evaluates to undefined, since there is no property "5".</c->
</pre>
   </div>
   <div class="example" id="example-f4fc5976">
    <a class="self-link" href="#example-f4fc5976"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②①">IDL fragment</a> defines an interface <code class="idl">OrderedMap</code> which allows
    retrieving and setting values by name or by index number:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">OrderedMap</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">size</c->;

  <c- b="">getter</c-> <c- b="">any</c-> <c- g="">getByIndex</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">index</c->);
  <c- b="">setter</c-> <c- b="">void</c-> <c- g="">setByIndex</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">index</c->, <c- b="">any</c-> <c- g="">value</c->);

  <c- b="">getter</c-> <c- b="">any</c-> <c- g="">get</c->(<c- b="">DOMString</c-> <c- g="">name</c->);
  <c- b="">setter</c-> <c- b="">void</c-> <c- g="">set</c->(<c- b="">DOMString</c-> <c- g="">name</c->, <c- b="">any</c-> <c- g="">value</c->);
};
</pre>
    <p>Since all of the special operations are declared using
    operations with identifiers, the only additional prose
    that is necessary is that which describes what keys those sets
    have.  Assuming that the <code>get()</code> operation is
    defined to return <emu-val>null</emu-val> if an
    attempt is made to look up a non-existing entry in the <code class="idl">OrderedMap</code>, then the following
    two sentences would suffice:</p>
    <blockquote>
     <p>An object <var>map</var> implementing <code class="idl">OrderedMap</code> supports indexed properties with indices in the range
        0 ≤ <var>index</var> &lt; <code>map.size</code>.</p>
     <p>Such objects also support a named property for every name that,
        if passed to <code>get()</code>, would return a non-null value.</p>
    </blockquote>
    <p>As described in <a href="#es-legacy-platform-objects">§3.8 Legacy platform objects</a>,
    an ECMAScript implementation would create
    properties on a <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object">legacy platform object</a> implementing <code class="idl">OrderedMap</code> that correspond to
    entries in both the named and indexed property sets.
    These properties can then be used to interact
    with the object in the same way as invoking the object’s
    methods, as demonstrated below:</p>
<pre class="highlight"><c- c1="">// Assume map is a legacy platform object implementing the OrderedMap interface.</c->
<c- a="">var</c-> map <c- o="">=</c-> getOrderedMap<c- p="">();</c->
<c- a="">var</c-> x<c- p="">,</c-> y<c- p="">;</c->

x <c- o="">=</c-> map<c- p="">[</c-><c- mi="">0</c-><c- p="">];</c->       <c- c1="">// If map.length &gt; 0, then this is equivalent to:</c->
                  <c- c1="">//</c->
                  <c- c1="">//   x = map.getByIndex(0)</c->
                  <c- c1="">//</c->
                  <c- c1="">// since a property named "0" will have been placed on map.</c->
                  <c- c1="">// Otherwise, x will be set to undefined, since there will be</c->
                  <c- c1="">// no property named "0" on map.</c->

map<c- p="">[</c-><c- mi="">1</c-><c- p="">]</c-> <c- o="">=</c-> <c- kc="">false</c-><c- p="">;</c->   <c- c1="">// This will do the equivalent of:</c->
                  <c- c1="">//</c->
                  <c- c1="">//   map.setByIndex(1, false)</c->

y <c- o="">=</c-> map<c- p="">.</c->apple<c- p="">;</c->    <c- c1="">// If there exists a named property named "apple", then this</c->
                  <c- c1="">// will be equivalent to:</c->
                  <c- c1="">//</c->
                  <c- c1="">//   y = map.get('apple')</c->
                  <c- c1="">//</c->
                  <c- c1="">// since a property named "apple" will have been placed on</c->
                  <c- c1="">// map.  Otherwise, y will be set to undefined, since there</c->
                  <c- c1="">// will be no property named "apple" on map.</c->

map<c- p="">.</c->berry <c- o="">=</c-> <c- mi="">123</c-><c- p="">;</c->  <c- c1="">// This will do the equivalent of:</c->
                  <c- c1="">//</c->
                  <c- c1="">//   map.set('berry', 123)</c->

<c- k="">delete</c-> map<c- p="">.</c->cake<c- p="">;</c->  <c- c1="">// If a named property named "cake" exists, then the "cake"</c->
                  <c- c1="">// property will be deleted, and then the equivalent to the</c->
                  <c- c1="">// following will be performed:</c->
                  <c- c1="">//</c->
                  <c- c1="">//   map.remove("cake")</c->
</pre>
   </div>
   <h5 class="heading settled dfn-paneled" data-dfn-type="dfn" data-export="" data-level="2.4.4.3" data-lt="Named properties" id="idl-named-properties"><span class="secno">2.4.4.3. </span><span class="content">Named properties</span></h5>
   <p>An <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤⓪">interface</a> that defines a <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter①">named property getter</a> is said to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-support-named-properties">support named properties</dfn>.
By extension, a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②">platform object</a> is said to <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties">support named properties</a> if
it implements an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤①">interface</a> that itself does.</p>
   <p>If an interface <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties①">supports named properties</a>,
then the interface definition must be accompanied by
a description of the ordered set of names that can be used to index the object
at any given time.  These names are called the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-supported-property-names">supported property names</dfn>.</p>
   <p>Named property getters and deleters must
be declared to take a single <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString⑤">DOMString</a></code> argument.
Named property setters must
be declared to take two arguments, where the first is a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString⑥">DOMString</a></code>.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">getter</c-> <c- n="">type</c-> <c- g="">identifier</c->(<c- b="">DOMString</c-> <c- g="">identifier</c->);
  <c- b="">setter</c-> <c- n="">type</c-> <c- g="">identifier</c->(<c- b="">DOMString</c-> <c- g="">identifier</c->, <c- n="">type</c-> <c- g="">identifier</c->);
  <c- b="">deleter</c-> <c- n="">type</c-> <c- g="">identifier</c->(<c- b="">DOMString</c-> <c- g="">identifier</c->);

  <c- b="">getter</c-> <c- n="">type</c-> (<c- b="">DOMString</c-> <c- g="">identifier</c->);
  <c- b="">setter</c-> <c- n="">type</c-> (<c- b="">DOMString</c-> <c- g="">identifier</c->, <c- n="">type</c-> <c- g="">identifier</c->);
  <c- b="">deleter</c-> <c- n="">type</c-> (<c- b="">DOMString</c-> <c- g="">identifier</c->);
};
</pre>
   <p>The following requirements apply to the definitions of named property getters, setters and deleters:</p>
   <ul>
    <li data-md="">
     <p>If a <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter②">named property getter</a> was specified using an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①⑤">operation</a> with an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③①">identifier</a>,
then the value returned when indexing the object with a given <a data-link-type="dfn" href="#dfn-supported-property-names" id="ref-for-dfn-supported-property-names">supported property name</a> is the value that would be returned by invoking the operation, passing
the name as its only argument.  If the operation used to declare the named property getter
did not have an identifier, then the interface definition must be accompanied
by a description of how to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-determine-the-value-of-a-named-property">determine the value of a named property</dfn> for a given property name.</p>
    </li><li data-md="">
     <p>If a <a data-link-type="dfn" href="#dfn-named-property-setter" id="ref-for-dfn-named-property-setter">named property setter</a> was specified using an operation
with an identifier,
then the behavior that occurs when indexing the object for property assignment with a given supported property name and value
is the same as if the operation is invoked, passing
the name as the first argument and the value as the second argument.  If the operation used to declare the named property setter
did not have an identifier, then the interface definition must be accompanied
by a description of how to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-set-the-value-of-an-existing-named-property">set the value of an existing named property</dfn> and how to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-set-the-value-of-a-new-named-property">set the value of a new named property</dfn> for a given property name and value.</p>
    </li><li data-md="">
     <p>If a <a data-link-type="dfn" href="#dfn-named-property-deleter" id="ref-for-dfn-named-property-deleter②">named property deleter</a> was specified using an operation
with an identifier,
then the behavior that occurs when indexing the object for property deletion with a given supported property name
is the same as if the operation is invoked, passing
the name as the only argument.  If the operation used to declare the named property deleter
did not have an identifier, then the interface definition must be accompanied
by a description of how to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-delete-an-existing-named-property">delete an existing named property</dfn> for a given property name.</p>
   </li></ul>
   <p class="note" role="note"><span>Note:</span> As with <a data-link-type="dfn" href="#idl-indexed-properties" id="ref-for-idl-indexed-properties②">indexed properties</a>,
if an <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter③">named property getter</a>, <a data-link-type="dfn" href="#dfn-named-property-setter" id="ref-for-dfn-named-property-setter①">setter</a> or <a data-link-type="dfn" href="#dfn-named-property-deleter" id="ref-for-dfn-named-property-deleter③">deleter</a> is specified using an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①⑥">operation</a> with an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③②">identifier</a>,
then indexing an object with a name that is not a <a data-link-type="dfn" href="#dfn-supported-property-names" id="ref-for-dfn-supported-property-names①">supported property name</a> does not necessarily elicit the same behavior as invoking the operation with that name; the behavior
is language binding specific.</p>
   <h4 class="heading settled" data-level="2.4.5" id="idl-static-attributes-and-operations"><span class="secno">2.4.5. </span><span class="content">Static attributes and operations</span><a class="self-link" href="#idl-static-attributes-and-operations"></a></h4>
   <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-static-attribute">Static attributes</dfn> and <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-static-operation">static operations</dfn> are ones that
are not associated with a particular instance of the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤②">interface</a> on which it is declared, and is instead associated with the interface
itself.  Static attributes and operations are declared by using the <emu-t>static</emu-t> keyword in their declarations.</p>
   <p>It is language binding specific whether it is possible to invoke
a static operation or get or set a static attribute through a reference
to an instance of the interface.</p>
   <p>Static attributes and operations must not be
declared on <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①⓪">callback interfaces</a>.</p>
<pre class="grammar" id="prod-StaticMember"><emu-nt><a href="#prod-StaticMember">StaticMember</a></emu-nt> ::
    <emu-t>static</emu-t> <emu-nt><a href="#prod-StaticMemberRest">StaticMemberRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-StaticMemberRest"><emu-nt><a href="#prod-StaticMemberRest">StaticMemberRest</a></emu-nt> ::
    <emu-nt><a href="#prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt>
</pre>
   <div class="example" id="example-639bc49b">
    <a class="self-link" href="#example-639bc49b"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②②">IDL fragment</a> defines an interface <code class="idl">Circle</code> that has a static
    operation declared on it:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Point</c-> { /* ... */ };

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Circle</c-> {
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">cx</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">cy</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">radius</c->;

  <c- b="">static</c-> <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">long</c-> <c- g="">triangulationCount</c->;
  <c- b="">static</c-> <c- n="">Point</c-> <c- g="">triangulate</c->(<c- n="">Circle</c-> <c- g="">c1</c->, <c- n="">Circle</c-> <c- g="">c2</c->, <c- n="">Circle</c-> <c- g="">c3</c->);
};
</pre>
    <p>In the ECMAScript language binding, the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③">function object</a> for <code>triangulate</code> and the accessor property for <code>triangulationCount</code> will exist on the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object">interface object</a> for <code class="idl">Circle</code>:</p>
<pre class="highlight"><c- a="">var</c-> circles <c- o="">=</c-> getCircles<c- p="">();</c->           <c- c1="">// an Array of Circle objects</c->

<c- k="">typeof</c-> Circle<c- p="">.</c->triangulate<c- p="">;</c->            <c- c1="">// Evaluates to "function"</c->
<c- k="">typeof</c-> Circle<c- p="">.</c->triangulationCount<c- p="">;</c->     <c- c1="">// Evaluates to "number"</c->
Circle<c- p="">.</c->prototype<c- p="">.</c->triangulate<c- p="">;</c->         <c- c1="">// Evaluates to undefined</c->
Circle<c- p="">.</c->prototype<c- p="">.</c->triangulationCount<c- p="">;</c->  <c- c1="">// Also evaluates to undefined</c->
circles<c- p="">[</c-><c- mi="">0</c-><c- p="">].</c->triangulate<c- p="">;</c->               <c- c1="">// As does this</c->
circles<c- p="">[</c-><c- mi="">0</c-><c- p="">].</c->triangulationCount<c- p="">;</c->        <c- c1="">// And this</c->

<c- c1="">// Call the static operation</c->
<c- a="">var</c-> triangulationPoint <c- o="">=</c-> Circle<c- p="">.</c->triangulate<c- p="">(</c->circles<c- p="">[</c-><c- mi="">0</c-><c- p="">],</c-> circles<c- p="">[</c-><c- mi="">1</c-><c- p="">],</c-> circles<c- p="">[</c-><c- mi="">2</c-><c- p="">]);</c->

<c- c1="">// Find out how many triangulations we have done</c->
window<c- p="">.</c->alert<c- p="">(</c->Circle<c- p="">.</c->triangulationCount<c- p="">);</c->
</pre>
   </div>
   <h4 class="heading settled" data-level="2.4.6" id="idl-overloading"><span class="secno">2.4.6. </span><span class="content">Overloading</span><a class="self-link" href="#idl-overloading"></a></h4>
   <p>If a <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①③">regular operation</a> or <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation⑥">static operation</a> defined on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤③">interface</a> has an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③③">identifier</a> that is the same as the identifier of another operation on that
interface of the same kind (regular or static), then the operation is said to be <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-overloaded">overloaded</dfn>.  When the identifier
of an overloaded operation is used to invoke one of the
operations on an object that implements the interface, the
number and types of the arguments passed to the operation
determine which of the overloaded operations is actually
invoked.  In the ECMAScript language binding, <a href="#Constructor" id="ref-for-Constructor②②">constructors</a> can be overloaded too.  There are some restrictions on the arguments
that overloaded operations and constructors can be
specified to take, and in order to describe these restrictions,
the notion of an <em>effective overload set</em> is used.</p>
   <p><a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①⑦">Operations</a> must not be overloaded across <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤④">interface</a>, <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface⑧">partial interface</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin②⑨">interface mixin</a>, and <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin⑤">partial interface mixin</a> definitions.</p>
   <div class="note" role="note">
    <p>For example, the overloads for both <var>f</var> and <var>g</var> are disallowed:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">f</c->();
};

<c- b="">partial</c-> <c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">f</c->(<c- b="">double</c-> <c- g="">x</c->);
  <c- b="">void</c-> <c- g="">g</c->();
};

<c- b="">partial</c-> <c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">g</c->(<c- b="">DOMString</c-> <c- g="">x</c->);
};
</pre>
    <p>Note that the [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor④">Constructor</a></code>] and
    [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor③">NamedConstructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤">extended attributes</a> are disallowed from appearing
    on <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface⑨">partial interface</a> definitions,
    so there is no need to also disallow overloading for constructors.</p>
   </div>
   <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-effective-overload-set">effective overload set</dfn> represents the allowable invocations for a particular <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①⑧">operation</a>,
constructor (specified with [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor⑤">Constructor</a></code>]
or [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor④">NamedConstructor</a></code>]), or <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①⓪">callback function</a>.
The algorithm to compute an <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set">effective overload set</a> operates on one of the following six types of IDL constructs, and listed with them below are
the inputs to the algorithm needed to compute the set.</p>
   <dl>
    <dt data-md="">For regular operations
    </dt><dt data-md="">For static operations
    </dt><dd data-md="">
     <ul>
      <li data-md="">
       <p>the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤⑤">interface</a> on which the <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation①⑨">operations</a> are to be found</p>
      </li><li data-md="">
       <p>the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③④">identifier</a> of the operations</p>
      </li><li data-md="">
       <p>the number of arguments to be passed</p>
     </li></ul>
    </dd><dt data-md="">For constructors
    </dt><dd data-md="">
     <ul>
      <li data-md="">
       <p>the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤⑥">interface</a> on which the [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor⑥">Constructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑥">extended attributes</a> are to be found</p>
      </li><li data-md="">
       <p>the number of arguments to be passed</p>
     </li></ul>
    </dd><dt data-md="">For named constructors
    </dt><dd data-md="">
     <ul>
      <li data-md="">
       <p>the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤⑦">interface</a> on which the [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor⑤">NamedConstructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑦">extended attributes</a> are to be found</p>
      </li><li data-md="">
       <p>the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③⑤">identifier</a> of the named constructors</p>
      </li><li data-md="">
       <p>the number of arguments to be passed</p>
     </li></ul>
    </dd><dt data-md="">For callback functions
    </dt><dd data-md="">
     <ul>
      <li data-md="">
       <p>the <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①①">callback function</a></p>
      </li><li data-md="">
       <p>the number of arguments to be passed</p>
     </li></ul>
   </dd></dl>
   <p>An effective overload set is used, among other things, to determine whether there are ambiguities in the
overloaded operations and constructors specified on an interface.</p>
   <p>The <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-item" id="ref-for-list-item">items</a> of an <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set①">effective overload set</a> are <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#tuple" id="ref-for-tuple">tuples</a> of the form
(<a data-link-type="dfn" href="#effective-overload-set-tuple-callable" id="ref-for-effective-overload-set-tuple-callable">callable</a>, <a data-link-type="dfn" href="#type-list" id="ref-for-type-list">type list</a>, <a data-link-type="dfn" href="#optionality-list" id="ref-for-optionality-list">optionality list</a>)
whose <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#struct-item" id="ref-for-struct-item">items</a> are described below:</p>
   <ul>
    <li data-md="">
     <p>A <dfn class="dfn-paneled" data-dfn-for="effective overload set tuple" data-dfn-type="dfn" data-noexport="" id="effective-overload-set-tuple-callable">callable</dfn> is an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②⓪">operation</a> if the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set②">effective overload set</a> is for <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①④">regular operations</a> or <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation⑦">static operations</a>;
it is an <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑧">extended attribute</a> if the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set③">effective overload set</a> is for constructors or <a data-link-type="dfn" href="#dfn-named-constructor" id="ref-for-dfn-named-constructor">named constructors</a>;
and it is the <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①②">callback function</a> itself if the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set④">effective overload set</a> is for <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①③">callback functions</a>.</p>
    </li><li data-md="">
     <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="type-list">type list</dfn> is a <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list">list</a> of IDL types.</p>
    </li><li data-md="">
     <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="optionality-list">optionality list</dfn> is a <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①">list</a> of
three possible <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-optionality-value">optionality values</dfn> – "required", "optional" or "variadic" –
indicating whether the argument at a given index was
declared as being <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument③">optional</a> or corresponds to a <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic⑤">variadic</a> argument.</p>
   </li></ul>
   <p>Each <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#tuple" id="ref-for-tuple①">tuple</a> represents an allowable invocation of the operation,
constructor, or callback function with an argument value list of the given types.
Due to the use of <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument④">optional arguments</a> and <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic⑥">variadic</a> operations
and constructors, there may be multiple items in an effective overload set identifying
the same operation or constructor.</p>
   <div class="algorithm" data-algorithm="compute an effective overload set">
     The algorithm below describes how to compute an effective overload set.
    The following input variables are used, if they are required: 
    <ul>
     <li data-md="">
      <p>the identifier of the operation or named constructor is <var>A</var></p>
     </li><li data-md="">
      <p>the argument count is <var>N</var></p>
     </li><li data-md="">
      <p>the interface is <var>I</var></p>
     </li><li data-md="">
      <p>the callback function is <var>C</var></p>
    </li></ul>
    <p>Whenever an argument of an extended attribute is mentioned,
    it is referring to an argument of the extended attribute’s <a data-link-type="dfn" href="#dfn-xattr-named-argument-list" id="ref-for-dfn-xattr-named-argument-list">named argument list</a>.</p>
    <ol>
     <li data-md="">
      <p>Let <var>S</var> be an <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-set" id="ref-for-ordered-set">ordered set</a>.</p>
     </li><li data-md="">
      <p>Let <var>F</var> be an <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-set" id="ref-for-ordered-set①">ordered set</a> with <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-item" id="ref-for-list-item①">items</a> as follows,
according to the kind of effective overload set:</p>
      <dl class="switch">
       <dt data-md="">For regular operations
       </dt><dd data-md="">
        <p>The elements of <var>F</var> are the <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①⑤">regular operations</a> with
identifier <var>A</var> defined on interface <var>I</var>.</p>
       </dd><dt data-md="">For static operations
       </dt><dd data-md="">
        <p>The elements of <var>F</var> are the <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation⑧">static operations</a> with
identifier <var>A</var> defined on interface <var>I</var>.</p>
       </dd><dt data-md="">For constructors
       </dt><dd data-md="">
        <p>The elements of <var>F</var> are the
[<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor⑦">Constructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑨">extended attributes</a> on interface <var>I</var>.</p>
       </dd><dt data-md="">For named constructors
       </dt><dd data-md="">
        <p>The elements of <var>F</var> are the
[<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor⑥">NamedConstructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②⓪">extended attributes</a> on interface <var>I</var> whose <a data-link-type="dfn" href="#dfn-xattr-named-argument-list" id="ref-for-dfn-xattr-named-argument-list①">named argument lists’</a> identifiers are <var>A</var>.</p>
       </dd><dt data-md="">For callback functions
       </dt><dd data-md="">
        <p>The single element of <var>F</var> is the callback function itself, <var>C</var>.</p>
      </dd></dl>
     </li><li data-md="">
      <p>Let <var>maxarg</var> be the maximum number of arguments the operations,
constructor extended attributes or callback functions in <var>F</var> are declared to take.
For <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic⑦">variadic</a> operations and constructor extended attributes,
the argument on which the ellipsis appears counts as a single argument.</p>
      <p class="note" role="note"><span>Note:</span> So <code>void f(long x, long... y);</code> is considered to be declared to take two arguments.</p>
     </li><li data-md="">
      <p>Let <var>max</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#eqn-max" id="ref-for-eqn-max">max</a>(<var>maxarg</var>, <var>N</var>).</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate①">For each</a> operation, extended attribute, or callback function <var>X</var> in <var>F</var>:</p>
      <ol>
       <li data-md="">
        <p>Let <var>arguments</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list②">list</a> of arguments <var>X</var> is declared to take.</p>
       </li><li data-md="">
        <p>Let <var>n</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-size" id="ref-for-list-size">size</a> of <var>arguments</var>.</p>
       </li><li data-md="">
        <p>Let <var>types</var> be a <a data-link-type="dfn" href="#type-list" id="ref-for-type-list①">type list</a>.</p>
       </li><li data-md="">
        <p>Let <var>optionalityValues</var> be an <a data-link-type="dfn" href="#optionality-list" id="ref-for-optionality-list①">optionality list</a>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate②">For each</a> <var>argument</var> in <var>arguments</var>:</p>
        <ol>
         <li data-md="">
          <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append">Append</a> the type of <var>argument</var> to <var>types</var>.</p>
         </li><li data-md="">
          <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append①">Append</a> "variadic" to <var>optionalityValues</var> if <var>argument</var> is a final, variadic argument,
"optional" if <var>argument</var> is <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument⑤">optional</a>,
and "required" otherwise.</p>
        </li></ol>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-append" id="ref-for-set-append">Append</a> the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#tuple" id="ref-for-tuple②">tuple</a> (<var>X</var>, <var>types</var>, <var>optionalityValues</var>) to <var>S</var>.</p>
       </li><li data-md="">
        <p>If <var>X</var> is declared to be <a data-link-type="dfn" href="#dfn-variadic" id="ref-for-dfn-variadic⑧">variadic</a>, then:</p>
        <ol>
         <li data-md="">
          <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate③">For each</a> <var>i</var> in <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#the-range" id="ref-for-the-range">the range</a> <var>n</var> to <var>max</var> − 1, inclusive:</p>
          <ol>
           <li data-md="">
            <p>Let <var>t</var> be a <a data-link-type="dfn" href="#type-list" id="ref-for-type-list②">type list</a>.</p>
           </li><li data-md="">
            <p>Let <var>o</var> be an <a data-link-type="dfn" href="#optionality-list" id="ref-for-optionality-list②">optionality list</a>.</p>
           </li><li data-md="">
            <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate④">For each</a> <var>j</var> in <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#the-range" id="ref-for-the-range①">the range</a> 0 to <var>n</var> − 1, inclusive:</p>
            <ol>
             <li data-md="">
              <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append②">Append</a> <var>types</var>[<var>j</var>] to <var>t</var>.</p>
             </li><li data-md="">
              <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append③">Append</a> <var>optionalityValues</var>[<var>j</var>] to <var>o</var>.</p>
            </li></ol>
           </li><li data-md="">
            <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate⑤">For each</a> <var>j</var> in <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#the-range" id="ref-for-the-range②">the range</a> <var>n</var> to <var>i</var>, inclusive:</p>
            <ol>
             <li data-md="">
              <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append④">Append</a> <var>types</var>[<var>n</var> − 1] to <var>t</var>.</p>
             </li><li data-md="">
              <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append⑤">Append</a> "variadic" to <var>o</var>.</p>
            </li></ol>
           </li><li data-md="">
            <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-append" id="ref-for-set-append①">Append</a> the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#tuple" id="ref-for-tuple③">tuple</a> (<var>X</var>, <var>t</var>, <var>o</var>) to <var>S</var>.</p>
          </li></ol>
        </li></ol>
       </li><li data-md="">
        <p>Let <var>i</var> be <var>n</var> − 1.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#iteration-while" id="ref-for-iteration-while">While</a> <var>i</var> ≥ 0:</p>
        <ol>
         <li data-md="">
          <p>If <var>arguments</var>[<var>i</var>] is not <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument⑥">optional</a> (i.e., it is not marked as "optional" and is not
a final, variadic argument), then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#iteration-break" id="ref-for-iteration-break">break</a>.</p>
         </li><li data-md="">
          <p>Let <var>t</var> be a <a data-link-type="dfn" href="#type-list" id="ref-for-type-list③">type list</a>.</p>
         </li><li data-md="">
          <p>Let <var>o</var> be an <a data-link-type="dfn" href="#optionality-list" id="ref-for-optionality-list③">optionality list</a>.</p>
         </li><li data-md="">
          <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate⑥">For each</a> <var>j</var> in <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#the-range" id="ref-for-the-range③">the range</a> 0 to <var>i</var> − 1, inclusive:</p>
          <ol>
           <li data-md="">
            <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append⑥">Append</a> <var>types</var>[<var>j</var>] to <var>t</var>.</p>
           </li><li data-md="">
            <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append⑦">Append</a> <var>optionalityValues</var>[<var>j</var>] to <var>o</var>.</p>
          </li></ol>
         </li><li data-md="">
          <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-append" id="ref-for-set-append②">Append</a> the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#tuple" id="ref-for-tuple④">tuple</a> (<var>X</var>, <var>t</var>, <var>o</var>) to <var>S</var>.</p>
          <p class="note" role="note"><span>Note:</span> if <var>i</var> is 0, this means to add to <var>S</var> the tuple (<var>X</var>, « », « »);
(where "« »" represents an <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-is-empty" id="ref-for-list-is-empty">empty list</a>).</p>
         </li><li data-md="">
          <p>Set <var>i</var> to <var>i</var> − 1.</p>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>S</var>.</p>
    </li></ol>
   </div>
   <div class="example" id="example-fc073073">
    <a class="self-link" href="#example-fc073073"></a> 
    <p>For the following interface:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A</c-> {
  /* f1 */ <c- b="">void</c-> <c- g="">f</c->(<c- b="">DOMString</c-> <c- g="">a</c->);
  /* f2 */ <c- b="">void</c-> <c- g="">f</c->(<c- n="">Node</c-> <c- g="">a</c->, <c- b="">DOMString</c-> <c- g="">b</c->, <c- b="">double</c->... <c- g="">c</c->);
  /* f3 */ <c- b="">void</c-> <c- g="">f</c->();
  /* f4 */ <c- b="">void</c-> <c- g="">f</c->(<c- n="">Event</c-> <c- g="">a</c->, <c- b="">DOMString</c-> <c- g="">b</c->, <c- b="">optional</c-> <c- b="">DOMString</c-> <c- g="">c</c->, <c- b="">double</c->... <c- g="">d</c->);
};
</pre>
    <p>assuming <code class="idl">Node</code> and <code class="idl">Event</code> are two other interfaces of which no object can implement both,
    the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set⑤">effective overload set</a> for <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①⑥">regular operations</a> with
    identifier <code>f</code> and argument count 4 is:</p>
<pre class="set">«
  (f1, « DOMString »,                           « required »),
  (f2, « Node, DOMString »,                     « required, required »),
  (f2, « Node, DOMString, double »,             « required, required, variadic »),
  (f2, « Node, DOMString, double, double »,     « required, required, variadic, variadic »),
  (f3, « »,                                     « »),
  (f4, « Event, DOMString »,                    « required, required »),
  (f4, « Event, DOMString, DOMString »,         « required, required, optional »),
  (f4, « Event, DOMString, DOMString, double », « required, required, optional, variadic »)
»
</pre>
   </div>
   <p>Two types are <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-distinguishable">distinguishable</dfn> if
the following algorithm returns <i>true</i>.</p>
   <ol class="algorithm">
    <li data-md="">
     <p>If one type <a data-link-type="dfn" href="#dfn-includes-a-nullable-type" id="ref-for-dfn-includes-a-nullable-type">includes a nullable type</a> and the other type either <a data-link-type="dfn" href="#dfn-includes-a-nullable-type" id="ref-for-dfn-includes-a-nullable-type①">includes a nullable type</a>,
is a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑤">union type</a> with <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types④">flattened member types</a> including a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary④">dictionary type</a>, or
is a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary⑤">dictionary type</a>,
return <i>false</i>.</p>
     <div class="example" id="example-distinguishability-nullable">
      <a class="self-link" href="#example-distinguishability-nullable"></a> None of the following pairs are distinguishable: 
      <ul>
       <li> <code><code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double②">double</a></code>?</code> and <code>Dictionary1</code> 
       </li><li> <code>(Interface1 or <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long">long</a></code>)?</code> and <code>(Interface2 or <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString⑦">DOMString</a></code>)?</code> 
       </li><li> <code>(Interface1 or <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①">long</a></code>?)</code> and <code>(Interface2 or <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString⑧">DOMString</a></code>)?</code> 
       </li><li> <code>(Interface1 or <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long②">long</a></code>?)</code> and <code>(Interface2 or <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString⑨">DOMString</a></code>?)</code> 
       </li><li> <code>(Dictionary1 or <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long③">long</a></code>)</code> and <code>(Interface2 or <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①⓪">DOMString</a></code>)?</code> 
       </li><li> <code>(Dictionary1 or <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long④">long</a></code>)</code> and <code>(Interface2 or <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①①">DOMString</a></code>?)</code> 
      </li></ul>
     </div>
    </li><li data-md="">
     <p>If both types are either a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑥">union type</a> or <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑧">nullable</a> <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑦">union type</a>,
return <i>true</i> if each member type of the one
is distinguishable with each member type of the other,
or <i>false</i> otherwise.</p>
    </li><li data-md="">
     <p>If one type is a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑧">union type</a> or nullable union type,
return <i>true</i> if each <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type①">member type</a> of the union type is distinguishable
with the non-union type,
or <i>false</i> otherwise.</p>
    </li><li data-md="">
     <p>Consider the two "innermost" types derived by taking each type’s <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①">inner type</a> if it is an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①">annotated type</a>, and then taking its <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type④">inner type</a> inner type
if the result is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑨">nullable type</a>. If these two innermost types appear or are in categories
appearing in the following table and there is a “●” mark in the corresponding entry
or there is a letter in the corresponding entry and the designated additional
requirement below the table is satisfied, then return <i>true</i>.
Otherwise return <i>false</i>.</p>
     <p>Categories:</p>
     <dl>
      <dt>interface-like
      </dt><dd>
       <ul>
        <li data-md="">
         <p>non-<a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①①">callback</a> <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①">interface types</a></p>
        </li><li data-md="">
         <p><a data-link-type="dfn" href="#dfn-exception-type" id="ref-for-dfn-exception-type">exception types</a></p>
        </li><li data-md="">
         <p><a data-link-type="dfn" href="#dfn-buffer-source-type" id="ref-for-dfn-buffer-source-type">buffer source types</a></p>
       </li></ul>
      </dd><dt>dictionary-like
      </dt><dd>
       <ul>
        <li data-md="">
         <p><a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary⑥">dictionary types</a></p>
        </li><li data-md="">
         <p><a data-link-type="dfn" href="#record-type" id="ref-for-record-type①">record types</a></p>
        </li><li data-md="">
         <p><a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①②">callback</a> <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface②">interface types</a></p>
       </li></ul>
      </dd><dt>sequence-like
      </dt><dd>
       <ul>
        <li data-md="">
         <p><a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type⑤">sequence types</a></p>
        </li><li data-md="">
         <p><a data-link-type="dfn" href="#dfn-frozen-array-type" id="ref-for-dfn-frozen-array-type①">frozen array types</a></p>
       </li></ul>
     </dd></dl>
     <table class="matrix data complex" id="distinguishable-table">
      <tbody>
       <tr>
        <th class="corner">
        </th><th>
         <div> <span>boolean</span> </div>
        </th><th>
         <div> <span>numeric types</span> </div>
        </th><th>
         <div> <span>string types</span> </div>
        </th><th>
         <div> <span>object</span> </div>
        </th><th>
         <div> <span>symbol</span> </div>
        </th><th>
         <div> <span>interface-like</span> </div>
        </th><th>
         <div> <span>callback function</span> </div>
        </th><th>
         <div> <span>dictionary-like</span> </div>
        </th><th>
         <div> <span>sequence-like</span> </div>
       </th></tr><tr>
        <th>boolean
        </th><td>
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
       </td></tr><tr>
        <th>numeric types
        </th><td class="belowdiagonal">
        </td><td>
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
       </td></tr><tr>
        <th>string types
        </th><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td>
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
       </td></tr><tr>
        <th>object
        </th><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td>
        </td><td>●
        </td><td>
        </td><td>
        </td><td>
        </td><td>
       </td></tr><tr>
        <th>symbol
        </th><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td>
        </td><td>●
        </td><td>●
        </td><td>●
        </td><td>●
       </td></tr><tr>
        <th>interface-like
        </th><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td>(a)
        </td><td>●
        </td><td>●
        </td><td>●
       </td></tr><tr>
        <th>callback function
        </th><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td>
        </td><td>
        </td><td>●
       </td></tr><tr>
        <th>dictionary-like
        </th><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td>
        </td><td>●
       </td></tr><tr>
        <th>sequence-like
        </th><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td class="belowdiagonal">
        </td><td>
     </td></tr></tbody></table>
     <ol type="a">
      <li data-md="">
       <p>The two identified interface-like types are
not the same, and no single <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③">platform object</a> implements both
interface-like types.</p>
     </li></ol>
     <div class="example" id="example-distinguishability-diff-types"><a class="self-link" href="#example-distinguishability-diff-types"></a> <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double③">double</a></code> and <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①②">DOMString</a></code> are distinguishable because
    there is a ● at the intersection of <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type①">numeric types</a> with <a data-link-type="dfn" href="#dfn-string-type" id="ref-for-dfn-string-type②">string types</a>. </div>
     <div class="example" id="example-distinguishability-same-category"><a class="self-link" href="#example-distinguishability-same-category"></a> <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double④">double</a></code> and <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long⑤">long</a></code> are not distinguishable because they are both <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type②">numeric types</a>,
    and there is no ● or letter at the intersection of <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type③">numeric types</a> with <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type④">numeric types</a>. </div>
     <div class="example" id="example-distinguishability-callback-interfaces">
      <a class="self-link" href="#example-distinguishability-callback-interfaces"></a> Given: 
<pre class="highlight"><c- b="">callback</c-> <c- b="">interface</c-> <c- g="">CBIface</c-> {
    <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">attr1</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Iface</c-> {
    <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">attr2</c->;
};

<c- b="">dictionary</c-> <c- g="">Dict</c-> {
    <c- b="">DOMString</c-> <c- g="">field1</c->;
};
</pre>
      <p><code>CBIface</code> is distinguishable from <code>Iface</code> because there’s a ● at the intersection of dictionary-like and interface-like,
    but it is not distinguishable from <code>Dict</code> because there’s no ● at the intersection of dictionary-like and itself.</p>
     </div>
     <div class="example" id="example-distinguishability-promises"><a class="self-link" href="#example-distinguishability-promises"></a> <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type①">Promise types</a> do not appear in the above table, and as a consequence are
    not distinguishable with any other type. </div>
   </li></ol>
   <p>If there is more than one <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-item" id="ref-for-list-item②">item</a> in an <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set⑥">effective overload set</a> that has a given <a data-link-type="dfn" href="#type-list" id="ref-for-type-list④">type list</a> <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-size" id="ref-for-list-size①">size</a>,
then for those items there must be an index <var>i</var> such that
for each pair of items the types at index <var>i</var> are <a data-link-type="dfn" href="#dfn-distinguishable" id="ref-for-dfn-distinguishable">distinguishable</a>.
The lowest such index is termed the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-distinguishing-argument-index">distinguishing argument index</dfn> for the items of the effective overload set with the given type list size.</p>
   <div class="example" id="example-eb01cf06">
    <a class="self-link" href="#example-eb01cf06"></a> 
    <p>Consider the effective overload set shown in the previous example.
    There are multiple items in the set with type lists 2, 3 and 4.
    For each of these type list size, the <a data-link-type="dfn" href="#dfn-distinguishing-argument-index" id="ref-for-dfn-distinguishing-argument-index">distinguishing argument index</a> is 0, since <code class="idl">Node</code> and <code class="idl">Event</code> are <a data-link-type="dfn" href="#dfn-distinguishable" id="ref-for-dfn-distinguishable①">distinguishable</a>.</p>
    <p>The following use of overloading however is invalid:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">B</c-> {
  <c- b="">void</c-> <c- g="">f</c->(<c- b="">DOMString</c-> <c- g="">x</c->);
  <c- b="">void</c-> <c- g="">f</c->(<c- b="">USVString</c-> <c- g="">x</c->);
};
</pre>
    <p>since <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①③">DOMString</a></code> and <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString②">USVString</a></code> are not distinguishable.</p>
   </div>
   <p>In addition, for each index <var>j</var>, where <var>j</var> is less than the <a data-link-type="dfn" href="#dfn-distinguishing-argument-index" id="ref-for-dfn-distinguishing-argument-index①">distinguishing argument index</a> for a given type list size, the types at index <var>j</var> in
all of the items’ type lists must be the same,
and the <a data-link-type="dfn" href="#dfn-optionality-value" id="ref-for-dfn-optionality-value">optionality values</a> at index <var>j</var> in all of the items’ optionality lists must
be the same.</p>
   <div class="example" id="example-7d32b80c">
    <a class="self-link" href="#example-7d32b80c"></a> 
    <p>The following is invalid:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">B</c-> {
  /* f1 */ <c- b="">void</c-> <c- g="">f</c->(<c- b="">DOMString</c-> <c- g="">w</c->);
  /* f2 */ <c- b="">void</c-> <c- g="">f</c->(<c- b="">long</c-> <c- g="">w</c->, <c- b="">double</c-> <c- g="">x</c->, <c- n="">Node</c-> <c- g="">y</c->, <c- n="">Node</c-> <c- g="">z</c->);
  /* f3 */ <c- b="">void</c-> <c- g="">f</c->(<c- b="">double</c-> <c- g="">w</c->, <c- b="">double</c-> <c- g="">x</c->, <c- b="">DOMString</c-> <c- g="">y</c->, <c- n="">Node</c-> <c- g="">z</c->);
};
</pre>
    <p>For argument count 4, the effective overload set is:</p>
<pre class="set">«
  (f1, « DOMString »,                       « required »),
  (f2, « long, double, Node, Node »,        « required, required, required, required »),
  (f3, « double, double, DOMString, Node », « required, required, required, required »)
»
</pre>
    <p>Looking at items with type list size 4, the <a data-link-type="dfn" href="#dfn-distinguishing-argument-index" id="ref-for-dfn-distinguishing-argument-index②">distinguishing argument index</a> is 2, since <code class="idl">Node</code> and <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①④">DOMString</a></code> are <a data-link-type="dfn" href="#dfn-distinguishable" id="ref-for-dfn-distinguishable②">distinguishable</a>.
    However, since the arguments in these two overloads at index 0 are different,
    the overloading is invalid.</p>
   </div>
   <h5 class="heading settled" data-level="2.4.6.1" id="idl-overloading-vs-union"><span class="secno">2.4.6.1. </span><span class="content">Overloading vs. union types</span><a class="self-link" href="#idl-overloading-vs-union"></a></h5>
   <p><i>This section is informative.</i></p>
   <div class="non-normative">
    <p>For specifications defining IDL <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②①">operations</a>, it might seem that <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded①">overloads</a> and a
combination of <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑨">union types</a> and <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument⑦">optional arguments</a> have some feature overlap.</p>
    <p>It is first important to note that <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded②">overloads</a> have different behaviors than <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①⓪">union
types</a> or <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument⑧">optional arguments</a>, and one <em>cannot</em> be fully defined using the other (unless,
of course, additional prose is provided, which can defeat the purpose of the Web IDL type system).
For example, consider the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-stroke" id="ref-for-dom-context-2d-stroke">stroke()</a></code> operations defined on the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/canvas.html#canvasdrawpath" id="ref-for-canvasdrawpath">CanvasDrawPath</a></code> interface <a data-link-type="biblio" href="#biblio-html">[HTML]</a>:</p>
<pre class="highlight"><c- b="">interface</c-> <c- g="">CanvasDrawPathExcerpt</c-> {
  <c- b="">void</c-> <c- g="">stroke</c->();
  <c- b="">void</c-> <c- g="">stroke</c->(<c- n="">Path2D</c-> <c- g="">path</c->);
};
</pre>
    <p>Per the ECMAScript language binding, calling <code>stroke(undefined)</code> on an object
implementing <code class="idl">CanvasDrawPathExcerpt</code> would attempt to call the second
overload, yielding a <code class="idl"><a data-link-type="idl" href="#exceptiondef-typeerror" id="ref-for-exceptiondef-typeerror">TypeError</a></code> since <emu-val>undefined</emu-val> cannot be <a href="#es-to-interface">converted</a> to a <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/canvas.html#path2d" id="ref-for-path2d">Path2D</a></code>. However, if the operations were instead
defined with <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument⑨">optional arguments</a> and merged into one,</p>
<pre class="highlight"><c- b="">interface</c-> <c- g="">CanvasDrawPathExcerptOptional</c-> {
  <c- b="">void</c-> <c- g="">stroke</c->(<c- b="">optional</c-> <c- n="">Path2D</c-> <c- g="">path</c->);
};
</pre>
    <p>the <a data-link-type="dfn" href="#dfn-overload-resolution-algorithm" id="ref-for-dfn-overload-resolution-algorithm">overload resolution algorithm</a> would treat the <var>path</var> argument as <a data-link-type="dfn" href="#dfn-present" id="ref-for-dfn-present">not
present</a> given the same call <code>stroke(undefined)</code>, and not throw any exceptions.</p>
    <p class="note" role="note"><span>Note:</span> For this particular example, the latter behavior is actually what Web developers would
generally expect. If <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/canvas.html#canvasdrawpath" id="ref-for-canvasdrawpath①">CanvasDrawPath</a></code> were to be designed today, <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①⓪">optional arguments</a> would be
used for <code class="idl">stroke()</code>.</p>
    <p>Additionally, there are semantic differences as well. <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①①">Union types</a> are usually used in the sense
that "any of the types would work in about the same way". In contrast, <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded③">overloaded</a> operations are
designed to map well to language features such as C++ overloading, and are usually a better fit for
operations with more substantial differences in what they do given arguments of different types.
However, in most cases, operations with such substantial differences are best off with different
names to avoid confusion for Web developers, since the ECMAScript language does not provide
language-level overloading. As such, overloads are rarely appropriate for new APIs, instead often
appearing in legacy APIs or in specialized circumstances.</p>
    <p>That being said, we offer the following recommendations and examples in case of difficulties to
determine what Web IDL language feature to use:</p>
    <ul>
     <li data-md="">
      <p>In the unusual case where the operation needs to return values of different types for different
argument types, <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded④">overloading</a> will result in more expressive IDL fragments. <span class="note">This is almost never appropriate API design, and separate operations with distinct
names usually are a better choice for such cases.</span></p>
      <p>Suppose there is an operation <code class="idl">calculate()</code> that accepts a <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long⑥">long</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①⑤">DOMString</a></code>, or <code class="idl">CalculatableInterface</code> (an <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface③">interface type</a>) as its
only argument, and returns a value of the same type as its argument. It would be clearer to
write the IDL fragment using <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded⑤">overloaded</a> operations as</p>
<pre class="highlight"><c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">long</c-> <c- g="">calculate</c->(<c- b="">long</c-> <c- g="">input</c->);
  <c- b="">DOMString</c-> <c- g="">calculate</c->(<c- b="">DOMString</c-> <c- g="">input</c->);
  <c- n="">CalculatableInterface</c-> <c- g="">calculate</c->(<c- n="">CalculatableInterface</c-> <c- g="">input</c->);
};
</pre>
      <p>than using a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①②">union type</a> with a <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef①⓪">typedef</a> as</p>
<pre class="highlight"><c- b="">typedef</c-> (<c- b="">long</c-> <c- b="">or</c-> <c- b="">DOMString</c-> <c- b="">or</c-> <c- n="">CalculatableInterface</c->) <c- g="">Calculatable</c->;
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- n="">Calculatable</c-> <c- g="">calculate</c->(<c- n="">Calculatable</c-> <c- g="">input</c->);
};
</pre>
      <p>which does not convey the fact that the return value is always of the same type as <var>input</var>.</p>
      <p>The problem is exacerbated when one of the overloads has a return type of <code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void">void</a></code>, since <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①③">union types</a> cannot even contain <code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void①">void</a></code> as a <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type②">member type</a>. In that case, a return type
of <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any">any</a></code> needs to be used with appropriate prose defining the return type, further decreasing
expressiveness.</p>
      <p>If the specified <code class="idl">calculate()</code> is a new API and does not have any
compatibility concerns, it is suggested to use different names for the overloaded operations,
perhaps as</p>
<pre class="highlight"><c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">long</c-> <c- g="">calculateNumber</c->(<c- b="">long</c-> <c- g="">input</c->);
  <c- b="">DOMString</c-> <c- g="">calculateString</c->(<c- b="">DOMString</c-> <c- g="">input</c->);
  <c- n="">CalculatableInterface</c-> <c- g="">calculateCalculatableInterface</c->(<c- n="">CalculatableInterface</c-> <c- g="">input</c->);
};
</pre>
      <p>which allows Web developers to write explicit and unambiguous code.</p>
     </li><li data-md="">
      <p>When the operation has significantly different semantics for different argument types or
lengths, <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded⑥">overloading</a> is preferred. Again, in such scenarios, it is usually better
to create separate operations with distinct names, but legacy APIs sometimes follow this
pattern.</p>
      <p>As an example, the <code class="idl"><a data-link-type="idl" href="https://drafts.csswg.org/css-conditional-3/#dom-css-supports" id="ref-for-dom-css-supports">supports()</a></code> operations of the <code class="idl"><a data-link-type="idl" href="https://drafts.csswg.org/cssom-1/#namespacedef-css" id="ref-for-namespacedef-css">CSS</a></code> interface is defined as the
following IDL fragment <a data-link-type="biblio" href="#biblio-css3-conditional">[CSS3-CONDITIONAL]</a> <a data-link-type="biblio" href="#biblio-cssom">[CSSOM]</a>.</p>
<pre class="highlight"><c- b="">partial</c-> <c- b="">interface</c-> <c- g="">CSS</c-> {
  <c- b="">static</c-> <c- b="">boolean</c-> <c- g="">supports</c->(<c- n="">CSSOMString</c-> <c- g="">property</c->, <c- n="">CSSOMString</c-> <c- g="">value</c->);
  <c- b="">static</c-> <c- b="">boolean</c-> <c- g="">supports</c->(<c- n="">CSSOMString</c-> <c- g="">conditionText</c->);
};
</pre>
      <p>Using <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①①">optional arguments</a> one can rewrite the IDL fragment as follows:</p>
<pre class="highlight"><c- b="">partial</c-> <c- b="">interface</c-> <c- g="">CSSExcerptOptional</c-> {
  <c- b="">static</c-> <c- b="">boolean</c-> <c- g="">supports</c->(<c- n="">CSSOMString</c-> <c- g="">propertyOrConditionText</c->, <c- b="">optional</c-> <c- n="">CSSOMString</c-> <c- g="">value</c->);
};
</pre>
      <p>Even though the IDL is shorter in the second version, two distinctively different concepts are
conflated in the first argument. Without <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded⑦">overloads</a>, the question "is <var>property</var> or <var>conditionText</var> paired with <var>value</var>?"
is much more difficult to answer without reading the prose definition of the operation. This
makes the second version remarkably less readable than the first.</p>
      <p>Another consideration is that the prose for <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded⑧">overloaded</a> operations can be specified in
separate blocks, which can aid in both reading and writing specifications. This is not the case
for <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①②">optional arguments</a>. This means that in the first case the specification author can write
the prose definition of the operations as:</p>
      <div class="algorithm" data-algorithm="execute supports() with overloads">
       <p>The <code class="idl">supports(<var>property</var>, <var>value</var>)</code> method, when called, must run these steps:</p>
       <ol>
        <li data-md="">
         <p>…</p>
       </li></ol>
       <hr>
       <p>The <code class="idl">supports(<var>conditionText</var>)</code> method, when called,
    must run these steps:</p>
       <ol>
        <li data-md="">
         <p>…</p>
       </li></ol>
      </div>
      <p>Yet using <var>value</var> as an <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①③">optional argument</a>, the specification author has to
use more boilerplate-style text to effectively replicate the <a data-link-type="dfn" href="#dfn-overload-resolution-algorithm" id="ref-for-dfn-overload-resolution-algorithm①">overload resolution algorithm</a>.</p>
      <div class="algorithm" data-algorithm="execute supports() with optional argument">
       <p>The <code class="idl">supports(<var>propertyOrConditionText</var>, <var>value</var>)</code> method, when
    called, must run these steps:</p>
       <ol>
        <li data-md="">
         <p>If <var>value</var> is given, then:</p>
         <ol>
          <li data-md="">
           <p>Let <var>property</var> be <var>propertyOrConditionText</var>.</p>
          </li><li data-md="">
           <p>…</p>
         </li></ol>
        </li><li data-md="">
         <p>Otherwise:</p>
         <ol>
          <li data-md="">
           <p>Let <var>conditionText</var> be <var>propertyOrConditionText</var>.</p>
          </li><li data-md="">
           <p>…</p>
         </li></ol>
       </li></ol>
      </div>
      <p>If the two overloads have little to no shared parts, it is better to leave overload resolution
to the IDL mechanism.</p>
     </li><li data-md="">
      <p>If the operation accepts multiple types for multiple arguments with no coupling between types of
different arguments, <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①④">union types</a> can sometimes be the only viable solution.</p>
<pre class="highlight"><c- b="">typedef</c-> (<c- b="">long</c-> <c- b="">long</c-> <c- b="">or</c-> <c- b="">DOMString</c-> <c- b="">or</c-> <c- n="">CalculatableInterface</c->) <c- g="">SupportedArgument</c->;
<c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">add</c->(<c- n="">SupportedArgument</c-> <c- g="">operand1</c->, <c- n="">SupportedArgument</c-> <c- g="">operand2</c->);
};
</pre>
      <p>For the <code class="idl">add()</code> operation above, to specify it using <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded⑨">overloads</a> would require</p>
<pre class="highlight"><c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">add</c->(<c- b="">long</c-> <c- b="">long</c-> <c- g="">operand1</c->, <c- b="">long</c-> <c- b="">long</c-> <c- g="">operand2</c->);
  <c- b="">void</c-> <c- g="">add</c->(<c- b="">long</c-> <c- b="">long</c-> <c- g="">operand1</c->, <c- b="">DOMString</c-> <c- g="">operand2</c->);
  <c- b="">void</c-> <c- g="">add</c->(<c- b="">long</c-> <c- b="">long</c-> <c- g="">operand1</c->, <c- n="">CalculatableInterface</c-> <c- g="">operand2</c->);
  <c- b="">void</c-> <c- g="">add</c->(<c- b="">DOMString</c-> <c- g="">operand1</c->, <c- b="">long</c-> <c- b="">long</c-> <c- g="">operand2</c->);
  <c- b="">void</c-> <c- g="">add</c->(<c- b="">DOMString</c-> <c- g="">operand1</c->, <c- b="">DOMString</c-> <c- g="">operand2</c->);
  <c- b="">void</c-> <c- g="">add</c->(<c- b="">DOMString</c-> <c- g="">operand1</c->, <c- n="">CalculatableInterface</c-> <c- g="">operand2</c->);
  <c- b="">void</c-> <c- g="">add</c->(<c- n="">CalculatableInterface</c-> <c- g="">operand1</c->, <c- b="">long</c-> <c- b="">long</c-> <c- g="">operand2</c->);
  <c- b="">void</c-> <c- g="">add</c->(<c- n="">CalculatableInterface</c-> <c- g="">operand1</c->, <c- b="">DOMString</c-> <c- g="">operand2</c->);
  <c- b="">void</c-> <c- g="">add</c->(<c- n="">CalculatableInterface</c-> <c- g="">operand1</c->, <c- n="">CalculatableInterface</c-> <c- g="">operand2</c->);
};
</pre>
      <p>and nine times the corresponding prose!</p>
     </li><li data-md="">
      <p>Specification authors are encouraged to treat missing argument and <emu-val>undefined</emu-val> argument the same way in the ECMAScript language binding.</p>
      <p>Given the following IDL fragment:</p>
<pre class="highlight"><c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">foo</c->();
  <c- b="">void</c-> <c- g="">foo</c->(<c- n="">Node</c->? <c- g="">arg</c->);
};
</pre>
      <p>Using the ECMAScript language binding, calling <code>foo(undefined)</code> and <code>foo(null)</code> would both run the steps corresponding to the <code class="idl">foo(<var>arg</var>)</code> operation, with <var>arg</var> set to null, while <code>foo()</code> alone
would go to the first overload. This can be a surprising behavior for many API users. Instead,
specification authors are encouraged to use an <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①④">optional argument</a>, which would categorize
both <code>foo()</code> and <code>foo(undefined)</code> as "<var>arg</var> is <a data-link-type="dfn" href="#dfn-present" id="ref-for-dfn-present①">not
present</a>".</p>
<pre class="highlight"><c- b="">interface</c-> <c- g="">A</c-> {
  <c- b="">void</c-> <c- g="">foo</c->(<c- b="">optional</c-> <c- n="">Node</c->? <c- g="">arg</c->);
};
</pre>
      <p>In general, optionality is best expressed using the <emu-t>optional</emu-t> keyword, and not
using overloads.</p>
    </li></ul>
    <p>When the case fits none of the categories above, it is up to the specification author to choose the
style, since it is most likely that either style would sufficiently and conveniently describe the
intended behavior. However, the definition and <a href="#es-to-union">conversion algorithms</a> of <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①⑤">union types</a> and <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①⑤">optional arguments</a> are simpler to implement and reason about than <a data-link-type="dfn" href="#dfn-overload-resolution-algorithm" id="ref-for-dfn-overload-resolution-algorithm②">those</a> of <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded①⓪">overloads</a>, and usually result in more idiomatic APIs
in the ECMAScript language binding. Thus, unless any other considerations apply, <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①⑥">union types</a> (and/or <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①⑥">optional arguments</a>) are the default choice.</p>
    <p>Specifications are also free to mix and match union types and overloads, if the author finds it
appropriate and convenient.</p>
   </div>
   <h4 class="heading settled" data-level="2.4.7" id="idl-iterable"><span class="secno">2.4.7. </span><span class="content">Iterable declarations</span><a class="self-link" href="#idl-iterable"></a></h4>
   <p>An <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤⑧">interface</a> can be declared to be <dfn data-dfn-type="dfn" data-export="" id="dfn-iterable">iterable<a class="self-link" href="#dfn-iterable"></a></dfn> by using an <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-iterable-declaration">iterable declaration</dfn> (matching <emu-nt><a href="#prod-Iterable">Iterable</a></emu-nt>) in the body of the interface.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">iterable</c->&lt;<c- n="">value_type</c->&gt;;
  <c- b="">iterable</c->&lt;<c- n="">key_type</c->, <c- n="">value_type</c->&gt;;
};
</pre>
   <p>Objects implementing an interface that is declared to be iterable
support being iterated over to obtain a sequence of values.</p>
   <p class="note" role="note"><span>Note:</span> In the ECMAScript language binding, an interface that is iterable
will have <code class="idl">entries</code>, <code class="idl">forEach</code>, <code class="idl">keys</code>, <code class="idl">values</code>, and <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols">@@iterator</a></code> properties on its <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①">interface prototype object</a>.</p>
   <p>If a single type parameter is given, then the interface has a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-value-iterator">value iterator</dfn> and provides
values of the specified type.
If two type parameters are given, then the interface has a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-pair-iterator">pair iterator</dfn> and provides
value pairs, where the first value is a key and the second is the
value associated with the key.</p>
   <p>A <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator">value iterator</a> must only be declared on an interface
that <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties③">supports indexed properties</a>.
The value-type of the <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator①">value iterator</a> must be the same as the type returned by
the <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter③">indexed property getter</a>.
A <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator②">value iterator</a> is implicitly
defined to iterate over the object’s indexed properties.</p>
   <p>A <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator">pair iterator</a> must not be declared on an interface
that <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties④">supports indexed properties</a>.
Prose accompanying an interface with a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator①">pair iterator</a> must define what the list of <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-value-pairs-to-iterate-over">value pairs to iterate over</dfn> is.</p>
   <div class="note" role="note">
    <p>The ECMAScript forEach method that is generated for a <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator③">value iterator</a> invokes its callback like Array.prototype.forEach does, and the forEach
    method for a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator②">pair iterator</a> invokes its callback like Map.prototype.forEach does.</p>
    <p>Since <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator④">value iterators</a> are currently allowed only on interfaces that <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties⑤">support indexed properties</a>,
    it makes sense to use an Array-like forEach method.
    There may be a need for <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator⑤">value iterators</a> (a) on interfaces that do not <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties⑥">support indexed properties</a>,
    or (b) with a forEach method that instead invokes its callback like
    Set.protoype.forEach (where the key is the same as the value).
    If you’re creating an API that needs such a forEach method, please <a href="https://github.com/heycam/webidl/issues/new?title=Enhancement%20request%20for%20Iterables">file an issue</a>.</p>
   </div>
   <p class="note" role="note"><span>Note:</span> This is how <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-array-iterator-objects" id="ref-for-sec-array-iterator-objects">array iterator objects</a> work.
For interfaces that <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties⑦">support indexed properties</a>,
the iterator objects returned by <code class="idl">entries</code>, <code class="idl">keys</code>, <code class="idl">values</code>, and <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①">@@iterator</a></code> are
actual <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-array-iterator-objects" id="ref-for-sec-array-iterator-objects①">array iterator objects</a>.</p>
   <p>Interfaces with iterable declarations must not
have any <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member⑦">interface members</a> named "<code>entries</code>", "<code>forEach</code>",
"<code>keys</code>", or "<code>values</code>",
or have any <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces③">inherited interfaces</a> that have <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member⑦">members</a> with these names.</p>
   <div class="example" id="example-949431b7">
    <a class="self-link" href="#example-949431b7"></a> 
    <p>Consider the following interface <code class="idl">SessionManager</code>, which allows access to
    a number of <code class="idl">Session</code> objects keyed by username:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">SessionManager</c-> {
  <c- n="">Session</c-> <c- g="">getSessionForUser</c->(<c- b="">DOMString</c-> <c- g="">username</c->);

  <c- b="">iterable</c->&lt;<c- b="">DOMString</c->, <c- n="">Session</c->&gt;;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Session</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">username</c->;
  // ...
};
</pre>
    <p>The behavior of the iterator could be defined like so:</p>
    <blockquote>
     <p>The <a data-link-type="dfn" href="#dfn-value-pairs-to-iterate-over" id="ref-for-dfn-value-pairs-to-iterate-over">value pairs to iterate over</a> are the list of key-value pairs with the key being the username and the
        value being the open <code class="idl">Session</code> object on the <code class="idl">SessionManager</code> object corresponding to that username, sorted by username.</p>
    </blockquote>
    <p>In the ECMAScript language binding, the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②">interface prototype object</a> for the <code class="idl">SessionManager</code> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑤⑨">interface</a> has a <code>values</code> method that is a function, which, when invoked,
    returns an iterator object that itself has a <code>next</code> method that returns the
    next value to be iterated over.  It has <code>keys</code> and <code>entries</code> methods that iterate over the usernames of session objects
    and username/<code class="idl">Session</code> object pairs, respectively.  It also has
    a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols②">@@iterator</a></code> method that allows a <code class="idl">SessionManager</code> to be used in a <code>for..of</code> loop that has the same value as the <code>entries</code> method:</p>
<pre class="highlight"><c- c1="">// Get an instance of SessionManager.</c->
<c- c1="">// Assume that it has sessions for two users, "anna" and "brian".</c->
<c- a="">var</c-> sm <c- o="">=</c-> getSessionManager<c- p="">();</c->

<c- k="">typeof</c-> SessionManager<c- p="">.</c->prototype<c- p="">.</c->values<c- p="">;</c->            <c- c1="">// Evaluates to "function"</c->
<c- a="">var</c-> it <c- o="">=</c-> sm<c- p="">.</c->values<c- p="">();</c->                              <c- c1="">// values() returns an iterator object</c->
<c- k="">typeof</c-> it<c- p="">.</c->next<c- p="">;</c->                                    <c- c1="">// Evaluates to "function"</c->

<c- c1="">// This loop will log "anna" and then "brian".</c->
<c- k="">for</c-> <c- p="">(;;)</c-> <c- p="">{</c->
  <c- a="">let</c-> result <c- o="">=</c-> it<c- p="">.</c->next<c- p="">();</c->
  <c- k="">if</c-> <c- p="">(</c->result<c- p="">.</c->done<c- p="">)</c-> <c- p="">{</c->
    <c- k="">break</c-><c- p="">;</c->
  <c- p="">}</c->
  <c- a="">let</c-> session <c- o="">=</c-> result<c- p="">.</c->value<c- p="">;</c->
  console<c- p="">.</c->log<c- p="">(</c->session<c- p="">.</c->username<c- p="">);</c->
<c- p="">}</c->

<c- c1="">// This loop will also log "anna" and then "brian".</c->
<c- k="">for</c-> <c- p="">(</c-><c- a="">let</c-> username <c- k="">of</c-> sm<c- p="">.</c->keys<c- p="">())</c-> <c- p="">{</c->
  console<c- p="">.</c->log<c- p="">(</c->username<c- p="">);</c->
<c- p="">}</c->

<c- c1="">// Yet another way of accomplishing the same.</c->
<c- k="">for</c-> <c- p="">(</c-><c- a="">let</c-> <c- p="">[</c->username<c- p="">,</c-> session<c- p="">]</c-> <c- k="">of</c-> sm<c- p="">)</c-> <c- p="">{</c->
  console<c- p="">.</c->log<c- p="">(</c->username<c- p="">);</c->
<c- p="">}</c->
</pre>
   </div>
   <p>An interface must not have more than one <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration②">iterable declaration</a>.
The <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces④">inherited interfaces</a> of an interface with an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration③">iterable declaration</a> must not also have an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration④">iterable declaration</a>.
An interface with an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration⑤">iterable declaration</a> and its <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces⑤">inherited interfaces</a> must not have a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration②">maplike declaration</a> or <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration②">setlike declaration</a>.</p>
   <p>The following extended attributes are applicable to <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration⑥">iterable declarations</a>:
[<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed⑦">Exposed</a></code>],
[<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext⑥">SecureContext</a></code>].</p>
<pre class="grammar" id="prod-Iterable"><emu-nt><a href="#prod-Iterable">Iterable</a></emu-nt> ::
    <emu-t>iterable</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-nt><a href="#prod-OptionalType">OptionalType</a></emu-nt> <emu-t>&gt;</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-OptionalType"><emu-nt><a href="#prod-OptionalType">OptionalType</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt>
    ε
</pre>
   <h4 class="heading settled" data-level="2.4.8" id="idl-maplike"><span class="secno">2.4.8. </span><span class="content">Maplike declarations</span><a class="self-link" href="#idl-maplike"></a></h4>
   <p>An <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥⓪">interface</a> can be declared to be <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-maplike">maplike</dfn> by using a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-maplike-declaration">maplike declaration</dfn> (matching <emu-nt><a href="#prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt> or <emu-t>readonly</emu-t> <emu-nt><a href="#prod-MaplikeRest">MaplikeRest</a></emu-nt>) in the body of the interface.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">readonly</c-> <c- b="">maplike</c->&lt;<c- n="">key_type</c->, <c- n="">value_type</c->&gt;;
  <c- b="">maplike</c->&lt;<c- n="">key_type</c->, <c- n="">value_type</c->&gt;;
};
</pre>
   <p>Objects implementing an interface that is declared to be maplike
represent an ordered list of key–value pairs known as its <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-map-entries">map entries</dfn>.
The types used for the keys and values are given in the angle
brackets of the maplike declaration.  Keys are required to be unique.</p>
   <p>The <a data-link-type="dfn" href="#dfn-map-entries" id="ref-for-dfn-map-entries">map entries</a> of an object
implementing a <a data-link-type="dfn" href="#dfn-maplike" id="ref-for-dfn-maplike">maplike</a> interface is empty at
the of the object’s creation.  Prose accompanying the interface can
describe how the <a data-link-type="dfn" href="#dfn-map-entries" id="ref-for-dfn-map-entries①">map entries</a> of an object change.</p>
   <p>Maplike interfaces support an API for querying the map entries
appropriate for the language binding.  If the <emu-t>readonly</emu-t> keyword is not used, then it also supports an API for modifying
the map entries.</p>
   <p class="note" role="note"><span>Note:</span> In the ECMAScript language binding, the API for interacting
with the map entries is similar to that available on ECMAScript <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects">Map</a></code> objects.  If the <emu-t>readonly</emu-t> keyword is used, this includes <code class="idl">entries</code>, <code class="idl">forEach</code>, <code class="idl">get</code>, <code class="idl">has</code>, <code class="idl">keys</code>, <code class="idl">values</code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols③">@@iterator</a></code> methods, and a <code class="idl">size</code> getter.
For read–write maplikes, it also includes <code class="idl">clear</code>, <code class="idl">delete</code>, and <code class="idl">set</code> methods.</p>
   <p>Maplike interfaces must not
have any <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member⑧">interface members</a> named "<code>entries</code>", "<code>forEach</code>",
"<code>get</code>", "<code>has</code>",
"<code>keys</code>", "<code>size</code>", or
"<code>values</code>",
or have any <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces⑥">inherited interfaces</a> that have <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member⑧">members</a> with these names.
Read–write maplike interfaces must not
have any <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①⑥">attributes</a> or <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant①⑨">constants</a> named
"<code>clear</code>", "<code>delete</code>",
or "<code>set</code>", or have any <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces⑦">inherited interfaces</a> that have <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①⑦">attributes</a> or <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②⓪">constants</a> with these names.</p>
   <p class="note" role="note"><span>Note:</span> Operations named "<code>clear</code>", "<code>delete</code>",
or "<code>set</code>" are allowed on read–write maplike
interfaces and will prevent the default implementation of these methods being
added to the interface prototype object in the ECMAScript language binding.
This allows the default behavior of these operations to be overridden.</p>
   <p>An interface must not have more than one <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration③">maplike declaration</a>.
The <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces⑧">inherited interfaces</a> of a maplike interface must not
also have a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration④">maplike declaration</a>.
A maplike interface and its <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces⑨">inherited interfaces</a> must not have an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration⑦">iterable declaration</a> or <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration③">setlike declaration</a>.</p>
   <div data-fill-with="grammar-ReadOnlyMember"><pre class="grammar"><emu-nt><a href="#prod-ReadOnlyMember">ReadOnlyMember</a></emu-nt> ::
    <emu-t>readonly</emu-t> <emu-nt><a href="#prod-ReadOnlyMemberRest">ReadOnlyMemberRest</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-ReadOnlyMemberRest"><pre class="grammar"><emu-nt><a href="#prod-ReadOnlyMemberRest">ReadOnlyMemberRest</a></emu-nt> ::
    <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt>
</pre></div>
<pre class="grammar" id="prod-ReadWriteMaplike"><emu-nt><a href="#prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt> ::
    <emu-nt><a href="#prod-MaplikeRest">MaplikeRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-MaplikeRest"><emu-nt><a href="#prod-MaplikeRest">MaplikeRest</a></emu-nt> ::
    <emu-t>maplike</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>,</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-t>;</emu-t>
</pre>
   <p>No <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②①">extended attributes</a> defined in this specification are applicable to <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration⑤">maplike declarations</a>.</p>
   <p class="issue" id="issue-dbe4d1af"><a class="self-link" href="#issue-dbe4d1af"></a> Add example. </p>
   <h4 class="heading settled" data-level="2.4.9" id="idl-setlike"><span class="secno">2.4.9. </span><span class="content">Setlike declarations</span><a class="self-link" href="#idl-setlike"></a></h4>
   <p>An <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥①">interface</a> can be declared to be <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-setlike">setlike</dfn> by using a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-setlike-declaration">setlike declaration</dfn> (matching <emu-nt><a href="#prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt> or <emu-t>readonly</emu-t> <emu-nt><a href="#prod-SetlikeRest">SetlikeRest</a></emu-nt>) in the body of the interface.</p>
<pre class="syntax highlight"><c- b="">interface</c-> <c- g="">interface_identifier</c-> {
  <c- b="">readonly</c-> <c- b="">setlike</c->&lt;<c- n="">type</c->&gt;;
  <c- b="">setlike</c->&lt;<c- n="">type</c->&gt;;
};
</pre>
   <p>Objects implementing an interface that is declared to be setlike
represent an ordered list of values known as its <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-set-entries">set entries</dfn>.
The type of the values is given in the angle
brackets of the setlike declaration.  Values are required to be unique.</p>
   <p>The <a data-link-type="dfn" href="#dfn-set-entries" id="ref-for-dfn-set-entries">set entries</a> of an object
implementing a <a data-link-type="dfn" href="#dfn-setlike" id="ref-for-dfn-setlike">setlike</a> interface is empty at
the of the object’s creation.  Prose accompanying the interface can
describe how the <a data-link-type="dfn" href="#dfn-set-entries" id="ref-for-dfn-set-entries①">set entries</a> of an object change.</p>
   <p>Setlike interfaces support an API for querying the set entries
appropriate for the language binding.  If the <emu-t>readonly</emu-t> keyword is not used, then it also supports an API for modifying
the set entries.</p>
   <p class="note" role="note"><span>Note:</span> In the ECMAScript language binding, the API for interacting
with the set entries is similar to that available on ECMAScript <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-set-objects" id="ref-for-sec-set-objects">Set</a></code> objects.  If the <emu-t>readonly</emu-t> keyword is used, this includes <code class="idl">entries</code>, <code class="idl">forEach</code>, <code class="idl">has</code>, <code class="idl">keys</code>, <code class="idl">values</code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols④">@@iterator</a></code> methods, and a <code class="idl">size</code> getter.
For read–write setlikes, it also includes <code class="idl">add</code>, <code class="idl">clear</code>, and <code class="idl">delete</code> methods.</p>
   <p>Setlike interfaces must not
have any <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member⑨">interface members</a> named "<code>entries</code>", "<code>forEach</code>",
"<code>has</code>", "<code>keys</code>",
"<code>size</code>", or "<code>values</code>",
or have any <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①⓪">inherited interfaces</a> that have <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member⑨">members</a> with these names.
Read–write setlike interfaces must not
have any <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①⑧">attributes</a> or <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②①">constants</a> named
"<code>add</code>", "<code>clear</code>",
or "<code>delete</code>", or have any <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①①">inherited interfaces</a> that have <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute①⑨">attributes</a> or <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②②">constants</a> with these names.</p>
   <p class="note" role="note"><span>Note:</span> Operations named "<code>add</code>", "<code>clear</code>",
or "<code>delete</code>" are allowed on read–write setlike
interfaces and will prevent the default implementation of these methods being
added to the interface prototype object in the ECMAScript language binding.
This allows the default behavior of these operations to be overridden.</p>
   <p>An interface must not have more than one <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration④">setlike declaration</a>.
The <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①②">inherited interfaces</a> of a setlike interface must not
also have a <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration⑤">setlike declaration</a>.
A setlike interface and its <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①③">inherited interfaces</a> must not have an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration⑧">iterable declaration</a> or <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration⑥">maplike declaration</a>.</p>
   <div data-fill-with="grammar-ReadOnlyMember"><pre class="grammar"><emu-nt><a href="#prod-ReadOnlyMember">ReadOnlyMember</a></emu-nt> ::
    <emu-t>readonly</emu-t> <emu-nt><a href="#prod-ReadOnlyMemberRest">ReadOnlyMemberRest</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-ReadOnlyMemberRest"><pre class="grammar"><emu-nt><a href="#prod-ReadOnlyMemberRest">ReadOnlyMemberRest</a></emu-nt> ::
    <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt>
    <emu-nt><a href="#prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt>
</pre></div>
<pre class="grammar" id="prod-ReadWriteSetlike"><emu-nt><a href="#prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt> ::
    <emu-nt><a href="#prod-SetlikeRest">SetlikeRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-SetlikeRest"><emu-nt><a href="#prod-SetlikeRest">SetlikeRest</a></emu-nt> ::
    <emu-t>setlike</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-t>;</emu-t>
</pre>
   <p>No <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②②">extended attributes</a> defined in this specification are applicable to <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration⑥">setlike declarations</a>.</p>
   <p class="issue" id="issue-dbe4d1af①"><a class="self-link" href="#issue-dbe4d1af①"></a> Add example. </p>
   <h3 class="heading settled" data-level="2.5" id="idl-namespaces"><span class="secno">2.5. </span><span class="content">Namespaces</span><a class="self-link" href="#idl-namespaces"></a></h3>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-namespace">namespace</dfn> is a definition (matching <emu-nt><a href="#prod-Namespace">Namespace</a></emu-nt>) that declares a global singleton with
associated behaviors.</p>
<pre class="syntax highlight"><c- b="">namespace</c-> <c- g="">identifier</c-> {
  /* namespace_members... */
};
</pre>
   <p>A namespace is a specification of a set of <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="namespace member" id="dfn-namespace-member">namespace members</dfn> (matching <emu-nt><a href="#prod-NamespaceMembers">NamespaceMembers</a></emu-nt>), which are the <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①⑦">regular operations</a> and <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only⑥">read only</a> <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute⑦">regular attributes</a> that appear between the braces in
the namespace declaration. These operations and attributes describe the behaviors packaged into the
namespace.</p>
   <p>As with interfaces, the IDL for namespaces can be split into multiple parts by using <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-partial-namespace">partial namespace</dfn> definitions
(matching <emu-t>partial</emu-t> <emu-nt><a href="#prod-Namespace">Namespace</a></emu-nt>). The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③⑥">identifier</a> of a partial namespace definition must be the same as the identifier of a namespace definition.
All of the members that appear on each of the partial namespace definitions are
considered to be members of the namespace itself.</p>
<pre class="syntax highlight"><c- b="">namespace</c-> <mark><c- g="">SomeNamespace</c-></mark> {
  /* namespace_members... */
};

<c- b="">partial</c-> <c- b="">namespace</c-> <mark><c- g="">SomeNamespace</c-></mark> {
  /* namespace_members... */
};
</pre>
   <p class="note" role="note"><span>Note:</span> As with partial interface definitions, partial namespace definitions are intended for
use as a specification editorial aide, allowing the definition of a namespace to be
separated over more than one section of the document, and sometimes multiple
documents.</p>
   <p>The order that members appear in has significance for property enumeration in the <a href="#es-namespaces">ECMAScript binding</a>.</p>
   <p>Note that unlike interfaces or dictionaries, namespaces do not create types.</p>
   <p>Of the extended attributes defined in this specification, only the [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed⑧">Exposed</a></code>] and [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext⑦">SecureContext</a></code>] extended attributes are applicable to namespaces.</p>
   <p><a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace⑧">Namespaces</a> must be annotated with the [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed⑨">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②③">extended attribute</a>.</p>
   <div data-fill-with="grammar-Partial"><pre class="grammar"><emu-nt><a href="#prod-Partial">Partial</a></emu-nt> ::
    <emu-t>partial</emu-t> <emu-nt><a href="#prod-PartialDefinition">PartialDefinition</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-PartialDefinition"><pre class="grammar"><emu-nt><a href="#prod-PartialDefinition">PartialDefinition</a></emu-nt> ::
    <emu-t>interface</emu-t> <emu-nt><a href="#prod-PartialInterfaceOrPartialMixin">PartialInterfaceOrPartialMixin</a></emu-nt>
    <emu-nt><a href="#prod-PartialDictionary">PartialDictionary</a></emu-nt>
    <emu-nt><a href="#prod-Namespace">Namespace</a></emu-nt>
</pre></div>
<pre class="grammar" id="prod-Namespace"><emu-nt><a href="#prod-Namespace">Namespace</a></emu-nt> ::
    <emu-t>namespace</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#prod-NamespaceMembers">NamespaceMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-NamespaceMembers"><emu-nt><a href="#prod-NamespaceMembers">NamespaceMembers</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-NamespaceMember">NamespaceMember</a></emu-nt> <emu-nt><a href="#prod-NamespaceMembers">NamespaceMembers</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-NamespaceMember"><emu-nt><a href="#prod-NamespaceMember">NamespaceMember</a></emu-nt> ::
    <emu-nt><a href="#prod-RegularOperation">RegularOperation</a></emu-nt>
    <emu-t>readonly</emu-t> <emu-nt><a href="#prod-AttributeRest">AttributeRest</a></emu-nt>
</pre>
   <div class="example" id="example-namespace">
    <a class="self-link" href="#example-namespace"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②③">IDL fragment</a> defines an <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace⑨">namespace</a>.</p>
<pre class="highlight"><c- b="">namespace</c-> <c- g="">VectorUtils</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">Vector</c-> <c- g="">unit</c->;
  <c- b="">double</c-> <c- g="">dotProduct</c->(<c- n="">Vector</c-> <c- g="">x</c->, <c- n="">Vector</c-> <c- g="">y</c->);
  <c- n="">Vector</c-> <c- g="">crossProduct</c->(<c- n="">Vector</c-> <c- g="">x</c->, <c- n="">Vector</c-> <c- g="">y</c->);
};
</pre>
    <p>An ECMAScript implementation would then expose a global <code class="idl">VectorUtils</code> data property which was a simple object (with prototype <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object" id="ref-for-sec-properties-of-the-object-prototype-object">%ObjectPrototype%</a></code>) with enumerable data properties for each declared operation, and
    enumerable get-only accessors for each declared attribute:</p>
<pre class="highlight">Object<c- p="">.</c->getPrototypeOf<c- p="">(</c->VectorUtils<c- p="">);</c->                         <c- c1="">// Evaluates to Object.prototype.</c->
Object<c- p="">.</c->keys<c- p="">(</c->VectorUtils<c- p="">);</c->                                   <c- c1="">// Evaluates to ["dotProduct", "crossProduct"].</c->
Object<c- p="">.</c->getOwnPropertyDescriptor<c- p="">(</c->VectorUtils<c- p="">,</c-> <c- u="">"dotProduct"</c-><c- p="">);</c-> <c- c1="">// Evaluates to { value: &lt;a function&gt;, enumerable: true, configurable: true, writable: true }.</c->
Object<c- p="">.</c->getOwnPropertyDescriptor<c- p="">(</c->VectorUtils<c- p="">,</c-> <c- u="">"unit"</c-><c- p="">);</c->       <c- c1="">// Evaluates to { get: &lt;a function&gt;, enumerable: true, configurable: true }.</c->
</pre>
   </div>
   <h3 class="heading settled" data-level="2.6" id="idl-dictionaries"><span class="secno">2.6. </span><span class="content">Dictionaries</span><a class="self-link" href="#idl-dictionaries"></a></h3>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-dictionary">dictionary</dfn> is a definition (matching <emu-nt><a href="#prod-Dictionary">Dictionary</a></emu-nt>)
used to define an <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map">ordered map</a> data type with a fixed, ordered set of <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-entry" id="ref-for-map-entry">entries</a>,
termed <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-dictionary-member">dictionary members</dfn>,
where <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-key" id="ref-for-map-key">keys</a> are strings and <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-value" id="ref-for-map-value①">values</a> are of a particular type specified in the definition.</p>
<pre class="syntax highlight"><c- b="">dictionary</c-> <c- g="">identifier</c-> {
  /* dictionary_members... */
};
</pre>
   <p>Dictionaries are always passed by value.  In language bindings where a dictionary is represented by an object of some kind, passing a
dictionary to a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④">platform object</a> will not result in a reference to the dictionary being kept by that object.
Similarly, any dictionary returned from a platform object will be a copy and modifications made to it will not be visible to the platform object.</p>
   <p>A dictionary can be defined to <dfn class="dfn-paneled" data-dfn-for="dictionary" data-dfn-type="dfn" data-export="" id="dfn-inherit-dictionary">inherit</dfn> from another dictionary.
If the identifier of the dictionary is followed by a colon and a <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③⑦">identifier</a>,
then that identifier identifies the inherited dictionary.  The identifier
must identify a dictionary.</p>
   <p>A dictionary must not be declared such that
its inheritance hierarchy has a cycle.  That is, a dictionary <var>A</var> cannot inherit from itself, nor can it inherit from another
dictionary <var>B</var> that inherits from <var>A</var>, and so on.</p>
<pre class="syntax highlight"><c- b="">dictionary</c-> <mark><c- g="">Base</c-></mark> {
  /* dictionary_members... */
};

<c- b="">dictionary</c-> <c- g="">Derived</c-> : <mark><c- n="">Base</c-></mark> {
  /* dictionary_members... */
};
</pre>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-inherited-dictionaries">inherited dictionaries</dfn> of
a given dictionary <var>D</var> is the set of all dictionaries that <var>D</var> inherits from, directly or indirectly.  If <var>D</var> does not <a data-link-type="dfn" href="#dfn-inherit-dictionary" id="ref-for-dfn-inherit-dictionary">inherit</a> from another dictionary, then the set is empty.  Otherwise, the set
includes the dictionary <var>E</var> that <var>D</var> <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit④">inherits</a> from and all of <var>E</var>’s <a data-link-type="dfn" href="#dfn-inherited-dictionaries" id="ref-for-dfn-inherited-dictionaries①">inherited dictionaries</a>.</p>
   <p>A dictionary value of type <var>D</var> can have key–value pairs corresponding
to the dictionary members defined on <var>D</var> and on any of <var>D</var>’s <a data-link-type="dfn" href="#dfn-inherited-dictionaries" id="ref-for-dfn-inherited-dictionaries②">inherited dictionaries</a>.
On a given dictionary value, the presence of each dictionary member
is optional, unless that member is specified as required.
When specified in the dictionary value, a dictionary member is said to be <dfn class="dfn-paneled" data-dfn-for="dictionary member" data-dfn-type="dfn" data-export="" data-lt="present|not present" id="dfn-present">present</dfn>, otherwise it is <a data-link-type="dfn" href="#dfn-present" id="ref-for-dfn-present②">not present</a>.
Dictionary members can also optionally have a <dfn class="dfn-paneled" data-dfn-for="dictionary member" data-dfn-type="dfn" data-export="" id="dfn-dictionary-member-default-value">default value</dfn>, which is
the value to use for the dictionary member when passing a value to a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤">platform object</a> that does
not have a specified value.  Dictionary members with default values are
always considered to be present.</p>
   <p class="note" role="note"> In the ECMAScript binding, a value of <emu-val>undefined</emu-val> is treated as <a data-link-type="dfn" href="#dfn-present" id="ref-for-dfn-present③">not present</a>, or will trigger the <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value①">default value</a> where applicable. </p>
   <p>An <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map①">ordered map</a> with string <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-key" id="ref-for-map-key①">keys</a> can be implicitly treated as a dictionary value of a
specific dictionary <var>D</var> if all of its <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-entry" id="ref-for-map-entry①">entries</a> correspond to <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member③">dictionary members</a>, in the
correct order and with the correct types, and with appropriate <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-entry" id="ref-for-map-entry②">entries</a> for any required
dictionary members.</p>
   <p class="advisement"> As with <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value⑥">operation argument default values</a>,
    it is strongly suggested not to use <emu-val>true</emu-val> as the <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value②">default value</a> for <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean③">boolean</a></code>-typed <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member④">dictionary members</a>,
    as this can be confusing for authors who might otherwise expect the default
    conversion of <emu-val>undefined</emu-val> to be used (i.e., <emu-val>false</emu-val>). </p>
   <p>Each <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member⑤">dictionary member</a> (matching <emu-nt><a href="#prod-DictionaryMember">DictionaryMember</a></emu-nt>) is specified
as a type (matching <emu-nt><a href="#prod-Type">Type</a></emu-nt>) followed by an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③⑧">identifier</a> (given by an <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token following
the type).  The identifier is the key name of the key–value pair.
If the <emu-nt><a href="#prod-Type">Type</a></emu-nt> is an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier③⑨">identifier</a> followed by <emu-t>?</emu-t>, then the identifier
must identify an
interface, <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration⑧">enumeration</a>, <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①④">callback function</a> or <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef①①">typedef</a>.
If the dictionary member type is an identifier
not followed by <emu-t>?</emu-t>, then the identifier must
identify any one of those definitions or a <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary⑧">dictionary</a>.</p>
   <p>If the type of the <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member⑥">dictionary member</a>, after resolving typedefs,
is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①⓪">nullable type</a>,
its <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type⑤">inner type</a> must not be a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary⑦">dictionary type</a>.</p>
<pre class="syntax highlight"><c- b="">dictionary</c-> <c- g="">identifier</c-> {
  <c- n="">type</c-> <c- g="">identifier</c->;
};
</pre>
   <p>If the identifier is followed by a <span class="char">U+003D EQUALS SIGN ("=")</span> and a value (matching <emu-nt><a href="#prod-DefaultValue">DefaultValue</a></emu-nt>),
then that gives the dictionary member its <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value③">default value</a>.</p>
<pre class="syntax highlight"><c- b="">dictionary</c-> <c- g="">identifier</c-> {
  <c- n="">type</c-> <c- g="">identifier</c-> = "value";
};
</pre>
   <p>When a boolean literal token (<emu-t>true</emu-t> or <emu-t>false</emu-t>),
the <emu-t>null</emu-t> token,
an <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> token, a <emu-t class="regex"><a href="#prod-float">float</a></emu-t> token,
one of the three special floating point literal values (<emu-t>Infinity</emu-t>, <emu-t>-Infinity</emu-t> or <emu-t>NaN</emu-t>),
a <emu-t class="regex"><a href="#prod-string">string</a></emu-t> token or
the two token sequence <emu-t>[]</emu-t> used as the <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value④">default value</a>,
it is interpreted in the same way as for an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②②">operation</a>’s <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value⑦">optional argument default value</a>.</p>
   <p>If the type of the <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member⑦">dictionary member</a> is an <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration⑨">enumeration</a>, then its <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value⑤">default value</a> if specified must
be one of the <a data-link-type="dfn" href="#dfn-enumeration-value" id="ref-for-dfn-enumeration-value①">enumeration’s values</a>.</p>
   <p>If the type of the dictionary member is preceded by the <emu-t>required</emu-t> keyword, the member is considered a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="required-dictionary-member">required dictionary member</dfn> and must be present on the dictionary.  A <a data-link-type="dfn" href="#required-dictionary-member" id="ref-for-required-dictionary-member①">required dictionary member</a> must not have a default value.</p>
<pre class="syntax highlight"><c- b="">dictionary</c-> <c- g="">identifier</c-> {
  <c- b="">required</c-> <c- n="">type</c-> <c- g="">identifier</c->;
};
</pre>
   <p>The type of a dictionary member must not include
the dictionary it appears on.  A type includes a dictionary <var>D</var> if at least one of the following is true:</p>
   <ul>
    <li data-md="">
     <p>the type is <var>D</var></p>
    </li><li data-md="">
     <p>the type is a dictionary that <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit⑤">inherits</a> from <var>D</var></p>
    </li><li data-md="">
     <p>the type is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①①">nullable type</a> whose <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type⑥">inner type</a> includes <var>D</var></p>
    </li><li data-md="">
     <p>the type is a <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type⑥">sequence type</a> or <a data-link-type="dfn" href="#dfn-frozen-array-type" id="ref-for-dfn-frozen-array-type②">frozen array</a> whose element type includes <var>D</var></p>
    </li><li data-md="">
     <p>the type is a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①⑦">union type</a>,
one of whose <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type③">member types</a> includes <var>D</var></p>
    </li><li data-md="">
     <p>the type is a dictionary, one of whose members or inherited members has
a type that includes <var>D</var></p>
    </li><li data-md="">
     <p>the type is <code class="idl"><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record①">record</a>&lt;<var>K</var>, <var>V</var>&gt;</code> where <var>V</var> includes <var>D</var></p>
   </li></ul>
   <p>As with interfaces, the IDL for dictionaries can be split into multiple parts
by using <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-partial-dictionary">partial dictionary</dfn> definitions
(matching <emu-t>partial</emu-t> <emu-nt><a href="#prod-Dictionary">Dictionary</a></emu-nt>).
The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④⓪">identifier</a> of a partial
dictionary definition must be the same as the
identifier of a dictionary definition.  All of the members that appear on each
of the partial dictionary definitions are considered to be members of
the dictionary itself.</p>
<pre class="syntax highlight"><c- b="">dictionary</c-> <mark><c- g="">SomeDictionary</c-></mark> {
  /* dictionary_members... */
};

<c- b="">partial</c-> <c- b="">dictionary</c-> <mark><c- g="">SomeDictionary</c-></mark> {
  /* dictionary_members... */
};
</pre>
   <p class="note" role="note"><span>Note:</span> As with partial interface definitions, partial dictionary definitions are intended for use as a specification
editorial aide, allowing the definition of an interface to be separated
over more than one section of the document, and sometimes multiple documents.</p>
   <p>The order of the <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member⑧">dictionary members</a> on a given dictionary is such that inherited dictionary members are ordered
before non-inherited members, and the dictionary members on the one
dictionary definition (including any partial dictionary definitions) are
ordered lexicographically by the Unicode codepoints that comprise their
identifiers.</p>
   <div class="note" role="note">
    <p>For example, with the following definitions:</p>
<pre class="highlight"><c- b="">dictionary</c-> <c- g="">B</c-> : <c- n="">A</c-> {
  <c- b="">long</c-> <c- g="">b</c->;
  <c- b="">long</c-> <c- g="">a</c->;
};

<c- b="">dictionary</c-> <c- g="">A</c-> {
  <c- b="">long</c-> <c- g="">c</c->;
  <c- b="">long</c-> <c- g="">g</c->;
};

<c- b="">dictionary</c-> <c- g="">C</c-> : <c- n="">B</c-> {
  <c- b="">long</c-> <c- g="">e</c->;
  <c- b="">long</c-> <c- g="">f</c->;
};

<c- b="">partial</c-> <c- b="">dictionary</c-> <c- g="">A</c-> {
  <c- b="">long</c-> <c- g="">h</c->;
  <c- b="">long</c-> <c- g="">d</c->;
};
</pre>
    <p>the order of the <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member⑨">dictionary members</a> of a dictionary value of type <code class="idl">C</code> is
    c, d, g, h, a, b, e, f.</p>
    <p>Dictionaries are required to have their members ordered because
    in some language bindings the behavior observed when passing
    a dictionary value to a platform object depends on the order
    the dictionary members are fetched.  For example, consider the
    following additional interface:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Something</c-> {
  <c- b="">void</c-> <c- g="">f</c->(<c- n="">A</c-> <c- g="">a</c->);
};
</pre>
    <p>and this ECMAScript code:</p>
<pre class="highlight"><c- a="">var</c-> something <c- o="">=</c-> getSomething<c- p="">();</c->  <c- c1="">// Get an instance of Something.</c->
<c- a="">var</c-> x <c- o="">=</c-> <c- mi="">0</c-><c- p="">;</c->

<c- a="">var</c-> dict <c- o="">=</c-> <c- p="">{</c-> <c- p="">};</c->
Object<c- p="">.</c->defineProperty<c- p="">(</c->dict<c- p="">,</c-> <c- u="">"d"</c-><c- p="">,</c-> <c- p="">{</c-> get<c- o="">:</c-> <c- a="">function</c-><c- p="">()</c-> <c- p="">{</c-> <c- k="">return</c-> <c- o="">++</c->x<c- p="">;</c-> <c- p="">}</c-> <c- p="">});</c->
Object<c- p="">.</c->defineProperty<c- p="">(</c->dict<c- p="">,</c-> <c- u="">"c"</c-><c- p="">,</c-> <c- p="">{</c-> get<c- o="">:</c-> <c- a="">function</c-><c- p="">()</c-> <c- p="">{</c-> <c- k="">return</c-> <c- o="">++</c->x<c- p="">;</c-> <c- p="">}</c-> <c- p="">});</c->

something<c- p="">.</c->f<c- p="">(</c->dict<c- p="">);</c->
</pre>
    <p>The order that the dictionary members are fetched in determines
    what values they will be taken to have.  Since the order for <code class="idl">A</code> is defined to be c then d,
    the value for c will be 1 and the value for d will be 2.</p>
   </div>
   <p>The identifier of a dictionary member must not be
the same as that of another dictionary member defined on the dictionary or
on that dictionary’s <a data-link-type="dfn" href="#dfn-inherited-dictionaries" id="ref-for-dfn-inherited-dictionaries③">inherited dictionaries</a>.</p>
   <p>Dictionaries must not be used as the type of an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②⓪">attribute</a> or <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②③">constant</a>.</p>
   <p>No <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②④">extended attributes</a> are applicable to dictionaries.</p>
   <div data-fill-with="grammar-Partial"><pre class="grammar"><emu-nt><a href="#prod-Partial">Partial</a></emu-nt> ::
    <emu-t>partial</emu-t> <emu-nt><a href="#prod-PartialDefinition">PartialDefinition</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-PartialDefinition"><pre class="grammar"><emu-nt><a href="#prod-PartialDefinition">PartialDefinition</a></emu-nt> ::
    <emu-t>interface</emu-t> <emu-nt><a href="#prod-PartialInterfaceOrPartialMixin">PartialInterfaceOrPartialMixin</a></emu-nt>
    <emu-nt><a href="#prod-PartialDictionary">PartialDictionary</a></emu-nt>
    <emu-nt><a href="#prod-Namespace">Namespace</a></emu-nt>
</pre></div>
<pre class="grammar" id="prod-Dictionary"><emu-nt><a href="#prod-Dictionary">Dictionary</a></emu-nt> ::
    <emu-t>dictionary</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Inheritance">Inheritance</a></emu-nt> <emu-t>{</emu-t> <emu-nt><a href="#prod-DictionaryMembers">DictionaryMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-DictionaryMembers"><emu-nt><a href="#prod-DictionaryMembers">DictionaryMembers</a></emu-nt> ::
    <emu-nt><a href="#prod-DictionaryMember">DictionaryMember</a></emu-nt> <emu-nt><a href="#prod-DictionaryMembers">DictionaryMembers</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-DictionaryMember"><emu-nt><a href="#prod-DictionaryMember">DictionaryMember</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-DictionaryMemberRest">DictionaryMemberRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-DictionaryMemberRest"><emu-nt><a href="#prod-DictionaryMemberRest">DictionaryMemberRest</a></emu-nt> ::
    <emu-t>required</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Default">Default</a></emu-nt> <emu-t>;</emu-t>
    <emu-nt><a href="#prod-Type">Type</a></emu-nt> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Default">Default</a></emu-nt> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-PartialDictionary"><emu-nt><a href="#prod-PartialDictionary">PartialDictionary</a></emu-nt> ::
    <emu-t>dictionary</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#prod-DictionaryMembers">DictionaryMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-Default"><emu-nt><a href="#prod-Default">Default</a></emu-nt> ::
    <emu-t>=</emu-t> <emu-nt><a href="#prod-DefaultValue">DefaultValue</a></emu-nt>
    ε
</pre>
   <div data-fill-with="grammar-DefaultValue"><pre class="grammar"><emu-nt><a href="#prod-DefaultValue">DefaultValue</a></emu-nt> ::
    <emu-nt><a href="#prod-ConstValue">ConstValue</a></emu-nt>
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t>
    <emu-t>[</emu-t> <emu-t>]</emu-t>
</pre></div>
   <div data-fill-with="grammar-Inheritance"><pre class="grammar"><emu-nt><a href="#prod-Inheritance">Inheritance</a></emu-nt> ::
    <emu-t>:</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
    ε
</pre></div>
   <div class="example" id="example-ea99876e">
    <a class="self-link" href="#example-ea99876e"></a> 
    <p>One use of dictionary types is to allow a number of optional arguments to
    an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②③">operation</a> without being
    constrained as to the order they are specified at the call site.  For example,
    consider the following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②④">IDL fragment</a>:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->, <c- g="">Constructor</c->]
<c- b="">interface</c-> <c- g="">Point</c-> {
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">x</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">y</c->;
};

<c- b="">dictionary</c-> <c- g="">PaintOptions</c-> {
  <c- b="">DOMString</c->? <c- g="">fillPattern</c-> = "black";
  <c- b="">DOMString</c->? <c- g="">strokePattern</c-> = <c- b="">null</c->;
  <c- n="">Point</c-> <c- g="">position</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">GraphicsContext</c-> {
  <c- b="">void</c-> <c- g="">drawRectangle</c->(<c- b="">double</c-> <c- g="">width</c->, <c- b="">double</c-> <c- g="">height</c->, <c- b="">optional</c-> <c- n="">PaintOptions</c-> <c- g="">options</c->);
};
</pre>
    <p>In an ECMAScript implementation of the IDL, an Object
    can be passed in for the optional <code class="idl">PaintOptions</code> dictionary:</p>
<pre class="highlight"><c- c1="">// Get an instance of GraphicsContext.</c->
<c- a="">var</c-> ctx <c- o="">=</c-> getGraphicsContext<c- p="">();</c->

<c- c1="">// Draw a rectangle.</c->
ctx<c- p="">.</c->drawRectangle<c- p="">(</c-><c- mi="">300</c-><c- p="">,</c-> <c- mi="">200</c-><c- p="">,</c-> <c- p="">{</c-> fillPattern<c- o="">:</c-> <c- u="">"red"</c-><c- p="">,</c-> position<c- o="">:</c-> <c- k="">new</c-> Point<c- p="">(</c-><c- mi="">10</c-><c- p="">,</c-> <c- mi="">10</c-><c- p="">)</c-> <c- p="">});</c->
</pre>
    <p>Both fillPattern and strokePattern are given <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value⑥">default values</a>,
    so if they are omitted, the definition of drawRectangle can assume that they
    have the given default values and not include explicit wording to handle
    their non-presence.</p>
   </div>
   <h3 class="heading settled" data-level="2.7" id="idl-exceptions"><span class="secno">2.7. </span><span class="content">Exceptions</span><a class="self-link" href="#idl-exceptions"></a></h3>
   <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-exception">exception</dfn> is a type of object that
represents an error and which can be thrown or treated as a first
class value by implementations.  Web IDL does not allow exceptions
to be defined, but instead has a number of pre-defined exceptions
that specifications can reference and throw in their definition of
operations, attributes, and so on.  Exceptions have an <dfn class="dfn-paneled" data-dfn-for="exception" data-dfn-type="dfn" data-export="" id="dfn-exception-error-name">error name</dfn>,
a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①⑥">DOMString</a></code>,
which is the type of error the exception represents, and a <dfn data-dfn-for="exception" data-dfn-type="dfn" data-export="" id="dfn-exception-message">message<a class="self-link" href="#dfn-exception-message"></a></dfn>, which is an optional,
user agent-defined value that provides human readable details of the error.</p>
   <p>There are two kinds of exceptions available to be thrown from specifications.
The first is a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-simple-exception">simple exception</dfn>, which
is identified by one of the following types:</p>
   <ul>
    <li data-md="">
     <p><dfn class="idl-code" data-dfn-type="exception" data-export="" id="exceptiondef-evalerror"><code>EvalError</code><a class="self-link" href="#exceptiondef-evalerror"></a></dfn></p>
    </li><li data-md="">
     <p><dfn class="dfn-paneled idl-code" data-dfn-type="exception" data-export="" id="exceptiondef-rangeerror"><code>RangeError</code></dfn></p>
    </li><li data-md="">
     <p><dfn class="idl-code" data-dfn-type="exception" data-export="" id="exceptiondef-referenceerror"><code>ReferenceError</code><a class="self-link" href="#exceptiondef-referenceerror"></a></dfn></p>
    </li><li data-md="">
     <p><dfn class="dfn-paneled idl-code" data-dfn-type="exception" data-export="" id="exceptiondef-typeerror"><code>TypeError</code></dfn></p>
    </li><li data-md="">
     <p><dfn class="idl-code" data-dfn-type="exception" data-export="" id="exceptiondef-urierror"><code>URIError</code><a class="self-link" href="#exceptiondef-urierror"></a></dfn></p>
   </li></ul>
   <p>These correspond to all of the ECMAScript <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-error-objects" id="ref-for-sec-error-objects">error objects</a> (apart from <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-syntaxerror" id="ref-for-sec-native-error-types-used-in-this-standard-syntaxerror">SyntaxError</a></code> and <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-error-objects" id="ref-for-sec-error-objects①">Error</a></code>,
which are deliberately omitted as they are reserved for use
by the ECMAScript parser and by authors, respectively).
The meaning of each <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception">simple exception</a> matches
its corresponding error object in the
ECMAScript specification.</p>
   <p>The second kind of exception is a <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException">DOMException</a></code>,
which is an exception that encapsulates a name and an optional integer code,
for compatibility with historically defined exceptions in the DOM.</p>
   <p>For <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception①">simple exceptions</a>, the <a data-link-type="dfn" href="#dfn-exception-error-name" id="ref-for-dfn-exception-error-name">error name</a> is the type of the exception.
For a <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①">DOMException</a></code>, the <a data-link-type="dfn" href="#dfn-exception-error-name" id="ref-for-dfn-exception-error-name①">error name</a> must be one of the names
listed in the <a data-link-type="dfn" href="#dfn-error-names-table" id="ref-for-dfn-error-names-table">error names table</a> below.
The table also indicates the <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②">DOMException</a></code>'s integer code for that error name,
if it has one.</p>
   <p>There are two types that can be used to refer to exception objects: <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③">DOMException</a></code> and <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error">Error</a></code>,
where the latter encompasses <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception②">simple exceptions</a> and <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④">DOMException</a></code>.
This allows for example an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②④">operation</a> to be declared to have a <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException⑤">DOMException</a></code> <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type①">return type</a> or an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②①">attribute</a> to be of type <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error①">Error</a></code>.</p>
   <p><a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception③">Simple exceptions</a> can be <dfn class="dfn-paneled" data-dfn-for="exception" data-dfn-type="dfn" data-export="" id="dfn-create-exception">created</dfn> by providing their <a data-link-type="dfn" href="#dfn-exception-error-name" id="ref-for-dfn-exception-error-name②">error name</a>.
A <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException⑥">DOMException</a></code> can be <a data-link-type="dfn" href="#dfn-create-exception" id="ref-for-dfn-create-exception">created</a> by providing its <a data-link-type="dfn" href="#dfn-exception-error-name" id="ref-for-dfn-exception-error-name③">error name</a> followed by <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException⑦">DOMException</a></code>.
Exceptions can also be <dfn class="dfn-paneled" data-dfn-for="exception" data-dfn-type="dfn" data-export="" data-lt="throw" id="dfn-throw">thrown</dfn>, by providing the
same details required to <a data-link-type="dfn" href="#dfn-create-exception" id="ref-for-dfn-create-exception①">create</a> one.</p>
   <p>The resulting behavior from creating and throwing an exception is language binding-specific.</p>
   <p class="note" role="note"><span>Note:</span> See <a href="#es-creating-throwing-exceptions">§3.12.3 Creating and throwing exceptions</a> for details on what creating and throwing an exception
entails in the ECMAScript language binding.</p>
   <div class="example" id="example-56ad390c">
    <a class="self-link" href="#example-56ad390c"></a> 
    <p>Here is are some examples of wording to use to create and throw exceptions.
    To throw a new <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception④">simple exception</a> named <code class="idl"><a data-link-type="idl" href="#exceptiondef-typeerror" id="ref-for-exceptiondef-typeerror①">TypeError</a></code>:</p>
    <blockquote> <a data-link-type="dfn" href="#dfn-throw" id="ref-for-dfn-throw">Throw</a> a <code class="idl"><a data-link-type="idl" href="#exceptiondef-typeerror" id="ref-for-exceptiondef-typeerror②">TypeError</a></code>. </blockquote>
    <p>To throw a new <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException⑧">DOMException</a></code> with <a data-link-type="dfn" href="#dfn-exception-error-name" id="ref-for-dfn-exception-error-name④">error name</a> "<code class="idl"><a class="idl-code" data-link-type="exception" href="#notallowederror" id="ref-for-notallowederror">NotAllowedError</a></code>":</p>
    <blockquote> <a data-link-type="dfn" href="#dfn-throw" id="ref-for-dfn-throw①">Throw</a> an "<code class="idl"><a class="idl-code" data-link-type="exception" href="#notallowederror" id="ref-for-notallowederror①">NotAllowedError</a></code>" <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException⑨">DOMException</a></code>. </blockquote>
    <p>To create a new <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①⓪">DOMException</a></code> with <a data-link-type="dfn" href="#dfn-exception-error-name" id="ref-for-dfn-exception-error-name⑤">error name</a> "<code class="idl"><a class="idl-code" data-link-type="exception" href="#syntaxerror" id="ref-for-syntaxerror">SyntaxError</a></code>":</p>
    <blockquote> Let <var>object</var> be a newly <a data-link-type="dfn" href="#dfn-create-exception" id="ref-for-dfn-create-exception②">created</a> "<code class="idl"><a class="idl-code" data-link-type="exception" href="#syntaxerror" id="ref-for-syntaxerror①">SyntaxError</a></code>" <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①①">DOMException</a></code>. </blockquote>
   </div>
   <h4 class="heading settled" data-level="2.7.1" id="idl-DOMException-error-names"><span class="secno">2.7.1. </span><span class="content">Error names</span><a class="self-link" href="#idl-DOMException-error-names"></a></h4>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-error-names-table">error names table</dfn> below lists all the allowed error names
for <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①②">DOMException</a></code>, a description, and legacy code values.</p>
   <p class="advisement"> The <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①③">DOMException</a></code> names marked as deprecated are kept for legacy purposes but their usage is discouraged. </p>
   <p class="note" role="note"><span>Note:</span> If an error name is not listed here, please file a bug as indicated at the top of this specification and it will be addressed shortly. Thanks!</p>
   <p class="note" role="note"><span>Note:</span> Don’t confuse the "<code class="idl"><a class="idl-code" data-link-type="exception" href="#syntaxerror" id="ref-for-syntaxerror②">SyntaxError</a></code>" <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①④">DOMException</a></code> defined here
with ECMAScript’s <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-syntaxerror" id="ref-for-sec-native-error-types-used-in-this-standard-syntaxerror①">SyntaxError</a></code>.
"<code class="idl"><a class="idl-code" data-link-type="exception" href="#syntaxerror" id="ref-for-syntaxerror③">SyntaxError</a></code>" <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①⑤">DOMException</a></code> is used to report parsing errors in web APIs,
for example when parsing selectors,
while the ECMAScript <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-syntaxerror" id="ref-for-sec-native-error-types-used-in-this-standard-syntaxerror②">SyntaxError</a></code> is reserved for the ECMAScript parser.
To help disambiguate this further,
always favor the "<code class="idl"><a class="idl-code" data-link-type="exception" href="#syntaxerror" id="ref-for-syntaxerror④">SyntaxError</a></code>" <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①⑥">DOMException</a></code> notation
over just using <code class="idl"><a class="idl-code" data-link-type="exception" href="#syntaxerror" id="ref-for-syntaxerror⑤">SyntaxError</a></code> to refer to the <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①⑦">DOMException</a></code>. <a data-link-type="biblio" href="#biblio-dom">[DOM]</a></p>
   <table class="vert data" id="error-names">
    <thead>
     <tr>
      <th>Name
      </th><th>Description
      </th><th>Legacy code name and value
    </th></tr></thead><tbody>
     <tr class="deprecated">
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="indexsizeerror"><code>IndexSizeError</code><a class="self-link" href="#indexsizeerror"></a></dfn>"
      </td><td><strong>Deprecated.</strong> Use <code class="idl"><a data-link-type="idl" href="#exceptiondef-rangeerror" id="ref-for-exceptiondef-rangeerror">RangeError</a></code> instead.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-index_size_err"><code>INDEX_SIZE_ERR</code></dfn>&nbsp;(1)
     </td></tr><tr class="deprecated">
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="domstringsizeerror"><code>DOMStringSizeError</code><a class="self-link" href="#domstringsizeerror"></a></dfn>"
      </td><td><strong>Deprecated.</strong> Use <code class="idl"><a data-link-type="idl" href="#exceptiondef-rangeerror" id="ref-for-exceptiondef-rangeerror①">RangeError</a></code> instead.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-domstring_size_err"><code>DOMSTRING_SIZE_ERR</code></dfn>&nbsp;(2)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="hierarchyrequesterror"><code>HierarchyRequestError</code><a class="self-link" href="#hierarchyrequesterror"></a></dfn>"
      </td><td>The operation would yield an incorrect <a data-link-type="dfn" href="https://dom.spec.whatwg.org/#concept-node-tree" id="ref-for-concept-node-tree">node tree</a>. <a data-link-type="biblio" href="#biblio-dom">[DOM]</a>
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-hierarchy_request_err"><code>HIERARCHY_REQUEST_ERR</code></dfn>&nbsp;(3)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="wrongdocumenterror"><code>WrongDocumentError</code><a class="self-link" href="#wrongdocumenterror"></a></dfn>"
      </td><td>The object is in the wrong <a data-link-type="dfn" href="https://dom.spec.whatwg.org/#concept-document" id="ref-for-concept-document">document</a>. <a data-link-type="biblio" href="#biblio-dom">[DOM]</a>
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-wrong_document_err"><code>WRONG_DOCUMENT_ERR</code></dfn>&nbsp;(4)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="invalidcharactererror"><code>InvalidCharacterError</code><a class="self-link" href="#invalidcharactererror"></a></dfn>"
      </td><td>The string contains invalid characters.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-invalid_character_err"><code>INVALID_CHARACTER_ERR</code></dfn>&nbsp;(5)
     </td></tr><tr class="deprecated">
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="nodataallowederror"><code>NoDataAllowedError</code><a class="self-link" href="#nodataallowederror"></a></dfn>"
      </td><td><strong>Deprecated.</strong>
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-no_data_allowed_err"><code>NO_DATA_ALLOWED_ERR</code></dfn>&nbsp;(6)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="nomodificationallowederror"><code>NoModificationAllowedError</code><a class="self-link" href="#nomodificationallowederror"></a></dfn>"
      </td><td>The object can not be modified.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-no_modification_allowed_err"><code>NO_MODIFICATION_ALLOWED_ERR</code></dfn>&nbsp;(7)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="notfounderror"><code>NotFoundError</code><a class="self-link" href="#notfounderror"></a></dfn>"
      </td><td>The object can not be found here.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-not_found_err"><code>NOT_FOUND_ERR</code></dfn>&nbsp;(8)
     </td></tr><tr>
      <td>"<dfn class="dfn-paneled idl-code" data-dfn-type="exception" data-export="" id="notsupportederror"><code>NotSupportedError</code></dfn>"
      </td><td>The operation is not supported.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-not_supported_err"><code>NOT_SUPPORTED_ERR</code></dfn>&nbsp;(9)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="inuseattributeerror"><code>InUseAttributeError</code><a class="self-link" href="#inuseattributeerror"></a></dfn>"
      </td><td>The attribute is in use.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-inuse_attribute_err"><code>INUSE_ATTRIBUTE_ERR</code></dfn>&nbsp;(10)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="invalidstateerror"><code>InvalidStateError</code><a class="self-link" href="#invalidstateerror"></a></dfn>"
      </td><td>The object is in an invalid state.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-invalid_state_err"><code>INVALID_STATE_ERR</code></dfn>&nbsp;(11)
     </td></tr><tr>
      <td>"<dfn class="dfn-paneled idl-code" data-dfn-type="exception" data-export="" id="syntaxerror"><code>SyntaxError</code></dfn>"
      </td><td>The string did not match the expected pattern.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-syntax_err"><code>SYNTAX_ERR</code></dfn>&nbsp;(12)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="invalidmodificationerror"><code>InvalidModificationError</code><a class="self-link" href="#invalidmodificationerror"></a></dfn>"
      </td><td>The object can not be modified in this way.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-invalid_modification_err"><code>INVALID_MODIFICATION_ERR</code></dfn>&nbsp;(13)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="namespaceerror"><code>NamespaceError</code><a class="self-link" href="#namespaceerror"></a></dfn>"
      </td><td>The operation is not allowed by <cite>Namespaces in XML</cite>. <a data-link-type="biblio" href="#biblio-xml-names">[XML-NAMES]</a>
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-namespace_err"><code>NAMESPACE_ERR</code></dfn>&nbsp;(14)
     </td></tr><tr class="deprecated">
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="invalidaccesserror"><code>InvalidAccessError</code><a class="self-link" href="#invalidaccesserror"></a></dfn>"
      </td><td> <strong>Deprecated.</strong> Use <code class="idl"><a data-link-type="idl" href="#exceptiondef-typeerror" id="ref-for-exceptiondef-typeerror③">TypeError</a></code> for invalid arguments,
                "<code class="idl"><a class="idl-code" data-link-type="exception" href="#notsupportederror" id="ref-for-notsupportederror">NotSupportedError</a></code>" <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①⑧">DOMException</a></code> for unsupported operations, and
                "<code class="idl"><a class="idl-code" data-link-type="exception" href="#notallowederror" id="ref-for-notallowederror②">NotAllowedError</a></code>" <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException①⑨">DOMException</a></code> for denied requests instead. 
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-invalid_access_err"><code>INVALID_ACCESS_ERR</code></dfn>&nbsp;(15)
     </td></tr><tr class="deprecated">
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="validationerror"><code>ValidationError</code><a class="self-link" href="#validationerror"></a></dfn>"
      </td><td><strong>Deprecated.</strong>
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-validation_err"><code>VALIDATION_ERR</code></dfn>&nbsp;(16)
     </td></tr><tr class="deprecated">
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="typemismatcherror"><code>TypeMismatchError</code><a class="self-link" href="#typemismatcherror"></a></dfn>"
      </td><td><strong>Deprecated.</strong> Use <code class="idl"><a data-link-type="idl" href="#exceptiondef-typeerror" id="ref-for-exceptiondef-typeerror④">TypeError</a></code> instead.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-type_mismatch_err"><code>TYPE_MISMATCH_ERR</code></dfn>&nbsp;(17)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="securityerror"><code>SecurityError</code><a class="self-link" href="#securityerror"></a></dfn>"
      </td><td>The operation is insecure.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-security_err"><code>SECURITY_ERR</code></dfn>&nbsp;(18)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="networkerror"><code>NetworkError</code><a class="self-link" href="#networkerror"></a></dfn>"
      </td><td>A network error occurred.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-network_err"><code>NETWORK_ERR</code></dfn>&nbsp;(19)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="aborterror"><code>AbortError</code><a class="self-link" href="#aborterror"></a></dfn>"
      </td><td>The operation was aborted.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-abort_err"><code>ABORT_ERR</code></dfn>&nbsp;(20)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="urlmismatcherror"><code>URLMismatchError</code><a class="self-link" href="#urlmismatcherror"></a></dfn>"
      </td><td>The given URL does not match another URL.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-url_mismatch_err"><code>URL_MISMATCH_ERR</code></dfn>&nbsp;(21)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="quotaexceedederror"><code>QuotaExceededError</code><a class="self-link" href="#quotaexceedederror"></a></dfn>"
      </td><td>The quota has been exceeded.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-quota_exceeded_err"><code>QUOTA_EXCEEDED_ERR</code></dfn>&nbsp;(22)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="timeouterror"><code>TimeoutError</code><a class="self-link" href="#timeouterror"></a></dfn>"
      </td><td>The operation timed out.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-timeout_err"><code>TIMEOUT_ERR</code></dfn>&nbsp;(23)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="invalidnodetypeerror"><code>InvalidNodeTypeError</code><a class="self-link" href="#invalidnodetypeerror"></a></dfn>"
      </td><td>The supplied node is incorrect or has an incorrect ancestor for this operation.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-invalid_node_type_err"><code>INVALID_NODE_TYPE_ERR</code></dfn>&nbsp;(24)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="datacloneerror"><code>DataCloneError</code><a class="self-link" href="#datacloneerror"></a></dfn>"
      </td><td>The object can not be cloned.
      </td><td><dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="const" data-export="" id="dom-domexception-data_clone_err"><code>DATA_CLONE_ERR</code></dfn>&nbsp;(25)
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="encodingerror"><code>EncodingError</code><a class="self-link" href="#encodingerror"></a></dfn>"
      </td><td>The encoding operation (either encoded or decoding) failed.
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="notreadableerror"><code>NotReadableError</code><a class="self-link" href="#notreadableerror"></a></dfn>"
      </td><td>The I/O read operation failed.
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="unknownerror"><code>UnknownError</code><a class="self-link" href="#unknownerror"></a></dfn>"
      </td><td>The operation failed for an unknown transient reason (e.g. out of memory).
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="constrainterror"><code>ConstraintError</code><a class="self-link" href="#constrainterror"></a></dfn>"
      </td><td>A mutation operation in a transaction failed because a constraint was not satisfied.
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="dataerror"><code>DataError</code><a class="self-link" href="#dataerror"></a></dfn>"
      </td><td>Provided data is inadequate.
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="transactioninactiveerror"><code>TransactionInactiveError</code><a class="self-link" href="#transactioninactiveerror"></a></dfn>"
      </td><td>A request was placed against a transaction which is currently not active, or which is finished.
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="readonlyerror"><code>ReadOnlyError</code><a class="self-link" href="#readonlyerror"></a></dfn>"
      </td><td>The mutating operation was attempted in a "readonly" transaction.
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="versionerror"><code>VersionError</code><a class="self-link" href="#versionerror"></a></dfn>"
      </td><td>An attempt was made to open a database using a lower version than the existing version.
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="idl-code" data-dfn-type="exception" data-export="" id="operationerror"><code>OperationError</code><a class="self-link" href="#operationerror"></a></dfn>"
      </td><td>The operation failed for an operation-specific reason.
      </td><td>—
     </td></tr><tr>
      <td>"<dfn class="dfn-paneled idl-code" data-dfn-type="exception" data-export="" id="notallowederror"><code>NotAllowedError</code></dfn>"
      </td><td>The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.
      </td><td>—
   </td></tr></tbody></table>
   <h3 class="heading settled" data-level="2.8" id="idl-enums"><span class="secno">2.8. </span><span class="content">Enumerations</span><a class="self-link" href="#idl-enums"></a></h3>
   <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-enumeration">enumeration</dfn> is a definition (matching <emu-nt><a href="#prod-Enum">Enum</a></emu-nt>) used to declare a type
whose valid values are a set of predefined strings.  Enumerations
can be used to restrict the possible <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①⑦">DOMString</a></code> values that can be assigned to an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②②">attribute</a> or passed to an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②⑤">operation</a>.</p>
<pre class="syntax highlight"><c- b="">enum</c-> <c- g="">identifier</c-> { <c- s="">"enum"</c->, <c- s="">"values"</c-> /* , ... */ };</pre>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="enumeration value" id="dfn-enumeration-value">enumeration values</dfn> are specified
as a comma-separated list of <emu-t class="regex"><a href="#prod-string">string</a></emu-t> literals.
The list of <a data-link-type="dfn" href="#dfn-enumeration-value" id="ref-for-dfn-enumeration-value②">enumeration values</a> must not include duplicates.</p>
   <p class="advisement"> It is strongly suggested that enumeration values be all lowercase,
    and that multiple words be separated using dashes or not be
    separated at all, unless there is a specific reason to use another
    value naming scheme.  For example, an enumeration value that
    indicates an object should be created could be named
    "<code>createobject</code>" or "<code>create-object</code>".
    Consider related uses of enumeration values when deciding whether
    to dash-separate or not separate enumeration value words so that
    similar APIs are consistent. </p>
   <p>The behavior when a string value that is not one a valid enumeration value
is used when assigning to an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②③">attribute</a>,
or passed as an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②⑥">operation</a> argument,
whose type is the enumeration, is language binding specific.</p>
   <p class="note" role="note"><span>Note:</span> In the ECMAScript binding, assignment of an invalid string value to an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②④">attribute</a> is ignored, while
passing such a value as an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②⑦">operation</a> argument
results in an exception being thrown.</p>
   <p>No <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②⑤">extended attributes</a> defined in this specification are applicable to <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①⓪">enumerations</a>.</p>
<pre class="grammar" id="prod-Enum"><emu-nt><a href="#prod-Enum">Enum</a></emu-nt> ::
    <emu-t>enum</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#prod-EnumValueList">EnumValueList</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>
</pre>
<pre class="grammar" id="prod-EnumValueList"><emu-nt><a href="#prod-EnumValueList">EnumValueList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t> <emu-nt><a href="#prod-EnumValueListComma">EnumValueListComma</a></emu-nt>
</pre>
<pre class="grammar" id="prod-EnumValueListComma"><emu-nt><a href="#prod-EnumValueListComma">EnumValueListComma</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-nt><a href="#prod-EnumValueListString">EnumValueListString</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-EnumValueListString"><emu-nt><a href="#prod-EnumValueListString">EnumValueListString</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t> <emu-nt><a href="#prod-EnumValueListComma">EnumValueListComma</a></emu-nt>
    ε
</pre>
   <div class="example" id="example-6eb27118">
    <a class="self-link" href="#example-6eb27118"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②⑤">IDL fragment</a> defines an <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①①">enumeration</a> that is used as the type of an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②⑤">attribute</a> and an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②⑧">operation</a> argument:</p>
<pre class="highlight"><c- b="">enum</c-> <c- g="">MealType</c-> { <c- s="">"rice"</c->, <c- s="">"noodles"</c->, <c- s="">"other"</c-> };

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Meal</c-> {
  <c- b="">attribute</c-> <c- n="">MealType</c-> <c- g="">type</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">size</c->;     // in grams

  <c- b="">void</c-> <c- g="">initialize</c->(<c- n="">MealType</c-> <c- g="">type</c->, <c- b="">double</c-> <c- g="">size</c->);
};
</pre>
    <p>An ECMAScript implementation would restrict the strings that can be
    assigned to the type property or passed to the initializeMeal function
    to those identified in the <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①②">enumeration</a>.</p>
<pre class="highlight"><c- a="">var</c-> meal <c- o="">=</c-> getMeal<c- p="">();</c->                <c- c1="">// Get an instance of Meal.</c->

meal<c- p="">.</c->initialize<c- p="">(</c-><c- u="">"rice"</c-><c- p="">,</c-> <c- mi="">200</c-><c- p="">);</c->        <c- c1="">// Operation invoked as normal.</c->

<c- k="">try</c-> <c- p="">{</c->
  meal<c- p="">.</c->initialize<c- p="">(</c-><c- u="">"sandwich"</c-><c- p="">,</c-> <c- mi="">100</c-><c- p="">);</c->  <c- c1="">// Throws a TypeError.</c->
<c- p="">}</c-> <c- k="">catch</c-> <c- p="">(</c->e<c- p="">)</c-> <c- p="">{</c->
<c- p="">}</c->

meal<c- p="">.</c->type <c- o="">=</c-> <c- u="">"noodles"</c-><c- p="">;</c->               <c- c1="">// Attribute assigned as normal.</c->
meal<c- p="">.</c->type <c- o="">=</c-> <c- u="">"dumplings"</c-><c- p="">;</c->             <c- c1="">// Attribute assignment ignored.</c->
meal<c- p="">.</c->type <c- o="">==</c-> <c- u="">"noodles"</c-><c- p="">;</c->              <c- c1="">// Evaluates to true.</c->
</pre>
   </div>
   <h3 class="heading settled" data-level="2.9" id="idl-callback-functions"><span class="secno">2.9. </span><span class="content">Callback functions</span><a class="self-link" href="#idl-callback-functions"></a></h3>
   <p class="issue" id="issue-5019ccf0"><a class="self-link" href="#issue-5019ccf0"></a> The “Custom DOM Elements” spec wants to use callback function types for
    platform object provided functions.  Should we rename “callback functions” to
    just “functions” to make it clear that they can be used for both purposes? </p>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-callback-function">callback function</dfn> is a definition (matching <emu-t>callback</emu-t> <emu-nt><a href="#prod-CallbackRest">CallbackRest</a></emu-nt>) used to declare a function type.</p>
<pre class="syntax highlight"><c- b="">callback</c-> <c- g="">identifier</c-> = <c- n="">return_type</c-> (/* arguments... */);</pre>
   <p class="note" role="note"><span>Note:</span> See also the similarly named <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①③">callback interfaces</a>.</p>
   <p>The <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④①">identifier</a> on the
left of the equals sign gives the name of the <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①⑤">callback function</a> and the return type and argument list (matching <emu-nt><a href="#prod-ReturnType">ReturnType</a></emu-nt> and <emu-nt><a href="#prod-ArgumentList">ArgumentList</a></emu-nt>) on the right side of the equals
sign gives the signature of the callback function type.</p>
   <p><a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①⑥">Callback functions</a> must not
be used as the type of a <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②④">constant</a>.</p>
   <p>The following extended attribute is applicable to callback functions:
[<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull">TreatNonObjectAsNull</a></code>].</p>
   <div data-fill-with="grammar-CallbackOrInterfaceOrMixin"><pre class="grammar"><emu-nt><a href="#prod-CallbackOrInterfaceOrMixin">CallbackOrInterfaceOrMixin</a></emu-nt> ::
    <emu-t>callback</emu-t> <emu-nt><a href="#prod-CallbackRestOrInterface">CallbackRestOrInterface</a></emu-nt>
    <emu-t>interface</emu-t> <emu-nt><a href="#prod-InterfaceOrMixin">InterfaceOrMixin</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-CallbackRestOrInterfaceOrMixin"></div>
<pre class="grammar" id="prod-CallbackRest"><emu-nt><a href="#prod-CallbackRest">CallbackRest</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-nt><a href="#prod-ReturnType">ReturnType</a></emu-nt> <emu-t>(</emu-t> <emu-nt><a href="#prod-ArgumentList">ArgumentList</a></emu-nt> <emu-t>)</emu-t> <emu-t>;</emu-t>
</pre>
   <div class="example" id="example-66b689d8">
    <a class="self-link" href="#example-66b689d8"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②⑥">IDL fragment</a> defines
    a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①⑦">callback function</a> used for an API that
    invokes a user-defined function when an operation is complete.</p>
<pre class="highlight"><c- b="">callback</c-> <c- g="">AsyncOperationCallback</c-> = <c- b="">void</c-> (<c- b="">DOMString</c-> <c- g="">status</c->);

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">AsyncOperations</c-> {
  <c- b="">void</c-> <c- g="">performOperation</c->(<c- n="">AsyncOperationCallback</c-> <c- g="">whenFinished</c->);
};
</pre>
    <p>In the ECMAScript language binding, a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④">function object</a> is
    passed as the operation argument.</p>
<pre class="highlight"><c- a="">var</c-> ops <c- o="">=</c-> getAsyncOperations<c- p="">();</c->  <c- c1="">// Get an instance of AsyncOperations.</c->

ops<c- p="">.</c->performOperation<c- p="">(</c-><c- a="">function</c-><c- p="">(</c->status<c- p="">)</c-> <c- p="">{</c->
  window<c- p="">.</c->alert<c- p="">(</c-><c- u="">"Operation finished, status is "</c-> <c- o="">+</c-> status <c- o="">+</c-> <c- u="">"."</c-><c- p="">);</c->
<c- p="">});</c->
</pre>
   </div>
   <h3 class="heading settled" data-level="2.10" id="idl-typedefs"><span class="secno">2.10. </span><span class="content">Typedefs</span><a class="self-link" href="#idl-typedefs"></a></h3>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-typedef">typedef</dfn> is a definition (matching <emu-nt><a href="#prod-Typedef">Typedef</a></emu-nt>)
used to declare a new name for a type.  This new name is not exposed
by language bindings; it is purely used as a shorthand for referencing
the type in the IDL.</p>
<pre class="syntax highlight"><c- b="">typedef</c-> <c- n="">type</c-> <c- g="">identifier</c->;</pre>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="type-being-given-a-new-name">type being given a new name</dfn> is specified after the <emu-t>typedef</emu-t> keyword (matching <emu-nt><a href="#prod-Type">TypeWithExtendedAttributes</a></emu-nt>), and the <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> token following the
type gives the name.</p>
   <p>The <emu-nt><a href="#prod-Type">Type</a></emu-nt> must not
be the identifier of the same or another <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef①②">typedef</a>.</p>
   <p>No <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②⑥">extended attributes</a> defined in this specification are applicable to <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef①③">typedefs</a>.</p>
<pre class="grammar" id="prod-Typedef"><emu-nt><a href="#prod-Typedef">Typedef</a></emu-nt> ::
    <emu-t>typedef</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>;</emu-t>
</pre>
   <div class="example" id="example-1aa575d3">
    <a class="self-link" href="#example-1aa575d3"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②⑦">IDL fragment</a> demonstrates the use of <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef①④">typedefs</a> to allow the use of a short <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④②">identifier</a> instead of a long <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type⑦">sequence type</a>.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Point</c-> {
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">x</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">y</c->;
};

<c- b="">typedef</c-> <c- b="">sequence</c->&lt;<c- n="">Point</c->&gt; <c- g="">Points</c->;

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Widget</c-> {
  <c- b="">boolean</c-> <c- g="">pointWithinBounds</c->(<c- n="">Point</c-> <c- g="">p</c->);
  <c- b="">boolean</c-> <c- g="">allPointsWithinBounds</c->(<c- n="">Points</c-> <c- g="">ps</c->);
};
</pre>
   </div>
   <h3 class="heading settled" data-level="2.11" id="idl-objects"><span class="secno">2.11. </span><span class="content">Objects implementing interfaces</span><a class="self-link" href="#idl-objects"></a></h3>
   <p>In a given implementation of a set of <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②⑧">IDL fragments</a>,
an object can be described as being a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑥">platform object</a>, a <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object⑤">user object</a>, or neither.</p>
   <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="platform object" id="dfn-platform-object">Platform objects</dfn> are objects
that implement a non-<a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①④">callback</a> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥②">interface</a>.</p>
   <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-legacy-platform-object">Legacy platform objects</dfn> are <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑦">platform objects</a> that implement an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥③">interface</a> which
does not have a [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②⑦">extended attribute</a>, and which <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties⑧">supports indexed properties</a>, <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties②">named properties</a>, or both.</p>
   <p>In a browser, for example,
the browser-implemented DOM objects (implementing interfaces such as <code class="idl">Node</code> and <code class="idl">Document</code>) that provide access to a web page’s contents
to ECMAScript running in the page would be platform objects.  These objects might be exotic objects,
implemented in a language like C++, or they might be native ECMAScript objects.  Regardless,
an implementation of a given set of IDL fragments needs to be able to recognize all platform objects
that are created by the implementation.  This might be done by having some internal state that records whether
a given object is indeed a platform object for that implementation, or perhaps by observing
that the object is implemented by a given internal C++ class.  How exactly platform objects
are recognized by a given implementation of a set of IDL fragments is implementation specific.</p>
   <p>All other objects in the system would not be treated as platform objects.  For example, assume that
a web page opened in a browser loads an ECMAScript library that implements DOM Core.  This library
would be considered to be a different implementation from the browser provided implementation.
The objects created by the ECMAScript library that implement the <code class="idl">Node</code> interface
will not be treated as platform objects that implement <code class="idl">Node</code> by the browser implementation.</p>
   <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="user object" id="dfn-user-object">User objects</dfn> are those that authors would create,
implementing <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①⑤">callback interfaces</a> that the Web APIs use to be able to invoke author-defined
operations or to send and receive values to the author’s program through
manipulating the object’s attributes.  In a web page, an ECMAScript object
that implements the <code class="idl">EventListener</code> interface, which is
used to register a callback that the DOM Events implementation invokes, would be considered
to be a user object.</p>
   <p>Note that user objects can only implement <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①⑥">callback interfaces</a> and platform objects can only implement non-callback interfaces.</p>
   <h3 class="heading settled" data-level="2.12" id="idl-types"><span class="secno">2.12. </span><span class="content">Types</span><a class="self-link" href="#idl-types"></a></h3>
   <p>This section lists the types supported by Web IDL, the set of values
corresponding to each type, and how <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②⑤">constants</a> of that type are represented.</p>
   <p>The following types are known as <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-integer-type">integer types</dfn>: <code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte">byte</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet">octet</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short">short</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short">unsigned short</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long⑦">long</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long④">unsigned long</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long">long long</a></code> and <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long">unsigned long long</a></code>.</p>
   <p>The following types are known as <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-numeric-type">numeric types</dfn>:
the <a data-link-type="dfn" href="#dfn-integer-type" id="ref-for-dfn-integer-type①">integer types</a>, <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float②">float</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float④">unrestricted float</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double⑤">double</a></code> and <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double④">unrestricted double</a></code>.</p>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-primitive-type">primitive types</dfn> are <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean④">boolean</a></code> and the <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type⑤">numeric types</a>.</p>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-string-type">string types</dfn> are <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①⑧">DOMString</a></code>, all <a data-link-type="dfn" href="#idl-enumeration" id="ref-for-idl-enumeration">enumeration types</a>, <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString①">ByteString</a></code> and <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString③">USVString</a></code>.</p>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-exception-type">exception types</dfn> are <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error②">Error</a></code> and <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②⓪">DOMException</a></code>.</p>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-typed-array-type">typed array types</dfn> are <code class="idl"><a data-link-type="idl" href="#idl-Int8Array" id="ref-for-idl-Int8Array">Int8Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Int16Array" id="ref-for-idl-Int16Array">Int16Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Int32Array" id="ref-for-idl-Int32Array">Int32Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Uint8Array" id="ref-for-idl-Uint8Array">Uint8Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Uint16Array" id="ref-for-idl-Uint16Array">Uint16Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Uint32Array" id="ref-for-idl-Uint32Array">Uint32Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Uint8ClampedArray" id="ref-for-idl-Uint8ClampedArray">Uint8ClampedArray</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Float32Array" id="ref-for-idl-Float32Array">Float32Array</a></code> and <code class="idl"><a data-link-type="idl" href="#idl-Float64Array" id="ref-for-idl-Float64Array">Float64Array</a></code>.</p>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-buffer-source-type">buffer source types</dfn> are <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer">ArrayBuffer</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-DataView" id="ref-for-idl-DataView">DataView</a></code>,
and the <a data-link-type="dfn" href="#dfn-typed-array-type" id="ref-for-dfn-typed-array-type">typed array types</a>.</p>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①">object</a></code> type,
all <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface④">interface types</a> and the <a data-link-type="dfn" href="#dfn-exception-type" id="ref-for-dfn-exception-type①">exception types</a> are known as <dfn data-dfn-type="dfn" data-export="" id="dfn-object-type">object types<a class="self-link" href="#dfn-object-type"></a></dfn>.</p>
   <p>Every type has a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-type-name">type name</dfn>, which
is a string, not necessarily unique, that identifies the type.
Each sub-section below defines what the type name is for each
type.</p>
   <p id="type-conversion-exceptions"> When conversions are made from language binding specific types to
    IDL types in order to invoke an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation②⑨">operation</a> or assign a value to an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②⑥">attribute</a>,
    all conversions necessary will be performed before the
    specified functionality of the operation or attribute assignment
    is carried out.  If the conversion cannot
    be performed, then the operation will not run or
    the attribute will not be updated.  In some language bindings,
    type conversions could result in an exception being thrown.
    In such cases, these exceptions will be propagated to the
    code that made the attempt to invoke the operation or
    assign to the attribute. </p>
<pre class="grammar" id="prod-Type"><emu-nt><a href="#prod-Type">Type</a></emu-nt> ::
    <emu-nt><a href="#prod-SingleType">SingleType</a></emu-nt>
    <emu-nt><a href="#prod-UnionType">UnionType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
</pre>
<pre class="grammar" id="prod-TypeWithExtendedAttributes"><emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-Type">Type</a></emu-nt>
</pre>
<pre class="grammar" id="prod-SingleType"><emu-nt><a href="#prod-SingleType">SingleType</a></emu-nt> ::
    <emu-nt><a href="#prod-NonAnyType">NonAnyType</a></emu-nt>
    <emu-t>any</emu-t>
</pre>
<pre class="grammar" id="prod-UnionType"><emu-nt><a href="#prod-UnionType">UnionType</a></emu-nt> ::
    <emu-t>(</emu-t> <emu-nt><a href="#prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-t>or</emu-t> <emu-nt><a href="#prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-nt><a href="#prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt> <emu-t>)</emu-t>
</pre>
<pre class="grammar" id="prod-UnionMemberType"><emu-nt><a href="#prod-UnionMemberType">UnionMemberType</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-NonAnyType">NonAnyType</a></emu-nt>
    <emu-nt><a href="#prod-UnionType">UnionType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
</pre>
<pre class="grammar" id="prod-UnionMemberTypes"><emu-nt><a href="#prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt> ::
    <emu-t>or</emu-t> <emu-nt><a href="#prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-nt><a href="#prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-NonAnyType"><emu-nt><a href="#prod-NonAnyType">NonAnyType</a></emu-nt> ::
    <emu-nt><a href="#prod-PromiseType">PromiseType</a></emu-nt> ε
    <emu-nt><a href="#prod-PrimitiveType">PrimitiveType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#prod-StringType">StringType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>sequence</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>object</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>symbol</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>Error</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#prod-BufferRelatedType">BufferRelatedType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>FrozenArray</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#prod-RecordType">RecordType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
</pre>
   <div data-fill-with="grammar-ConstType"><pre class="grammar"><emu-nt><a href="#prod-ConstType">ConstType</a></emu-nt> ::
    <emu-nt><a href="#prod-PrimitiveType">PrimitiveType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
</pre></div>
<pre class="grammar" id="prod-PrimitiveType"><emu-nt><a href="#prod-PrimitiveType">PrimitiveType</a></emu-nt> ::
    <emu-nt><a href="#prod-UnsignedIntegerType">UnsignedIntegerType</a></emu-nt>
    <emu-nt><a href="#prod-UnrestrictedFloatType">UnrestrictedFloatType</a></emu-nt>
    <emu-t>boolean</emu-t>
    <emu-t>byte</emu-t>
    <emu-t>octet</emu-t>
</pre>
<pre class="grammar" id="prod-UnrestrictedFloatType"><emu-nt><a href="#prod-UnrestrictedFloatType">UnrestrictedFloatType</a></emu-nt> ::
    <emu-t>unrestricted</emu-t> <emu-nt><a href="#prod-FloatType">FloatType</a></emu-nt>
    <emu-nt><a href="#prod-FloatType">FloatType</a></emu-nt>
</pre>
<pre class="grammar" id="prod-FloatType"><emu-nt><a href="#prod-FloatType">FloatType</a></emu-nt> ::
    <emu-t>float</emu-t>
    <emu-t>double</emu-t>
</pre>
<pre class="grammar" id="prod-UnsignedIntegerType"><emu-nt><a href="#prod-UnsignedIntegerType">UnsignedIntegerType</a></emu-nt> ::
    <emu-t>unsigned</emu-t> <emu-nt><a href="#prod-IntegerType">IntegerType</a></emu-nt>
    <emu-nt><a href="#prod-IntegerType">IntegerType</a></emu-nt>
</pre>
<pre class="grammar" id="prod-IntegerType"><emu-nt><a href="#prod-IntegerType">IntegerType</a></emu-nt> ::
    <emu-t>short</emu-t>
    <emu-t>long</emu-t> <emu-nt><a href="#prod-OptionalLong">OptionalLong</a></emu-nt>
</pre>
<pre class="grammar" id="prod-OptionalLong"><emu-nt><a href="#prod-OptionalLong">OptionalLong</a></emu-nt> ::
    <emu-t>long</emu-t>
    ε
</pre>
<pre class="grammar" id="prod-StringType"><emu-nt><a href="#prod-StringType">StringType</a></emu-nt> ::
    <emu-t>ByteString</emu-t>
    <emu-t>DOMString</emu-t>
    <emu-t>USVString</emu-t>
</pre>
<pre class="grammar" id="prod-PromiseType"><emu-nt><a href="#prod-PromiseType">PromiseType</a></emu-nt> ::
    <emu-t>Promise</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-ReturnType">ReturnType</a></emu-nt> <emu-t>&gt;</emu-t>
</pre>
<pre class="grammar" id="prod-RecordType"><emu-nt><a href="#prod-RecordType">RecordType</a></emu-nt> ::
    <emu-t>record</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-StringType">StringType</a></emu-nt> <emu-t>,</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t>
</pre>
<pre class="grammar" id="prod-Null"><emu-nt><a href="#prod-Null">Null</a></emu-nt> ::
    <emu-t>?</emu-t>
    ε
</pre>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.1" data-lt="any" id="idl-any"><span class="secno">2.12.1. </span><span class="content">any</span><span id="dom-any"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any①">any</a></code> type is the union of all other possible
non-<a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①⑧">union</a> types.
Its <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name">type name</a> is "<code>Any</code>".</p>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any②">any</a></code> type is like
a discriminated union type, in that each of its values has a
specific non-<code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any③">any</a></code> type
associated with it.  For example, one value of the <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any④">any</a></code> type is the <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long⑤">unsigned long</a></code> 150, while another is the <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long⑧">long</a></code> 150.
These are distinct values.</p>
   <p>The particular type of an <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any⑤">any</a></code> value is known as its <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-specific-type">specific type</dfn>.
(Values of <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type①⑨">union types</a> also have <a data-link-type="dfn" href="#dfn-specific-type" id="ref-for-dfn-specific-type">specific types</a>.)</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.2" data-lt="boolean" id="idl-boolean"><span class="secno">2.12.2. </span><span class="content">boolean</span><span id="dom-boolean"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean⑤">boolean</a></code> type has two values: <code class="idl">true</code> and <code class="idl">false</code>.</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean⑥">boolean</a></code> constant values in IDL are
represented with the <emu-t>true</emu-t> and <emu-t>false</emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean⑦">boolean</a></code> type is "<code>Boolean</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.3" data-lt="byte" id="idl-byte"><span class="secno">2.12.3. </span><span class="content">byte</span><span id="dom-byte"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte①">byte</a></code> type is a signed integer
type that has values in the range [−128, 127].</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte②">byte</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte③">byte</a></code> type is "<code>Byte</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.4" data-lt="octet" id="idl-octet"><span class="secno">2.12.4. </span><span class="content">octet</span><span id="dom-octet"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet①">octet</a></code> type is an unsigned integer
type that has values in the range [0, 255].</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet②">octet</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name③">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet③">octet</a></code> type is "<code>Octet</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.5" data-lt="short" id="idl-short"><span class="secno">2.12.5. </span><span class="content">short</span><span id="dom-short"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short①">short</a></code> type is a signed integer
type that has values in the range [−32768, 32767].</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short②">short</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name④">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short③">short</a></code> type is "<code>Short</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.6" data-lt="unsigned short" id="idl-unsigned-short"><span class="secno">2.12.6. </span><span class="content">unsigned short</span><span id="dom-unsignedshort"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①">unsigned short</a></code> type is an unsigned integer
type that has values in the range [0, 65535].</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②">unsigned short</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name⑤">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③">unsigned short</a></code> type is "<code>UnsignedShort</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.7" data-lt="long" id="idl-long"><span class="secno">2.12.7. </span><span class="content">long</span><span id="dom-long"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long⑨">long</a></code> type is a signed integer
type that has values in the range [−2147483648, 2147483647].</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①⓪">long</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name⑥">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①①">long</a></code> type is "<code>Long</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.8" data-lt="unsigned long" id="idl-unsigned-long"><span class="secno">2.12.8. </span><span class="content">unsigned long</span><span id="dom-unsignedlong"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long⑥">unsigned long</a></code> type is an unsigned integer
type that has values in the range [0, 4294967295].</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long⑦">unsigned long</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name⑦">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long⑧">unsigned long</a></code> type is "<code>UnsignedLong</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.9" data-lt="long long" id="idl-long-long"><span class="secno">2.12.9. </span><span class="content">long long</span><span id="dom-longlong"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long①">long long</a></code> type is a signed integer
type that has values in the range [−9223372036854775808, 9223372036854775807].</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long②">long long</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name⑧">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long③">long long</a></code> type is "<code>LongLong</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.10" data-lt="unsigned long long" id="idl-unsigned-long-long"><span class="secno">2.12.10. </span><span class="content">unsigned long long</span><span id="dom-unsignedlonglong"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long①">unsigned long long</a></code> type is an unsigned integer
type that has values in the range [0, 18446744073709551615].</p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long②">unsigned long long</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name⑨">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long③">unsigned long long</a></code> type is "<code>UnsignedLongLong</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.11" data-lt="float" id="idl-float"><span class="secno">2.12.11. </span><span class="content">float</span><span id="dom-float"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float③">float</a></code> type is a floating point numeric
type that corresponds to the set of finite single-precision 32 bit
IEEE 754 floating point numbers. <a data-link-type="biblio" href="#biblio-ieee-754">[IEEE-754]</a></p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float④">float</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-float">float</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①⓪">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float⑤">float</a></code> type is "<code>Float</code>".</p>
   <p class="advisement"> Unless there are specific reasons to use a 32 bit floating point type,
    specifications should use <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double⑥">double</a></code> rather than <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float⑥">float</a></code>,
    since the set of values that a <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double⑦">double</a></code> can
    represent more closely matches an ECMAScript Number. </p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.12" data-lt="unrestricted float" id="idl-unrestricted-float"><span class="secno">2.12.12. </span><span class="content">unrestricted float</span><span id="dom-unrestrictedfloat"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float⑤">unrestricted float</a></code> type is a floating point numeric
type that corresponds to the set of all possible single-precision 32 bit
IEEE 754 floating point numbers, finite, non-finite, and special "not a number" values (NaNs). <a data-link-type="biblio" href="#biblio-ieee-754">[IEEE-754]</a></p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float⑥">unrestricted float</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-float">float</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①①">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float⑦">unrestricted float</a></code> type is "<code>UnrestrictedFloat</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.13" data-lt="double" id="idl-double"><span class="secno">2.12.13. </span><span class="content">double</span><span id="dom-double"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double⑧">double</a></code> type is a floating point numeric
type that corresponds to the set of finite double-precision 64 bit
IEEE 754 floating point numbers. <a data-link-type="biblio" href="#biblio-ieee-754">[IEEE-754]</a></p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double⑨">double</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-float">float</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①②">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double①⓪">double</a></code> type is "<code>Double</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.14" data-lt="unrestricted double" id="idl-unrestricted-double"><span class="secno">2.12.14. </span><span class="content">unrestricted double</span><span id="dom-unrestricteddouble"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double⑤">unrestricted double</a></code> type is a floating point numeric
type that corresponds to the set of all possible double-precision 64 bit
IEEE 754 floating point numbers, finite, non-finite, and special "not a number" values (NaNs). <a data-link-type="biblio" href="#biblio-ieee-754">[IEEE-754]</a></p>
   <p><code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double⑥">unrestricted double</a></code> constant values in IDL are
represented with <emu-t class="regex"><a href="#prod-float">float</a></emu-t> tokens.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①③">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double⑦">unrestricted double</a></code> type is "<code>UnrestrictedDouble</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.15" data-lt="DOMString" id="idl-DOMString"><span class="secno">2.12.15. </span><span class="content">DOMString</span><span id="dom-DOMString"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString①⑨">DOMString</a></code> type corresponds to
the set of all possible sequences of <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit">code units</a>.
Such sequences are commonly interpreted as UTF-16 encoded strings <a data-link-type="biblio" href="#biblio-rfc2781">[RFC2781]</a> although this is not required.
While <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②⓪">DOMString</a></code> is defined to be
an OMG IDL boxed <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type⑧">sequence</a>&lt;<code class="idl"><a data-link-type="idl" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short④">unsigned short</a></code>&gt; valuetype
in <a href="https://www.w3.org/TR/DOM-Level-3-Core//core#ID-C74D1578">DOM Level 3 Core §The DOMString Type</a>,
this document defines <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②①">DOMString</a></code> to be an intrinsic type
so as to avoid special casing that sequence type
in various situations where a string is required.</p>
   <p class="note" role="note"><span>Note:</span> Note also that <emu-val>null</emu-val> is not a value of type <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②②">DOMString</a></code>.
To allow <emu-val>null</emu-val>, a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①②">nullable</a> <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②③">DOMString</a></code>,
written as <code>DOMString?</code> in IDL, needs to be used.</p>
   <p>Nothing in this specification requires a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②④">DOMString</a></code> value to be a valid UTF-16 string.  For example, a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②⑤">DOMString</a></code> value might include unmatched surrogate pair characters.  However, authors
of specifications using Web IDL might want to obtain a sequence of <a data-link-type="dfn" href="http://www.unicode.org/glossary/#unicode_scalar_value" id="ref-for-unicode_scalar_value①">Unicode scalar values</a> given a particular sequence of <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit①">code units</a>.</p>
   <div class="algorithm" data-algorithm="obtain Unicode">
    <p>The following algorithm defines a way to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="obtain Unicode|convert to a sequence of Unicode scalar values" id="dfn-obtain-unicode">convert a DOMString to a sequence of Unicode scalar values</dfn>:</p>
    <ol>
     <li data-md="">
      <p>Let <var>S</var> be the <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②⑥">DOMString</a></code> value.</p>
     </li><li data-md="">
      <p>Let <var>n</var> be the length of <var>S</var>.</p>
     </li><li data-md="">
      <p>Initialize <var>i</var> to 0.</p>
     </li><li data-md="">
      <p>Initialize <var>U</var> to be an empty sequence of Unicode characters.</p>
     </li><li data-md="">
      <p>While <var>i</var> &lt; <var>n</var>:</p>
      <ol>
       <li data-md="">
        <p>Let <var>c</var> be the <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit②">code unit</a> in <var>S</var> at index <var>i</var>.</p>
       </li><li data-md="">
        <p>Depending on the value of <var>c</var>:</p>
        <dl class="switch">
         <dt data-md=""><var>c</var> &lt; 0xD800 or <var>c</var> &gt; 0xDFFF
         </dt><dd data-md="">
          <p>Append to <var>U</var> the Unicode character with code point <var>c</var>.</p>
         </dd><dt data-md="">0xDC00 ≤ <var>c</var> ≤ 0xDFFF
         </dt><dd data-md="">
          <p>Append to <var>U</var> a <span class="char">U+FFFD REPLACEMENT CHARACTER</span>.</p>
         </dd><dt data-md="">0xD800 ≤ <var>c</var> ≤ 0xDBFF
         </dt><dd data-md="">
          <ol class="only">
           <li data-md="">
            <p>If <var>i</var> = <var>n</var>−1, then append to <var>U</var> a <span class="char">U+FFFD REPLACEMENT CHARACTER</span>.</p>
           </li><li data-md="">
            <p>Otherwise, <var>i</var> &lt; <var>n</var>−1:</p>
            <ol>
             <li data-md="">
              <p>Let <var>d</var> be the code unit in <var>S</var> at index <var>i</var>+1.</p>
             </li><li data-md="">
              <p>If 0xDC00 ≤ <var>d</var> ≤ 0xDFFF, then:</p>
              <ol>
               <li data-md="">
                <p>Let <var>a</var> be <var>c</var> &amp; 0x3FF.</p>
               </li><li data-md="">
                <p>Let <var>b</var> be <var>d</var> &amp; 0x3FF.</p>
               </li><li data-md="">
                <p>Append to <var>U</var> the Unicode character with
code point 2<sup>16</sup>+2<sup>10</sup><var>a</var>+<var>b</var>.</p>
               </li><li data-md="">
                <p>Set <var>i</var> to <var>i</var>+1.</p>
              </li></ol>
             </li><li data-md="">
              <p>Otherwise, <var>d</var> &lt; 0xDC00 or <var>d</var> &gt; 0xDFFF.
Append to <var>U</var> a <span class="char">U+FFFD REPLACEMENT CHARACTER</span>.</p>
            </li></ol>
          </li></ol>
        </dd></dl>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var>+1.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>U</var>.</p>
    </li></ol>
   </div>
   <p>There is no way to represent a constant <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②⑦">DOMString</a></code> value in IDL, although <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②⑧">DOMString</a></code> <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①⓪">dictionary member</a> and <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①⑦">operation optional argument</a> default values
can be specified using a <emu-t class="regex"><a href="#prod-string">string</a></emu-t> literal.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①④">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString②⑨">DOMString</a></code> type is "<code>String</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.16" data-lt="ByteString" id="idl-ByteString"><span class="secno">2.12.16. </span><span class="content">ByteString</span><span id="dom-ByteString"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString②">ByteString</a></code> type
corresponds to the set of all possible sequences of bytes.
Such sequences might be interpreted as UTF-8 encoded strings <a data-link-type="biblio" href="#biblio-rfc3629">[RFC3629]</a> or strings in some other 8-bit-per-code-unit encoding, although this is not required.</p>
   <p>There is no way to represent a constant <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString③">ByteString</a></code> value in IDL, although <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString④">ByteString</a></code> <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①①">dictionary member</a> and <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①⑧">operation optional argument</a> default values
can be specified using a <emu-t class="regex"><a href="#prod-string">string</a></emu-t> literal.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①⑤">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString⑤">ByteString</a></code> type is "<code>ByteString</code>".</p>
   <p class="advisement"> Specifications should only use <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString⑥">ByteString</a></code> for interfacing with protocols
    that use bytes and strings interchangeably, such as HTTP.  In general,
    strings should be represented with <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③⓪">DOMString</a></code> values, even if it is expected
    that values of the string will always be in ASCII or some
    8 bit character encoding. <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type⑨">Sequences</a> or <a data-link-type="dfn" href="#dfn-frozen-array-type" id="ref-for-dfn-frozen-array-type③">frozen arrays</a> with <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet④">octet</a></code> or <code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte④">byte</a></code> elements, <code class="idl"><a data-link-type="idl" href="#idl-Uint8Array" id="ref-for-idl-Uint8Array①">Uint8Array</a></code>, or <code class="idl"><a data-link-type="idl" href="#idl-Int8Array" id="ref-for-idl-Int8Array①">Int8Array</a></code> should be used for holding
    8 bit data rather than <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString⑦">ByteString</a></code>. </p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.17" data-lt="USVString" id="idl-USVString"><span class="secno">2.12.17. </span><span class="content">USVString</span><span id="dom-USVString"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString④">USVString</a></code> type
corresponds to the set of all possible sequences of <a data-link-type="dfn" href="http://www.unicode.org/glossary/#unicode_scalar_value" id="ref-for-unicode_scalar_value②">Unicode scalar values</a>,
which are all of the Unicode code points apart from the
surrogate code points.</p>
   <p>There is no way to represent a constant <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString⑤">USVString</a></code> value in IDL, although <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString⑥">USVString</a></code> <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①②">dictionary member</a> and <a data-link-type="dfn" href="#dfn-optional-argument" id="ref-for-dfn-optional-argument①⑨">operation optional argument</a> default values
can be specified using a <emu-t class="regex"><a href="#prod-string">string</a></emu-t> literal.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①⑥">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString⑦">USVString</a></code> type is "<code>USVString</code>".</p>
   <p class="advisement"> Specifications should only use <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString⑧">USVString</a></code> for APIs that perform
    text processing and need a string of Unicode
    scalar values to operate on.  Most APIs that use strings
    should instead be using <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③①">DOMString</a></code>,
    which does not make any interpretations of the <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit③">code units</a> in the string.  When in doubt, use <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③②">DOMString</a></code>. </p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.18" data-lt="object" id="idl-object"><span class="secno">2.12.18. </span><span class="content">object</span><span id="dom-object"></span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②">object</a></code> type corresponds to the set of
all possible non-null object references.</p>
   <p>There is no way to represent a constant <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object③">object</a></code> value in IDL.</p>
   <p>To denote a type that includes all possible object references plus the <emu-val>null</emu-val> value, use the <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①③">nullable type</a> <code class="idl">object?</code>.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①⑦">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object④">object</a></code> type is "<code>Object</code>".</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.19" data-lt="symbol" id="idl-symbol"><span class="secno">2.12.19. </span><span class="content">symbol</span></h4>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol">symbol</a></code> type corresponds to the set of all possible symbol values. Symbol values are opaque,
non-<code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object⑤">object</a></code> values which nevertheless have identity (i.e., are only equal to themselves).</p>
   <p>There is no way to represent a constant <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol①">symbol</a></code> value in IDL.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①⑧">type name</a> of the <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol②">symbol</a></code> type is "<code>Symbol</code>".</p>
   <h4 class="heading settled dfn-paneled" data-dfn-type="dfn" data-level="2.12.20" data-lt="Interface types" data-noexport="" id="idl-interface"><span class="secno">2.12.20. </span><span class="content">Interface types</span></h4>
   <p>An <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④③">identifier</a> that
identifies an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥④">interface</a> is used to refer to
a type that corresponds to the set of all possible non-null references to objects that
implement that interface.</p>
   <p>For non-callback interfaces, an IDL value of the interface type is represented just
by an object reference.  For <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①⑦">callback interfaces</a>, an IDL value of the interface type
is represented by a tuple of an object reference and a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-callback-context">callback context</dfn>.
The <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context">callback context</a> is a language
binding specific value, and is used to store information about the execution context at
the time the language binding specific object reference is converted to an IDL value.</p>
   <p class="note" role="note"><span>Note:</span> For ECMAScript objects, the <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context①">callback context</a> is used to hold a reference to the <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#incumbent-settings-object" id="ref-for-incumbent-settings-object">incumbent settings object</a> at the time the Object value
is converted to an IDL callback interface type value. See <a href="#es-interface">§3.2.14 Interface types</a>.</p>
   <p>There is no way to represent a constant object reference value for
a particular interface type in IDL.</p>
   <p>To denote a type that includes all possible references to objects implementing
the given interface plus the <emu-val>null</emu-val> value,
use a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①④">nullable type</a>.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name①⑨">type name</a> of an interface type
is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④④">identifier</a> of the interface.</p>
   <h4 class="heading settled dfn-paneled" data-dfn-type="dfn" data-level="2.12.21" data-lt="Dictionary types" data-noexport="" id="idl-dictionary"><span class="secno">2.12.21. </span><span class="content">Dictionary types</span></h4>
   <p>An <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④⑤">identifier</a> that
identifies a <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary⑨">dictionary</a> is used to refer to
a type that corresponds to the set of all dictionaries that adhere to
the dictionary definition.</p>
   <p>The literal syntax for <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map②">ordered maps</a> may also be used to represent dictionaries, when it is
implicitly understood from context that the map is being treated as an instance of a specific
dictionary type. However, there is no way to represent a constant dictionary value inside IDL
fragments.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②⓪">type name</a> of a dictionary type
is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④⑥">identifier</a> of the dictionary.</p>
   <h4 class="heading settled dfn-paneled" data-dfn-type="dfn" data-export="" data-level="2.12.22" data-lt="Enumeration types" id="idl-enumeration"><span class="secno">2.12.22. </span><span class="content">Enumeration types</span></h4>
   <p>An <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④⑦">identifier</a> that
identifies an <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①③">enumeration</a> is used to
refer to a type whose values are the set of strings (sequences of <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit④">code units</a>, as with <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③③">DOMString</a></code>) that are the <a data-link-type="dfn" href="#dfn-enumeration-value" id="ref-for-dfn-enumeration-value③">enumeration’s values</a>.</p>
   <p>Like <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③④">DOMString</a></code>, there is no way to represent a constant <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①④">enumeration</a> value in IDL, although enumeration-typed <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①③">dictionary member</a> <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value⑦">default values</a> can be specified using a <emu-t class="regex"><a href="#prod-string">string</a></emu-t> literal.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②①">type name</a> of an enumeration type
is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④⑧">identifier</a> of the enumeration.</p>
   <h4 class="heading settled dfn-paneled" data-dfn-type="dfn" data-level="2.12.23" data-lt="Callback function types" data-noexport="" id="idl-callback-function"><span class="secno">2.12.23. </span><span class="content">Callback function types</span></h4>
   <p>An <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier④⑨">identifier</a> that identifies
a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①⑧">callback function</a> is used to refer to
a type whose values are references to objects that are functions with the given signature.</p>
   <p>An IDL value of the callback function type is represented by a tuple of an object
reference and a <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context②">callback context</a>.</p>
   <p class="note" role="note"><span>Note:</span> As with <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface⑤">callback interface types</a>, the <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context③">callback context</a> is used to hold a
reference to the <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#incumbent-settings-object" id="ref-for-incumbent-settings-object①">incumbent settings object</a> at
the time an ECMAScript Object value is converted to an IDL
callback function type value.  See <a href="#es-callback-function">§3.2.17 Callback function types</a>.</p>
   <p>There is no way to represent a constant <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function①⑨">callback function</a> value in IDL.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②②">type name</a> of a callback function type
is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤⓪">identifier</a> of the callback function.</p>
   <h4 class="heading settled" data-level="2.12.24" id="idl-nullable-type"><span class="secno">2.12.24. </span><span class="content">Nullable types — <var>T</var>?</span><a class="self-link" href="#idl-nullable-type"></a></h4>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-nullable-type">nullable type</dfn> is an IDL type constructed
from an existing type (called the <dfn class="dfn-paneled" data-dfn-for="nullable types" data-dfn-type="dfn" data-export="" id="dfn-inner-type">inner type</dfn>),
which just allows the additional value <emu-val>null</emu-val> to be a member of its set of values. <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①⑤">Nullable types</a> are represented in IDL by placing a <span class="char">U+003F QUESTION MARK ("?")</span> character after an existing type.
The <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type⑦">inner type</a> must not be:</p>
   <ul>
    <li data-md="">
     <p><code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any⑥">any</a></code>,</p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type②">Promise type</a>,</p>
    </li><li data-md="">
     <p>another nullable type, or</p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②⓪">union type</a> that itself has <a data-link-type="dfn" href="#dfn-includes-a-nullable-type" id="ref-for-dfn-includes-a-nullable-type②">includes a nullable type</a> or has a dictionary type as one of its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types⑤">flattened member types</a>.</p>
   </li></ul>
   <p class="note" role="note"><span>Note:</span> Although dictionary types can in general be nullable,
they cannot when used as the type of an operation argument or a dictionary member.</p>
   <p>Nullable type constant values in IDL are represented in the same way that
constant values of their <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type⑧">inner type</a> would be represented, or with the <emu-t>null</emu-t> token.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②③">type name</a> of a nullable type
is the concatenation of the type name of the <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type⑨">inner type</a> <var>T</var> and
the string "<code>OrNull</code>".</p>
   <div class="example" id="example-5167cae3">
    <a class="self-link" href="#example-5167cae3"></a> 
    <p>For example, a type that allows the values <emu-val>true</emu-val>, <emu-val>false</emu-val> and <emu-val>null</emu-val> is written as <code class="idl">boolean?</code>:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">NetworkFetcher</c-> {
  <c- b="">void</c-> <c- g="">get</c->(<c- b="">optional</c-> <c- b="">boolean</c->? <c- g="">areWeThereYet</c-> = <c- b="">false</c->);
};
</pre>
    <p>The following <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥⑤">interface</a> has two <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②⑦">attributes</a>: one whose value can
    be a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③⑤">DOMString</a></code> or the <emu-val>null</emu-val> value, and another whose value can be a reference to a <code class="idl">Node</code> object or the <emu-val>null</emu-val> value:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Node</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c->? <c- g="">namespaceURI</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">Node</c->? <c- g="">parentNode</c->;
  // ...
};
</pre>
   </div>
   <h4 class="heading settled" data-dfn-type="dfn" data-export="" data-level="2.12.25" data-lt="sequence" id="idl-sequence"><span class="secno">2.12.25. </span><span class="content">Sequence types — sequence&lt;<var>T</var>&gt;</span><span id="dom-sequence"></span><a class="self-link" href="#idl-sequence"></a></h4>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="sequence type" id="sequence-type">sequence&lt;<var>T</var>&gt;</dfn> type is a parameterized type whose values are (possibly zero-length) <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list③">lists</a> of
values of type <var>T</var>.</p>
   <p>Sequences are always passed by value.  In
language bindings where a sequence is represented by an object of
some kind, passing a sequence to a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑧">platform object</a> will not result in a reference to the sequence being kept by that object.
Similarly, any sequence returned from a platform object
will be a copy and modifications made to it will not be visible to the platform object.</p>
   <p>The literal syntax for <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list④">lists</a> may also be used to represent sequences, when it is implicitly
understood from context that the list is being treated as a sequences. However, there is no way to
represent a constant sequence value inside IDL fragments.</p>
   <p>Sequences must not be used as the
type of an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②⑧">attribute</a> or <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②⑥">constant</a>.</p>
   <p class="note" role="note"><span>Note:</span> This restriction exists so that it is clear to specification writers
and API users that <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①⓪">sequences</a> are copied rather than having references
to them passed around.  Instead of a writable <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute②⑨">attribute</a> of a sequence
type, it is suggested that a pair of <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③⓪">operations</a> to get and set the
sequence is used.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②④">type name</a> of a sequence type
is the concatenation of the type name for <var>T</var> and
the string "<code>Sequence</code>".</p>
   <p>Any <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list⑤">list</a> can be implicitly treated as a <code>sequence&lt;<var>T</var>&gt;</code>, as long as it contains
only <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-item" id="ref-for-list-item③">items</a> that are of type <var>T</var>.</p>
   <h4 class="heading settled dfn-paneled" data-dfn-type="dfn" data-export="" data-level="2.12.26" data-lt="record" id="idl-record"><span class="secno">2.12.26. </span><span class="content">Record types — record&lt;<var>K</var>, <var>V</var>&gt;</span></h4>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="record-type">record type</dfn> is a parameterized type whose values are <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map③">ordered maps</a> with <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-key" id="ref-for-map-key②">keys</a> that are instances of <var>K</var> and <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-value" id="ref-for-map-value②">values</a> that are instances of <var>V</var>. <var>K</var> must be one
of <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③⑥">DOMString</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString⑨">USVString</a></code>, or <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString⑧">ByteString</a></code>.</p>
   <p>The literal syntax for <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map④">ordered maps</a> may also be used to represent records, when it is implicitly
understood from context that the map is being treated as a record. However, there is no way to
represent a constant record value inside IDL fragments.</p>
   <p>Records are always passed by value. In language bindings where a record
is represented by an object of some kind, passing a record
to a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑨">platform object</a> will not result in a reference to the record
being kept by that object. Similarly, any record returned from a
platform object will be a copy and modifications made to it will not be visible
to the platform object.</p>
   <p>Records must not be used as the type of an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③⓪">attribute</a> or <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②⑦">constant</a>.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②⑤">type name</a> of a record type is the concatenation of the type
name for <var>K</var>, the type name for <var>V</var> and the string "<code>Record</code>".</p>
   <p>Any <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map⑤">ordered map</a> can be implicitly treated as a <code>record&lt;<var>K</var>, <var>V</var>&gt;</code>, as long as
it contains only <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-entry" id="ref-for-map-entry③">entries</a> whose <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-key" id="ref-for-map-key③">keys</a> are all of of type <var>K</var> and whose <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-value" id="ref-for-map-value③">values</a> are all of type <var>V</var>.</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.27" data-lt="Promise|Promise<T>" id="idl-promise"><span class="secno">2.12.27. </span><span class="content">Promise types — Promise&lt;<var>T</var>&gt;</span><span id="dom-promise"></span></h4>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-promise-type">promise type</dfn> is a parameterized type
whose values are references to objects that “is used as a place holder
for the eventual results of a deferred (and possibly asynchronous) computation
result of an asynchronous operation”.
See <a href="https://tc39.github.io/ecma262/#sec-promise-objects" id="termref-for-">section 25.4</a> of the ECMAScript specification for details on the semantics of promise objects.</p>
   <p>Promise types are non-nullable, but <var>T</var> may be nullable.</p>
   <p>There is no way to represent a promise value in IDL.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②⑥">type name</a> of a promise type
is the concatenation of the type name for <var>T</var> and
the string "<code>Promise</code>".</p>
   <h4 class="heading settled" data-level="2.12.28" id="idl-union"><span class="secno">2.12.28. </span><span class="content">Union types</span><a class="self-link" href="#idl-union"></a></h4>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-union-type">union type</dfn> is a type whose set of values
is the union of those in two or more other types.  Union types (matching <emu-nt><a href="#prod-UnionType">UnionType</a></emu-nt>)
are written as a series of types separated by the <emu-t>or</emu-t> keyword
with a set of surrounding parentheses.
The types which comprise the union type are known as the
union’s <dfn class="dfn-paneled" data-dfn-for="union" data-dfn-type="dfn" data-export="" id="dfn-union-member-type">member types</dfn>.</p>
   <div class="note" role="note">
    <p>For example, you might write <code>(Node or DOMString)</code> or <code>(double or sequence&lt;double&gt;)</code>.  When applying a <emu-t>?</emu-t> suffix to a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②①">union type</a> as a whole, it is placed after the closing parenthesis,
    as in <code>(Node or DOMString)?</code>.</p>
    <p>Note that the <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type④">member types</a> of a union type do not descend into nested union types.  So for <code>(double or (sequence&lt;long&gt; or Event) or (Node or DOMString)?)</code> the member types
    are <code>double</code>, <code>(sequence&lt;long&gt; or Event)</code> and <code>(Node or DOMString)?</code>.</p>
   </div>
   <p>Like the <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any⑦">any</a></code> type, values of
union types have a <a data-link-type="dfn" href="#dfn-specific-type" id="ref-for-dfn-specific-type①">specific type</a>,
which is the particular <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type⑤">member type</a> that matches the value.</p>
   <div class="algorithm" data-algorithm="flattened member types">
    <p>The <dfn class="dfn-paneled" data-dfn-for="union" data-dfn-type="dfn" data-export="" id="dfn-flattened-union-member-types">flattened member types</dfn> of a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②②">union type</a>, possibly <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②">annotated</a>, is a set of types determined as
    follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>T</var> be the <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②③">union type</a>.</p>
     </li><li data-md="">
      <p>Initialize <var>S</var> to ∅.</p>
     </li><li data-md="">
      <p>For each <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type⑥">member type</a> <var>U</var> of <var>T</var>:</p>
      <ol>
       <li data-md="">
        <p>If <var>U</var> is an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③">annotated type</a>, then
set <var>U</var> to be the <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type②">inner type</a> of <var>U</var>.</p>
       </li><li data-md="">
        <p>If <var>U</var> is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①⑥">nullable type</a>, then
set <var>U</var> to be the <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type①⓪">inner type</a> of <var>U</var>.</p>
       </li><li data-md="">
        <p>If <var>U</var> is a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②④">union type</a>, then
add to <var>S</var> the <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types⑥">flattened member types</a> of <var>U</var>.</p>
       </li><li data-md="">
        <p>Otherwise, <var>U</var> is not a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②⑤">union type</a>.
Add <var>U</var> to <var>S</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>S</var>.</p>
    </li></ol>
   </div>
   <p class="note" role="note"><span>Note:</span> For example, the <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types⑦">flattened member types</a> of the <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②⑥">union type</a> <code>(Node or (sequence&lt;long&gt; or Event) or (XMLHttpRequest or DOMString)? or sequence&lt;(sequence&lt;double&gt; or NodeList)&gt;)</code> are the six types <code>Node</code>, <code>sequence&lt;long&gt;</code>, <code>Event</code>, <code>XMLHttpRequest</code>, <code>DOMString</code> and <code>sequence&lt;(sequence&lt;double&gt; or NodeList)&gt;</code>.</p>
   <div class="algorithm" data-algorithm="number of nullable member types">
    <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-number-of-nullable-member-types">number of nullable member types</dfn> of a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②⑦">union type</a> is an integer
    determined as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>T</var> be the <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②⑧">union type</a>.</p>
     </li><li data-md="">
      <p>Initialize <var>n</var> to 0.</p>
     </li><li data-md="">
      <p>For each <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type⑦">member type</a> <var>U</var> of <var>T</var>:</p>
      <ol>
       <li data-md="">
        <p>If <var>U</var> is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①⑦">nullable type</a>, then:</p>
        <ol>
         <li data-md="">
          <p>Set <var>n</var> to <var>n</var> + 1.</p>
         </li><li data-md="">
          <p>Set <var>U</var> to be the <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type①①">inner type</a> of <var>U</var>.</p>
        </li></ol>
       </li><li data-md="">
        <p>If <var>U</var> is a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type②⑨">union type</a>, then:</p>
        <ol>
         <li data-md="">
          <p>Let <var>m</var> be the <a data-link-type="dfn" href="#dfn-number-of-nullable-member-types" id="ref-for-dfn-number-of-nullable-member-types">number of nullable member types</a> of <var>U</var>.</p>
         </li><li data-md="">
          <p>Set <var>n</var> to <var>n</var> + <var>m</var>.</p>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>n</var>.</p>
    </li></ol>
   </div>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any⑧">any</a></code> type must not
be used as a <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type⑧">union member type</a>.</p>
   <p>The <a data-link-type="dfn" href="#dfn-number-of-nullable-member-types" id="ref-for-dfn-number-of-nullable-member-types①">number of nullable member types</a> of a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③⓪">union type</a> must
be 0 or 1, and if it is 1 then the union type must also not have
a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary⑧">dictionary type</a> in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types⑧">flattened member types</a>.</p>
   <p>A type <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-includes-a-nullable-type">includes a nullable type</dfn> if:</p>
   <ul>
    <li data-md="">
     <p>the type is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①⑧">nullable type</a>, or</p>
    </li><li data-md="">
     <p>the type is an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types④">annotated type</a> and its <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type③">inner type</a> is a nullable type, or</p>
    </li><li data-md="">
     <p>the type is a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③①">union type</a> and its <a data-link-type="dfn" href="#dfn-number-of-nullable-member-types" id="ref-for-dfn-number-of-nullable-member-types②">number of nullable member types</a> is 1.</p>
   </li></ul>
   <p>Each pair of <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types⑨">flattened member types</a> in a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③②">union type</a>, <var>T</var> and <var>U</var>,
must be <a data-link-type="dfn" href="#dfn-distinguishable" id="ref-for-dfn-distinguishable③">distinguishable</a>.</p>
   <p><a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③③">Union type</a> constant values
in IDL are represented in the same way that constant values of their <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type⑨">member types</a> would be
represented.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②⑦">type name</a> of a union
type is formed by taking the type names of each member type, in order,
and joining them with the string "<code>Or</code>".</p>
   <div data-fill-with="grammar-UnionType"><pre class="grammar"><emu-nt><a href="#prod-UnionType">UnionType</a></emu-nt> ::
    <emu-t>(</emu-t> <emu-nt><a href="#prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-t>or</emu-t> <emu-nt><a href="#prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-nt><a href="#prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt> <emu-t>)</emu-t>
</pre></div>
   <div data-fill-with="grammar-UnionMemberType"><pre class="grammar"><emu-nt><a href="#prod-UnionMemberType">UnionMemberType</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#prod-NonAnyType">NonAnyType</a></emu-nt>
    <emu-nt><a href="#prod-UnionType">UnionType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
</pre></div>
   <div data-fill-with="grammar-UnionMemberTypes"><pre class="grammar"><emu-nt><a href="#prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt> ::
    <emu-t>or</emu-t> <emu-nt><a href="#prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-nt><a href="#prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt>
    ε
</pre></div>
   <div data-fill-with="grammar-NonAnyType"><pre class="grammar"><emu-nt><a href="#prod-NonAnyType">NonAnyType</a></emu-nt> ::
    <emu-nt><a href="#prod-PromiseType">PromiseType</a></emu-nt> ε
    <emu-nt><a href="#prod-PrimitiveType">PrimitiveType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#prod-StringType">StringType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>sequence</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>object</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>symbol</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>Error</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#prod-BufferRelatedType">BufferRelatedType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-t>FrozenArray</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#prod-RecordType">RecordType</a></emu-nt> <emu-nt><a href="#prod-Null">Null</a></emu-nt>
</pre></div>
   <h4 class="heading settled" data-level="2.12.29" id="idl-annotated-types"><span class="secno">2.12.29. </span><span class="content">Annotated types</span><a class="self-link" href="#idl-annotated-types"></a></h4>
   <p>Additional types can be created from existing ones by specifying certain <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②⑧">extended attributes</a> on
the existing types. Such types are called <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="annotated-types">annotated types</dfn>, and the types they
annotate are called <dfn class="dfn-paneled" data-dfn-for="annotated types" data-dfn-type="dfn" data-export="" data-lt="inner type" id="annotated-types-inner-type">inner types</dfn>.</p>
   <div class="example" id="example-3082499a"><a class="self-link" href="#example-3082499a"></a> <code>[Clamp] long</code> defines a new <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types⑤">annotated type</a>, whose behavior is based on that of
    the <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type④">inner type</a> <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①②">long</a></code>, but modified as specified by the [<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp">Clamp</a></code>]
    extended attribute. </div>
   <p>The following extended attributes are <dfn class="dfn-paneled" data-dfn-for="extended attributes" data-dfn-type="dfn" data-noexport="" id="extended-attributes-applicable-to-types">applicable to types</dfn>:
[<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp①">Clamp</a></code>],
[<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange">EnforceRange</a></code>], and
[<code class="idl"><a data-link-type="idl" href="#TreatNullAs" id="ref-for-TreatNullAs">TreatNullAs</a></code>].</p>
   <div class="algorithm" data-algorithm="extended attribute associated with">
     The <dfn class="dfn-paneled" data-dfn-for="IDL type" data-dfn-type="dfn" data-lt="extended attribute associated with|extended attributes associated with" data-noexport="" id="idl-type-extended-attribute-associated-with">extended attributes associated with</dfn> an IDL type <var>type</var> are determined as follows: 
    <ol>
     <li data-md="">
      <p>Let <var>extended attributes</var> be a new empty <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-set" id="ref-for-ordered-set②">set</a>.</p>
     </li><li data-md="">
      <p>If <var>type</var> appears as part of a <emu-nt><a href="#prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> production, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-append" id="ref-for-set-append③">append</a> each of the <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute②⑨">extended attributes</a> present in the production’s <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> to <var>extended attributes</var>.</p>
      <div class="example" id="example-aa81a4ee">
       <a class="self-link" href="#example-aa81a4ee"></a> 
<pre class="idl highlight def">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">I</c-> {
    <c- b="">attribute</c-> [<c- g="">XAttr</c->] <c- b="">long</c-> <c- g="">attrib</c->;
    <c- b="">void</c-> <c- g="">f1</c->(<c- b="">sequence</c->&lt;[<c- g="">XAttr</c->] <c- b="">long</c->&gt; <c- g="">arg</c->);
    <c- b="">void</c-> <c- g="">f2</c->(<c- b="">optional</c-> [<c- g="">XAttr</c->] <c- b="">long</c-> <c- g="">arg</c->);

    <c- b="">maplike</c->&lt;[<c- g="">XAttr2</c->] <c- b="">DOMString</c->, [<c- g="">XAttr3</c->] <c- b="">long</c->&gt;;
};

<c- b="">dictionary</c-> <c- g="">D</c-> {
    <c- b="">required</c-> [<c- g="">XAttr</c->] <c- b="">long</c-> <c- g="">member</c->;
};
</pre>
      </div>
     </li><li data-md="">
      <p>If <var>type</var> is a <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type①⓪">member type</a> of a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③④">union type</a> <var>U</var>, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-append" id="ref-for-set-append④">append</a> each of the <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with">extended attributes associated with</a> <var>U</var> to <var>extended attributes</var>.</p>
      <div class="example" id="example-2017de6a">
       <a class="self-link" href="#example-2017de6a"></a> 
<pre class="idl highlight def">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">I</c-> {
    <c- b="">attribute</c-> [<c- g="">XAttr</c->] (<c- b="">long</c-> <c- b="">or</c-> <c- n="">Node</c->) <c- g="">attrib</c->;
};
</pre>
      </div>
     </li><li data-md="">
      <p>If <var>type</var> appears as part of a <emu-nt><a href="#prod-Type">Type</a></emu-nt> production
directly within an <emu-nt><a href="#prod-Argument">Argument</a></emu-nt> production, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-append" id="ref-for-set-append⑤">append</a> to <var>extended attributes</var> all of the <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③⓪">extended attributes</a> present in the
production’s <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> that are <a data-link-type="dfn" href="#extended-attributes-applicable-to-types" id="ref-for-extended-attributes-applicable-to-types">applicable to types</a>.</p>
      <div class="example" id="example-97c0c232">
       <a class="self-link" href="#example-97c0c232"></a> 
<pre class="idl highlight def">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">I</c-> {
    <c- b="">void</c-> <c- g="">f</c->([<c- g="">XAttr</c->] <c- b="">long</c-> <c- g="">attrib</c->);
};
</pre>
       <p>Note that this is an example of this step only if [<code>XAttr</code>] is <a data-link-type="dfn" href="#extended-attributes-applicable-to-types" id="ref-for-extended-attributes-applicable-to-types①">applicable to types</a>; otherwise [<code>XAttr</code>] applies to the argument, and not
    the argument’s type.</p>
      </div>
     </li><li data-md="">
      <p>If <var>type</var> appears as part of a <emu-nt><a href="#prod-Type">Type</a></emu-nt> production
directly within an <emu-nt><a href="#prod-DictionaryMember">DictionaryMember</a></emu-nt> production, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-append" id="ref-for-set-append⑥">append</a> to <var>extended attributes</var> all of the <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③①">extended attributes</a> present in the production’s <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> that are <a data-link-type="dfn" href="#extended-attributes-applicable-to-types" id="ref-for-extended-attributes-applicable-to-types②">applicable to types</a>.</p>
      <div class="example" id="example-916df766">
       <a class="self-link" href="#example-916df766"></a> 
<pre class="idl highlight def"><c- b="">dictionary</c-> <c- g="">D</c-> {
    [<c- g="">XAttr</c->] <c- b="">long</c-> <c- g="">member</c->;
};
</pre>
       <p>Note that this is an example of this step only if [<code>XAttr</code>] is <a data-link-type="dfn" href="#extended-attributes-applicable-to-types" id="ref-for-extended-attributes-applicable-to-types③">applicable to types</a>; otherwise [<code>XAttr</code>] applies to the dictionary
    member, and not the member’s type.</p>
      </div>
     </li><li data-md="">
      <p>If <var>type</var> is a <a data-link-type="dfn" href="#dfn-typedef" id="ref-for-dfn-typedef①⑤">typedef</a>, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-append" id="ref-for-set-append⑦">append</a> the <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①">extended attributes associated with</a> the <a data-link-type="dfn" href="#type-being-given-a-new-name" id="ref-for-type-being-given-a-new-name①">type being given a new name</a> to <var>extended attributes</var>.</p>
      <div class="example" id="example-ee0b958b">
       <a class="self-link" href="#example-ee0b958b"></a> 
<pre class="idl highlight def"><c- b="">typedef</c-> [<c- g="">XAttr</c->] <c- b="">long</c-> <c- g="">xlong</c->;
</pre>
      </div>
     </li><li data-md="">
      <p>Return <var>extended attributes</var>.</p>
    </li></ol>
   </div>
   <p>For any type, the <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with②">extended attributes associated with</a> it must only contain <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③②">extended attributes</a> that are <a data-link-type="dfn" href="#extended-attributes-applicable-to-types" id="ref-for-extended-attributes-applicable-to-types④">applicable to types</a>.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②⑧">type name</a> of a type associated with <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③③">extended attributes</a> is the concatenation of the
type name of the original type with the set of strings corresponding to the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤①">identifiers</a> of each <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with③">extended attribute associated with</a> the type, sorted in lexicographic order.</p>
   <div class="example" id="example-4533b815"><a class="self-link" href="#example-4533b815"></a> The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name②⑨">type name</a> for a type of the form <code>[B, A] long?</code> is "LongOrNullAB". </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.30" data-lt="Error" id="idl-Error"><span class="secno">2.12.30. </span><span class="content">Error</span><span id="dom-Error"></span></h4>
   <p>The <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error③">Error</a></code> type corresponds to the
set of all possible non-null references to exception objects,
including <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception⑤">simple exceptions</a> and <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②①">DOMException</a></code> objects.</p>
   <p>There is no way to represent a constant <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error④">Error</a></code> value in IDL.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name③⓪">type name</a> of the <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error⑤">Error</a></code> type is "<code>Error</code>".</p>
   <h4 class="heading settled" data-level="2.12.31" id="idl-buffer-source-types"><span class="secno">2.12.31. </span><span class="content">Buffer source types</span><a class="self-link" href="#idl-buffer-source-types"></a></h4>
   <p>There are a number of types that correspond to sets of all possible non-null
references to objects that represent a buffer of data or a view on to a buffer of
data.  The table below lists these types and the kind of buffer or view they represent.</p>
   <table class="vert data">
    <tbody>
     <tr>
      <th>Type
      </th><th>Kind of buffer
     </th></tr><tr>
      <td><dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-ArrayBuffer"><code>ArrayBuffer</code></dfn>
      </td><td>An object that holds a pointer (which may be null) to a buffer of a fixed number of bytes
     </td></tr><tr>
      <td><dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-DataView"><code>DataView</code></dfn>
      </td><td>A view on to an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①">ArrayBuffer</a></code> that allows typed access to integers and floating point values stored at arbitrary offsets into the buffer
     </td></tr><tr>
      <td> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Int8Array"><code>Int8Array</code></dfn>,<br> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Int16Array"><code>Int16Array</code></dfn>,<br> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Int32Array"><code>Int32Array</code></dfn>
      </td><td>A view on to an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer②">ArrayBuffer</a></code> that exposes it as an array of two’s complement signed integers of the given size in bits
     </td></tr><tr>
      <td> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Uint8Array"><code>Uint8Array</code></dfn>,<br> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Uint16Array"><code>Uint16Array</code></dfn>,<br> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Uint32Array"><code>Uint32Array</code></dfn>
      </td><td>A view on to an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer③">ArrayBuffer</a></code> that exposes it as an array of unsigned integers of the given size in bits
     </td></tr><tr>
      <td><dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Uint8ClampedArray"><code>Uint8ClampedArray</code></dfn>
      </td><td>A view on to an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer④">ArrayBuffer</a></code> that exposes it as an array of unsigned 8 bit integers with clamped conversions
     </td></tr><tr>
      <td> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Float32Array"><code>Float32Array</code></dfn>,<br> <dfn class="dfn-paneled idl-code" data-dfn-type="interface" data-export="" id="idl-Float64Array"><code>Float64Array</code></dfn>
      </td><td>A view on to an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer⑤">ArrayBuffer</a></code> that exposes it as an array of IEEE 754 floating point numbers of the given size in bits
   </td></tr></tbody></table>
   <p class="note" role="note"><span>Note:</span> These types all correspond to classes defined in ECMAScript.</p>
   <p>There is no way to represent a constant value of any of these types in IDL.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name③①">type name</a> of all
of these types is the name of the type itself.</p>
   <p>At the specification prose level, IDL <a data-link-type="dfn" href="#dfn-buffer-source-type" id="ref-for-dfn-buffer-source-type①">buffer source types</a> are simply references to objects.  To inspect or manipulate the bytes inside the buffer,
specification prose must first either <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="get a reference to the buffer source" id="dfn-get-buffer-source-reference">get a reference to the bytes held by the buffer source</dfn> or <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="get a copy of the buffer source" id="dfn-get-buffer-source-copy">get a copy of the bytes held by the buffer source</dfn>.
With a reference to the buffer source’s bytes, specification prose can get or set individual
byte values using that reference.</p>
   <div class="advisement">
    <p>Extreme care must be taken when writing specification text that gets a reference
    to the bytes held by a buffer source, as the underlying data can easily be changed
    by the script author or other APIs at unpredictable times.  If you are using a buffer source type
    as an operation argument to obtain a chunk of binary data that will not be modified,
    it is strongly recommended to get a copy of the buffer source’s bytes at the beginning
    of the prose defining the operation.</p>
    <p>Requiring prose to explicitly get a reference to or copy of the bytes is intended to
    help specification reviewers look for problematic uses of these buffer source types.</p>
   </div>
   <div class="note" role="note">
    <p>When designing APIs that take a buffer, it is recommended to use the <code class="idl"><a data-link-type="idl" href="#BufferSource" id="ref-for-BufferSource">BufferSource</a></code> typedef rather than <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer⑥">ArrayBuffer</a></code> or any of the view types.</p>
    <p>When designing APIs that create and return a buffer, it is recommended
    to use the <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer⑦">ArrayBuffer</a></code> type rather than <code class="idl"><a data-link-type="idl" href="#idl-Uint8Array" id="ref-for-idl-Uint8Array②">Uint8Array</a></code>.</p>
   </div>
   <p>Attempting to <a data-link-type="dfn" href="#dfn-get-buffer-source-reference" id="ref-for-dfn-get-buffer-source-reference">get a reference to</a> or <a data-link-type="dfn" href="#dfn-get-buffer-source-copy" id="ref-for-dfn-get-buffer-source-copy">get a copy of the bytes held by a buffer source</a> when the <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer⑧">ArrayBuffer</a></code> has been <a data-link-type="dfn">detached</a> will fail in a language binding-specific manner.</p>
   <p class="note" role="note"><span>Note:</span> See <a href="#es-buffer-source-types">§3.2.25 Buffer source types</a> below for
how interacting with buffer source types works in the ECMAScript language binding.</p>
   <p class="issue" id="issue-2379a917"><a class="self-link" href="#issue-2379a917"></a> We should include an example of specification text that uses these types and terms. </p>
<pre class="grammar" id="prod-BufferRelatedType"><emu-nt><a href="#prod-BufferRelatedType">BufferRelatedType</a></emu-nt> ::
    <emu-t>ArrayBuffer</emu-t>
    <emu-t>DataView</emu-t>
    <emu-t>Int8Array</emu-t>
    <emu-t>Int16Array</emu-t>
    <emu-t>Int32Array</emu-t>
    <emu-t>Uint8Array</emu-t>
    <emu-t>Uint16Array</emu-t>
    <emu-t>Uint32Array</emu-t>
    <emu-t>Uint8ClampedArray</emu-t>
    <emu-t>Float32Array</emu-t>
    <emu-t>Float64Array</emu-t>
</pre>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="2.12.32" data-lt="FrozenArray|FrozenArray<T>" id="idl-frozen-array"><span class="secno">2.12.32. </span><span class="content">Frozen array types — FrozenArray&lt;<var>T</var>&gt;</span><span id="dom-FrozenArray"></span></h4>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-frozen-array-type">frozen array type</dfn> is a parameterized
type whose values are references to objects that hold a fixed length array
of unmodifiable values.  The values in the array are of type <var>T</var>.</p>
   <p>Since <a class="idl-code" data-link-type="interface" href="#idl-frozen-array" id="ref-for-idl-frozen-array">FrozenArray&lt;<var>T</var>&gt;</a> values
are references, they are unlike <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①①">sequence types</a>,
which are lists of values that are passed by value.</p>
   <p>There is no way to represent a constant frozen array value in IDL.</p>
   <p>The <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name③②">type name</a> of a frozen array
type is the concatenation of the type name for <var>T</var> and the string
"<code>Array</code>".</p>
   <h3 class="heading settled" data-level="2.13" id="idl-extended-attributes"><span class="secno">2.13. </span><span class="content">Extended attributes</span><a class="self-link" href="#idl-extended-attributes"></a></h3>
   <p>An <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-extended-attribute">extended attribute</dfn> is an annotation
that can appear on <a data-link-type="dfn" href="#dfn-definition" id="ref-for-dfn-definition⑤">definitions</a>,
types as <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types⑥">annotated types</a>, <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①⓪">interface members</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member⑧">interface mixin members</a>, <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member②">namespace members</a>, <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①④">dictionary members</a>,
and <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③①">operation</a> arguments, and
is used to control how language bindings will handle those constructs.
Extended attributes are specified with an <emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt>,
which is a square bracket enclosed, comma separated list of <emu-nt><a href="#prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt>s.</p>
   <p>The <emu-nt><a href="#prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt> grammar symbol matches nearly any sequence of tokens, however the <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③④">extended attributes</a> defined in this document only accept a more restricted syntax.
Any extended attribute encountered in an <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment②⑨">IDL fragment</a> is
matched against the following five grammar symbols to determine
which form (or forms) it is in:</p>
   <table class="vert data">
    <tbody>
     <tr>
      <th>Grammar symbol
      </th><th>Form
      </th><th>Example
     </th></tr><tr>
      <td> <emu-nt><a href="#prod-ExtendedAttributeNoArgs">ExtendedAttributeNoArgs</a></emu-nt> 
      </td><td> <dfn class="dfn-paneled" data-dfn-for="extended attribute" data-dfn-type="dfn" data-export="" id="dfn-xattr-no-arguments">takes no arguments</dfn> 
      </td><td> <code>[Replaceable]</code> 
     </td></tr><tr>
      <td> <emu-nt><a href="#prod-ExtendedAttributeArgList">ExtendedAttributeArgList</a></emu-nt> 
      </td><td> <dfn class="dfn-paneled" data-dfn-for="extended attribute" data-dfn-type="dfn" data-export="" id="dfn-xattr-argument-list">takes an argument list</dfn> 
      </td><td> <code>[Constructor(double x, double y)]</code> 
     </td></tr><tr>
      <td> <emu-nt><a href="#prod-ExtendedAttributeNamedArgList">ExtendedAttributeNamedArgList</a></emu-nt> 
      </td><td> <dfn class="dfn-paneled" data-dfn-for="extended attribute" data-dfn-type="dfn" data-export="" id="dfn-xattr-named-argument-list">takes a named argument list</dfn> 
      </td><td> <code>[NamedConstructor=Image(DOMString src)]</code> 
     </td></tr><tr>
      <td> <emu-nt><a href="#prod-ExtendedAttributeIdent">ExtendedAttributeIdent</a></emu-nt> 
      </td><td> <dfn class="dfn-paneled" data-dfn-for="extended attribute" data-dfn-type="dfn" data-export="" id="dfn-xattr-identifier">takes an identifier</dfn> 
      </td><td> <code>[PutForwards=name]</code> 
     </td></tr><tr>
      <td> <emu-nt><a href="#prod-ExtendedAttributeIdentList">ExtendedAttributeIdentList</a></emu-nt> 
      </td><td> <dfn class="dfn-paneled" data-dfn-for="extended attribute" data-dfn-type="dfn" data-export="" id="dfn-xattr-identifier-list">takes an identifier list</dfn> 
      </td><td> <code>[Exposed=(Window,Worker)]</code> 
   </td></tr></tbody></table>
   <p>This specification defines a number of extended attributes that
are applicable to the ECMAScript language binding, which are described in <a href="#es-extended-attributes">§3.3 ECMAScript-specific extended attributes</a>.
Each extended attribute definition will state which of the above
five forms are allowed.</p>
<pre class="grammar" id="prod-ExtendedAttributeList"><emu-nt><a href="#prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> ::
    <emu-t>[</emu-t> <emu-nt><a href="#prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt> <emu-nt><a href="#prod-ExtendedAttributes">ExtendedAttributes</a></emu-nt> <emu-t>]</emu-t>
    ε
</pre>
<pre class="grammar" id="prod-ExtendedAttributes"><emu-nt><a href="#prod-ExtendedAttributes">ExtendedAttributes</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-nt><a href="#prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt> <emu-nt><a href="#prod-ExtendedAttributes">ExtendedAttributes</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-ExtendedAttribute"><emu-nt><a href="#prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt> ::
    <emu-t>(</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>)</emu-t> <emu-nt><a href="#prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt>
    <emu-t>[</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>]</emu-t> <emu-nt><a href="#prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt>
    <emu-t>{</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>}</emu-t> <emu-nt><a href="#prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt>
    <emu-nt><a href="#prod-Other">Other</a></emu-nt> <emu-nt><a href="#prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt>
</pre>
<pre class="grammar" id="prod-ExtendedAttributeRest"><emu-nt><a href="#prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt> ::
    <emu-nt><a href="#prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-ExtendedAttributeInner"><emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> ::
    <emu-t>(</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>)</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt>
    <emu-t>[</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>]</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt>
    <emu-t>{</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>}</emu-t> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt>
    <emu-nt><a href="#prod-OtherOrComma">OtherOrComma</a></emu-nt> <emu-nt><a href="#prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-Other"><emu-nt><a href="#prod-Other">Other</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t>
    <emu-t class="regex"><a href="#prod-float">float</a></emu-t>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t>
    <emu-t class="regex"><a href="#prod-other">other</a></emu-t>
    <emu-t>-</emu-t>
    <emu-t>-Infinity</emu-t>
    <emu-t>.</emu-t>
    <emu-t>...</emu-t>
    <emu-t>:</emu-t>
    <emu-t>;</emu-t>
    <emu-t>&lt;</emu-t>
    <emu-t>=</emu-t>
    <emu-t>&gt;</emu-t>
    <emu-t>?</emu-t>
    <emu-t>ByteString</emu-t>
    <emu-t>DOMString</emu-t>
    <emu-t>FrozenArray</emu-t>
    <emu-t>Infinity</emu-t>
    <emu-t>NaN</emu-t>
    <emu-t>USVString</emu-t>
    <emu-t>any</emu-t>
    <emu-t>boolean</emu-t>
    <emu-t>byte</emu-t>
    <emu-t>double</emu-t>
    <emu-t>false</emu-t>
    <emu-t>float</emu-t>
    <emu-t>long</emu-t>
    <emu-t>null</emu-t>
    <emu-t>object</emu-t>
    <emu-t>octet</emu-t>
    <emu-t>or</emu-t>
    <emu-t>optional</emu-t>
    <emu-t>sequence</emu-t>
    <emu-t>short</emu-t>
    <emu-t>true</emu-t>
    <emu-t>unsigned</emu-t>
    <emu-t>void</emu-t>
    <emu-nt><a href="#prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt>
    <emu-nt><a href="#prod-BufferRelatedType">BufferRelatedType</a></emu-nt>
</pre>
<pre class="grammar" id="prod-OtherOrComma"><emu-nt><a href="#prod-OtherOrComma">OtherOrComma</a></emu-nt> ::
    <emu-nt><a href="#prod-Other">Other</a></emu-nt>
    <emu-t>,</emu-t>
</pre>
<pre class="grammar" id="prod-IdentifierList"><emu-nt><a href="#prod-IdentifierList">IdentifierList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Identifiers">Identifiers</a></emu-nt>
</pre>
<pre class="grammar" id="prod-Identifiers"><emu-nt><a href="#prod-Identifiers">Identifiers</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#prod-Identifiers">Identifiers</a></emu-nt>
    ε
</pre>
<pre class="grammar" id="prod-ExtendedAttributeNoArgs"><emu-nt><a href="#prod-ExtendedAttributeNoArgs">ExtendedAttributeNoArgs</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
</pre>
<pre class="grammar" id="prod-ExtendedAttributeArgList"><emu-nt><a href="#prod-ExtendedAttributeArgList">ExtendedAttributeArgList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>(</emu-t> <emu-nt><a href="#prod-ArgumentList">ArgumentList</a></emu-nt> <emu-t>)</emu-t>
</pre>
<pre class="grammar" id="prod-ExtendedAttributeIdent"><emu-nt><a href="#prod-ExtendedAttributeIdent">ExtendedAttributeIdent</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
</pre>
<pre class="grammar" id="prod-ExtendedAttributeIdentList"><emu-nt><a href="#prod-ExtendedAttributeIdentList">ExtendedAttributeIdentList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-t>(</emu-t> <emu-nt><a href="#prod-IdentifierList">IdentifierList</a></emu-nt> <emu-t>)</emu-t>
</pre>
<pre class="grammar" id="prod-ExtendedAttributeNamedArgList"><emu-nt><a href="#prod-ExtendedAttributeNamedArgList">ExtendedAttributeNamedArgList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>(</emu-t> <emu-nt><a href="#prod-ArgumentList">ArgumentList</a></emu-nt> <emu-t>)</emu-t>
</pre>
   <h2 class="heading settled" data-level="3" id="ecmascript-binding"><span class="secno">3. </span><span class="content">ECMAScript binding</span><a class="self-link" href="#ecmascript-binding"></a></h2>
   <p>This section describes how definitions written with the IDL defined in <a href="#idl">§2 Interface definition language</a> correspond to particular constructs
in ECMAScript, as defined by the <cite>ECMAScript Language Specification</cite> <a data-link-type="biblio" href="#biblio-ecma-262">[ECMA-262]</a>.</p>
   <p>Unless otherwise specified, objects defined in this section are ordinary objects as described in <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots" id="ref-for-sec-ordinary-object-internal-methods-and-internal-slots">ECMA-262 §9.1 Ordinary object internal methods and internal slots</a>, and if the
object is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤">function object</a>, <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects④">§9.3 Built-in function objects</a>.</p>
   <p>This section may redefine certain internal methods and/or internal slots of objects. Other
specifications may also override the definitions of any internal method and/or internal slots of a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①⓪">platform object</a> that is an instance of an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥⑥">interface</a>. These objects with changed semantics
shall be treated in accordance with the rules for exotic objects.</p>
   <p class="advisement"> As overriding internal ECMAScript object methods is a low level operation and
    can result in objects that behave differently from ordinary objects,
    this facility should not be used unless necessary
    for security or compatibility. <span class="non-normative">This is currently used to define the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmlallcollection" id="ref-for-htmlallcollection">HTMLAllCollection</a></code> and <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/history.html#location" id="ref-for-location">Location</a></code> interfaces. <a data-link-type="biblio" href="#biblio-html">[HTML]</a></span> </p>
   <p>Unless otherwise specified, exotic objects defined in this section and other specifications have the
same <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots" id="ref-for-sec-ordinary-object-internal-methods-and-internal-slots①">internal slots</a> as ordinary objects, and all of the internal methods for
which alternative definitions are not given are the same as <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots" id="ref-for-sec-ordinary-object-internal-methods-and-internal-slots②">those</a> of ordinary objects.</p>
   <p>Unless otherwise specified, the [[Extensible]] internal slot
of objects defined in this section has the value <emu-val>true</emu-val>.</p>
   <p>Unless otherwise specified, the [[Prototype]] internal slot
of objects defined in this section is <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object" id="ref-for-sec-properties-of-the-object-prototype-object①">%ObjectPrototype%</a></code>.</p>
   <p>Some objects described in this section are defined to have a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-class-string">class string</dfn>,
which is the string to include in the string returned from Object.prototype.toString.</p>
   <p>If an object has a class string <var>classString</var>, then the object must,
at the time it is created, have a property whose name is the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols⑤">@@toStringTag</a></code> symbol
with PropertyDescriptor{[[Writable]]: <emu-val>false</emu-val>,
[[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val>,
[[Value]]: <var>classString</var>}.</p>
   <p id="ecmascript-abstractop"> Algorithms in this section use the conventions described in <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-algorithm-conventions" id="ref-for-sec-algorithm-conventions">ECMA-262 §5.2
    Algorithm conventions</a>, such as the use of steps and substeps, the use of mathematical
    operations, and so on.  This section may also reference abstract operations
    and notations defined in other parts of ECMA-262. </p>
   <p>When an algorithm says to <dfn class="dfn-paneled" data-dfn-for="ECMAScript" data-dfn-type="dfn" data-local-lt="throw" data-lt="ECMAScript throw" data-noexport="" id="ecmascript-throw">throw</dfn> a <code><var>Something</var>Error</code> then this means to construct a new ECMAScript <code><var>Something</var>Error</code> object in
the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#current-realm" id="ref-for-current-realm">current Realm</a> and to throw it, just as the algorithms in ECMA-262 do.</p>
   <p>Note that algorithm steps can call in to other algorithms and abstract operations and
not explicitly handle exceptions that are thrown from them.  When an exception
is thrown by an algorithm or abstract operation and it is not explicitly
handled by the caller, then it is taken to end the algorithm and propagate out
to its caller, and so on.</p>
   <div class="example" id="example-18239b52">
    <a class="self-link" href="#example-18239b52"></a> 
    <div class="algorithm" data-algorithm="example algorithm">
     <p>Consider the following algorithm:</p>
     <ol>
      <li data-md="">
       <p>Let <var>x</var> be the ECMAScript value passed in to this algorithm.</p>
      </li><li data-md="">
       <p>Let <var>y</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tostring" id="ref-for-sec-tostring">ToString</a>(<var>x</var>).</p>
      </li><li data-md="">
       <p>Return <var>y</var>.</p>
     </li></ol>
    </div>
    <p>Since <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tostring" id="ref-for-sec-tostring①">ToString</a> can throw an exception (for example if passed the object <code>({ toString: function() { throw 1 } })</code>), and the exception is
    not handled in the above algorithm, if one is thrown then it causes this
    algorithm to end and for the exception to propagate out to its caller, if there
    is one.</p>
   </div>
   <h3 class="heading settled" data-level="3.1" id="es-environment"><span class="secno">3.1. </span><span class="content">ECMAScript environment</span><a class="self-link" href="#es-environment"></a></h3>
   <p>In an ECMAScript implementation of a given set of <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③⓪">IDL fragments</a>,
there will exist a number of ECMAScript objects that correspond to
definitions in those <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③①">IDL fragments</a>.
These objects are termed the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-initial-object">initial objects</dfn>,
and comprise the following:</p>
   <ul>
    <li data-md="">
     <p><a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①">interface objects</a></p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-legacy-callback-interface-object" id="ref-for-dfn-legacy-callback-interface-object">legacy callback interface objects</a></p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-named-constructor" id="ref-for-dfn-named-constructor①">named constructors</a></p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③">interface prototype objects</a></p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object">named properties objects</a></p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-iterator-prototype-object" id="ref-for-dfn-iterator-prototype-object">iterator prototype objects</a></p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-attribute-getter" id="ref-for-dfn-attribute-getter">attribute getters</a></p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-attribute-setter" id="ref-for-dfn-attribute-setter">attribute setters</a></p>
    </li><li data-md="">
     <p><a href="#es-operations">the function objects that correspond to operations</a></p>
    </li><li data-md="">
     <p><a href="#es-stringifier">the function objects that correspond to stringifiers</a></p>
    </li><li data-md="">
     <p><a href="#es-iterators">the function objects that correspond to iterators</a></p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-map-size-getter" id="ref-for-dfn-map-size-getter">map size getters</a></p>
   </li></ul>
   <p>Each <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm">ECMAScript global environment</a> must have its own unique set of each of
the <a data-link-type="dfn" href="#dfn-initial-object" id="ref-for-dfn-initial-object">initial objects</a>, created
before control enters any ECMAScript execution context associated with the
environment, but after the global object for that environment is created.  The [[Prototype]]s
of all initial objects in a given global environment must come from
that same global environment.</p>
   <div class="example" id="example-44ee5133">
    <a class="self-link" href="#example-44ee5133"></a> 
    <p>In an HTML user agent, multiple global environments can exist when
    multiple frames or windows are created.  Each frame or window will have
    its own set of <a data-link-type="dfn" href="#dfn-initial-object" id="ref-for-dfn-initial-object①">initial objects</a>,
    which the following HTML document demonstrates:</p>
<pre class="highlight"><c- cp="">&lt;!DOCTYPE html&gt;</c->
<c- p="">&lt;</c-><c- f="">title</c-><c- p="">&gt;</c->Different global environments<c- p="">&lt;/</c-><c- f="">title</c-><c- p="">&gt;</c->
<c- p="">&lt;</c-><c- f="">iframe</c-> <c- e="">id</c-><c- o="">=</c-><c- s="">a</c-><c- p="">&gt;&lt;/</c-><c- f="">iframe</c-><c- p="">&gt;</c->
<c- p="">&lt;</c-><c- f="">script</c-><c- p="">&gt;</c->
<c- a="">var</c-> iframe <c- o="">=</c-> document<c- p="">.</c->getElementById<c- p="">(</c-><c- u="">"a"</c-><c- p="">);</c->
<c- a="">var</c-> w <c- o="">=</c-> iframe<c- p="">.</c->contentWindow<c- p="">;</c->              <c- c1="">// The global object in the frame</c->

Object <c- o="">==</c-> w<c- p="">.</c->Object<c- p="">;</c->                        <c- c1="">// Evaluates to false, per ECMA-262</c->
Node <c- o="">==</c-> w<c- p="">.</c->Node<c- p="">;</c->                            <c- c1="">// Evaluates to false</c->
iframe <c- k="">instanceof</c-> w<c- p="">.</c->Node<c- p="">;</c->                  <c- c1="">// Evaluates to false</c->
iframe <c- k="">instanceof</c-> w<c- p="">.</c->Object<c- p="">;</c->                <c- c1="">// Evaluates to false</c->
iframe<c- p="">.</c->appendChild <c- k="">instanceof</c-> Function<c- p="">;</c->    <c- c1="">// Evaluates to true</c->
iframe<c- p="">.</c->appendChild <c- k="">instanceof</c-> w<c- p="">.</c->Function<c- p="">;</c->  <c- c1="">// Evaluates to false</c->
<c- p="">&lt;/</c-><c- f="">script</c-><c- p="">&gt;</c->
</pre>
   </div>
   <p>Unless otherwise specified, each ECMAScript global environment <dfn class="dfn-paneled" data-dfn-for="ECMAScript global environment" data-dfn-type="dfn" data-export="" id="dfn-expose">exposes</dfn> all <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥⑦">interfaces</a> that the implementation supports.  If a given ECMAScript global environment does not
expose an interface, then the requirements given in <a href="#es-interfaces">§3.6 Interfaces</a> are
not followed for that interface.</p>
   <p class="note" role="note"><span>Note:</span> This allows, for example, ECMAScript global environments for Web Workers to <a data-link-type="dfn" href="#dfn-expose" id="ref-for-dfn-expose">expose</a> different sets of supported interfaces from those exposed in environments
for Web pages.</p>
   <p>Although at the time of this writing the ECMAScript specification does not reflect this,
every ECMAScript object must have an <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-associated-realm">associated <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①">Realm</a></dfn>. The mechanisms
for associating objects with Realms are, for now, underspecified. However, we note that
in the case of <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①①">platform objects</a>, the
associated Realm is equal to the object’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-realm" id="ref-for-concept-relevant-realm">relevant Realm</a>, and
for non-exotic <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑥">function objects</a> (i.e. not <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable">callable</a> proxies, and not bound functions)
the associated Realm is equal to the value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑦">function object</a>'s [[Realm]] internal
slot.</p>
   <h3 class="heading settled" data-level="3.2" id="es-type-mapping"><span class="secno">3.2. </span><span class="content">ECMAScript type mapping</span><a class="self-link" href="#es-type-mapping"></a></h3>
   <p>This section describes how types in the IDL map to types in ECMAScript.</p>
   <p>Each sub-section below describes how values of a given IDL type are represented
in ECMAScript.  For each IDL type, it is described how ECMAScript values are <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="converted to an IDL value|converted to IDL values" id="dfn-convert-ecmascript-to-idl-value">converted to an IDL value</dfn> when passed to a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①②">platform object</a> expecting that type, and how IDL values
of that type are <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="converted to an ECMAScript value|converted to ECMAScript values" id="dfn-convert-idl-to-ecmascript-value">converted to ECMAScript values</dfn> when returned from a platform object.</p>
   <p>Note that the sub-sections and algorithms below also apply to <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types⑦">annotated types</a> created by applying
extended attributes to the types named in their headers.</p>
   <h4 class="heading settled" data-level="3.2.1" id="es-any"><span class="secno">3.2.1. </span><span class="content">any</span><a class="self-link" href="#es-any"></a></h4>
   <p>Since the IDL <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any⑨">any</a></code> type
is the union of all other IDL types, it can correspond to any
ECMAScript value type.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to any" id="es-to-any">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any①⓪">any</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>If <var>V</var> is <emu-val>undefined</emu-val>, then
return an <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object⑥">object</a></code> reference to a special object that represents
the ECMAScript <emu-val>undefined</emu-val> value.</p>
     </li><li data-md="">
      <p>If <var>V</var> is <emu-val>null</emu-val>, then
return the <emu-val>null</emu-val> <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object⑦">object?</a></code> reference.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values">Type</a>(<var>V</var>) is Boolean, then
return the <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean⑧">boolean</a></code> value that represents the same truth value.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①">Type</a>(<var>V</var>) is Number, then
return the result of <a href="#es-to-unrestricted-double">converting</a> <var>V</var> to an <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double⑧">unrestricted double</a></code>.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②">Type</a>(<var>V</var>) is String, then
return the result of <a href="#es-DOMString">converting</a> <var>V</var> to a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③⑦">DOMString</a></code>.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③">Type</a>(<var>V</var>) is Symbol, then
return the result of <a href="#es-symbol">converting</a> <var>V</var> to a <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol③">symbol</a></code>.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values④">Type</a>(<var>V</var>) is Object, then
return an IDL <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object⑧">object</a></code> value that references <var>V</var>.</p>
    </li></ol>
   </div>
   <p id="any-to-es"> An IDL <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any①①">any</a></code> value is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value">converted to an ECMAScript value</a> as follows.  If the value is an <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object⑨">object</a></code> reference to a special object that represents an ECMAScript <emu-val>undefined</emu-val> value, then it is converted to the ECMAScript <emu-val>undefined</emu-val> value.  Otherwise,
    the rules for converting the <a data-link-type="dfn" href="#dfn-specific-type" id="ref-for-dfn-specific-type②">specific type</a> of the IDL <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any①②">any</a></code> value
    as described in the remainder of this section are performed. </p>
   <h4 class="heading settled" data-level="3.2.2" id="es-void"><span class="secno">3.2.2. </span><span class="content">void</span><a class="self-link" href="#es-void"></a></h4>
   <p>The only place that the <code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void②">void</a></code> type may appear
in IDL is as the <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type②">return type</a> of an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③②">operation</a>.  Functions on <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①③">platform objects</a> that implement an operation whose IDL specifies a <code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void③">void</a></code> return type must return the <emu-val>undefined</emu-val> value.</p>
   <p>ECMAScript functions that implement an operation whose IDL
specifies a <code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void④">void</a></code> return type
may return any value, which will be discarded.</p>
   <h4 class="heading settled" data-level="3.2.3" id="es-boolean"><span class="secno">3.2.3. </span><span class="content">boolean</span><a class="self-link" href="#es-boolean"></a></h4>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to boolean" id="es-to-boolean">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean⑨">boolean</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be the result of computing <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toboolean" id="ref-for-sec-toboolean">ToBoolean</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①⓪">boolean</a></code> value that is the one that
represents the same truth value as the
ECMAScript Boolean value <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="boolean-to-es"> The IDL <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①①">boolean</a></code> value <code class="idl">true</code> is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①">converted</a> to
    the ECMAScript <emu-val>true</emu-val> value and the IDL <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①②">boolean</a></code> value <code class="idl">false</code> is converted to the ECMAScript <emu-val>false</emu-val> value. </p>
   <h4 class="heading settled" data-level="3.2.4" id="es-integer-types"><span class="secno">3.2.4. </span><span class="content">Integer types</span><a class="self-link" href="#es-integer-types"></a></h4>
   <p>Mathematical operations used in this section,
including those defined in <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-algorithm-conventions" id="ref-for-sec-algorithm-conventions①">ECMA-262 §5.2 Algorithm conventions</a>,
are to be understood as computing exact mathematical results
on mathematical real numbers.</p>
   <p>In effect, where <var>x</var> is a Number value,
“operating on <var>x</var>” is shorthand for
“operating on the mathematical real number that represents the same numeric value as <var>x</var>”.</p>
   <h5 class="heading settled" data-level="3.2.4.1" id="es-byte"><span class="secno">3.2.4.1. </span><span class="content">byte</span><a class="self-link" href="#es-byte"></a></h5>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to byte" id="es-to-byte">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte⑤">byte</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands">?</a> <a data-link-type="abstract-op" href="#abstract-opdef-converttoint" id="ref-for-abstract-opdef-converttoint">ConvertToInt</a>(<var>V</var>, 8, "<code>signed</code>").</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte⑥">byte</a></code> value that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="byte-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte⑦">byte</a></code> value to an ECMAScript
    value is a Number that represents
    the same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-byte" id="ref-for-idl-byte⑧">byte</a></code> value.
    The Number value will be an integer in the range [−128, 127]. </p>
   <h5 class="heading settled" data-level="3.2.4.2" id="es-octet"><span class="secno">3.2.4.2. </span><span class="content">octet</span><a class="self-link" href="#es-octet"></a></h5>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to octet" id="es-to-octet">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet⑤">octet</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①">?</a> <a data-link-type="abstract-op" href="#abstract-opdef-converttoint" id="ref-for-abstract-opdef-converttoint①">ConvertToInt</a>(<var>V</var>, 8, "<code>unsigned</code>").</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet⑥">octet</a></code> value that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="octet-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet⑦">octet</a></code> value to an ECMAScript
    value is a Number that represents
    the same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet⑧">octet</a></code> value.
    The Number value will be an integer in the range [0, 255]. </p>
   <h5 class="heading settled" data-level="3.2.4.3" id="es-short"><span class="secno">3.2.4.3. </span><span class="content">short</span><a class="self-link" href="#es-short"></a></h5>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to short" id="es-to-short">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short④">short</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②">?</a> <a data-link-type="abstract-op" href="#abstract-opdef-converttoint" id="ref-for-abstract-opdef-converttoint②">ConvertToInt</a>(<var>V</var>, 16, "<code>signed</code>").</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short⑤">short</a></code> value that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="short-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short⑥">short</a></code> value to an ECMAScript
    value is a Number that represents the
    same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short⑦">short</a></code> value.
    The Number value will be an integer in the range [−32768, 32767]. </p>
   <h5 class="heading settled" data-level="3.2.4.4" id="es-unsigned-short"><span class="secno">3.2.4.4. </span><span class="content">unsigned short</span><a class="self-link" href="#es-unsigned-short"></a></h5>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to unsigned short" id="es-to-unsigned-short">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short⑤">unsigned short</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③">?</a> <a data-link-type="abstract-op" href="#abstract-opdef-converttoint" id="ref-for-abstract-opdef-converttoint③">ConvertToInt</a>(<var>V</var>, 16, "<code>unsigned</code>").</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-short" id="ref-for-idl-short⑧">short</a></code> value that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="unsigned-short-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short⑥">unsigned short</a></code> value to an ECMAScript
    value is a Number that
    represents the same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short⑦">unsigned short</a></code> value.
    The Number value will be an integer in the range [0, 65535]. </p>
   <h5 class="heading settled" data-level="3.2.4.5" id="es-long"><span class="secno">3.2.4.5. </span><span class="content">long</span><a class="self-link" href="#es-long"></a></h5>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to long" id="es-to-long">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①③">long</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④">?</a> <a data-link-type="abstract-op" href="#abstract-opdef-converttoint" id="ref-for-abstract-opdef-converttoint④">ConvertToInt</a>(<var>V</var>, 32, "<code>signed</code>").</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①④">long</a></code> value that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="long-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑥">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①⑤">long</a></code> value to an ECMAScript
    value is a Number that
    represents the same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①⑥">long</a></code> value.
    The Number value will be an integer in the range [−2147483648, 2147483647]. </p>
   <h5 class="heading settled" data-level="3.2.4.6" id="es-unsigned-long"><span class="secno">3.2.4.6. </span><span class="content">unsigned long</span><a class="self-link" href="#es-unsigned-long"></a></h5>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to unsigned long" id="es-to-unsigned-long">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑦">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long⑨">unsigned long</a></code> value  by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤">?</a> <a data-link-type="abstract-op" href="#abstract-opdef-converttoint" id="ref-for-abstract-opdef-converttoint⑤">ConvertToInt</a>(<var>V</var>, 32, "<code>unsigned</code>").</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①⑦">long</a></code> value that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="unsigned-long-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑦">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long①⓪">unsigned long</a></code> value to an ECMAScript
    value is a Number that
    represents the same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long①①">unsigned long</a></code> value.
    The Number value will be an integer in the range [0, 4294967295]. </p>
   <h5 class="heading settled" data-level="3.2.4.7" id="es-long-long"><span class="secno">3.2.4.7. </span><span class="content">long long</span><a class="self-link" href="#es-long-long"></a></h5>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to long long" id="es-to-long-long">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑧">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long④">long long</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥">?</a> <a data-link-type="abstract-op" href="#abstract-opdef-converttoint" id="ref-for-abstract-opdef-converttoint⑥">ConvertToInt</a>(<var>V</var>, 64, "<code>signed</code>").</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①⑧">long</a></code> value that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="long-long-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑧">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long⑤">long long</a></code> value to an ECMAScript
    value is a Number value that
    represents the closest numeric value to the <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long⑥">long long</a></code>,
    choosing the numeric value with an <em>even significand</em> if there are
    two <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type" id="ref-for-sec-ecmascript-language-types-number-type">equally close values</a>.
    If the <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long⑦">long long</a></code> is in the range
    [−2<sup>53</sup> + 1, 2<sup>53</sup> − 1], then the Number
    will be able to represent exactly the same value as the <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long⑧">long long</a></code>. </p>
   <h5 class="heading settled" data-level="3.2.4.8" id="es-unsigned-long-long"><span class="secno">3.2.4.8. </span><span class="content">unsigned long long</span><a class="self-link" href="#es-unsigned-long-long"></a></h5>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to unsigned long long" id="es-to-unsigned-long-long">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑨">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long④">unsigned long long</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦">?</a> <a data-link-type="abstract-op" href="#abstract-opdef-converttoint" id="ref-for-abstract-opdef-converttoint⑦">ConvertToInt</a>(<var>V</var>, 64, "<code>unsigned</code>").</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-long" id="ref-for-idl-long①⑨">long</a></code> value that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="unsigned-long-long-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑨">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long⑤">unsigned long long</a></code> value to an ECMAScript
    value is a Number value that
    represents the closest numeric value to the <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long⑥">unsigned long long</a></code>,
    choosing the numeric value with an <em>even significand</em> if there are
    two <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type" id="ref-for-sec-ecmascript-language-types-number-type①">equally close values</a>.
    If the <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long⑦">unsigned long long</a></code> is less than or equal to 2<sup>53</sup> − 1,
    then the Number will be able to
    represent exactly the same value as the <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long⑧">unsigned long long</a></code>. </p>
   <h5 class="heading settled" data-level="3.2.4.9" id="es-integer-types-abstract-ops"><span class="secno">3.2.4.9. </span><span class="content">Abstract operations</span><a class="self-link" href="#es-integer-types-abstract-ops"></a></h5>
   <div class="algorithm" data-algorithm="IntegerPart">
    <p><dfn class="dfn-paneled" data-dfn-type="abstract-op" data-export="" data-lt="IntegerPart" id="abstract-opdef-integerpart">IntegerPart(<var>n</var>)</dfn>:</p>
    <ol>
     <li data-md="">
      <p>Let <var>r</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#eqn-floor" id="ref-for-eqn-floor">floor</a>(<a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#eqn-abs" id="ref-for-eqn-abs">abs</a>(<var>n</var>)).</p>
     </li><li data-md="">
      <p>If <var>n</var> &lt; 0, then return -1 × <var>r</var>.</p>
     </li><li data-md="">
      <p>Otherwise, return <var>r</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="ConvertToInt">
    <p><dfn class="dfn-paneled" data-dfn-type="abstract-op" data-export="" data-lt="ConvertToInt" id="abstract-opdef-converttoint">ConvertToInt(<var>V</var>, <var>bitLength</var>, <var>signedness</var>)</dfn>:</p>
    <ol>
     <li data-md="">
      <p>If <var>bitLength</var> is 64, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>upperBound</var> be 2<sup>53</sup> − 1.</p>
       </li><li data-md="">
        <p>If <var>signedness</var> is "<code>unsigned</code>", then let <var>lowerBound</var> be 0.</p>
       </li><li data-md="">
        <p>Otherwise let <var>lowerBound</var> be −2<sup>53</sup> + 1.</p>
        <p class="note" role="note"><span>Note:</span> this ensures <code class="idl"><a data-link-type="idl" href="#idl-long-long" id="ref-for-idl-long-long⑨">long long</a></code> types <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with④">associated with</a> [<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange①">EnforceRange</a></code>] or
[<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp②">Clamp</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③⑤">extended attributes</a> are representable in ECMAScript’s <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type" id="ref-for-sec-ecmascript-language-types-number-type②">Number type</a> as unambiguous integers.</p>
      </li></ol>
     </li><li data-md="">
      <p>Otherwise, if <var>signedness</var> is "<code>unsigned</code>", then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>lowerBound</var> be 0.</p>
       </li><li data-md="">
        <p>Let <var>upperBound</var> be 2<sup><var>bitLength</var></sup> − 1.</p>
      </li></ol>
     </li><li data-md="">
      <p>Otherwise:</p>
      <ol>
       <li data-md="">
        <p>Let <var>lowerBound</var> be -2<sup><var>bitLength</var> − 1</sup>.</p>
       </li><li data-md="">
        <p>Let <var>upperBound</var> be 2<sup><var>bitLength</var> − 1</sup> − 1.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tonumber" id="ref-for-sec-tonumber">ToNumber</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>If <var>x</var> is −0, then set <var>x</var> to +0.</p>
     </li><li data-md="">
      <p>If the conversion is to an IDL type <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with⑤">associated with</a> the [<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange②">EnforceRange</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③⑥">extended attribute</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>x</var> is <emu-val>NaN</emu-val>, +∞, or −∞,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Set <var>x</var> to <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑨">!</a> <a data-link-type="abstract-op" href="#abstract-opdef-integerpart" id="ref-for-abstract-opdef-integerpart">IntegerPart</a>(<var>x</var>).</p>
       </li><li data-md="">
        <p>If <var>x</var> &lt; <var>lowerBound</var> or <var>x</var> &gt; <var>upperBound</var>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Return <var>x</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>x</var> is not <emu-val>NaN</emu-val> and the conversion is to an IDL type <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with⑥">associated with</a> the [<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp③">Clamp</a></code>] extended attribute,
then:</p>
      <ol>
       <li data-md="">
        <p>Set <var>x</var> to <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#eqn-min" id="ref-for-eqn-min">min</a>(<a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#eqn-max" id="ref-for-eqn-max①">max</a>(<var>x</var>, <var>lowerBound</var>), <var>upperBound</var>).</p>
       </li><li data-md="">
        <p>Round <var>x</var> to the nearest integer, choosing the even integer if it lies halfway between two,
and choosing +0 rather than −0.</p>
       </li><li data-md="">
        <p>Return <var>x</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>x</var> is <emu-val>NaN</emu-val>, +0, +∞, or −∞,
then return +0.</p>
     </li><li data-md="">
      <p>Set <var>x</var> to <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①⓪">!</a> <a data-link-type="abstract-op" href="#abstract-opdef-integerpart" id="ref-for-abstract-opdef-integerpart①">IntegerPart</a>(<var>x</var>).</p>
     </li><li data-md="">
      <p>Set <var>x</var> to <var>x</var> <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#eqn-modulo" id="ref-for-eqn-modulo">modulo</a> 2<sup><var>bitLength</var></sup>.</p>
     </li><li data-md="">
      <p>If <var>signedness</var> is "<code>signed</code>" and <var>x</var> ≥ 2<sup><var>bitLength</var> − 1</sup>,
then return <var>x</var> − 2<sup><var>bitLength</var></sup>.</p>
     </li><li data-md="">
      <p>Otherwise, return <var>x</var>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.2.5" id="es-float"><span class="secno">3.2.5. </span><span class="content">float</span><a class="self-link" href="#es-float"></a></h4>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to float" id="es-to-float">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①⓪">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float⑦">float</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①①">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tonumber" id="ref-for-sec-tonumber①">ToNumber</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>If <var>x</var> is <emu-val>NaN</emu-val>, +∞, or −∞,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>S</var> be the set of finite IEEE 754 single-precision floating
point values except −0, but with two special values added: 2<sup>128</sup> and
−2<sup>128</sup>.</p>
     </li><li data-md="">
      <p>Let <var>y</var> be the number in <var>S</var> that is closest
to <var>x</var>, selecting the number with an <em>even significand</em> if there are two <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type" id="ref-for-sec-ecmascript-language-types-number-type③">equally close values</a>.
(The two special values 2<sup>128</sup> and −2<sup>128</sup> are considered to have even significands for this purpose.)</p>
     </li><li data-md="">
      <p>If <var>y</var> is 2<sup>128</sup> or −2<sup>128</sup>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>If <var>y</var> is +0 and <var>x</var> is negative, return −0.</p>
     </li><li data-md="">
      <p>Return <var>y</var>.</p>
    </li></ol>
   </div>
   <p id="float-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①⓪">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float⑧">float</a></code> value to an ECMAScript
    value is the Number value that represents the same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-float" id="ref-for-idl-float⑨">float</a></code> value. </p>
   <h4 class="heading settled" data-level="3.2.6" id="es-unrestricted-float"><span class="secno">3.2.6. </span><span class="content">unrestricted float</span><a class="self-link" href="#es-unrestricted-float"></a></h4>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to unrestricted float" id="es-to-unrestricted-float">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①①">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float⑧">unrestricted float</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①②">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tonumber" id="ref-for-sec-tonumber②">ToNumber</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>If <var>x</var> is <emu-val>NaN</emu-val>, then return the IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float⑨">unrestricted float</a></code> value that represents the IEEE 754 NaN value with the bit pattern 0x7fc00000 <a data-link-type="biblio" href="#biblio-ieee-754">[IEEE-754]</a>.</p>
     </li><li data-md="">
      <p>Let <var>S</var> be the set of finite IEEE 754 single-precision floating
point values except −0, but with two special values added: 2<sup>128</sup> and
−2<sup>128</sup>.</p>
     </li><li data-md="">
      <p>Let <var>y</var> be the number in <var>S</var> that is closest
to <var>x</var>, selecting the number with an <em>even significand</em> if there are two <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type" id="ref-for-sec-ecmascript-language-types-number-type④">equally close values</a>.
(The two special values 2<sup>128</sup> and −2<sup>128</sup> are considered to have even significands for this purpose.)</p>
     </li><li data-md="">
      <p>If <var>y</var> is 2<sup>128</sup>, return +∞.</p>
     </li><li data-md="">
      <p>If <var>y</var> is −2<sup>128</sup>, return −∞.</p>
     </li><li data-md="">
      <p>If <var>y</var> is +0 and <var>x</var> is negative, return −0.</p>
     </li><li data-md="">
      <p>Return <var>y</var>.</p>
    </li></ol>
   </div>
   <p class="note" role="note"><span>Note:</span> Since there is only a single ECMAScript <emu-val>NaN</emu-val> value,
it must be canonicalized to a particular single precision IEEE 754 NaN value.  The NaN value
mentioned above is chosen simply because it is the quiet NaN with the lowest
value when its bit pattern is interpreted as an unsigned 32 bit integer.</p>
   <div class="algorithm" data-algorithm="convert an unrestricted float to an ECMAScript value" id="unrestricted-float-to-es">
    <p>The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①①">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float①⓪">unrestricted float</a></code> value to an ECMAScript
    value is a Number:</p>
    <ol>
     <li data-md="">
      <p>If the IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float①①">unrestricted float</a></code> value is a NaN,
then the Number value is <emu-val>NaN</emu-val>.</p>
     </li><li data-md="">
      <p>Otherwise, the Number value is
the one that represents the same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-float" id="ref-for-idl-unrestricted-float①②">unrestricted float</a></code> value.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.2.7" id="es-double"><span class="secno">3.2.7. </span><span class="content">double</span><a class="self-link" href="#es-double"></a></h4>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to double" id="es-to-double">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①②">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double①①">double</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①③">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tonumber" id="ref-for-sec-tonumber③">ToNumber</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>If <var>x</var> is <emu-val>NaN</emu-val>, +∞, or −∞,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double①②">double</a></code> value
that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="double-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①②">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double①③">double</a></code> value to an ECMAScript
    value is the Number value that represents the
    same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-double" id="ref-for-idl-double①④">double</a></code> value. </p>
   <h4 class="heading settled" data-level="3.2.8" id="es-unrestricted-double"><span class="secno">3.2.8. </span><span class="content">unrestricted double</span><a class="self-link" href="#es-unrestricted-double"></a></h4>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to unrestricted double" id="es-to-unrestricted-double">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①③">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double⑨">unrestricted double</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①④">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tonumber" id="ref-for-sec-tonumber④">ToNumber</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>If <var>x</var> is <emu-val>NaN</emu-val>, then
return the IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double①⓪">unrestricted double</a></code> value that represents
the IEEE 754 NaN value with the bit pattern 0x7ff8000000000000 <a data-link-type="biblio" href="#biblio-ieee-754">[IEEE-754]</a>.</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double①①">unrestricted double</a></code> value
that represents the same numeric value as <var>x</var>.</p>
    </li></ol>
   </div>
   <p class="note" role="note"><span>Note:</span> Since there is only a single ECMAScript <emu-val>NaN</emu-val> value,
it must be canonicalized to a particular double precision IEEE 754 NaN value.  The NaN value
mentioned above is chosen simply because it is the quiet NaN with the lowest
value when its bit pattern is interpreted as an unsigned 64 bit integer.</p>
   <div class="algorithm" data-algorithm="convert an unrestricted double to an ECMAScript value" id="unrestricted-double-to-es">
    <p>The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①③">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double①②">unrestricted double</a></code> value to an ECMAScript
    value is a Number:</p>
    <ol>
     <li data-md="">
      <p>If the IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double①③">unrestricted double</a></code> value is a NaN,
then the Number value is <emu-val>NaN</emu-val>.</p>
     </li><li data-md="">
      <p>Otherwise, the Number value is
the one that represents the same numeric value as the IDL <code class="idl"><a data-link-type="idl" href="#idl-unrestricted-double" id="ref-for-idl-unrestricted-double①④">unrestricted double</a></code> value.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.2.9" id="es-DOMString"><span class="secno">3.2.9. </span><span class="content">DOMString</span><a class="self-link" href="#es-DOMString"></a></h4>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to DOMString" id="es-to-DOMString">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①④">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③⑧">DOMString</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>If <var>V</var> is <emu-val>null</emu-val> and the conversion is to an IDL type <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with⑦">associated with</a> the [<code class="idl"><a data-link-type="idl" href="#TreatNullAs" id="ref-for-TreatNullAs①">TreatNullAs</a></code>] extended
attribute, then return the <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString③⑨">DOMString</a></code> value that represents the empty string.</p>
     </li><li data-md="">
      <p>Let <var>x</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tostring" id="ref-for-sec-tostring②">ToString</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString④⓪">DOMString</a></code> value that represents the same sequence of code units as the one the ECMAScript String value <var>x</var> represents.</p>
    </li></ol>
   </div>
   <p id="DOMString-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①④">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString④①">DOMString</a></code> value to an ECMAScript
    value is the String
    value that represents the same sequence of <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit⑤">code units</a> that the
    IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString④②">DOMString</a></code> represents. </p>
   <h4 class="heading settled" data-level="3.2.10" id="es-ByteString"><span class="secno">3.2.10. </span><span class="content">ByteString</span><a class="self-link" href="#es-ByteString"></a></h4>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to ByteString" id="es-to-ByteString">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①⑤">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString⑨">ByteString</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>x</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tostring" id="ref-for-sec-tostring③">ToString</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>If the value of any <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-string-type" id="ref-for-sec-ecmascript-language-types-string-type">element</a> of <var>x</var> is greater than 255, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return an IDL <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString①⓪">ByteString</a></code> value
whose length is the length of <var>x</var>, and where the value of each element is
the value of the corresponding element of <var>x</var>.</p>
    </li></ol>
   </div>
   <p id="ByteString-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①⑤">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString①①">ByteString</a></code> value to an ECMAScript
    value is a String
    value whose length is the length of the <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString①②">ByteString</a></code>,
    and the value of each <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-string-type" id="ref-for-sec-ecmascript-language-types-string-type①">element</a> of which is the value of the corresponding element
    of the <code class="idl"><a data-link-type="idl" href="#idl-ByteString" id="ref-for-idl-ByteString①③">ByteString</a></code>. </p>
   <h4 class="heading settled" data-level="3.2.11" id="es-USVString"><span class="secno">3.2.11. </span><span class="content">USVString</span><a class="self-link" href="#es-USVString"></a></h4>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to USVString" id="es-to-USVString">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①⑥">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString①⓪">USVString</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>string</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①⑦">converting</a> <var>V</var> to a <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString④③">DOMString</a></code>.</p>
     </li><li data-md="">
      <p>Return an IDL <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString①①">USVString</a></code> value that is the result of <a data-link-type="dfn" href="#dfn-obtain-unicode" id="ref-for-dfn-obtain-unicode">converting</a> <var>string</var> to a sequence of <a data-link-type="dfn" href="http://www.unicode.org/glossary/#unicode_scalar_value" id="ref-for-unicode_scalar_value③">Unicode scalar values</a>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="convert an USVString to an ECMAScript value" id="USVString-to-es">
    <p>An IDL <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString①②">USVString</a></code> value is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①⑥">converted</a> to an ECMAScript value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>scalarValues</var> be the sequence of <a data-link-type="dfn" href="http://www.unicode.org/glossary/#unicode_scalar_value" id="ref-for-unicode_scalar_value④">Unicode scalar values</a> the <code class="idl"><a data-link-type="idl" href="#idl-USVString" id="ref-for-idl-USVString①③">USVString</a></code> represents.</p>
     </li><li data-md="">
      <p>Let <var>string</var> be the sequence of <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit⑥">code units</a> that results from encoding <var>scalarValues</var> in UTF-16.</p>
     </li><li data-md="">
      <p>Return the String value that represents the same sequence of <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit⑦">code units</a> as <var>string</var>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.2.12" id="es-object"><span class="secno">3.2.12. </span><span class="content">object</span><a class="self-link" href="#es-object"></a></h4>
   <p>IDL <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①⓪">object</a></code> values are represented by ECMAScript Object values.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to object" id="es-to-object">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①⑧">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①①">object</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values⑤">Type</a>(<var>V</var>) is not Object, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑥">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①②">object</a></code> value that is a reference to the same object as <var>V</var>.</p>
    </li></ol>
   </div>
   <p id="object-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①⑦">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①③">object</a></code> value to an ECMAScript
    value is the Object value that represents a reference to the same object that the
    IDL <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①④">object</a></code> represents. </p>
   <h4 class="heading settled" data-level="3.2.13" id="es-symbol"><span class="secno">3.2.13. </span><span class="content">symbol</span><a class="self-link" href="#es-symbol"></a></h4>
   <p>IDL <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol④">symbol</a></code> values are represented by ECMAScript Symbol values.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to a symbol" id="es-to-symbol">
     An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value①⑨">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol⑤">symbol</a></code> value
    by running the following algorithm: 
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values⑥">Type</a>(<var>V</var>) is not Symbol, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑦">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑦">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol⑥">symbol</a></code> value that is a reference to the same symbol as <var>V</var>.</p>
    </li></ol>
   </div>
   <p id="symbol-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①⑧">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol⑦">symbol</a></code> value to an
    ECMAScript value is the Symbol value that represents a reference to the same
    symbol that the IDL <code class="idl"><a data-link-type="idl" href="#idl-symbol" id="ref-for-idl-symbol⑧">symbol</a></code> represents. </p>
   <h4 class="heading settled" data-level="3.2.14" id="es-interface"><span class="secno">3.2.14. </span><span class="content">Interface types</span><a class="self-link" href="#es-interface"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface⑥">interface type</a> values are represented by ECMAScript Object values (including <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑧">function objects</a>).</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to interface" id="es-to-interface">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②⓪">converted</a> to an IDL <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface⑦">interface type</a> value by running the following algorithm (where <var>I</var> is the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥⑧">interface</a>):</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values⑦">Type</a>(<var>V</var>) is not Object, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑧">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑧">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>If <var>V</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①④">platform object</a> that implements <var>I</var>, then return the IDL <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface⑧">interface type</a> value that represents a reference to that platform object.</p>
     </li><li data-md="">
      <p>If <var>V</var> is a <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object⑥">user object</a> that is considered to implement <var>I</var> according to the rules in <a href="#es-user-objects">§3.9 User objects implementing callback interfaces</a>, then return the IDL <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface⑨">interface type</a> value that represents a reference to that
user object, with the <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#incumbent-settings-object" id="ref-for-incumbent-settings-object②">incumbent settings object</a> as the <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context④">callback context</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑨">Throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑨">TypeError</a></code>.</p>
    </li></ol>
   </div>
   <p id="interface-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value①⑨">converting</a> an IDL <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①⓪">interface type</a> value to an ECMAScript value is the Object
    value that represents a reference to the same object that the IDL <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①①">interface type</a> value represents. </p>
   <h4 class="heading settled" data-level="3.2.15" id="es-dictionary"><span class="secno">3.2.15. </span><span class="content">Dictionary types</span><a class="self-link" href="#es-dictionary"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary⑨">dictionary type</a> values are represented
by ECMAScript Object values.  Properties on
the object (or its prototype chain) correspond to <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①⑤">dictionary members</a>.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to dictionary" id="es-to-dictionary">
    <p>An ECMAScript value <var>esDict</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②①">converted</a> to an IDL <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary①⓪">dictionary type</a> value by
    running the following algorithm (where <var>D</var> is the <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary①①">dictionary type</a>):</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values⑧">Type</a>(<var>esDict</var>) is not Undefined, Null or Object, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①⓪">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①⓪">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>idlDict</var> be an empty dictionary value of type <var>D</var>;
every <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①⑥">dictionary member</a> is initially considered to be <a data-link-type="dfn" href="#dfn-present" id="ref-for-dfn-present④">not present</a>.</p>
     </li><li data-md="">
      <p>Let <var>dictionaries</var> be a list consisting of <var>D</var> and all of <var>D</var>’s <a data-link-type="dfn" href="#dfn-inherited-dictionaries" id="ref-for-dfn-inherited-dictionaries④">inherited dictionaries</a>,
in order from least to most derived.</p>
     </li><li data-md="">
      <p>For each dictionary <var>dictionary</var> in <var>dictionaries</var>, in order:</p>
      <ol>
       <li data-md="">
        <p>For each dictionary member <var>member</var> declared on <var>dictionary</var>, in lexicographical order:</p>
        <ol>
         <li data-md="">
          <p>Let <var>key</var> be the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤②">identifier</a> of <var>member</var>.</p>
         </li><li data-md="">
          <p>Let <var>esMemberValue</var> be an ECMAScript value, depending on <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values⑨">Type</a>(<var>esDict</var>):</p>
          <dl class="switch">
           <dt data-md="">Undefined
           </dt><dt data-md="">Null
           </dt><dd data-md="">
            <p><emu-val>undefined</emu-val></p>
           </dd><dt data-md="">anything else
           </dt><dd data-md="">
            <p><a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①⑤">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p">Get</a>(<var>esDict</var>, <var>key</var>)</p>
          </dd></dl>
         </li><li data-md="">
          <p>If <var>esMemberValue</var> is not <emu-val>undefined</emu-val>, then:</p>
          <ol>
           <li data-md="">
            <p>Let <var>idlMemberValue</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②②">converting</a> <var>esMemberValue</var> to an IDL value whose type is the type <var>member</var> is declared to be of.</p>
           </li><li data-md="">
            <p>Set the dictionary member on <var>idlDict</var> with key name <var>key</var> to the value <var>idlMemberValue</var>.  This dictionary member is considered to be <a data-link-type="dfn" href="#dfn-present" id="ref-for-dfn-present⑤">present</a>.</p>
          </li></ol>
         </li><li data-md="">
          <p>Otherwise, if <var>esMemberValue</var> is <emu-val>undefined</emu-val> but <var>member</var> has a <a data-link-type="dfn" href="#dfn-dictionary-member-default-value" id="ref-for-dfn-dictionary-member-default-value⑧">default value</a>, then:</p>
          <ol>
           <li data-md="">
            <p>Let <var>idlMemberValue</var> be <var>member</var>’s default value.</p>
           </li><li data-md="">
            <p>Set the dictionary member on <var>idlDict</var> with key name <var>key</var> to the value <var>idlMemberValue</var>.  This dictionary member is considered to be <a data-link-type="dfn" href="#dfn-present" id="ref-for-dfn-present⑥">present</a>.</p>
          </li></ol>
         </li><li data-md="">
          <p>Otherwise, if <var>esMemberValue</var> is <emu-val>undefined</emu-val> and <var>member</var> is a <a data-link-type="dfn" href="#required-dictionary-member" id="ref-for-required-dictionary-member②">required dictionary member</a>, then throw a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①①">TypeError</a></code>.</p>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>idlDict</var>.</p>
    </li></ol>
   </div>
   <p class="note" role="note"><span>Note:</span> The order that <a data-link-type="dfn" href="#dfn-dictionary-member" id="ref-for-dfn-dictionary-member①⑦">dictionary members</a> are looked
up on the ECMAScript object are not necessarily the same as the object’s property enumeration order.</p>
   <div class="algorithm" data-algorithm="convert a dictionary to an ECMAScript value" id="dictionary-to-es">
    <p>An IDL dictionary value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②⓪">converted</a> to an ECMAScript Object value by
    running the following algorithm (where <var>D</var> is the <a data-link-type="dfn" href="#dfn-dictionary" id="ref-for-dfn-dictionary①⓪">dictionary</a>):</p>
    <ol>
     <li data-md="">
      <p>Let <var>O</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①⑥">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-objectcreate" id="ref-for-sec-objectcreate">ObjectCreate</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object" id="ref-for-sec-properties-of-the-object-prototype-object②">%ObjectPrototype%</a></code>).</p>
     </li><li data-md="">
      <p>Let <var>dictionaries</var> be a list consisting of <var>D</var> and all of <var>D</var>’s <a data-link-type="dfn" href="#dfn-inherited-dictionaries" id="ref-for-dfn-inherited-dictionaries⑤">inherited dictionaries</a>,
in order from least to most derived.</p>
     </li><li data-md="">
      <p>For each dictionary <var>dictionary</var> in <var>dictionaries</var>, in order:</p>
      <ol>
       <li data-md="">
        <p>For each dictionary member <var>member</var> declared on <var>dictionary</var>, in lexicographical order:</p>
        <ol>
         <li data-md="">
          <p>Let <var>key</var> be the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤③">identifier</a> of <var>member</var>.</p>
         </li><li data-md="">
          <p>If the dictionary member named <var>key</var> is <a data-link-type="dfn" href="#dfn-present" id="ref-for-dfn-present⑦">present</a> in <var>V</var>, then:</p>
          <ol>
           <li data-md="">
            <p>Let <var>idlValue</var> be the value of <var>member</var> on <var>V</var>.</p>
           </li><li data-md="">
            <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②①">converting</a> <var>idlValue</var> to an ECMAScript value.</p>
           </li><li data-md="">
            <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①⑦">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createdataproperty" id="ref-for-sec-createdataproperty">CreateDataProperty</a>(<var>O</var>, <var>key</var>, <var>value</var>).</p>
          </li></ol>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>O</var>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.2.16" id="es-enumeration"><span class="secno">3.2.16. </span><span class="content">Enumeration types</span><a class="self-link" href="#es-enumeration"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#idl-enumeration" id="ref-for-idl-enumeration①">enumeration types</a> are represented by ECMAScript String
values.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to enumeration" id="es-to-enumeration">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②③">converted</a> to an IDL <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①⑤">enumeration type</a> value as follows
    (where <var>E</var> is the <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①⑥">enumeration</a>):</p>
    <ol>
     <li data-md="">
      <p>Let <var>S</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tostring" id="ref-for-sec-tostring④">ToString</a>(<var>V</var>).</p>
     </li><li data-md="">
      <p>If <var>S</var> is not one of <var>E</var>’s <a data-link-type="dfn" href="#dfn-enumeration-value" id="ref-for-dfn-enumeration-value④">enumeration values</a>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①①">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①②">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the enumeration value of type <var>E</var> that is equal to <var>S</var>.</p>
    </li></ol>
   </div>
   <p id="enumeration-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②②">converting</a> an IDL <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①⑦">enumeration type</a> value to an ECMAScript
    value is the String
    value that represents the same sequence of <a data-link-type="dfn" href="#dfn-code-unit" id="ref-for-dfn-code-unit⑧">code units</a> as
    the <a data-link-type="dfn" href="#dfn-enumeration-value" id="ref-for-dfn-enumeration-value⑤">enumeration value</a>. </p>
   <h4 class="heading settled" data-level="3.2.17" id="es-callback-function"><span class="secno">3.2.17. </span><span class="content">Callback function types</span><a class="self-link" href="#es-callback-function"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#idl-callback-function" id="ref-for-idl-callback-function">callback function types</a> are represented by ECMAScript <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑨">function objects</a>, except in the
[<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull①">TreatNonObjectAsNull</a></code>] case, when they can be any object.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to callback function" id="es-to-callback-function">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②④">converted</a> to an IDL <a data-link-type="dfn" href="#idl-callback-function" id="ref-for-idl-callback-function①">callback function type</a> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>If the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable①">IsCallable</a>(<var>V</var>) is <emu-val>false</emu-val> and the conversion to an IDL value
is not being performed due
to <var>V</var> being assigned to an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③①">attribute</a> whose type is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type①⑨">nullable</a> <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②⓪">callback function</a> that is annotated with [<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull②">TreatNonObjectAsNull</a></code>],
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①②">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①③">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL <a data-link-type="dfn" href="#idl-callback-function" id="ref-for-idl-callback-function②">callback function type</a> value
that represents a reference to the same object that <var>V</var> represents, with the <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#incumbent-settings-object" id="ref-for-incumbent-settings-object③">incumbent settings object</a> as the <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context⑤">callback context</a>.</p>
    </li></ol>
   </div>
   <p id="callback-function-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②③">converting</a> an IDL <a data-link-type="dfn" href="#idl-callback-function" id="ref-for-idl-callback-function③">callback function type</a> value to an ECMAScript value is a reference to the same object
    that the IDL <a data-link-type="dfn" href="#idl-callback-function" id="ref-for-idl-callback-function④">callback function type</a> value represents. </p>
   <h4 class="heading settled" data-level="3.2.18" id="es-nullable-type"><span class="secno">3.2.18. </span><span class="content">Nullable types — <var>T</var>?</span><a class="self-link" href="#es-nullable-type"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②⓪">nullable type</a> values are represented
by values of either the ECMAScript type corresponding to the <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type①②">inner IDL type</a>, or
the ECMAScript <emu-val>null</emu-val> value.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to nullable" id="es-to-nullable">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②⑤">converted</a> to an IDL <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②①">nullable type</a> <code class="idl"><var>T</var>?</code> value (where <var>T</var> is the <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type①③">inner type</a>) as follows:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①⓪">Type</a>(<var>V</var>) is not Object, and
the conversion to an IDL value is being performed due
to <var>V</var> being assigned to an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③②">attribute</a> whose type is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②②">nullable</a> <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②①">callback function</a> that is annotated with [<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull③">TreatNonObjectAsNull</a></code>],
then return the IDL <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②③">nullable type</a> <code class="idl"><var>T</var>?</code> value <emu-val>null</emu-val>.</p>
     </li><li data-md="">
      <p>Otherwise, if <var>V</var> is <emu-val>null</emu-val> or <emu-val>undefined</emu-val>, then return the IDL <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②④">nullable type</a> <code class="idl"><var>T</var>?</code> value <emu-val>null</emu-val>.</p>
     </li><li data-md="">
      <p>Otherwise, return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②⑥">converting</a> <var>V</var> using the rules for the <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type①④">inner IDL type</a> <code class="idl">T</code>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="convert a nullable to an ECMAScript value" id="nullable-to-es">
    <p>The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②④">converting</a> an IDL <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②⑤">nullable type</a> value to an ECMAScript value is:</p>
    <ol>
     <li data-md="">
      <p>If the IDL <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②⑥">nullable type</a> <code class="idl"><var>T</var>?</code> value is <emu-val>null</emu-val>,
then the ECMAScript value is <emu-val>null</emu-val>.</p>
     </li><li data-md="">
      <p>Otherwise, the ECMAScript value is the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②⑤">converting</a> the IDL <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②⑦">nullable type</a> value
to the <a data-link-type="dfn" href="#dfn-inner-type" id="ref-for-dfn-inner-type①⑤">inner IDL type</a> <code class="idl"><var>T</var></code>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.2.19" id="es-sequence"><span class="secno">3.2.19. </span><span class="content">Sequences — sequence&lt;<var>T</var>&gt;</span><a class="self-link" href="#es-sequence"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①②">sequence&lt;<var>T</var>&gt;</a> values are represented by
ECMAScript Array values.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to sequence" id="es-to-sequence">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②⑦">converted</a> to an IDL <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①③">sequence&lt;<var>T</var>&gt;</a> value as follows:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①①">Type</a>(<var>V</var>) is not Object, <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①③">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①④">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>method</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①⑧">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getmethod" id="ref-for-sec-getmethod">GetMethod</a>(<var>V</var>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols⑥">@@iterator</a></code>).</p>
     </li><li data-md="">
      <p>If <var>method</var> is <emu-val>undefined</emu-val>, <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①④">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑤">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the result of <a data-link-type="dfn" href="#create-sequence-from-iterable" id="ref-for-create-sequence-from-iterable">creating a sequence</a> from <var>V</var> and <var>method</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="convert a sequence to an ECMAScript value" id="sequence-to-es">
    <p>An IDL sequence value <var>S</var> of type <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①④">sequence&lt;<var>T</var>&gt;</a> is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②⑥">converted</a> to an ECMAScript Array object as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>n</var> be the length of <var>S</var>.</p>
     </li><li data-md="">
      <p>Let <var>A</var> be a new Array object created as if by the expression <code>[]</code>.</p>
     </li><li data-md="">
      <p>Initialize <var>i</var> to be 0.</p>
     </li><li data-md="">
      <p>While <var>i</var> &lt; <var>n</var>:</p>
      <ol>
       <li data-md="">
        <p>Let <var>V</var> be the value in <var>S</var> at index <var>i</var>.</p>
       </li><li data-md="">
        <p>Let <var>E</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②⑦">converting</a> <var>V</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p>Let <var>P</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tostring" id="ref-for-sec-tostring⑤">ToString</a>(<var>i</var>).</p>
       </li><li data-md="">
        <p>Call <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createdataproperty" id="ref-for-sec-createdataproperty①">CreateDataProperty</a>(<var>A</var>, <var>P</var>, <var>E</var>).</p>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var> + 1.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>A</var>.</p>
    </li></ol>
   </div>
   <h5 class="heading settled dfn-paneled" data-dfn-type="dfn" data-level="3.2.19.1" data-lt="Creating a sequence from an iterable" data-noexport="" id="create-sequence-from-iterable"><span class="secno">3.2.19.1. </span><span class="content">Creating a sequence from an iterable</span></h5>
   <div class="algorithm" data-algorithm="create sequence from iterable">
    <p>To create an IDL value of type <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①⑤">sequence&lt;<var>T</var>&gt;</a> given an iterable <var>iterable</var> and an iterator getter <var>method</var>,
    perform the following steps:</p>
    <ol>
     <li data-md="">
      <p>Let <var>iter</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands①⑨">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getiterator" id="ref-for-sec-getiterator">GetIterator</a>(<var>iterable</var>, <var>method</var>).</p>
     </li><li data-md="">
      <p>Initialize <var>i</var> to be 0.</p>
     </li><li data-md="">
      <p>Repeat</p>
      <ol>
       <li data-md="">
        <p>Let <var>next</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②⓪">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iteratorstep" id="ref-for-sec-iteratorstep">IteratorStep</a>(<var>iter</var>).</p>
       </li><li data-md="">
        <p>If <var>next</var> is <emu-val>false</emu-val>,
then return an IDL sequence value of type <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①⑥">sequence&lt;<var>T</var>&gt;</a> of length <var>i</var>, where the value of the element
at index <var>j</var> is <var>S</var><sub><var>j</var></sub>.</p>
       </li><li data-md="">
        <p>Let <var>nextItem</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②①">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iteratorvalue" id="ref-for-sec-iteratorvalue">IteratorValue</a>(<var>next</var>).</p>
       </li><li data-md="">
        <p>Initialize <var>S</var><sub><var>i</var></sub> to the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②⑧">converting</a> <var>nextItem</var> to an IDL value of type <var>T</var>.</p>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var> + 1.</p>
      </li></ol>
    </li></ol>
   </div>
   <div class="example" id="example-133c8773">
    <a class="self-link" href="#example-133c8773"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑥⑨">interface</a> defines
    an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③③">attribute</a> of a sequence
    type as well as an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③③">operation</a> with an argument of a sequence type.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Canvas</c-> {

  <c- b="">sequence</c->&lt;<c- b="">DOMString</c->&gt; <c- g="">getSupportedImageCodecs</c->();

  <c- b="">void</c-> <c- g="">drawPolygon</c->(<c- b="">sequence</c->&lt;<c- b="">double</c->&gt; <c- g="">coordinates</c->);
  <c- b="">sequence</c->&lt;<c- b="">double</c->&gt; <c- g="">getLastDrawnPolygon</c->();

  // ...
};
</pre>
    <p>In an ECMAScript implementation of this interface, an Array
    object with elements of type String is used to
    represent a <code class="idl">sequence&lt;DOMString&gt;</code>, while an
    Array with elements of type Number
    represents a <code class="idl">sequence&lt;double&gt;</code>.  The
    Array objects are effectively passed by
    value; every time the <code>getSupportedImageCodecs()</code> function is called a new Array is
    returned, and whenever an Array is
    passed to <code>drawPolygon</code> no reference
    will be kept after the call completes.</p>
<pre class="highlight"><c- c1="">// Obtain an instance of Canvas.  Assume that getSupportedImageCodecs()</c->
<c- c1="">// returns a sequence with two DOMString values: "image/png" and "image/svg+xml".</c->
<c- a="">var</c-> canvas <c- o="">=</c-> getCanvas<c- p="">();</c->

<c- c1="">// An Array object of length 2.</c->
<c- a="">var</c-> supportedImageCodecs <c- o="">=</c-> canvas<c- p="">.</c->getSupportedImageCodecs<c- p="">();</c->

<c- c1="">// Evaluates to "image/png".</c->
supportedImageCodecs<c- p="">[</c-><c- mi="">0</c-><c- p="">];</c->

<c- c1="">// Each time canvas.getSupportedImageCodecs() is called, it returns a</c->
<c- c1="">// new Array object.  Thus modifying the returned Array will not</c->
<c- c1="">// affect the value returned from a subsequent call to the function.</c->
supportedImageCodecs<c- p="">[</c-><c- mi="">0</c-><c- p="">]</c-> <c- o="">=</c-> <c- u="">"image/jpeg"</c-><c- p="">;</c->

<c- c1="">// Evaluates to "image/png".</c->
canvas<c- p="">.</c->getSupportedImageCodecs<c- p="">()[</c-><c- mi="">0</c-><c- p="">];</c->

<c- c1="">// This evaluates to false, since a new Array object is returned each call.</c->
canvas<c- p="">.</c->getSupportedImageCodecs<c- p="">()</c-> <c- o="">==</c-> canvas<c- p="">.</c->getSupportedImageCodecs<c- p="">();</c->

<c- c1="">// An Array of Numbers...</c->
<c- a="">var</c-> a <c- o="">=</c-> <c- p="">[</c-><c- mi="">0</c-><c- p="">,</c-> <c- mi="">0</c-><c- p="">,</c-> <c- mi="">100</c-><c- p="">,</c-> <c- mi="">0</c-><c- p="">,</c-> <c- mi="">50</c-><c- p="">,</c-> <c- mf="">62.5</c-><c- p="">];</c->

<c- c1="">// ...can be passed to a platform object expecting a sequence&lt;double&gt;.</c->
canvas<c- p="">.</c->drawPolygon<c- p="">(</c->a<c- p="">);</c->

<c- c1="">// Each element will be converted to a double by first calling ToNumber().</c->
<c- c1="">// So the following call is equivalent to the previous one, except that</c->
<c- c1="">// "hi" will be alerted before drawPolygon() returns.</c->
a <c- o="">=</c-> <c- p="">[</c-><c- kc="">false</c-><c- p="">,</c-> <c- t="">''</c-><c- p="">,</c->
     <c- p="">{</c-> valueOf<c- o="">:</c-> <c- a="">function</c-><c- p="">()</c-> <c- p="">{</c-> alert<c- p="">(</c-><c- t="">'hi'</c-><c- p="">);</c-> <c- k="">return</c-> <c- mi="">100</c-><c- p="">;</c-> <c- p="">}</c-> <c- p="">},</c-> <c- mi="">0</c-><c- p="">,</c->
     <c- t="">'50'</c-><c- p="">,</c-> <c- k="">new</c-> Number<c- p="">(</c-><c- mf="">62.5</c-><c- p="">)];</c->
canvas<c- p="">.</c->drawPolygon<c- p="">(</c->a<c- p="">);</c->

<c- c1="">// Modifying an Array that was passed to drawPolygon() is guaranteed not to</c->
<c- c1="">// have an effect on the Canvas, since the Array is effectively passed by value.</c->
a<c- p="">[</c-><c- mi="">4</c-><c- p="">]</c-> <c- o="">=</c-> <c- mi="">20</c-><c- p="">;</c->
<c- a="">var</c-> b <c- o="">=</c-> canvas<c- p="">.</c->getLastDrawnPolygon<c- p="">();</c->
alert<c- p="">(</c->b<c- p="">[</c-><c- mi="">4</c-><c- p="">]);</c->    <c- c1="">// This would alert "50".</c->
</pre>
   </div>
   <h4 class="heading settled" data-level="3.2.20" id="es-record"><span class="secno">3.2.20. </span><span class="content">Records — record&lt;<var>K</var>, <var>V</var>&gt;</span><a class="self-link" href="#es-record"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record②">record</a>&lt;<var>K</var>, <var>V</var>&gt; values are represented by
ECMAScript Object values.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to record" id="es-to-record">
    <p>An ECMAScript value <var>O</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value②⑨">converted</a> to an IDL <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record③">record</a>&lt;<var>K</var>, <var>V</var>&gt;</code> value as follows:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①②">Type</a>(<var>O</var>) is not Object, <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①⑤">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑥">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>result</var> be a new empty instance of <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record④">record</a>&lt;<var>K</var>, <var>V</var>&gt;</code>.</p>
     </li><li data-md="">
      <p>Let <var>keys</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②②">?</a> <var>O</var>.[[OwnPropertyKeys]]().</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate⑦">For each</a> <var>key</var> of <var>keys</var>:</p>
      <ol>
       <li data-md="">
        <p>Let <var>desc</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②③">?</a> <var>O</var>.[[GetOwnProperty]](<var>key</var>).</p>
       </li><li data-md="">
        <p>If <var>desc</var> is not <emu-val>undefined</emu-val> and <var>desc</var>.[[Enumerable]] is <emu-val>true</emu-val>:</p>
        <ol>
         <li data-md="">
          <p>Let <var>typedKey</var> be <var>key</var> <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③⓪">converted to an IDL value</a> of type <var>K</var>.</p>
         </li><li data-md="">
          <p>Let <var>value</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②④">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p①">Get</a>(<var>O</var>, <var>key</var>).</p>
         </li><li data-md="">
          <p>Let <var>typedValue</var> be <var>value</var> <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③①">converted to an IDL value</a> of type <var>V</var>.</p>
         </li><li data-md="">
          <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-set" id="ref-for-map-set">Set</a> <var>result</var>[<var>typedKey</var>] to <var>typedValue</var>.</p>
          <p class="note" role="note"><span>Note:</span> it’s possible that <var>typedKey</var> is already in <var>result</var>, if <var>O</var> is a proxy
object.</p>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>result</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="convert a record to an ECMAScript value" id="record-to-es">
    <p>An IDL <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record⑤">record</a>&lt;…&gt;</code> value <var>D</var> is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②⑧">converted</a> to an ECMAScript value as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>result</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②⑤">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-objectcreate" id="ref-for-sec-objectcreate①">ObjectCreate</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object" id="ref-for-sec-properties-of-the-object-prototype-object③">%ObjectPrototype%</a></code>).</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-iterate" id="ref-for-map-iterate">For each</a> <var>key</var> → <var>value</var> of <var>D</var>:</p>
      <ol>
       <li data-md="">
        <p>Let <var>esKey</var> be <var>key</var> <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value②⑨">converted to an ECMAScript value</a>.</p>
       </li><li data-md="">
        <p>Let <var>esValue</var> be <var>value</var> <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③⓪">converted to an ECMAScript value</a>.</p>
       </li><li data-md="">
        <p>Let <var>created</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②⑥">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createdataproperty" id="ref-for-sec-createdataproperty②">CreateDataProperty</a>(<var>result</var>, <var>esKey</var>, <var>esValue</var>).</p>
       </li><li data-md="">
        <p class="assertion">Assert: <var>created</var> is <emu-val>true</emu-val>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>result</var>.</p>
    </li></ol>
   </div>
   <div class="example" id="example-es-record">
    <a class="self-link" href="#example-es-record"></a> 
    <p>Passing the ECMAScript value <code>{b: 3, a: 4}</code> as a <code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record⑥">record</a>&lt;DOMString, double&gt;</code> argument
    would result in the IDL value «[ "<code>b</code>" → 3, "<code>a</code>" → 4 ]».</p>
    <p>Records only consider <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-own-property" id="ref-for-sec-own-property">own</a> <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-property-attributes" id="ref-for-sec-property-attributes">enumerable</a> properties, so given an IDL operation <code>record&lt;DOMString, double&gt;
    identity(record&lt;DOMString, double&gt; arg)</code> which returns its
    argument, the following code passes its assertions:</p>
<pre class="highlight"><c- a="">let</c-> proto <c- o="">=</c-> <c- p="">{</c->a<c- o="">:</c-> <c- mi="">3</c-><c- p="">,</c-> b<c- o="">:</c-> <c- mi="">4</c-><c- p="">};</c->
<c- a="">let</c-> obj <c- o="">=</c-> <c- p="">{</c->__proto__<c- o="">:</c-> proto<c- p="">,</c-> d<c- o="">:</c-> <c- mi="">5</c-><c- p="">,</c-> c<c- o="">:</c-> <c- mi="">6</c-><c- p="">}</c->
Object<c- p="">.</c->defineProperty<c- p="">(</c->obj<c- p="">,</c-> <c- u="">"e"</c-><c- p="">,</c-> <c- p="">{</c->value<c- o="">:</c-> <c- mi="">7</c-><c- p="">,</c-> enumerable<c- o="">:</c-> <c- kc="">false</c-><c- p="">});</c->
<c- a="">let</c-> result <c- o="">=</c-> identity<c- p="">(</c->obj<c- p="">);</c->
console<c- p="">.</c->assert<c- p="">(</c->result<c- p="">.</c->a <c- o="">===</c-> <c- kc="">undefined</c-><c- p="">);</c->
console<c- p="">.</c->assert<c- p="">(</c->result<c- p="">.</c->b <c- o="">===</c-> <c- kc="">undefined</c-><c- p="">);</c->
console<c- p="">.</c->assert<c- p="">(</c->result<c- p="">.</c->e <c- o="">===</c-> <c- kc="">undefined</c-><c- p="">);</c->
<c- a="">let</c-> entries <c- o="">=</c-> Object<c- p="">.</c->entries<c- p="">(</c->result<c- p="">);</c->
console<c- p="">.</c->assert<c- p="">(</c->entries<c- p="">[</c-><c- mi="">0</c-><c- p="">][</c-><c- mi="">0</c-><c- p="">]</c-> <c- o="">===</c-> <c- u="">"d"</c-><c- p="">);</c->
console<c- p="">.</c->assert<c- p="">(</c->entries<c- p="">[</c-><c- mi="">0</c-><c- p="">][</c-><c- mi="">1</c-><c- p="">]</c-> <c- o="">===</c-> <c- mi="">5</c-><c- p="">);</c->
console<c- p="">.</c->assert<c- p="">(</c->entries<c- p="">[</c-><c- mi="">1</c-><c- p="">][</c-><c- mi="">0</c-><c- p="">]</c-> <c- o="">===</c-> <c- u="">"c"</c-><c- p="">);</c->
console<c- p="">.</c->assert<c- p="">(</c->entries<c- p="">[</c-><c- mi="">1</c-><c- p="">][</c-><c- mi="">1</c-><c- p="">]</c-> <c- o="">===</c-> <c- mi="">6</c-><c- p="">);</c->
</pre>
    <p>Record keys and values can be constrained, although keys can only be
    constrained among the three string types.
    The following conversions have the described results:</p>
    <table class="data">
     <thead>
      <tr>
       <th>Value
       </th><th>Passed to type
       </th><th>Result
     </th></tr></thead><tbody>
      <tr>
       <td><code>{"😞": 1}</code>
       </td><td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record⑦">record</a>&lt;ByteString, double&gt;</code>
       </td><td><code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑦">TypeError</a></code>
      </td></tr><tr>
       <td><code>{"\uD83D": 1}</code>
       </td><td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record⑧">record</a>&lt;USVString, double&gt;</code>
       </td><td>«[ "<code>\uFFFD</code>" → 1 ]»
      </td></tr><tr>
       <td><code>{"\uD83D": {hello: "world"}}</code>
       </td><td><code><a data-link-type="dfn" href="#idl-record" id="ref-for-idl-record⑨">record</a>&lt;DOMString, double&gt;</code>
       </td><td>«[ "<code>\uD83D</code>" → 0 ]»
    </td></tr></tbody></table>
   </div>
   <h4 class="heading settled" data-level="3.2.21" id="es-promise"><span class="secno">3.2.21. </span><span class="content">Promise types — Promise&lt;<var>T</var>&gt;</span><a class="self-link" href="#es-promise"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type③">promise type</a> values are
represented by ECMAScript <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise-objects" id="ref-for-sec-promise-objects">Promise</a></code> objects.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to promise" id="es-to-promise">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③②">converted</a> to an IDL <a class="idl-code" data-link-type="interface" href="#idl-promise" id="ref-for-idl-promise">Promise<var>T</var></a> value as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>promise</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②⑦">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call">Call</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise.resolve" id="ref-for-sec-promise.resolve">%Promise_resolve%</a></code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise-constructor" id="ref-for-sec-promise-constructor">%Promise%</a></code>, «<var>V</var>»).</p>
     </li><li data-md="">
      <p>Return the IDL <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type④">promise type</a> value that is a reference to the
same object as <var>promise</var>.</p>
    </li></ol>
   </div>
   <p id="promise-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③①">converting</a> an IDL <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type⑤">promise type</a> value to an ECMAScript
    value is the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise-objects" id="ref-for-sec-promise-objects①">Promise</a></code> value that represents a reference to the same object that the
    IDL <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type⑥">promise type</a> represents. </p>
   <div class="algorithm" data-algorithm="upon settling">
    <p>One can <dfn data-dfn-type="dfn" data-export="" data-lt="upon settling" id="dfn-perform-steps-once-promise-is-settled">perform some steps once a promise is settled<a class="self-link" href="#dfn-perform-steps-once-promise-is-settled"></a></dfn>.
    There can be one or two sets of steps to perform,
    covering when the promise is fulfilled, rejected, or both.
    When a specification says to perform some steps once a promise is settled,
    the following steps must be followed:</p>
    <ol>
     <li data-md="">
      <p>Let <var>promise</var> be the promise object of type <a class="idl-code" data-link-type="interface" href="#idl-promise" id="ref-for-idl-promise①">Promise&lt;<var>T</var>&gt;</a>.</p>
     </li><li data-md="">
      <p>Let <var>onFulfilled</var> be a new <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects⑤">built-in function object</a> whose
behavior when invoked is as follows:</p>
      <ol>
       <li data-md="">
        <p>If <var>T</var> is <code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void⑤">void</a></code>, then:</p>
        <ol>
         <li data-md="">
          <p>Return the result of performing any steps that were required to be run if the promise was fulfilled.</p>
        </li></ol>
       </li><li data-md="">
        <p>Otherwise, <var>T</var> is a type other than <code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void⑥">void</a></code>:</p>
        <ol>
         <li data-md="">
          <p>Let <var>V</var> be the first argument to <var>onFulfilled</var>.</p>
         </li><li data-md="">
          <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③③">converting</a> <var>V</var> to an IDL value of type <var>T</var>.</p>
         </li><li data-md="">
          <p>If there are no steps that are required to be run if the promise was fulfilled, then
return <emu-val>undefined</emu-val>.</p>
         </li><li data-md="">
          <p>Otherwise, return the result of performing any steps that were required to be run if the promise was fulfilled,
with <var>value</var> as the promise’s value.</p>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>onRejected</var> be a new <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects⑥">built-in function object</a> whose
behavior when invoked is as follows:</p>
      <ol>
       <li data-md="">
        <p>Let <var>R</var> be the first argument to <var>onRejected</var>.</p>
       </li><li data-md="">
        <p>Let <var>reason</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③④">converting</a> <var>R</var> to an IDL value of type <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any①③">any</a></code>.</p>
       </li><li data-md="">
        <p>If there are no steps that are required to be run if the promise was rejected, then
return <emu-val>undefined</emu-val>.</p>
       </li><li data-md="">
        <p>Otherwise, return the result of performing any steps that were required to be run if the promise was rejected,
with <var>reason</var> as the rejection reason.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>then</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②⑧">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getmethod" id="ref-for-sec-getmethod①">GetMethod</a>(<var>promise</var>, "<code>then</code>").</p>
     </li><li data-md="">
      <p>If <var>then</var> is <emu-val>undefined</emu-val>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①⑥">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑧">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①">Call</a>(<var>then</var>, <var>promise</var>, «<var>onFulfilled</var>, <var>onRejected</var>»).</p>
    </li></ol>
   </div>
   <p class="issue" id="issue-efe8490d"><a class="self-link" href="#issue-efe8490d"></a> Include an example of how to write spec text using this term. </p>
   <h4 class="heading settled" data-level="3.2.22" id="es-union"><span class="secno">3.2.22. </span><span class="content">Union types</span><a class="self-link" href="#es-union"></a></h4>
   <p>IDL <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③⑤">union type</a> values are represented by ECMAScript values
that correspond to the union’s <a data-link-type="dfn" href="#dfn-union-member-type" id="ref-for-dfn-union-member-type①①">member types</a>.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to union" id="es-to-union">
    <p>To <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③⑤">convert an ECMAScript value</a> <var>V</var> to an IDL <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③⑥">union type</a> value is done as follows:</p>
    <ol>
     <li data-md="">
      <p>If the <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③⑦">union type</a> <a data-link-type="dfn" href="#dfn-includes-a-nullable-type" id="ref-for-dfn-includes-a-nullable-type③">includes a nullable type</a> and <var>V</var> is <emu-val>null</emu-val> or <emu-val>undefined</emu-val>,
then return the IDL value <emu-val>null</emu-val>.</p>
     </li><li data-md="">
      <p>Let <var>types</var> be the <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①⓪">flattened member types</a> of the <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③⑧">union type</a>.</p>
     </li><li data-md="">
      <p>If <var>V</var> is <emu-val>null</emu-val> or <emu-val>undefined</emu-val>, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary①②">dictionary type</a>, then return the
result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③⑥">converting</a> <var>V</var> to that dictionary type.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>V</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①⑤">platform object</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes an <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①②">interface type</a> that <var>V</var> implements, then return the IDL value that is a reference to the object <var>V</var>.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①⑤">object</a></code>, then return the IDL value
that is a reference to the object <var>V</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>V</var> is a <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②②">DOMException</a></code> platform object, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②③">DOMException</a></code> or <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error⑥">Error</a></code>, then return the
result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③⑦">converting</a> <var>V</var> to that type.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①⑥">object</a></code>, then return the IDL value
that is a reference to the object <var>V</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①③">Type</a>(<var>V</var>) is Object and <var>V</var> has an [[ErrorData]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots">internal slot</a>), then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error⑦">Error</a></code>, then return the
result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③⑧">converting</a> <var>V</var> to <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error⑧">Error</a></code>.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①⑦">object</a></code>, then return the IDL value
that is a reference to the object <var>V</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①④">Type</a>(<var>V</var>) is Object and <var>V</var> has an [[ArrayBufferData]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①">internal slot</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer⑨">ArrayBuffer</a></code>, then return the
result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value③⑨">converting</a> <var>V</var> to <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①⓪">ArrayBuffer</a></code>.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①⑧">object</a></code>, then return the IDL value
that is a reference to the object <var>V</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①⑤">Type</a>(<var>V</var>) is Object and <var>V</var> has a [[DataView]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②">internal slot</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-DataView" id="ref-for-idl-DataView①">DataView</a></code>, then return the
result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④⓪">converting</a> <var>V</var> to <code class="idl"><a data-link-type="idl" href="#idl-DataView" id="ref-for-idl-DataView②">DataView</a></code>.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object①⑨">object</a></code>, then return the IDL value
that is a reference to the object <var>V</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①⑥">Type</a>(<var>V</var>) is Object and <var>V</var> has a [[TypedArrayName]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③">internal slot</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#dfn-typed-array-type" id="ref-for-dfn-typed-array-type①">typed array type</a> whose name is the value of <var>V</var>’s [[TypedArrayName]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots④">internal slot</a>, then return the
result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④①">converting</a> <var>V</var> to that type.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②⓪">object</a></code>, then return the IDL value
that is a reference to the object <var>V</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable②">IsCallable</a>(<var>V</var>) is true, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②②">callback function</a> type, then return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④②">converting</a> <var>V</var> to that callback function type.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②①">object</a></code>, then return the IDL value
that is a reference to the object <var>V</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①⑦">Type</a>(<var>V</var>) is Object, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①⑦">sequence type</a>, then</p>
        <ol>
         <li data-md="">
          <p>Let <var>method</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands②⑨">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getmethod" id="ref-for-sec-getmethod②">GetMethod</a>(<var>V</var>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols⑦">@@iterator</a></code>).</p>
         </li><li data-md="">
          <p>If <var>method</var> is not <emu-val>undefined</emu-val>,
return the result of <a data-link-type="dfn" href="#create-sequence-from-iterable" id="ref-for-create-sequence-from-iterable①">creating a sequence</a> of that type from <var>V</var> and <var>method</var>.</p>
        </li></ol>
       </li><li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#dfn-frozen-array-type" id="ref-for-dfn-frozen-array-type④">frozen array type</a>, then</p>
        <ol>
         <li data-md="">
          <p>Let <var>method</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③⓪">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getmethod" id="ref-for-sec-getmethod③">GetMethod</a>(<var>V</var>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols⑧">@@iterator</a></code>).</p>
         </li><li data-md="">
          <p>If <var>method</var> is not <emu-val>undefined</emu-val>,
return the result of <a data-link-type="dfn" href="#create-frozen-array-from-iterable" id="ref-for-create-frozen-array-from-iterable">creating a frozen array</a> of that type from <var>V</var> and <var>method</var>.</p>
        </li></ol>
       </li><li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary①③">dictionary type</a>, then return the
result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④③">converting</a> <var>V</var> to that dictionary type.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#record-type" id="ref-for-record-type②">record type</a>, then return the
result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④④">converting</a> <var>V</var> to that record type.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①⑧">callback interface</a> type, then return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④⑤">converting</a> <var>V</var> to that interface type.</p>
       </li><li data-md="">
        <p>If <var>types</var> includes <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②②">object</a></code>, then return the IDL value
that is a reference to the object <var>V</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①⑧">Type</a>(<var>V</var>) is Boolean, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes a <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①③">boolean</a></code>,
then return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④⑥">converting</a> <var>V</var> to <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①④">boolean</a></code>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values①⑨">Type</a>(<var>V</var>) is Number, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>types</var> includes a <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type⑥">numeric type</a>,
then return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④⑦">converting</a> <var>V</var> to that <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type⑦">numeric type</a>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>types</var> includes a <a data-link-type="dfn" href="#dfn-string-type" id="ref-for-dfn-string-type③">string type</a>,
then return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④⑧">converting</a> <var>V</var> to that type.</p>
     </li><li data-md="">
      <p>If <var>types</var> includes a <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type⑧">numeric type</a>,
then return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value④⑨">converting</a> <var>V</var> to that <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type⑨">numeric type</a>.</p>
     </li><li data-md="">
      <p>If <var>types</var> includes a <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①⑤">boolean</a></code>,
then return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤⓪">converting</a> <var>V</var> to <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①⑥">boolean</a></code>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①⑦">Throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑨">TypeError</a></code>.</p>
    </li></ol>
   </div>
   <p id="union-to-es"> An IDL union type value is <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③②">converted to an ECMAScript value</a> as follows.  If the value is an <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②③">object</a></code> reference to a special object that represents an ECMAScript <emu-val>undefined</emu-val> value, then it is converted to the ECMAScript <emu-val>undefined</emu-val> value.  Otherwise,
    the rules for converting the <a data-link-type="dfn" href="#dfn-specific-type" id="ref-for-dfn-specific-type③">specific type</a> of the IDL union type value as described in this section (<a href="#es-type-mapping">§3.2 ECMAScript type mapping</a>). </p>
   <h4 class="heading settled" data-level="3.2.23" id="es-Error"><span class="secno">3.2.23. </span><span class="content">Error</span><a class="self-link" href="#es-Error"></a></h4>
   <p>IDL <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error⑨">Error</a></code> values are represented
by native ECMAScript <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-error-objects" id="ref-for-sec-error-objects②">Error</a></code> objects and
by <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②④">DOMException</a></code> platform objects.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to Error" id="es-to-Error">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤①">converted</a> to an IDL <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error①⓪">Error</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②⓪">Type</a>(<var>V</var>) is not Object,
or <var>V</var> does not have an [[ErrorData]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots⑤">internal slot</a>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①⑧">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②⓪">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error①①">Error</a></code> value that is a reference
to the same object as <var>V</var>.</p>
    </li></ol>
   </div>
   <p id="Error-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③③">converting</a> an IDL <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error①②">Error</a></code> value to an ECMAScript
    value is the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-error-objects" id="ref-for-sec-error-objects③">Error</a></code> value that represents a reference to the same object that the
    IDL <code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error①③">Error</a></code> represents. </p>
   <h4 class="heading settled" data-level="3.2.24" id="es-DOMException"><span class="secno">3.2.24. </span><span class="content">DOMException</span><a class="self-link" href="#es-DOMException"></a></h4>
   <p>IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②⑤">DOMException</a></code> values are represented by
ECMAScript Object values.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to DOMException" id="es-to-DOMException">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤②">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②⑥">DOMException</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②①">Type</a>(<var>V</var>) is not Object,
or <var>V</var> is not a platform object that represents a <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②⑦">DOMException</a></code>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw①⑨">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②①">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②⑧">DOMException</a></code> value that is a reference
to the same object as <var>V</var>.</p>
    </li></ol>
   </div>
   <p id="DOMException-to-es"> The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③④">converting</a> an IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException②⑨">DOMException</a></code> value to an ECMAScript
    value is the Object value that represents a reference to the same object that the
    IDL <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③⓪">DOMException</a></code> represents. </p>
   <h4 class="heading settled" data-level="3.2.25" id="es-buffer-source-types"><span class="secno">3.2.25. </span><span class="content">Buffer source types</span><a class="self-link" href="#es-buffer-source-types"></a></h4>
   <p>Values of the IDL <a data-link-type="dfn" href="#dfn-buffer-source-type" id="ref-for-dfn-buffer-source-type②">buffer source types</a> are represented by objects of the corresponding ECMAScript class, with the additional restriction
that unless the type is <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with⑧">associated with</a> the
[<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared">AllowShared</a></code>] extended attribute, they can only be backed by ECMAScript <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-arraybuffer-objects" id="ref-for-sec-arraybuffer-objects">ArrayBuffer</a></code> objects, and not <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-sharedarraybuffer-objects" id="ref-for-sec-sharedarraybuffer-objects">SharedArrayBuffer</a></code> objects.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to IDL ArrayBuffer" id="es-to-buffer-source">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤③">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①①">ArrayBuffer</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②②">Type</a>(<var>V</var>) is not Object,
or <var>V</var> does not have an [[ArrayBufferData]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots⑥">internal slot</a>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②⓪">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②②">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>If the conversion is not to an IDL type <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with⑨">associated with</a> the [<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared①">AllowShared</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③⑦">extended attribute</a>, and <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-issharedarraybuffer" id="ref-for-sec-issharedarraybuffer">IsSharedArrayBuffer</a>(<var>V</var>) is true, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②①">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②③">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①②">ArrayBuffer</a></code> value that is a reference
to the same object as <var>V</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to IDL DataView" id="buffer-source-to-es">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤④">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-DataView" id="ref-for-idl-DataView③">DataView</a></code> value by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②③">Type</a>(<var>V</var>) is not Object,
or <var>V</var> does not have a [[DataView]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots⑦">internal slot</a>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②②">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②④">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>If the conversion is not to an IDL type <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①⓪">associated with</a> the [<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared②">AllowShared</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③⑧">extended attribute</a>, and <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-issharedarraybuffer" id="ref-for-sec-issharedarraybuffer①">IsSharedArrayBuffer</a>(<var>V</var>.[[ViewedArrayBuffer]]) is true,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②③">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑤">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL <code class="idl"><a data-link-type="idl" href="#idl-DataView" id="ref-for-idl-DataView④">DataView</a></code> value that is a reference
to the same object as <var>V</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to IDL typed array">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤⑤">converted</a> to an IDL <code class="idl"><a data-link-type="idl" href="#idl-Int8Array" id="ref-for-idl-Int8Array②">Int8Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Int16Array" id="ref-for-idl-Int16Array①">Int16Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Int32Array" id="ref-for-idl-Int32Array①">Int32Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Uint8Array" id="ref-for-idl-Uint8Array③">Uint8Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Uint16Array" id="ref-for-idl-Uint16Array①">Uint16Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Uint32Array" id="ref-for-idl-Uint32Array①">Uint32Array</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Uint8ClampedArray" id="ref-for-idl-Uint8ClampedArray①">Uint8ClampedArray</a></code>, <code class="idl"><a data-link-type="idl" href="#idl-Float32Array" id="ref-for-idl-Float32Array①">Float32Array</a></code> or <code class="idl"><a data-link-type="idl" href="#idl-Float64Array" id="ref-for-idl-Float64Array①">Float64Array</a></code> value
    by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>T</var> be the IDL type <var>V</var> is being converted to.</p>
     </li><li data-md="">
      <p>Let <var>typedArrayName</var> be the <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name③③">name</a> of <var>T</var>’s <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type⑤">inner type</a> if <var>T</var> is an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types⑧">annotated type</a>, or the <a data-link-type="dfn" href="#dfn-type-name" id="ref-for-dfn-type-name③④">name</a> of <var>T</var> otherwise.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②④">Type</a>(<var>V</var>) is not Object,
or <var>V</var> does not have a [[TypedArrayName]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots⑧">internal slot</a> with a value equal to <var>typedArrayName</var>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②④">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑥">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>If the conversion is not to an IDL type <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①①">associated with</a> the [<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared③">AllowShared</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute③⑨">extended attribute</a>, and <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-issharedarraybuffer" id="ref-for-sec-issharedarraybuffer②">IsSharedArrayBuffer</a>(<var>V</var>.[[ViewedArrayBuffer]]) is true,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②⑤">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑦">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return the IDL value of type <var>T</var> that is a reference to the same object as <var>V</var>.</p>
    </li></ol>
   </div>
   <p>The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③⑤">converting</a> an IDL value of any <a data-link-type="dfn" href="#dfn-buffer-source-type" id="ref-for-dfn-buffer-source-type③">buffer source type</a> to an ECMAScript value is the Object value that represents
a reference to the same object that the IDL value represents.</p>
   <div class="algorithm" data-algorithm="get a reference to a buffer source">
    <p>When <a data-link-type="dfn" href="#dfn-get-buffer-source-reference" id="ref-for-dfn-get-buffer-source-reference①">getting a reference to</a> or <a data-link-type="dfn" href="#dfn-get-buffer-source-copy" id="ref-for-dfn-get-buffer-source-copy①">getting a copy of the bytes held by a buffer source</a> that is an ECMAScript <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-arraybuffer-objects" id="ref-for-sec-arraybuffer-objects①">ArrayBuffer</a></code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-dataview-objects" id="ref-for-sec-dataview-objects">DataView</a></code> or typed array object, these steps must be followed:</p>
    <ol>
     <li data-md="">
      <p>Let <var>O</var> be the ECMAScript object that is the buffer source.</p>
     </li><li data-md="">
      <p>Initialize <var>arrayBuffer</var> to <var>O</var>.</p>
     </li><li data-md="">
      <p>Initialize <var>offset</var> to 0.</p>
     </li><li data-md="">
      <p>Initialize <var>length</var> to 0.</p>
     </li><li data-md="">
      <p>If <var>O</var> has a [[ViewedArrayBuffer]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots⑨">internal slot</a>, then:</p>
      <ol>
       <li data-md="">
        <p>Set <var>arrayBuffer</var> to the value of <var>O</var>’s [[ViewedArrayBuffer]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①⓪">internal slot</a>.</p>
       </li><li data-md="">
        <p>If <var>arrayBuffer</var> is <emu-val>undefined</emu-val>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②⑥">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑧">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Set <var>offset</var> to the value of <var>O</var>’s [[ByteOffset]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①①">internal slot</a>.</p>
       </li><li data-md="">
        <p>Set <var>length</var> to the value of <var>O</var>’s [[ByteLength]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①②">internal slot</a>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Otherwise, set <var>length</var> to the value of <var>O</var>’s [[ArrayBufferByteLength]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①③">internal slot</a>.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-isdetachedbuffer" id="ref-for-sec-isdetachedbuffer">IsDetachedBuffer</a>(<var>O</var>), then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②⑦">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑨">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>data</var> be the value of <var>O</var>’s [[ArrayBufferData]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①④">internal slot</a>.</p>
     </li><li data-md="">
      <p>Return a reference to or copy of (as required) the <var>length</var> bytes in <var>data</var> starting at byte offset <var>offset</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="detach">
    <p>To <dfn data-dfn-for="ArrayBuffer" data-dfn-type="dfn" data-export="" id="dfn-detach">detach<a class="self-link" href="#dfn-detach"></a></dfn> an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①③">ArrayBuffer</a></code>, these steps must be followed:</p>
    <ol>
     <li data-md="">
      <p>Let <var>O</var> be the ECMAScript object that is the <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①④">ArrayBuffer</a></code>.</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③①">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-detacharraybuffer" id="ref-for-sec-detacharraybuffer">DetachArrayBuffer</a>(<var>O</var>).</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.2.26" id="es-frozen-array"><span class="secno">3.2.26. </span><span class="content">Frozen arrays — FrozenArray&lt;<var>T</var>&gt;</span><a class="self-link" href="#es-frozen-array"></a></h4>
   <p>Values of frozen array types are represented by frozen ECMAScript
Array object references.</p>
   <div class="algorithm" data-algorithm="convert an ECMAScript value to frozen array">
    <p>An ECMAScript value <var>V</var> is <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤⑥">converted</a> to an IDL <a class="idl-code" data-link-type="interface" href="#idl-frozen-array" id="ref-for-idl-frozen-array①">FrozenArray&lt;<var>T</var>&gt;</a> value
    by running the following algorithm:</p>
    <ol>
     <li data-md="">
      <p>Let <var>values</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤⑦">converting</a> <var>V</var> to IDL type <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①⑧">sequence&lt;<var>T</var>&gt;</a>.</p>
     </li><li data-md="">
      <p>Return the result of <a data-link-type="dfn" href="#dfn-create-frozen-array" id="ref-for-dfn-create-frozen-array">creating a frozen array</a> from <var>values</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="create a frozen array">
    <p>To <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-create-frozen-array">create a frozen array</dfn> from a sequence of values of type <var>T</var>, follow these steps:</p>
    <ol>
     <li data-md="">
      <p>Let <var>array</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③⑥">converting</a> the sequence of values of type <var>T</var> to an ECMAScript value.</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setintegritylevel" id="ref-for-sec-setintegritylevel">SetIntegrityLevel</a>(<var>array</var>, "<code>frozen</code>").</p>
     </li><li data-md="">
      <p>Return <var>array</var>.</p>
    </li></ol>
   </div>
   <p>The result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③⑦">converting</a> an IDL <a class="idl-code" data-link-type="interface" href="#idl-frozen-array" id="ref-for-idl-frozen-array②">FrozenArray&lt;<var>T</var>&gt;</a> value to an ECMAScript
value is the Object value that represents a reference
to the same object that the IDL <a class="idl-code" data-link-type="interface" href="#idl-frozen-array" id="ref-for-idl-frozen-array③">FrozenArray&lt;<var>T</var>&gt;</a> represents.</p>
   <h5 class="heading settled dfn-paneled" data-dfn-type="dfn" data-level="3.2.26.1" data-lt="Creating a frozen array from an iterable" data-noexport="" id="create-frozen-array-from-iterable"><span class="secno">3.2.26.1. </span><span class="content">Creating a frozen array from an iterable</span></h5>
   <div class="algorithm" data-algorithm="create frozen array from iterable">
    <p>To create an IDL value of type <a class="idl-code" data-link-type="interface" href="#idl-frozen-array" id="ref-for-idl-frozen-array④">FrozenArray&lt;<var>T</var>&gt;</a> given an
    iterable <var>iterable</var> and an iterator getter <var>method</var>, perform the following steps:</p>
    <ol>
     <li data-md="">
      <p>Let <var>values</var> be the result of <a data-link-type="dfn" href="#create-sequence-from-iterable" id="ref-for-create-sequence-from-iterable②">creating a sequence</a> of type <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type①⑨">sequence&lt;<var>T</var>&gt;</a> from <var>iterable</var> and <var>method</var>.</p>
     </li><li data-md="">
      <p>Return the result of <a data-link-type="dfn" href="#dfn-create-frozen-array" id="ref-for-dfn-create-frozen-array①">creating a frozen array</a> from <var>values</var>.</p>
    </li></ol>
   </div>
   <h3 class="heading settled" data-level="3.3" id="es-extended-attributes"><span class="secno">3.3. </span><span class="content">ECMAScript-specific extended attributes</span><a class="self-link" href="#es-extended-attributes"></a></h3>
   <p>This section defines a number of <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④⓪">extended attributes</a> whose presence affects only the ECMAScript binding.</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.1" data-lt="AllowShared" id="AllowShared"><span class="secno">3.3.1. </span><span class="content">[AllowShared]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared④">AllowShared</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④①">extended attribute</a> appears on one of the <a data-link-type="dfn" href="#dfn-buffer-source-type" id="ref-for-dfn-buffer-source-type④">buffer source types</a>, it
creates a new IDL type that allows the buffer source type to be backed by an ECMAScript <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-sharedarraybuffer-objects" id="ref-for-sec-sharedarraybuffer-objects①">SharedArrayBuffer</a></code>, instead of only by a non-shared <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-arraybuffer-objects" id="ref-for-sec-arraybuffer-objects②">ArrayBuffer</a></code>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared⑤">AllowShared</a></code>] extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments">take no arguments</a>.</p>
   <p>A type that is not a <a data-link-type="dfn" href="#dfn-buffer-source-type" id="ref-for-dfn-buffer-source-type⑤">buffer source type</a> must not be <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①②">associated with</a> the [<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared⑥">AllowShared</a></code>] extended attribute.</p>
   <p>See the rules for converting ECMAScript values to IDL <a data-link-type="dfn" href="#dfn-buffer-source-type" id="ref-for-dfn-buffer-source-type⑥">buffer source types</a> in <a href="#es-buffer-source-types">§3.2.25 Buffer source types</a> for the specific requirements that the use of [<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared⑦">AllowShared</a></code>] entails.</p>
   <div class="example" id="example-9e7a7cc5">
    <a class="self-link" href="#example-9e7a7cc5"></a> In the following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③②">IDL fragment</a>, one operation’s argument uses the [<code class="idl"><a data-link-type="idl" href="#AllowShared" id="ref-for-AllowShared⑧">AllowShared</a></code>] extended
    attribute, while the other does not: 
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">RenderingContext</c-> {
  <c- b="">void</c-> <c- g="">readPixels</c->(<c- b="">long</c-> <c- g="">width</c->, <c- b="">long</c-> <c- g="">height</c->, <c- n="">BufferSource</c-> <c- g="">pixels</c->);
  <c- b="">void</c-> <c- g="">readPixelsShared</c->(<c- b="">long</c-> <c- g="">width</c->, <c- b="">long</c-> <c- g="">height</c->, [<c- g="">AllowShared</c->] <c- n="">BufferSource</c-> <c- g="">pixels</c->);
};
</pre>
    <p>With this definition, a call to <code>readPixels</code> with an <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-sharedarraybuffer-objects" id="ref-for-sec-sharedarraybuffer-objects②">SharedArrayBuffer</a></code> instance, or any typed array or <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-dataview-objects" id="ref-for-sec-dataview-objects①">DataView</a></code> backed by one, will throw a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③⓪">TypeError</a></code> exception. In contrast, a call to <code>readPixelsShared</code> will allow such
    objects as input.</p>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.2" data-lt="Clamp" id="Clamp"><span class="secno">3.3.2. </span><span class="content">[Clamp]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp④">Clamp</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④②">extended attribute</a> appears on one of the <a data-link-type="dfn" href="#dfn-integer-type" id="ref-for-dfn-integer-type②">integer types</a>, it creates a new
IDL type such that that when an ECMAScript Number is converted to the IDL type,
out-of-range values will be clamped to the range of valid values, rather than using the operators
that use a modulo operation (<a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toint32" id="ref-for-sec-toint32">ToInt32</a>, <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-touint32" id="ref-for-sec-touint32">ToUint32</a>, etc.).</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp⑤">Clamp</a></code>]
extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments①">take no arguments</a>.</p>
   <p>A type annotated with the [<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp⑥">Clamp</a></code>] extended attribute must not appear in a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only⑦">read only</a> attribute. A type must not be <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①③">associated with</a> both the
[<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp⑦">Clamp</a></code>] and [<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange③">EnforceRange</a></code>] extended attributes. A type that is not an <a data-link-type="dfn" href="#dfn-integer-type" id="ref-for-dfn-integer-type③">integer type</a> must
not be <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①④">associated with</a> the [<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp⑧">Clamp</a></code>] extended attribute.</p>
   <p>See the rules for converting ECMAScript values to the various IDL integer
types in <a href="#es-integer-types">§3.2.4 Integer types</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp⑨">Clamp</a></code>] entails.</p>
   <div class="example" id="example-215d6ab3">
    <a class="self-link" href="#example-215d6ab3"></a> 
    <p>In the following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③③">IDL fragment</a>,
    two <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③④">operations</a> are declared that
    take three <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet⑨">octet</a></code> arguments; one uses
    the [<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp①⓪">Clamp</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④③">extended attribute</a> on all three arguments, while the other does not:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">GraphicsContext</c-> {
  <c- b="">void</c-> <c- g="">setColor</c->(<c- b="">octet</c-> <c- g="">red</c->, <c- b="">octet</c-> <c- g="">green</c->, <c- b="">octet</c-> <c- g="">blue</c->);
  <c- b="">void</c-> <c- g="">setColorClamped</c->([<c- g="">Clamp</c->] <c- b="">octet</c-> <c- g="">red</c->, [<c- g="">Clamp</c->] <c- b="">octet</c-> <c- g="">green</c->, [<c- g="">Clamp</c->] <c- b="">octet</c-> <c- g="">blue</c->);
};
</pre>
    <p>A call to <code>setColorClamped</code> with
    Number values that are out of range for an <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet①⓪">octet</a></code> are clamped to the range [0, 255].</p>
<pre class="highlight"><c- c1="">// Get an instance of GraphicsContext.</c->
<c- a="">var</c-> context <c- o="">=</c-> getGraphicsContext<c- p="">();</c->

<c- c1="">// Calling the non-[Clamp] version uses ToUint8 to coerce the Numbers to octets.</c->
<c- c1="">// This is equivalent to calling setColor(255, 255, 1).</c->
context<c- p="">.</c->setColor<c- p="">(</c-><c- o="">-</c-><c- mi="">1</c-><c- p="">,</c-> <c- mi="">255</c-><c- p="">,</c-> <c- mi="">257</c-><c- p="">);</c->

<c- c1="">// Call setColorClamped with some out of range values.</c->
<c- c1="">// This is equivalent to calling setColorClamped(0, 255, 255).</c->
context<c- p="">.</c->setColorClamped<c- p="">(</c-><c- o="">-</c-><c- mi="">1</c-><c- p="">,</c-> <c- mi="">255</c-><c- p="">,</c-> <c- mi="">257</c-><c- p="">);</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.3" data-lt="Constructor" id="Constructor"><span class="secno">3.3.3. </span><span class="content">[Constructor]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor⑧">Constructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④④">extended attribute</a> appears on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦⓪">interface</a>, it indicates that
the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object②">interface object</a> for this interface
will have an [[Construct]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①⑤">internal method</a>,
allowing objects implementing the interface to be constructed.</p>
   <p>Multiple [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor⑨">Constructor</a></code>] extended
attributes may appear on a given interface.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①⓪">Constructor</a></code>]
extended attribute must either <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments②">take no arguments</a> or <a data-link-type="dfn" href="#dfn-xattr-argument-list" id="ref-for-dfn-xattr-argument-list①">take an argument list</a>.
The bare form, <code>[Constructor]</code>, has the same meaning as
using an empty argument list, <code>[Constructor()]</code>.  For each
[<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①①">Constructor</a></code>] extended attribute
on the interface, there will be a way to construct an object that implements
the interface by passing the specified arguments.</p>
   <p>The prose definition of a constructor must
either return an IDL value of a type corresponding to the interface
the [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①②">Constructor</a></code>]
extended attribute appears on, or throw an exception.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①③">Constructor</a></code>] and
[<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject③">NoInterfaceObject</a></code>]
extended attributes must not be specified on the same interface.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①④">Constructor</a></code>] extended attribute
must not be used on a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface①⑨">callback interface</a>.</p>
   <p>See <a href="#interface-object">§3.6.1 Interface object</a> for details on how a constructor
for an interface is to be implemented.</p>
   <div class="example" id="example-7529405d">
    <a class="self-link" href="#example-7529405d"></a> 
    <p>The following IDL defines two interfaces.  The second has the
    [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①⑤">Constructor</a></code>] extended
    attribute, while the first does not.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">NodeList</c-> {
  <c- n="">Node</c-> <c- g="">item</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">index</c->);
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">length</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->,
 <c- g="">Constructor</c->,
 <c- g="">Constructor</c->(<c- b="">double</c-> <c- g="">radius</c->)]
<c- b="">interface</c-> <c- g="">Circle</c-> {
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">r</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">cx</c->;
  <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">cy</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">circumference</c->;
};
</pre>
    <p>An ECMAScript implementation supporting these interfaces would
    have a [[Construct]] property on the <code class="idl">Circle</code> interface object which would
    return a new object that implements the interface.  It would take
    either zero or one argument.  The <code class="idl">NodeList</code> interface object would not
    have a [[Construct]] property.</p>
<pre class="highlight"><c- a="">var</c-> x <c- o="">=</c-> <c- k="">new</c-> Circle<c- p="">();</c->      <c- c1="">// The uses the zero-argument constructor to create a</c->
                           <c- c1="">// reference to a platform object that implements the</c->
                           <c- c1="">// Circle interface.</c->

<c- a="">var</c-> y <c- o="">=</c-> <c- k="">new</c-> Circle<c- p="">(</c-><c- mf="">1.25</c-><c- p="">);</c->  <c- c1="">// This also creates a Circle object, this time using</c->
                           <c- c1="">// the one-argument constructor.</c->

<c- a="">var</c-> z <c- o="">=</c-> <c- k="">new</c-> NodeList<c- p="">();</c->    <c- c1="">// This would throw a TypeError, since no</c->
                           <c- c1="">// [Constructor] is declared.</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.4" data-lt="Default" id="Default"><span class="secno">3.3.4. </span><span class="content">[Default]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default②">Default</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④⑤">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①⑧">regular operation</a>,
then it indicates that steps described in the <a data-link-type="dfn" href="#corresponding-default-operation" id="ref-for-corresponding-default-operation">corresponding default operation</a> must be carried out when the operation is invoked.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default③">Default</a></code>] extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments③">take no arguments</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default④">Default</a></code>] extended attribute must not
be used on anything other than a <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation①⑨">regular operation</a> for which a <a data-link-type="dfn" href="#corresponding-default-operation" id="ref-for-corresponding-default-operation①">corresponding default operation</a> has been defined.</p>
   <div class="example" id="example-tojson-default">
    <a class="self-link" href="#example-tojson-default"></a> 
    <p>As an example, the [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default⑤">Default</a></code>] extended attribute is suitable
    for use on <code>toJSON</code> <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②⓪">regular operations</a>:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Animal</c-> {
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">name</c->;
  <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">short</c-> <c- g="">age</c->;
  [<c- g="">Default</c->] <c- b="">object</c-> <c- g="">toJSON</c->();
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Human</c-> : <c- n="">Animal</c-> {
  <c- b="">attribute</c-> <c- n="">Dog</c->? <c- g="">pet</c->;
  [<c- g="">Default</c->] <c- b="">object</c-> <c- g="">toJSON</c->();
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Dog</c-> : <c- n="">Animal</c-> {
  <c- b="">attribute</c-> <c- b="">DOMString</c->? <c- g="">breed</c->;
};

</pre>
    <p>In the ECMAScript language binding, there would exist a <code>toJSON()</code> method on <code class="idl">Animal</code>, <code class="idl">Human</code>,
    and (via inheritance) <code class="idl">Dog</code> objects:</p>
<pre class="highlight"><c- c1="">// Get an instance of Human.</c->
<c- a="">var</c-> alice <c- o="">=</c-> getHuman<c- p="">();</c->

<c- c1="">// Evaluates to an object like this (notice how "pet" still holds</c->
<c- c1="">// an instance of Dog at this point):</c->
<c- c1="">//</c->
<c- c1="">// {</c->
<c- c1="">//   name: "Alice",</c->
<c- c1="">//   age: 59,</c->
<c- c1="">//   pet: Dog</c->
<c- c1="">// }</c->
alice<c- p="">.</c->toJSON<c- p="">();</c->

<c- c1="">// Evaluates to an object like this (notice how "breed" is absent,</c->
<c- c1="">// as the Dog interface doesn’t declare a default toJSON operation):</c->
<c- c1="">//</c->
<c- c1="">// {</c->
<c- c1="">//   name: "Tramp",</c->
<c- c1="">//   age: 6</c->
<c- c1="">// }</c->
alice<c- p="">.</c->pet<c- p="">.</c->toJSON<c- p="">();</c->

<c- c1="">// Evaluates to a string like this:</c->
<c- c1="">// '{"name":"Alice","age":59,"pet":{"name":"Tramp","age":6}}'</c->
JSON<c- p="">.</c->stringify<c- p="">(</c->alice<c- p="">);</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.5" data-lt="EnforceRange" id="EnforceRange"><span class="secno">3.3.5. </span><span class="content">[EnforceRange]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange④">EnforceRange</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④⑥">extended attribute</a> appears on one of the <a data-link-type="dfn" href="#dfn-integer-type" id="ref-for-dfn-integer-type④">integer types</a>, it creates
a new IDL type such that that when an ECMAScript Number is converted to the IDL
type, out-of-range values will cause an exception to be thrown, rather than being converted to a
valid value using using the operators that use a modulo operation (<a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toint32" id="ref-for-sec-toint32①">ToInt32</a>, <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-touint32" id="ref-for-sec-touint32①">ToUint32</a>, etc.).
The Number will be rounded toward zero before being checked against its range.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange⑤">EnforceRange</a></code>]
extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments④">take no arguments</a>.</p>
   <p>A type annotated with the [<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange⑥">EnforceRange</a></code>] extended attribute must not appear in a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only⑧">read only</a> attribute. A type must not be <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①⑤">associated with</a> both the [<code class="idl"><a data-link-type="idl" href="#Clamp" id="ref-for-Clamp①①">Clamp</a></code>] and [<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange⑦">EnforceRange</a></code>] extended attributes. A type that is not an <a data-link-type="dfn" href="#dfn-integer-type" id="ref-for-dfn-integer-type⑤">integer type</a> must not be <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①⑥">associated with</a> the
[<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange⑧">EnforceRange</a></code>] extended attribute.</p>
   <p>See the rules for converting ECMAScript values to the various IDL integer
types in <a href="#es-type-mapping">§3.2 ECMAScript type mapping</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange⑨">EnforceRange</a></code>] entails.</p>
   <div class="example" id="example-9049fbcd">
    <a class="self-link" href="#example-9049fbcd"></a> 
    <p>In the following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③④">IDL fragment</a>,
    two <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③⑤">operations</a> are declared that
    take three <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet①①">octet</a></code> arguments; one uses
    the [<code class="idl"><a data-link-type="idl" href="#EnforceRange" id="ref-for-EnforceRange①⓪">EnforceRange</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④⑦">extended attribute</a> on all three arguments, while the other does not:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">GraphicsContext</c-> {
  <c- b="">void</c-> <c- g="">setColor</c->(<c- b="">octet</c-> <c- g="">red</c->, <c- b="">octet</c-> <c- g="">green</c->, <c- b="">octet</c-> <c- g="">blue</c->);
  <c- b="">void</c-> <c- g="">setColorEnforcedRange</c->([<c- g="">EnforceRange</c->] <c- b="">octet</c-> <c- g="">red</c->, [<c- g="">EnforceRange</c->] <c- b="">octet</c-> <c- g="">green</c->, [<c- g="">EnforceRange</c->] <c- b="">octet</c-> <c- g="">blue</c->);
};
</pre>
    <p>In an ECMAScript implementation of the IDL, a call to setColorEnforcedRange with
    Number values that are out of range for an <code class="idl"><a data-link-type="idl" href="#idl-octet" id="ref-for-idl-octet①②">octet</a></code> will result in an exception being
    thrown.</p>
<pre class="highlight"><c- c1="">// Get an instance of GraphicsContext.</c->
<c- a="">var</c-> context <c- o="">=</c-> getGraphicsContext<c- p="">();</c->

<c- c1="">// Calling the non-[EnforceRange] version uses ToUint8 to coerce the Numbers to octets.</c->
<c- c1="">// This is equivalent to calling setColor(255, 255, 1).</c->
context<c- p="">.</c->setColor<c- p="">(</c-><c- o="">-</c-><c- mi="">1</c-><c- p="">,</c-> <c- mi="">255</c-><c- p="">,</c-> <c- mi="">257</c-><c- p="">);</c->

<c- c1="">// When setColorEnforcedRange is called, Numbers are rounded towards zero.</c->
<c- c1="">// This is equivalent to calling setColor(0, 255, 255).</c->
context<c- p="">.</c->setColorEnforcedRange<c- p="">(</c-><c- o="">-</c-><c- mf="">0.9</c-><c- p="">,</c-> <c- mi="">255</c-><c- p="">,</c-> <c- mf="">255.2</c-><c- p="">);</c->

<c- c1="">// The following will cause a TypeError to be thrown, since even after</c->
<c- c1="">// rounding the first and third argument values are out of range.</c->
context<c- p="">.</c->setColorEnforcedRange<c- p="">(</c-><c- o="">-</c-><c- mi="">1</c-><c- p="">,</c-> <c- mi="">255</c-><c- p="">,</c-> <c- mi="">256</c-><c- p="">);</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.6" data-lt="Exposed" id="Exposed"><span class="secno">3.3.6. </span><span class="content">[Exposed]</span></h4>
   <p>When the [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①⓪">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④⑧">extended attribute</a> appears on
an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦①">interface</a>, <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①⓪">partial interface</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③⓪">interface mixin</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin⑥">partial interface mixin</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①⓪">namespace</a>, <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace②">partial namespace</a>, or
an individual <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①①">interface member</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member⑨">interface mixin member</a>, or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member③">namespace member</a>,
it indicates that the construct is exposed
on that particular set of global interfaces.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①①">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute④⑨">extended attribute</a> must either <a data-link-type="dfn" href="#dfn-xattr-identifier" id="ref-for-dfn-xattr-identifier">take an identifier</a> or <a data-link-type="dfn" href="#dfn-xattr-identifier-list" id="ref-for-dfn-xattr-identifier-list">take an identifier list</a>.
Each of the identifiers mentioned must be a <a data-link-type="dfn" href="#dfn-global-name" id="ref-for-dfn-global-name">global name</a> and be unique.
This list of identifiers is known as the construct’s <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="own-exposure-set">own exposure set</dfn>.</p>
   <div class="algorithm" data-algorithm="exposure set">
    <p>To get the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-exposure-set">exposure set</dfn> of a construct <var>C</var>,
    run the following steps:</p>
    <ol>
     <li data-md="">
      <p class="assertion">Assert: <var>C</var> is an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦②">interface</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①①">namespace</a>, <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①②">interface member</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①⓪">interface mixin member</a>,
or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member④">namespace member</a>.</p>
     </li><li data-md="">
      <p>Let <var>H</var> be <var>C</var>’s <a data-link-type="dfn" href="#host-interfaces" id="ref-for-host-interfaces①">host interface</a> if <var>C</var> is an <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①①">interface mixin member</a>, or null otherwise.</p>
     </li><li data-md="">
      <p>If <var>C</var> is an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①③">interface member</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①②">interface mixin member</a>, or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member⑤">namespace member</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If the [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①②">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤⓪">extended attribute</a> is specified on <var>C</var>, then:</p>
        <ol>
         <li data-md="">
          <p>If <var>H</var> is set, return the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-intersection" id="ref-for-set-intersection">intersection</a> of <var>C</var>’s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set">own exposure set</a> and <var>H</var>’s <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set">exposure set</a>.</p>
         </li><li data-md="">
          <p>Otherwise, return <var>C</var>’s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set①">own exposure set</a>.</p>
        </li></ol>
       </li><li data-md="">
        <p>Otherwise, set <var>C</var> to be the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦③">interface</a>, <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①①">partial interface</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③①">interface mixin</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin⑦">partial interface mixin</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①②">namespace</a>, or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace③">partial namespace</a> <var>C</var> is declared on.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>C</var> is a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①②">partial interface</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin⑧">partial interface mixin</a>, or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace④">partial namespace</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If the [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①③">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤①">extended attribute</a> is specified on <var>C</var>, then:</p>
        <ol>
         <li data-md="">
          <p>If <var>H</var> is set, return the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-intersection" id="ref-for-set-intersection①">intersection</a> of <var>C</var>’s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set②">own exposure set</a> and <var>H</var>’s <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set①">exposure set</a>.</p>
         </li><li data-md="">
          <p>Otherwise, return <var>C</var>’s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set③">own exposure set</a>.</p>
        </li></ol>
       </li><li data-md="">
        <p>Otherwise, set <var>C</var> to be the original <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦④">interface</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③②">interface mixin</a>, or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①③">namespace</a> definition of <var>C</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>C</var> is an <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③③">interface mixin</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If the [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①④">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤②">extended attribute</a> is specified on <var>C</var>,
then return the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-intersection" id="ref-for-set-intersection②">intersection</a> of <var>C</var>’s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set④">own exposure set</a> and <var>H</var>’s <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set②">exposure set</a>.</p>
       </li><li data-md="">
        <p>Otherwise, set <var>C</var> to <var>H</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p class="assertion">Assert: <var>C</var> is a <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦⑤">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①④">namespace</a>.</p>
     </li><li data-md="">
      <p class="assertion">Assert: The [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①⑤">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤③">extended attribute</a> is specified on <var>C</var>.</p>
     </li><li data-md="">
      <p>Return <var>C</var>’s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set⑤">own exposure set</a>.</p>
    </li></ol>
   </div>
   <p>If [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①⑥">Exposed</a></code>] appears on an <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded①①">overloaded</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③⑥">operation</a>,
then it must appear identically on all overloads.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①⑦">Exposed</a></code>] extended attribute must not be specified both on
an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①④">interface</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①③">mixin</a>, or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member⑥">namespace member</a>, and on
the <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①③">partial interface</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin⑨">partial interface mixin</a>, or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace⑤">partial namespace</a> definition
the <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①⓪">member</a> is declared on.</p>
   <p class="note" role="note"><span>Note:</span> This is because adding an [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①⑧">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤④">extended attribute</a> on a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①④">partial interface</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①⓪">partial interface mixin</a>, or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace⑥">partial namespace</a> is shorthand for annotating each of its <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①①">members</a>.</p>
   <p>If [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed①⑨">Exposed</a></code>] appears on a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①⑤">partial interface</a> or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace⑦">partial namespace</a>,
then the partial’s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set⑥">own exposure set</a> must be a subset of
the <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set③">exposure set</a> of the partial’s original <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦⑥">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①⑤">namespace</a>.</p>
   <p>If [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②⓪">Exposed</a></code>] appears on an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①⑤">interface</a> or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member⑦">namespace member</a>,
then the <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①②">member</a>'s <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set④">exposure set</a> must be a subset
of the <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set⑤">exposure set</a> of the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦⑦">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①⑥">namespace</a> it is a member of.</p>
   <p>If [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②①">Exposed</a></code>] appears both on a <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①①">partial interface mixin</a> and its original <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③④">interface mixin</a>,
then the <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①②">partial interface mixin</a>'s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set⑦">own exposure set</a> must be a subset of the <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③⑤">interface mixin</a>'s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set⑧">own exposure set</a>.</p>
   <p>If [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②②">Exposed</a></code>] appears both on an <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①④">interface mixin member</a> and the <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③⑥">interface mixin</a> it is a member of,
then the <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①⑤">interface mixin members</a>'s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set⑨">own exposure set</a> must be a subset of the <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③⑦">interface mixin</a>'s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set①⓪">own exposure set</a>.</p>
   <p>If an interface <var>X</var> <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit⑥">inherits</a> from another interface <var>Y</var> then the <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set⑥">exposure set</a> of <var>X</var> must be a subset of the <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set⑦">exposure set</a> of <var>Y</var>.</p>
   <p class="note" role="note"><span>Note:</span> As an <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③⑧">interface mixin</a> can be <a data-link-type="dfn" href="#include" id="ref-for-include⑨">included</a> by different <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦⑧">interfaces</a>,
the <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set⑧">exposure set</a> of its <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①⑥">members</a> is a function of
the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑦⑨">interface</a> that <a data-link-type="dfn" href="#include" id="ref-for-include①⓪">includes</a> them.
If the <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①⑦">interface mixin member</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①③">partial interface mixin</a>, or <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin③⑨">interface mixin</a> is annotated with an [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②③">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤⑤">extended attribute</a>,
then the <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①⑧">interface mixin member</a>'s <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set⑨">exposure set</a> is the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#set-intersection" id="ref-for-set-intersection③">intersection</a> of the relevant construct’s <a data-link-type="dfn" href="#own-exposure-set" id="ref-for-own-exposure-set①①">own exposure set</a> with the the <a data-link-type="dfn" href="#host-interfaces" id="ref-for-host-interfaces②">host interface</a>'s <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set①⓪">exposure set</a>.
Otherwise, it is the <a data-link-type="dfn" href="#host-interfaces" id="ref-for-host-interfaces③">host interface</a>'s <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set①①">exposure set</a>.</p>
   <div class="algorithm" data-algorithm="exposed">
     An <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧⓪">interface</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①⑦">namespace</a>, or <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①③">member</a> <var>construct</var> is <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-exposed">exposed</dfn> in a given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm②">Realm</a> <var>realm</var> if the following steps return true: 
    <ol>
     <li data-md="">
      <p>If <var>realm</var>.[[GlobalObject]] does not implement an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧①">interface</a> that is in <var>construct</var>’s <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set①②">exposure set</a>, then return false.</p>
     </li><li data-md="">
      <p>If <var>construct</var> is <a data-link-type="dfn" href="#available-in-both-secure-and-non-secure-contexts" id="ref-for-available-in-both-secure-and-non-secure-contexts">available in both secure and non-secure contexts</a>,
then return true.</p>
     </li><li data-md="">
      <p>If the <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#relevant-settings-object" id="ref-for-relevant-settings-object">relevant settings object</a> of <var>realm</var>.[[GlobalObject]] is a <a data-link-type="dfn" href="https://w3c.github.io/webappsec-secure-contexts/#secure-contexts" id="ref-for-secure-contexts">secure context</a>,
then return true.</p>
     </li><li data-md="">
      <p>Otherwise, return false.</p>
    </li></ol>
   </div>
   <p class="note" role="note"><span>Note:</span> Since it is not possible for the <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#relevant-settings-object" id="ref-for-relevant-settings-object①">relevant settings object</a> for an ECMAScript global object to change whether it is a <a data-link-type="dfn" href="https://w3c.github.io/webappsec-secure-contexts/#secure-contexts" id="ref-for-secure-contexts①">secure context</a> or not over time, an implementation’s
decision to create properties for an interface or interface member
can be made once, at the time the <a data-link-type="dfn" href="#dfn-initial-object" id="ref-for-dfn-initial-object②">initial objects</a> are created.</p>
   <p>See <a href="#es-interfaces">§3.6 Interfaces</a>, <a href="#es-constants">§3.6.6 Constants</a>, <a href="#es-attributes">§3.6.7 Attributes</a>, <a href="#es-operations">§3.6.8 Operations</a>, and <a href="#es-iterators">§3.6.9 Common iterator behavior</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②④">Exposed</a></code>] entails.</p>
   <div class="example" id="example-b0ec197f">
    <a class="self-link" href="#example-b0ec197f"></a> 
    <p>[<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②⑤">Exposed</a></code>] is intended to be used to control whether <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧②">interfaces</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①⑧">namespaces</a>,
    or individual <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①⑥">interface</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member①⑨">mixin</a> or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member⑧">namespace members</a> are available for use in workers, <code class="idl"><a data-link-type="idl" href="https://drafts.css-houdini.org/worklets/#worklet" id="ref-for-worklet">Worklet</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window">Window</a></code>, or any combination of the above.</p>
    <p>The following IDL fragment shows how that might be achieved:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->, <c- g="">Global</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Window</c-> {
  // ...
};

// By using the same identifier Worker for both SharedWorkerGlobalScope
// and DedicatedWorkerGlobalScope, both can be addressed in an [Exposed]
// extended attribute at once.
[<c- g="">Exposed</c->=<c- n="">Worker</c->, <c- g="">Global</c->=<c- n="">Worker</c->]
<c- b="">interface</c-> <c- g="">SharedWorkerGlobalScope</c-> : <c- n="">WorkerGlobalScope</c-> {
  // ...
};

[<c- g="">Exposed</c->=<c- n="">Worker</c->, <c- g="">Global</c->=<c- n="">Worker</c->]
<c- b="">interface</c-> <c- g="">DedicatedWorkerGlobalScope</c-> : <c- n="">WorkerGlobalScope</c-> {
  // ...
};

// Dimensions is available for use in workers and on the main thread.
[<c- g="">Exposed</c->=(<c- n="">Window</c->,<c- n="">Worker</c->), <c- g="">Constructor</c->(<c- b="">double</c-> <c- g="">width</c->, <c- b="">double</c-> <c- g="">height</c->)]
<c- b="">interface</c-> <c- g="">Dimensions</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">width</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">double</c-> <c- g="">height</c->;
};

// WorkerNavigator is only available in workers.  Evaluating WorkerNavigator
// in the global scope of a worker would give you its interface object, while
// doing so on the main thread will give you a ReferenceError.
[<c- g="">Exposed</c->=<c- n="">Worker</c->]
<c- b="">interface</c-> <c- g="">WorkerNavigator</c-> {
  // ...
};

// Node is only available on the main thread.  Evaluating Node
// in the global scope of a worker would give you a ReferenceError.
[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Node</c-> {
  // ...
};

// MathUtils is available for use in workers and on the main thread.
[<c- g="">Exposed</c->=(<c- n="">Window</c->,<c- n="">Worker</c->)]
<c- b="">namespace</c-> <c- g="">MathUtils</c-> {
  <c- b="">double</c-> <c- g="">someComplicatedFunction</c->(<c- b="">double</c-> <c- g="">x</c->, <c- b="">double</c-> <c- g="">y</c->);
};

// WorkerUtils is only available in workers.  Evaluating WorkerUtils
// in the global scope of a worker would give you its namespace object, while
// doing so on the main thread will give you a ReferenceError.
[<c- g="">Exposed</c->=<c- n="">Worker</c->]
<c- b="">namespace</c-> <c- g="">WorkerUtils</c-> {
  <c- b="">void</c-> <c- g="">setPriority</c->(<c- b="">double</c-> <c- g="">x</c->);
};

// NodeUtils is only available in the main thread.  Evaluating NodeUtils
// in the global scope of a worker would give you a ReferenceError.
[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">namespace</c-> <c- g="">NodeUtils</c-> {
  <c- b="">DOMString</c-> <c- g="">getAllText</c->(<c- n="">Node</c-> <c- g="">node</c->);
};
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.7" data-lt="Global" dfn="" id="Global"><span class="secno">3.3.7. </span><span class="content">[Global]</span><span id="PrimaryGlobal"></span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global③">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤⑥">extended attribute</a> appears on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧③">interface</a>,
it indicates that objects implementing this interface can
be used as the global object in an ECMAScript environment,
and that the structure of the prototype chain and how
properties corresponding to <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①⑦">interface members</a> will be reflected on the prototype objects will be different from other
interfaces. Specifically:</p>
   <ol>
    <li data-md="">
     <p>Any <a data-link-type="dfn" href="#idl-named-properties" id="ref-for-idl-named-properties③">named properties</a> will be exposed on an object in the prototype chain – the <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object①">named properties object</a> –
rather than on the object itself.</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①⑧">Interface members</a> from the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧④">interface</a> will correspond to properties on the object itself rather than on <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object④">interface prototype objects</a>.</p>
   </li></ol>
   <div class="note" role="note">
    <p>Placing named properties on an object in the prototype chain
    is done so that variable declarations and bareword assignments
    will shadow the named property with a property on the global
    object itself.</p>
    <p>Placing properties corresponding to interface members on
    the object itself will mean that common feature detection
    methods like the following will work:</p>
<pre class="highlight"><c- a="">var</c-> indexedDB <c- o="">=</c-> window<c- p="">.</c->indexedDB <c- o="">||</c-> window<c- p="">.</c->webkitIndexedDB <c- o="">||</c->
                window<c- p="">.</c->mozIndexedDB <c- o="">||</c-> window<c- p="">.</c->msIndexedDB<c- p="">;</c->

<c- a="">var</c-> requestAnimationFrame <c- o="">=</c-> window<c- p="">.</c->requestAnimationFrame <c- o="">||</c->
                            window<c- p="">.</c->mozRequestAnimationFrame <c- o="">||</c-> <c- p="">...;</c->
</pre>
    <p>Because of the way variable declarations are handled in
    ECMAScript, the code above would result in the <code>window.indexedDB</code> and <code>window.requestAnimationFrame</code> evaluating
    to <emu-val>undefined</emu-val>, as the shadowing variable
    property would already have been created before the
    assignment is evaluated.</p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global④">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤⑦">extended attributes</a> is
used on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧⑤">interface</a>, then:</p>
   <ul>
    <li data-md="">
     <p>The interface must not define a <a data-link-type="dfn" href="#dfn-named-property-setter" id="ref-for-dfn-named-property-setter②">named property setter</a>.</p>
    </li><li data-md="">
     <p>The interface must not define <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter④">indexed property getters</a> or <a data-link-type="dfn" href="#dfn-indexed-property-setter" id="ref-for-dfn-indexed-property-setter②">setters</a>.</p>
    </li><li data-md="">
     <p>The interface must not also be declared with the [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins②">OverrideBuiltins</a></code>]
extended attribute.</p>
    </li><li data-md="">
     <p>The interface must not <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit⑦">inherit</a> from another interface with the
[<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins③">OverrideBuiltins</a></code>] extended attribute.</p>
    </li><li data-md="">
     <p>Any other interface must not <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit⑧">inherit</a> from it.</p>
   </li></ul>
   <p>If [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global⑤">Global</a></code>] is specified on
a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①⑥">partial interface</a> definition, then that partial interface definition must
be the part of the interface definition that defines
the <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter④">named property getter</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global⑥">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤⑧">extended attribute</a> must not
be used on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧⑥">interface</a> that can have more
than one object implementing it in the same ECMAScript global environment.</p>
   <p class="note" role="note"><span>Note:</span> This is because the <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object②">named properties object</a>,
which exposes the named properties, is in the prototype chain, and it would not make
sense for more than one object’s named properties to be exposed on an object that
all of those objects inherit from.</p>
   <p>If an interface is declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global⑦">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑤⑨">extended attribute</a>, then
there must not be more than one <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①④">member</a> across
the interface
with the same <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤④">identifier</a>.
There also must not be more than
one <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier⑤">stringifier</a> or more than one <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration⑨">iterable declaration</a>, <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration⑦">maplike declaration</a> or <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration⑦">setlike declaration</a> across those interfaces.</p>
   <p class="note" role="note"><span>Note:</span> This is because all of the <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①⑤">members</a> of the interface
get flattened down on to the object that implements the interface.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global⑧">Global</a></code>] extended attribute
can also be used to give a name to one or more global interfaces,
which can then be referenced by the [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②⑥">Exposed</a></code>]
extended attribute.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global⑨">Global</a></code>] extended attribute must either <a data-link-type="dfn" href="#dfn-xattr-identifier" id="ref-for-dfn-xattr-identifier①">take an identifier</a> or <a data-link-type="dfn" href="#dfn-xattr-identifier-list" id="ref-for-dfn-xattr-identifier-list①">take an identifier list</a>.</p>
   <p>The identifier argument or identifier list argument the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①⓪">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥⓪">extended attribute</a> is declared with
define the interface’s <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-global-name">global names</dfn>.</p>
   <p class="note" role="note"><span>Note:</span> The identifier argument list exists so that more than one global interface can
be addressed with a single name in an [<code class="idl"><a data-link-type="idl" href="#Exposed" id="ref-for-Exposed②⑦">Exposed</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥①">extended attribute</a>.</p>
   <p>See <a href="#named-properties-object">§3.6.5 Named properties object</a> for the specific requirements
that the use of [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①①">Global</a></code>] entails for <a data-link-type="dfn" href="#idl-named-properties" id="ref-for-idl-named-properties①">named properties</a>,
and <a href="#es-constants">§3.6.6 Constants</a>, <a href="#es-attributes">§3.6.7 Attributes</a> and <a href="#es-operations">§3.6.8 Operations</a> for the requirements relating to the location of properties
corresponding to <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member①⑨">interface members</a>.</p>
   <div class="example" id="example-2e291568">
    <a class="self-link" href="#example-2e291568"></a> 
    <p>The <code class="idl">Window</code> interface exposes frames as properties on the <code class="idl">Window</code> object.  Since the <code class="idl">Window</code> object also serves as the
    ECMAScript global object, variable declarations or assignments to the named properties
    will result in them being replaced by the new value.  Variable declarations for
    attributes will not create a property that replaces the existing one.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->, <c- g="">Global</c->]
<c- b="">interface</c-> <c- g="">Window</c-> {
  <c- b="">getter</c-> <c- b="">any</c-> (<c- b="">DOMString</c-> <c- g="">name</c->);
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">name</c->;
  // ...
};
</pre>
    <p>The following HTML document illustrates how the named properties on the <code class="idl">Window</code> object can be shadowed, and how
    the property for an attribute will not be replaced when declaring
    a variable of the same name:</p>
<pre class="highlight"><c- cp="">&lt;!DOCTYPE html&gt;</c->
<c- p="">&lt;</c-><c- f="">title</c-><c- p="">&gt;</c->Variable declarations and assignments on Window<c- p="">&lt;/</c-><c- f="">title</c-><c- p="">&gt;</c->
<c- p="">&lt;</c-><c- f="">iframe</c-> <c- e="">name</c-><c- o="">=</c-><c- s="">abc</c-><c- p="">&gt;&lt;/</c-><c- f="">iframe</c-><c- p="">&gt;</c->
<c- c="">&lt;!-- Shadowing named properties --&gt;</c->
<c- p="">&lt;</c-><c- f="">script</c-><c- p="">&gt;</c->
  window<c- p="">.</c->abc<c- p="">;</c->    <c- c1="">// Evaluates to the iframe’s Window object.</c->
  abc <c- o="">=</c-> <c- mi="">1</c-><c- p="">;</c->       <c- c1="">// Shadows the named property.</c->
  window<c- p="">.</c->abc<c- p="">;</c->    <c- c1="">// Evaluates to 1.</c->
<c- p="">&lt;/</c-><c- f="">script</c-><c- p="">&gt;</c->

<c- c="">&lt;!-- Preserving properties for IDL attributes --&gt;</c->
<c- p="">&lt;</c-><c- f="">script</c-><c- p="">&gt;</c->
  Window<c- p="">.</c->prototype<c- p="">.</c->def <c- o="">=</c-> <c- mi="">2</c-><c- p="">;</c->         <c- c1="">// Places a property on the prototype.</c->
  window<c- p="">.</c->hasOwnProperty<c- p="">(</c-><c- u="">"length"</c-><c- p="">);</c->  <c- c1="">// Evaluates to true.</c->
  length<c- p="">;</c->                           <c- c1="">// Evaluates to 1.</c->
  def<c- p="">;</c->                              <c- c1="">// Evaluates to 2.</c->
<c- p="">&lt;/</c-><c- f="">script</c-><c- p="">&gt;</c->
<c- p="">&lt;</c-><c- f="">script</c-><c- p="">&gt;</c->
  <c- a="">var</c-> length<c- p="">;</c->                       <c- c1="">// Variable declaration leaves existing property.</c->
  length<c- p="">;</c->                           <c- c1="">// Evaluates to 1.</c->
  <c- a="">var</c-> def<c- p="">;</c->                          <c- c1="">// Variable declaration creates shadowing property.</c->
  def<c- p="">;</c->                              <c- c1="">// Evaluates to undefined.</c->
<c- p="">&lt;/</c-><c- f="">script</c-><c- p="">&gt;</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.8" data-lt="LegacyNamespace" id="LegacyNamespace"><span class="secno">3.3.8. </span><span class="content">[LegacyNamespace]</span></h4>
   <p class="advisement"> The [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace">LegacyNamespace</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥②">extended attribute</a> is an undesirable feature.
    It exists only so that legacy Web platform features can be specified.
    It should not be used in specifications
    unless required to specify the behavior of legacy APIs,
    or for consistency with these APIs.
    Instead, interface names
    can be formed with a naming convention of starting with a particular prefix for
    a set of interfaces, as part of the identifier, rather than using a namespace.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[LegacyNamespace]">filing an issue</a> before proceeding. </p>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace①">LegacyNamespace</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥③">extended attribute</a> appears on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧⑦">interface</a>, it indicates that
the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object③">interface object</a> for this interface will not be created as a property of the global
object, but rather as a property of the <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace①⑨">namespace</a> identified by the argument to the extended
attribute.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace②">LegacyNamespace</a></code>] extended attribute <a data-link-type="dfn" href="#dfn-xattr-identifier" id="ref-for-dfn-xattr-identifier②">take an identifier</a>.
This identifier must be the identifier of a namespace.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace③">LegacyNamespace</a></code>] and [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject④">NoInterfaceObject</a></code>]
extended attributes must not be specified on the same interface.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace④">LegacyNamespace</a></code>] extended attribute
must not be used on a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②⓪">callback interface</a>.</p>
   <p>See <a href="#namespace-object">§3.11.1 Namespace object</a> for details on how an interface is exposed on a namespace.</p>
   <div class="example" id="example-d151133b">
    <a class="self-link" href="#example-d151133b"></a> The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③⑤">IDL fragment</a> defines a <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②⓪">namespace</a> and an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧⑧">interface</a> which
    uses [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace⑤">LegacyNamespace</a></code>] to be defined inside of it. 
<pre class="highlight"><c- b="">namespace</c-> <c- g="">Foo</c-> { };

[<c- g="">LegacyNamespace</c->=<c- n="">Foo</c->, <c- g="">Constructor</c->]
<c- b="">interface</c-> <c- g="">Bar</c-> { };
</pre>
    <p>In an ECMAScript implementation of the above namespace and interface, the
    constructor Bar can be accessed as follows:</p>
<pre class="highlight"><c- a="">var</c-> instance <c- o="">=</c-> <c- k="">new</c-> Foo<c- p="">.</c->Bar<c- p="">();</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.9" data-lt="LegacyUnenumerableNamedProperties" id="LegacyUnenumerableNamedProperties"><span class="secno">3.3.9. </span><span class="content">[LegacyUnenumerableNamedProperties]</span></h4>
   <div class="advisement">
    <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyUnenumerableNamedProperties" id="ref-for-LegacyUnenumerableNamedProperties">LegacyUnenumerableNamedProperties</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥④">extended attribute</a> is an undesirable feature.
    It exists only so that legacy Web platform features can be specified.
    It should not be used in specifications
    unless required to specify the behavior of legacy APIs,
    or for consistency with these APIs.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[LegacyUnenumerableNamedProperties]">filing an issue</a> before proceeding.</p>
    <p><small class="non-normative"> The [<code class="idl"><a data-link-type="idl" href="#LegacyUnenumerableNamedProperties" id="ref-for-LegacyUnenumerableNamedProperties①">LegacyUnenumerableNamedProperties</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥⑤">extended attribute</a> appears on
        the following <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑧⑨">interfaces</a>: <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#htmlcollection" id="ref-for-htmlcollection">HTMLCollection</a></code>, <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#namednodemap" id="ref-for-namednodemap">NamedNodeMap</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmlallcollection" id="ref-for-htmlallcollection①">HTMLAllCollection</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/forms.html#htmlformelement" id="ref-for-htmlformelement">HTMLFormElement</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/system-state.html#pluginarray" id="ref-for-pluginarray">PluginArray</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/system-state.html#mimetypearray" id="ref-for-mimetypearray">MimeTypeArray</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/system-state.html#dom-plugin" id="ref-for-dom-plugin">Plugin</a></code>, and <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window①">Window</a></code>. <a data-link-type="biblio" href="#biblio-dom">[DOM]</a> <a data-link-type="biblio" href="#biblio-html">[HTML]</a> </small></p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#LegacyUnenumerableNamedProperties" id="ref-for-LegacyUnenumerableNamedProperties②">LegacyUnenumerableNamedProperties</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥⑥">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨⓪">interface</a> that <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties③">supports named properties</a>,
it indicates that all the interface’s named properties are unenumerable.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyUnenumerableNamedProperties" id="ref-for-LegacyUnenumerableNamedProperties③">LegacyUnenumerableNamedProperties</a></code>]
extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments⑤">take no arguments</a> and must not appear on an interface
that does not define a <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter⑤">named property getter</a>.</p>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#LegacyUnenumerableNamedProperties" id="ref-for-LegacyUnenumerableNamedProperties④">LegacyUnenumerableNamedProperties</a></code>]
extended attribute is specified on an interface, then it applies to all its derived interfaces and
must not be specified on any of them.</p>
   <p>See <a href="#legacy-platform-object-getownproperty" id="ref-for-legacy-platform-object-getownproperty">§3.8.1 [[GetOwnProperty]]</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#LegacyUnenumerableNamedProperties" id="ref-for-LegacyUnenumerableNamedProperties⑤">LegacyUnenumerableNamedProperties</a></code>]
entails.</p>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.10" data-lt="LegacyWindowAlias" id="LegacyWindowAlias"><span class="secno">3.3.10. </span><span class="content">[LegacyWindowAlias]</span></h4>
   <div class="advisement">
    <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias②">LegacyWindowAlias</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥⑦">extended attribute</a> is an undesirable feature.
    It exists only so that legacy Web platform features can be specified.
    It should not be used in specifications
    unless required to specify the behavior of legacy APIs,
    or for consistency with these APIs.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[LegacyWindowAlias]">filing an issue</a> before proceeding.</p>
    <p><small class="non-normative"> The [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias③">LegacyWindowAlias</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥⑧">extended attribute</a> appears on the following <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨①">interfaces</a>: <code class="idl"><a data-link-type="idl" href="https://drafts.fxtf.org/geometry-1/#dompoint" id="ref-for-dompoint">DOMPoint</a></code>, <code class="idl"><a data-link-type="idl" href="https://drafts.fxtf.org/geometry-1/#domrect" id="ref-for-domrect">DOMRect</a></code>, <code class="idl"><a data-link-type="idl" href="https://drafts.fxtf.org/geometry-1/#dommatrix" id="ref-for-dommatrix">DOMMatrix</a></code>, and <code class="idl"><a data-link-type="idl" href="https://url.spec.whatwg.org/#url" id="ref-for-url">URL</a></code>. <a data-link-type="biblio" href="#biblio-geometry">[GEOMETRY]</a> <a data-link-type="biblio" href="#biblio-url">[URL]</a> </small></p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias④">LegacyWindowAlias</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑥⑨">extended attribute</a> appears on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨②">interface</a>,
it indicates that the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window②">Window</a></code> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨③">interface</a> will have a property
for each <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤⑤">identifier</a> mentioned in the extended attribute,
whose value is the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object④">interface object</a> for the interface.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias⑤">LegacyWindowAlias</a></code>] extended attribute must either <a data-link-type="dfn" href="#dfn-xattr-identifier" id="ref-for-dfn-xattr-identifier③">take an identifier</a> or <a data-link-type="dfn" href="#dfn-xattr-identifier-list" id="ref-for-dfn-xattr-identifier-list②">take an identifier list</a>.
The <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>s that occur after the
“<emu-t>=</emu-t>” are the [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias⑥">LegacyWindowAlias</a></code>]'s <dfn class="dfn-paneled" data-dfn-type="dfn" data-lt="LegacyWindowAlias identifier" data-noexport="" id="legacywindowalias-identifier">identifiers</dfn>.</p>
   <p>Each of the <a data-link-type="dfn" href="#legacywindowalias-identifier" id="ref-for-legacywindowalias-identifier">identifiers</a> of [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias⑦">LegacyWindowAlias</a></code>]
must not be the same as one used by a [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias⑧">LegacyWindowAlias</a></code>]
extended attribute on this interface or another interface,
must not be the same as the <a data-link-type="dfn" href="#namedconstructor-identifier" id="ref-for-namedconstructor-identifier">identifier</a> used by a [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor⑦">NamedConstructor</a></code>]
extended attribute on this interface or another interface,
must not be the same as an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤⑥">identifier</a> of an interface that has an <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object⑤">interface object</a>,
and must not be one of the <a data-link-type="dfn" href="#dfn-reserved-identifier" id="ref-for-dfn-reserved-identifier①">reserved identifiers</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias⑨">LegacyWindowAlias</a></code>] and [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject⑤">NoInterfaceObject</a></code>]
extended attributes must not be specified on the same interface.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias①⓪">LegacyWindowAlias</a></code>] extended attribute must not be specified
on an interface that does not include the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window③">Window</a></code> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨④">interface</a> in its <a data-link-type="dfn" href="#dfn-exposure-set" id="ref-for-dfn-exposure-set①③">exposure set</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias①①">LegacyWindowAlias</a></code>] extended attribute must not be specified
on a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②①">callback interface</a>.</p>
   <p>An interface must not have more than one [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias①②">LegacyWindowAlias</a></code>] extended attributes specified.</p>
   <p>See <a href="#es-interfaces">§3.6 Interfaces</a> for details on how legacy window aliases
are to be implemented.</p>
   <div class="example" id="example-17f666e0">
    <a class="self-link" href="#example-17f666e0"></a> 
    <p>The following IDL defines an interface that uses the
    [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias①③">LegacyWindowAlias</a></code>] extended attribute.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->,
 <c- g="">Constructor</c->,
 <c- g="">LegacyWindowAlias</c->=<c- n="">WebKitCSSMatrix</c->]
<c- b="">interface</c-> <c- g="">DOMMatrix</c-> : <c- n="">DOMMatrixReadOnly</c-> {
  // ...
};
</pre>
    <p>An ECMAScript implementation that supports this interface will
    expose two properties on the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window④">Window</a></code> object with the same value
    and the same characteristics;
    one for exposing the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object⑥">interface object</a> normally,
    and one for exposing it with a legacy name.</p>
<pre class="highlight">WebKitCSSMatrix <c- o="">===</c-> DOMMatrix<c- p="">;</c->     <c- c1="">// Evaluates to true.</c->

<c- a="">var</c-> m <c- o="">=</c-> <c- k="">new</c-> WebKitCSSMatrix<c- p="">();</c->     <c- c1="">// Creates a new object that</c->
                                   <c- c1="">// implements DOMMatrix.</c->

m<c- p="">.</c->constructor <c- o="">===</c-> DOMMatrix<c- p="">;</c->       <c- c1="">// Evaluates to true.</c->
m<c- p="">.</c->constructor <c- o="">===</c-> WebKitCSSMatrix<c- p="">;</c-> <c- c1="">// Evaluates to true.</c->
<c- p="">{}.</c->toString<c- p="">.</c->call<c- p="">(</c->m<c- p="">);</c->               <c- c1="">// Evaluates to '[object DOMMatrix]'.</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.11" data-lt="LenientSetter" id="LenientSetter"><span class="secno">3.3.11. </span><span class="content">[LenientSetter]</span></h4>
   <div class="advisement">
    <p>Specifications should not use [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter②">LenientSetter</a></code>]
    unless required for compatibility reasons.  Pages have been observed
    where authors have attempted to polyfill an IDL attribute by assigning
    to the property, but have accidentally done so even if the property
    exists.  In strict mode, this would cause an exception to be thrown,
    potentially breaking page.  Without [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter③">LenientSetter</a></code>],
    this could prevent a browser from shipping the feature.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[LenientSetter]">filing an issue</a> before proceeding.</p>
    <p><small class="non-normative"> The [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter④">LenientSetter</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦⓪">extended attribute</a> appears on
        the <code class="idl"><a data-link-type="idl" href="https://fullscreen.spec.whatwg.org/#dom-document-fullscreenenabled" id="ref-for-dom-document-fullscreenenabled">fullscreenEnabled</a></code> and <code class="idl"><a data-link-type="idl" href="https://fullscreen.spec.whatwg.org/#dom-document-fullscreenenabled" id="ref-for-dom-document-fullscreenenabled①">fullscreenEnabled</a></code> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③④">attributes</a> of the <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#document" id="ref-for-document">Document</a></code> interface, and on
        the <code class="idl"><a data-link-type="idl" href="https://fullscreen.spec.whatwg.org/#dom-document-fullscreenelement" id="ref-for-dom-document-fullscreenelement">fullscreenElement</a></code> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③⑤">attribute</a> of the <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#documentorshadowroot" id="ref-for-documentorshadowroot">DocumentOrShadowRoot</a></code> <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④⓪">interface mixin</a>. <a data-link-type="biblio" href="#biblio-fullscreen">[FULLSCREEN]</a> </small></p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter⑤">LenientSetter</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦①">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only⑨">read only</a> <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute⑧">regular attribute</a>,
it indicates that a no-op setter will be generated for the attribute’s
accessor property.  This results in erroneous assignments to the property
in strict mode to be ignored rather than causing an exception to be thrown.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter⑥">LenientSetter</a></code>] extended attribute
must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments⑥">take no arguments</a>.
It must not be used on anything other than
a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①⓪">read only</a> <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute⑨">regular attribute</a>.</p>
   <p>An attribute with the [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter⑦">LenientSetter</a></code>]
extended attribute must not also be declared
with the [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards②">PutForwards</a></code>]
or [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable②">Replaceable</a></code>] extended attributes.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter⑧">LenientSetter</a></code>] extended attribute must not be used on an attribute declared on a <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②①">namespace</a>.</p>
   <p>See the <a href="#es-attributes">Attributes</a> section for how
[<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter⑨">LenientSetter</a></code>] is to be implemented.</p>
   <div class="example" id="example-013acc78">
    <a class="self-link" href="#example-013acc78"></a> 
    <p>The following IDL fragment defines an interface that uses the
    [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter①⓪">LenientSetter</a></code>] extended
    attribute.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Example</c-> {
  [<c- g="">LenientSetter</c->] <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">x</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">y</c->;
};
</pre>
    <p>An ECMAScript implementation that supports this interface will
    have a setter on the accessor property that correspond to x,
    which allows any assignment to be ignored in strict mode.</p>
<pre class="highlight"><c- u="">"use strict"</c-><c- p="">;</c->

<c- a="">var</c-> example <c- o="">=</c-> getExample<c- p="">();</c->  <c- c1="">// Get an instance of Example.</c->

<c- c1="">// Fine; while we are in strict mode, there is a setter that is a no-op.</c->
example<c- p="">.</c->x <c- o="">=</c-> <c- mi="">1</c-><c- p="">;</c->

<c- c1="">// Throws a TypeError, since we are in strict mode and there is no setter.</c->
example<c- p="">.</c->y <c- o="">=</c-> <c- mi="">1</c-><c- p="">;</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.12" data-lt="LenientThis" id="LenientThis"><span class="secno">3.3.12. </span><span class="content">[LenientThis]</span></h4>
   <div class="advisement">
    <p>Specifications should not use [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis①">LenientThis</a></code>]
    unless required for compatibility reasons.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[LenientThis]">filing an issue</a> before proceeding.</p>
    <p><small class="non-normative"> The [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis②">LenientThis</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦②">extended attribute</a> appears on
        the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/webappapis.html#handler-onreadystatechange" id="ref-for-handler-onreadystatechange">onreadystatechange</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/webappapis.html#handler-onmouseenter" id="ref-for-handler-onmouseenter">onmouseenter</a></code>, and <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/webappapis.html#handler-onmouseleave" id="ref-for-handler-onmouseleave">onmouseleave</a></code> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③⑥">attributes</a> of the <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#document" id="ref-for-document①">Document</a></code> interface. <a data-link-type="biblio" href="#biblio-html">[HTML]</a> </small></p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis③">LenientThis</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦③">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①⓪">regular attribute</a>,
it indicates that invocations of the attribute’s getter or setter
with a <emu-val>this</emu-val> value that is not an
object that implements the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨⑤">interface</a> on which the attribute appears will be ignored.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis④">LenientThis</a></code>] extended attribute
must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments⑦">take no arguments</a>.
It must not be used on a <a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute⑦">static attribute</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis⑤">LenientThis</a></code>] extended attribute must not be used on an attribute declared on a <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②②">namespace</a>.</p>
   <p>See the <a href="#es-attributes">Attributes</a> section for how
[<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis⑥">LenientThis</a></code>]
is to be implemented.</p>
   <div class="example" id="example-27fc77a8">
    <a class="self-link" href="#example-27fc77a8"></a> 
    <p>The following IDL fragment defines an interface that uses the
    [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis⑦">LenientThis</a></code>] extended
    attribute.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Example</c-> {
  [<c- g="">LenientThis</c->] <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">x</c->;
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">y</c->;
};
</pre>
    <p>An ECMAScript implementation that supports this interface will
    allow the getter and setter of the accessor property that corresponds
    to x to be invoked with something other than an <code class="idl">Example</code> object.</p>
<pre class="highlight"><c- a="">var</c-> example <c- o="">=</c-> getExample<c- p="">();</c->  <c- c1="">// Get an instance of Example.</c->
<c- a="">var</c-> obj <c- o="">=</c-> <c- p="">{</c-> <c- p="">};</c->

<c- c1="">// Fine.</c->
example<c- p="">.</c->x<c- p="">;</c->

<c- c1="">// Ignored, since the this value is not an Example object and [LenientThis] is used.</c->
Object<c- p="">.</c->getOwnPropertyDescriptor<c- p="">(</c->Example<c- p="">.</c->prototype<c- p="">,</c-> <c- u="">"x"</c-><c- p="">).</c->get<c- p="">.</c->call<c- p="">(</c->obj<c- p="">);</c->

<c- c1="">// Also ignored, since Example.prototype is not an Example object and [LenientThis] is used.</c->
Example<c- p="">.</c->prototype<c- p="">.</c->x<c- p="">;</c->

<c- c1="">// Throws a TypeError, since Example.prototype is not an Example object.</c->
Example<c- p="">.</c->prototype<c- p="">.</c->y<c- p="">;</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.13" data-lt="NamedConstructor" id="NamedConstructor"><span class="secno">3.3.13. </span><span class="content">[NamedConstructor]</span></h4>
   <div class="advisement">
    <p>[<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor⑧">NamedConstructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦④">extended attribute</a> is an undesirable feature.
    It exists only so that legacy Web platform features can be specified.
    It should not be used in specifications
    unless required to specify the behavior of legacy APIs,
    or for consistency with these APIs.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[NamedConstructor]">filing an issue</a> before proceeding.</p>
    <p><small class="non-normative"> The [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor⑨">NamedConstructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦⑤">extended attribute</a> appears on the following <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨⑥">interfaces</a>: <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/media.html#htmlaudioelement" id="ref-for-htmlaudioelement">HTMLAudioElement</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/form-elements.html#htmloptionelement" id="ref-for-htmloptionelement">HTMLOptionElement</a></code>, and <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/embedded-content.html#htmlimageelement" id="ref-for-htmlimageelement">HTMLImageElement</a></code>. <a data-link-type="biblio" href="#biblio-html">[HTML]</a> </small></p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①⓪">NamedConstructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦⑥">extended attribute</a> appears on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨⑦">interface</a>,
it indicates that the ECMAScript global object will have a property with the
specified name whose value is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#constructor" id="ref-for-constructor①">constructor</a> that can
create objects that implement the interface.
Multiple [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①①">NamedConstructor</a></code>] extended
attributes may appear on a given interface.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①②">NamedConstructor</a></code>] extended attribute must either <a data-link-type="dfn" href="#dfn-xattr-identifier" id="ref-for-dfn-xattr-identifier④">take an identifier</a> or <a data-link-type="dfn" href="#dfn-xattr-named-argument-list" id="ref-for-dfn-xattr-named-argument-list②">take a named argument list</a>.
The <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> that occurs directly after the
“<emu-t>=</emu-t>” is the [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①③">NamedConstructor</a></code>]'s <dfn class="dfn-paneled" data-dfn-type="dfn" data-lt="NamedConstructor identifier" data-noexport="" id="namedconstructor-identifier">identifier</dfn>.
The first form, <code>[NamedConstructor=<emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>]</code>,
has the same meaning as using an empty argument list, <code>[NamedConstructor=<emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>()]</code>.
For each [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①④">NamedConstructor</a></code>] extended attribute on the interface,
there will be a way to construct an object that
implements the interface by passing the specified arguments to the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#constructor" id="ref-for-constructor②">constructor</a> that is the value of the aforementioned property.</p>
   <p>The <a data-link-type="dfn" href="#namedconstructor-identifier" id="ref-for-namedconstructor-identifier①">identifier</a> used for the named constructor must not
be the same as that used by a [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①⑤">NamedConstructor</a></code>]
extended attribute on another interface, must not
be the same as an <a data-link-type="dfn" href="#legacywindowalias-identifier" id="ref-for-legacywindowalias-identifier①">identifier</a> used by a [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias①④">LegacyWindowAlias</a></code>]
extended attribute on this interface or another interface,
must not be the same as an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤⑦">identifier</a> of an interface
that has an <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object⑦">interface object</a>,
and must not be one of the <a data-link-type="dfn" href="#dfn-reserved-identifier" id="ref-for-dfn-reserved-identifier②">reserved identifiers</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①⑥">NamedConstructor</a></code>] extended attribute
must not be used on a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②②">callback interface</a>.</p>
   <p>See <a href="#named-constructors">§3.6.2 Named constructors</a> for details on how named constructors
are to be implemented.</p>
   <div class="example" id="example-02aba4c3">
    <a class="self-link" href="#example-02aba4c3"></a> 
    <p>The following IDL defines an interface that uses the
    [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①⑦">NamedConstructor</a></code>] extended
    attribute.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->,
 <c- g="">NamedConstructor</c->=<c- n="">Audio</c->,
 <c- g="">NamedConstructor</c->=<c- n="">Audio</c->(<c- b="">DOMString</c-> <c- g="">src</c->)]
<c- b="">interface</c-> <c- g="">HTMLAudioElement</c-> : <c- n="">HTMLMediaElement</c-> {
  // ...
};
</pre>
    <p>An ECMAScript implementation that supports this interface will
    allow the construction of <code class="idl">HTMLAudioElement</code> objects using the <code class="idl">Audio</code> <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#constructor" id="ref-for-constructor③">constructor</a>.</p>
<pre class="highlight"><c- k="">typeof</c-> Audio<c- p="">;</c->                   <c- c1="">// Evaluates to 'function'.</c->

<c- a="">var</c-> a1 <c- o="">=</c-> <c- k="">new</c-> Audio<c- p="">();</c->           <c- c1="">// Creates a new object that implements</c->
                                <c- c1="">// HTMLAudioElement, using the zero-argument</c->
                                <c- c1="">// constructor.</c->

<c- a="">var</c-> a2 <c- o="">=</c-> <c- k="">new</c-> Audio<c- p="">(</c-><c- t="">'a.flac'</c-><c- p="">);</c->   <c- c1="">// Creates an HTMLAudioElement using the</c->
                                <c- c1="">// one-argument constructor.</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.14" data-lt="NewObject" id="NewObject"><span class="secno">3.3.14. </span><span class="content">[NewObject]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#NewObject" id="ref-for-NewObject①">NewObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦⑦">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②①">regular</a> or <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation⑨">static</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③⑦">operation</a>,
then it indicates that when calling the operation,
a reference to a newly created object
must always be returned.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#NewObject" id="ref-for-NewObject②">NewObject</a></code>]
extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments⑧">take no arguments</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#NewObject" id="ref-for-NewObject③">NewObject</a></code>]
extended attribute must not
be used on anything other than a <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②②">regular</a> or <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①⓪">static</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③⑧">operation</a> whose <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type③">return type</a> is an <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①③">interface type</a> or
a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type⑦">promise type</a>.</p>
   <div class="example" id="example-5b56e2ba">
    <a class="self-link" href="#example-5b56e2ba"></a> 
    <p>As an example, this extended attribute is suitable for use on
    the <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#dom-document-createelement" id="ref-for-dom-document-createelement">createElement()</a></code> operation on the <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#document" id="ref-for-document②">Document</a></code> interface,
    since a new object should always be returned when
    it is called. <a data-link-type="biblio" href="#biblio-dom">[DOM]</a></p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Document</c-> : <c- n="">Node</c-> {
  [<c- g="">NewObject</c->] <c- n="">Element</c-> <c- g="">createElement</c->(<c- b="">DOMString</c-> <c- g="">localName</c->);
  // ...
};
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.15" data-lt="NoInterfaceObject" id="NoInterfaceObject"><span class="secno">3.3.15. </span><span class="content">[NoInterfaceObject]</span></h4>
   <div class="advisement">
    <p>The [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject⑥">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦⑧">extended attribute</a> is an undesirable feature.
    It exists only so that legacy Web platform features can be specified.
    It should not be used in specifications
    unless required to specify the behavior of legacy APIs,
    or for consistency with these APIs.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[NoInterfaceObject]">filing an issue</a> before proceeding.</p>
    <p><small class="non-normative"> The [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject⑦">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑦⑨">extended attribute</a> appears on the following <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨⑧">interfaces</a>:</small></p>
    <small class="non-normative"> <p><code class="idl"><a data-link-type="idl" href="https://www.w3.org/TR/geolocation-API/#geolocation" id="ref-for-geolocation">Geolocation</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.w3.org/TR/geolocation-API/#coordinates" id="ref-for-coordinates">Coordinates</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.w3.org/TR/geolocation-API/#position" id="ref-for-position">Position</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.w3.org/TR/geolocation-API/#position-error" id="ref-for-position-error">PositionError</a></code>, <code class="idl"><a data-link-type="idl" href="https://w3c.github.io/deviceorientation/spec-source-orientation.html#device_acceleration" id="ref-for-device_acceleration">DeviceAcceleration</a></code>, <code class="idl"><a data-link-type="idl" href="https://w3c.github.io/deviceorientation/spec-source-orientation.html#device_rotation_rate" id="ref-for-device_rotation_rate">DeviceRotationRate</a></code>, <code class="idl"><a data-link-type="idl" href="https://w3c.github.io/mediacapture-main/#dom-constrainablepattern" id="ref-for-dom-constrainablepattern">ConstrainablePattern</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/#webgl_compressed_texture_astc" id="ref-for-webgl_compressed_texture_astc">WEBGL_compressed_texture_astc</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/#webgl_compressed_texture_s3tc_srgb" id="ref-for-webgl_compressed_texture_s3tc_srgb">WEBGL_compressed_texture_s3tc_srgb</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/#webgl_draw_buffers" id="ref-for-webgl_draw_buffers">WEBGL_draw_buffers</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/#webgl_lose_context" id="ref-for-webgl_lose_context">WEBGL_lose_context</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/#angle_instanced_arrays" id="ref-for-angle_instanced_arrays">ANGLE_instanced_arrays</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/EXT_blend_minmax/#ext_blend_minmax" id="ref-for-ext_blend_minmax">EXT_blend_minmax</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/#ext_color_buffer_float" id="ref-for-ext_color_buffer_float">EXT_color_buffer_float</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/#ext_disjoint_timer_query" id="ref-for-ext_disjoint_timer_query">EXT_disjoint_timer_query</a></code>, <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/#oes_standard_derivatives" id="ref-for-oes_standard_derivatives">OES_standard_derivatives</a></code>, and <code class="idl"><a data-link-type="idl" href="https://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/#oes_vertex_array_object" id="ref-for-oes_vertex_array_object">OES_vertex_array_object</a></code>. <a data-link-type="biblio" href="#biblio-geolocation-api">[GEOLOCATION-API]</a> <a data-link-type="biblio" href="#biblio-orientation-event">[ORIENTATION-EVENT]</a> <a data-link-type="biblio" href="#biblio-mediacapture-streams">[MEDIACAPTURE-STREAMS]</a> (various <a data-link-type="biblio" href="#biblio-webgl">[WEBGL]</a> extension specifications)</p> </small> 
    <p class="note" role="note"><span>Note:</span> Previously, the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject⑧">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧⓪">extended attribute</a> could also be used
    to annotate <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface⑨⑨">interfaces</a>, which other <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪⓪">interfaces</a> could then implement
    (using the defunct "implements statement") as if they were mixins.
    There is now dedicated syntax to cater for this use case
    in the form of <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④①">interface mixins</a> and <a data-link-type="dfn" href="#includes-statement" id="ref-for-includes-statement⑤">includes statements</a>.
    Using the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject⑨">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧①">extended attribute</a> for this purpose is no longer supported.
    Specifications which still do are strongly encouraged
    to migrate to <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④②">interface mixins</a> as soon as possible.</p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①⓪">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧②">extended attribute</a> appears on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪①">interface</a>,
it indicates that an <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object⑧">interface object</a> will not exist for the interface in the ECMAScript binding.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①①">NoInterfaceObject</a></code>] extended attribute
must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments⑨">take no arguments</a>.</p>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①②">NoInterfaceObject</a></code>] extended attribute
is specified on an interface, then the [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①⑥">Constructor</a></code>]
extended attribute must not also be specified on that interface.
A [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①⑧">NamedConstructor</a></code>] extended attribute is fine,
however.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①③">NoInterfaceObject</a></code>] extended attribute
must not be specified on an interface that has any <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①①">static operations</a> defined on it.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①④">NoInterfaceObject</a></code>] extended attribute
must not be specified on a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②③">callback interface</a>.</p>
   <p>An interface that does not have the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①⑤">NoInterfaceObject</a></code>] extended
attribute specified must not inherit
from an interface that has the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①⑥">NoInterfaceObject</a></code>] extended
attribute specified.</p>
   <p>See <a href="#es-interfaces">§3.6 Interfaces</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①⑦">NoInterfaceObject</a></code>] entails.</p>
   <div class="example" id="example-739ab498">
    <a class="self-link" href="#example-739ab498"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③⑥">IDL fragment</a> defines two interfaces, one whose interface object
    is exposed on the ECMAScript global object, and one whose isn’t:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Storage</c-> {
  <c- b="">void</c-> <c- g="">addEntry</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">key</c->, <c- b="">any</c-> <c- g="">value</c->);
};

[<c- g="">Exposed</c->=<c- n="">Window</c->,
 <c- g="">NoInterfaceObject</c->]
<c- b="">interface</c-> <c- g="">Query</c-> {
  <c- b="">any</c-> <c- g="">lookupEntry</c->(<c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">key</c->);
};
</pre>
    <p>An ECMAScript implementation of the above IDL would allow
    manipulation of <code class="idl">Storage</code>’s
    prototype, but not <code class="idl">Query</code>’s.</p>
<pre class="highlight"><c- k="">typeof</c-> Storage<c- p="">;</c->                        <c- c1="">// evaluates to "object"</c->

<c- c1="">// Add some tracing alert() call to Storage.addEntry.</c->
<c- a="">var</c-> fn <c- o="">=</c-> Storage<c- p="">.</c->prototype<c- p="">.</c->addEntry<c- p="">;</c->
Storage<c- p="">.</c->prototype<c- p="">.</c->addEntry <c- o="">=</c-> <c- a="">function</c-><c- p="">(</c->key<c- p="">,</c-> value<c- p="">)</c-> <c- p="">{</c->
  alert<c- p="">(</c-><c- t="">'Calling addEntry()'</c-><c- p="">);</c->
  <c- k="">return</c-> fn<c- p="">.</c->call<c- p="">(</c-><c- k="">this</c-><c- p="">,</c-> key<c- p="">,</c-> value<c- p="">);</c->
<c- p="">};</c->

<c- k="">typeof</c-> Query<c- p="">;</c->                          <c- c1="">// evaluates to "undefined"</c->
<c- a="">var</c-> fn <c- o="">=</c-> Query<c- p="">.</c->prototype<c- p="">.</c->lookupEntry<c- p="">;</c->  <c- c1="">// exception, Query isn’t defined</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.16" data-lt="OverrideBuiltins" id="OverrideBuiltins"><span class="secno">3.3.16. </span><span class="content">[OverrideBuiltins]</span></h4>
   <div class="advisement">
    <p>The [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins④">OverrideBuiltins</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧③">extended attribute</a> is an undesirable feature.
    It exists only so that legacy Web platform features can be specified.
    It should not be used in specifications
    unless required to specify the behavior of legacy APIs,
    or for consistency with these APIs.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[OverrideBuiltins]">filing an issue</a> before proceeding.</p>
    <p><small class="non-normative"> The [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins⑤">OverrideBuiltins</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧④">extended attribute</a> appears on the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/dom.html#domstringmap" id="ref-for-domstringmap">DOMStringMap</a></code>, <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#document" id="ref-for-document③">Document</a></code>, and <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/forms.html#htmlformelement" id="ref-for-htmlformelement①">HTMLFormElement</a></code> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪②">interfaces</a>. <a data-link-type="biblio" href="#biblio-html">[HTML]</a> </small></p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins⑥">OverrideBuiltins</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧⑤">extended attribute</a> appears on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪③">interface</a>,
it indicates that for a <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object①">legacy platform object</a> implementing the interface,
properties corresponding to all of
the object’s <a data-link-type="dfn" href="#dfn-supported-property-names" id="ref-for-dfn-supported-property-names②">supported property names</a> will appear to be on the object,
regardless of what other properties exist on the object or its
prototype chain.  This means that named properties will always shadow
any properties that would otherwise appear on the object.
This is in contrast to the usual behavior, which is for named properties
to be exposed only if there is no property with the
same name on the object itself or somewhere on its prototype chain.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins⑦">OverrideBuiltins</a></code>]
extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments①⓪">take no arguments</a> and must not appear on an interface
that does not define a <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter⑥">named property getter</a> or that also is declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①②">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧⑥">extended attribute</a>.
If the extended attribute is specified on
a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①⑦">partial interface</a> definition, then that partial interface definition must
be the part of the interface definition that defines
the <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter⑦">named property getter</a>.</p>
   <p>See <a href="#es-legacy-platform-objects">§3.8 Legacy platform objects</a> and <a href="#legacy-platform-object-defineownproperty">§3.8.3 [[DefineOwnProperty]]</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins⑧">OverrideBuiltins</a></code>] entails.</p>
   <div class="example" id="example-229c37e2">
    <a class="self-link" href="#example-229c37e2"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③⑦">IDL fragment</a> defines two <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪④">interfaces</a>,
    one that has a <a data-link-type="dfn" href="#dfn-named-property-getter" id="ref-for-dfn-named-property-getter⑧">named property getter</a> and one that does not.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">StringMap</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">length</c->;
  <c- b="">getter</c-> <c- b="">DOMString</c-> <c- g="">lookup</c->(<c- b="">DOMString</c-> <c- g="">key</c->);
};

[<c- g="">Exposed</c->=<c- n="">Window</c->,
 <c- g="">OverrideBuiltins</c->]
<c- b="">interface</c-> <c- g="">StringMap2</c-> {
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">length</c->;
  <c- b="">getter</c-> <c- b="">DOMString</c-> <c- g="">lookup</c->(<c- b="">DOMString</c-> <c- g="">key</c->);
};
</pre>
    <p>In an ECMAScript implementation of these two interfaces,
    getting certain properties on objects implementing
    the interfaces will result in different values:</p>
<pre class="highlight"><c- c1="">// Obtain an instance of StringMap.  Assume that it has "abc", "length" and</c->
<c- c1="">// "toString" as supported property names.</c->
<c- a="">var</c-> map1 <c- o="">=</c-> getStringMap<c- p="">();</c->

<c- c1="">// This invokes the named property getter.</c->
map1<c- p="">.</c->abc<c- p="">;</c->

<c- c1="">// This fetches the "length" property on the object that corresponds to the</c->
<c- c1="">// length attribute.</c->
map1<c- p="">.</c->length<c- p="">;</c->

<c- c1="">// This fetches the "toString" property from the object’s prototype chain.</c->
map1<c- p="">.</c->toString<c- p="">;</c->

<c- c1="">// Obtain an instance of StringMap2.  Assume that it also has "abc", "length"</c->
<c- c1="">// and "toString" as supported property names.</c->
<c- a="">var</c-> map2 <c- o="">=</c-> getStringMap2<c- p="">();</c->

<c- c1="">// This invokes the named property getter.</c->
map2<c- p="">.</c->abc<c- p="">;</c->

<c- c1="">// This also invokes the named property getter, despite the fact that the "length"</c->
<c- c1="">// property on the object corresponds to the length attribute.</c->
map2<c- p="">.</c->length<c- p="">;</c->

<c- c1="">// This too invokes the named property getter, despite the fact that "toString" is</c->
<c- c1="">// a property in map2’s prototype chain.</c->
map2<c- p="">.</c->toString<c- p="">;</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.17" data-lt="PutForwards" id="PutForwards"><span class="secno">3.3.17. </span><span class="content">[PutForwards]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards③">PutForwards</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧⑦">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①①">read only</a> <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①①">regular attribute</a> declaration whose type is
an <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①④">interface type</a>,
it indicates that assigning to the attribute will have specific behavior.
Namely, the assignment is “forwarded” to the attribute (specified by
the extended attribute argument) on the object that is currently
referenced by the attribute being assigned to.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards④">PutForwards</a></code>] extended
attribute must <a data-link-type="dfn" href="#dfn-xattr-identifier" id="ref-for-dfn-xattr-identifier⑤">take an identifier</a>.
Assuming that:</p>
   <ul>
    <li data-md="">
     <p><var>A</var> is the <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③⑦">attribute</a> on which the [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards⑤">PutForwards</a></code>]
extended attribute appears,</p>
    </li><li data-md="">
     <p><var>I</var> is the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪⑤">interface</a> on which <var>A</var> is declared,</p>
    </li><li data-md="">
     <p><var>J</var> is the <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①⑤">interface type</a> that <var>A</var> is declared to be of, and</p>
    </li><li data-md="">
     <p><var>N</var> is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤⑧">identifier</a> argument of the extended attribute,</p>
   </li></ul>
   <p>then there must be another <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③⑧">attribute</a> <var>B</var> declared on <var>J</var> whose <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑤⑨">identifier</a> is <var>N</var>.  Assignment of a value to the attribute <var>A</var> on an object implementing <var>I</var> will result in that value
being assigned to attribute <var>B</var> of the object that <var>A</var> references, instead.</p>
   <p>Note that [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards⑥">PutForwards</a></code>]-annotated <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute③⑨">attributes</a> can be
chained.  That is, an attribute with the [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards⑦">PutForwards</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧⑧">extended attribute</a> can refer to an attribute that itself has that extended attribute.
There must not exist a cycle in a
chain of forwarded assignments.  A cycle exists if, when following
the chain of forwarded assignments, a particular attribute on
an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪⑥">interface</a> is
encountered more than once.</p>
   <p>An attribute with the [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards⑧">PutForwards</a></code>]
extended attribute must not also be declared
with the [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter①①">LenientSetter</a></code>] or
[<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable③">Replaceable</a></code>] extended attributes.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards⑨">PutForwards</a></code>]
extended attribute must not be used
on an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④⓪">attribute</a> that
is not <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①②">read only</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①⓪">PutForwards</a></code>] extended attribute
must not be used on a <a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute⑧">static attribute</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①①">PutForwards</a></code>] extended attribute
must not be used on an attribute declared on
a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②④">callback interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②③">namespace</a>.</p>
   <p>See the <a href="#es-attributes">Attributes</a> section for how
[<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①②">PutForwards</a></code>]
is to be implemented.</p>
   <div class="example" id="example-dc4da779">
    <a class="self-link" href="#example-dc4da779"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③⑧">IDL fragment</a> defines interfaces for names and people.
    The [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①③">PutForwards</a></code>] extended
    attribute is used on the <code class="idl">name</code> attribute
    of the <code class="idl">Person</code> interface to indicate
    that assignments to that attribute result in assignments to the <code class="idl">full</code> attribute of the <code class="idl">Person</code> object:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Name</c-> {
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">full</c->;
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">family</c->;
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">given</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Person</c-> {
  [<c- g="">PutForwards</c->=<c- n="">full</c->] <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">Name</c-> <c- g="">name</c->;
  <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">short</c-> <c- g="">age</c->;
};
</pre>
    <p>In the ECMAScript binding, this would allow assignments to the <code class="idl">name</code> property:</p>
<pre class="highlight"><c- a="">var</c-> p <c- o="">=</c-> getPerson<c- p="">();</c->           <c- c1="">// Obtain an instance of Person.</c->

p<c- p="">.</c->name <c- o="">=</c-> <c- t="">'John Citizen'</c-><c- p="">;</c->       <c- c1="">// This statement...</c->
p<c- p="">.</c->name<c- p="">.</c->full <c- o="">=</c-> <c- t="">'John Citizen'</c-><c- p="">;</c->  <c- c1="">// ...has the same behavior as this one.</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.18" data-lt="Replaceable" id="Replaceable"><span class="secno">3.3.18. </span><span class="content">[Replaceable]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable④">Replaceable</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑧⑨">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①③">read only</a> <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①②">regular attribute</a>,
it indicates that setting the corresponding property on the <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①⑥">platform object</a> will result in
an own property with the same name being created on the object
which has the value being assigned.  This property will shadow
the accessor property corresponding to the attribute, which
exists on the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object⑤">interface prototype object</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable⑤">Replaceable</a></code>]
extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments①①">take no arguments</a>.</p>
   <p>An attribute with the [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable⑥">Replaceable</a></code>]
extended attribute must not also be declared
with the [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter①②">LenientSetter</a></code>] or
[<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①④">PutForwards</a></code>] extended attributes.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable⑦">Replaceable</a></code>]
extended attribute must not be used
on an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④①">attribute</a> that
is not <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①④">read only</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable⑧">Replaceable</a></code>] extended attribute
must not be used on a <a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute⑨">static attribute</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable⑨">Replaceable</a></code>] extended attribute
must not be used on an attribute declared on
a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②⑤">callback interface</a>.</p>
   <p>See <a href="#es-attributes">§3.6.7 Attributes</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable①⓪">Replaceable</a></code>] entails.</p>
   <div class="example" id="example-17858ef9">
    <a class="self-link" href="#example-17858ef9"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment③⑨">IDL fragment</a> defines an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪⑦">interface</a> with an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation③⑨">operation</a> that increments a counter, and an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④②">attribute</a> that exposes the counter’s value, which is initially 0:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Counter</c-> {
  [<c- g="">Replaceable</c->] <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">unsigned</c-> <c- b="">long</c-> <c- g="">value</c->;
  <c- b="">void</c-> <c- g="">increment</c->();
};
</pre>
    <p>Assigning to the <code class="idl">value</code> property
    on a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①⑦">platform object</a> implementing <code class="idl">Counter</code> will shadow the property that corresponds to the <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④③">attribute</a>:</p>
<pre class="highlight"><c- a="">var</c-> counter <c- o="">=</c-> getCounter<c- p="">();</c->                              <c- c1="">// Obtain an instance of Counter.</c->
counter<c- p="">.</c->value<c- p="">;</c->                                           <c- c1="">// Evaluates to 0.</c->

counter<c- p="">.</c->hasOwnProperty<c- p="">(</c-><c- u="">"value"</c-><c- p="">);</c->                         <c- c1="">// Evaluates to false.</c->
Object<c- p="">.</c->getPrototypeOf<c- p="">(</c->counter<c- p="">).</c->hasOwnProperty<c- p="">(</c-><c- u="">"value"</c-><c- p="">);</c->  <c- c1="">// Evaluates to true.</c->

counter<c- p="">.</c->increment<c- p="">();</c->
counter<c- p="">.</c->increment<c- p="">();</c->
counter<c- p="">.</c->value<c- p="">;</c->                                           <c- c1="">// Evaluates to 2.</c->

counter<c- p="">.</c->value <c- o="">=</c-> <c- t="">'a'</c-><c- p="">;</c->                                     <c- c1="">// Shadows the property with one that is unrelated</c->
                                                         <c- c1="">// to Counter::value.</c->

counter<c- p="">.</c->hasOwnProperty<c- p="">(</c-><c- u="">"value"</c-><c- p="">);</c->                         <c- c1="">// Evaluates to true.</c->

counter<c- p="">.</c->increment<c- p="">();</c->
counter<c- p="">.</c->value<c- p="">;</c->                                           <c- c1="">// Evaluates to 'a'.</c->

<c- k="">delete</c-> counter<c- p="">.</c->value<c- p="">;</c->                                    <c- c1="">// Reveals the original property.</c->
counter<c- p="">.</c->value<c- p="">;</c->                                           <c- c1="">// Evaluates to 3.</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.19" data-lt="SameObject" id="SameObject"><span class="secno">3.3.19. </span><span class="content">[SameObject]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#SameObject" id="ref-for-SameObject②">SameObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨⓪">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①⑤">read only</a> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④④">attribute</a>, then it
indicates that when getting the value of the attribute on a given
object, the same value must always
be returned.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#SameObject" id="ref-for-SameObject③">SameObject</a></code>]
extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments①②">take no arguments</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#SameObject" id="ref-for-SameObject④">SameObject</a></code>]
extended attribute must not
be used on anything other than a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①⑥">read only</a> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④⑤">attribute</a> whose type is an <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①⑥">interface type</a> or <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②④">object</a></code>.</p>
   <div class="example" id="example-4032028d">
    <a class="self-link" href="#example-4032028d"></a> 
    <p>As an example, this extended attribute is suitable for use on
    the <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#dom-document-implementation" id="ref-for-dom-document-implementation">implementation</a></code> attribute on the <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#document" id="ref-for-document④">Document</a></code> interface
    since the same object is always returned for a given <code class="idl"><a data-link-type="idl" href="https://dom.spec.whatwg.org/#document" id="ref-for-document⑤">Document</a></code> object. <a data-link-type="biblio" href="#biblio-dom">[DOM]</a></p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Document</c-> : <c- n="">Node</c-> {
  [<c- g="">SameObject</c->] <c- b="">readonly</c-> <c- b="">attribute</c-> <c- n="">DOMImplementation</c-> <c- g="">implementation</c->;
  // ...
};
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.20" data-lt="SecureContext" id="SecureContext"><span class="secno">3.3.20. </span><span class="content">[SecureContext]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext⑧">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨①">extended attribute</a> appears on an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪⑧">interface</a>, <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①⑧">partial interface</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④③">interface mixin</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①④">partial interface mixin</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②④">namespace</a>, <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace⑧">partial namespace</a>, <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②⓪">interface member</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member②⓪">interface mixin member</a>, or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member⑨">namespace member</a>,
it indicates that the construct is exposed
only within a <a data-link-type="dfn" href="https://w3c.github.io/webappsec-secure-contexts/#secure-contexts" id="ref-for-secure-contexts②">secure context</a>.
The [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext⑨">SecureContext</a></code>] extended attribute must not be used
on any other construct.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①⓪">SecureContext</a></code>] extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments①③">take no arguments</a>.</p>
   <p>By default, constructs are <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="available-in-both-secure-and-non-secure-contexts">available in both secure and non-secure contexts</dfn>.</p>
   <div class="algorithm" data-algorithm="available only in secure contexts">
    <p>To check if a construct <var>C</var> is <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-available-only-in-secure-contexts">available only in secure contexts</dfn>,
    run the following steps:</p>
    <ol>
     <li data-md="">
      <p class="assertion">Assert: <var>C</var> is an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⓪⑨">interface</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②⑤">namespace</a>, <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②①">interface member</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member②①">interface mixin member</a>,
or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member①⓪">namespace member</a>.</p>
     </li><li data-md="">
      <p>Let <var>H</var> be <var>C</var>’s <a data-link-type="dfn" href="#host-interfaces" id="ref-for-host-interfaces④">host interface</a> if <var>C</var> is an <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member②②">interface mixin member</a>, or null otherwise.</p>
     </li><li data-md="">
      <p>If <var>C</var> is an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②②">interface member</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member②③">interface mixin member</a>, or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member①①">namespace member</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If the [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①①">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨②">extended attribute</a> is specified on <var>C</var>,
then return true.</p>
       </li><li data-md="">
        <p>Otherwise, set <var>C</var> to be the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①⓪">interface</a>, <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface①⑨">partial interface</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④④">interface mixin</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①⑤">partial interface mixin</a>, <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②⑥">namespace</a>, or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace⑨">partial namespace</a> <var>C</var> is declared on.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>C</var> is a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface②⓪">partial interface</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①⑥">partial interface mixin</a>, or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace①⓪">partial namespace</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If the [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①②">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨③">extended attribute</a> is specified on <var>C</var>,
then return true.</p>
       </li><li data-md="">
        <p>Otherwise, set <var>C</var> to be the original <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①①">interface</a>, <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④⑤">interface mixin</a>, or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②⑦">namespace</a> definition of <var>C</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>C</var> is an <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④⑥">interface mixin</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If the [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①③">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨④">extended attribute</a> is specified on <var>C</var>,
then return true.</p>
       </li><li data-md="">
        <p>Otherwise, set <var>C</var> to <var>H</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p class="assertion">Assert: <var>C</var> is a <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①②">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②⑧">namespace</a></p>
     </li><li data-md="">
      <p>If the [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①④">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨⑤">extended attribute</a> is specified on <var>C</var>,
then return true.</p>
     </li><li data-md="">
      <p>Otherwise, return false.</p>
    </li></ol>
   </div>
   <p class="note" role="note"><span>Note:</span> Whether a construct is <a data-link-type="dfn" href="#dfn-available-only-in-secure-contexts" id="ref-for-dfn-available-only-in-secure-contexts">available only in secure contexts</a> influences whether it is <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed①">exposed</a> in a given ECMAScript global environment.</p>
   <p>If [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①⑤">SecureContext</a></code>] appears on an <a data-link-type="dfn" href="#dfn-overloaded" id="ref-for-dfn-overloaded①②">overloaded</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④⓪">operation</a>,
then it must appear on all overloads.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①⑥">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨⑥">extended attribute</a> must not be specified both on
an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②③">interface</a>, <a data-link-type="dfn" href="#interface-mixin-member" id="ref-for-interface-mixin-member②④">mixin</a>, or <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member①②">namespace member</a>, and on
the <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface②①">partial interface</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①⑦">partial interface mixin</a>, or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace①①">partial namespace</a> definition
the <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①⑥">member</a> is declared on.</p>
   <p class="note" role="note"><span>Note:</span> This is because adding a [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①⑦">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨⑦">extended attribute</a> on a <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface②②">partial interface</a>, <a data-link-type="dfn" href="#partial-interface-mixin" id="ref-for-partial-interface-mixin①⑧">partial interface mixin</a>, or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace①②">partial namespace</a> is shorthand for annotating each of its <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①⑦">members</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①⑧">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨⑧">extended attribute</a> must not be specified on both an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②④">interface member</a> and
the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①③">interface</a> or <a data-link-type="dfn" href="#dfn-partial-interface" id="ref-for-dfn-partial-interface②③">partial interface</a> definition the <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②⑤">interface member</a> is declared on.
It must also not be specified on both a <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member①③">namespace member</a> and
the <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace②⑨">namespace</a> or <a data-link-type="dfn" href="#dfn-partial-namespace" id="ref-for-dfn-partial-namespace①③">partial namespace</a> definition the <a data-link-type="dfn" href="#dfn-namespace-member" id="ref-for-dfn-namespace-member①④">namespace member</a> is declared on.</p>
   <p>An <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①④">interface</a> without the [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext①⑨">SecureContext</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute⑨⑨">extended attribute</a> must not <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit⑨">inherit</a> from another interface
that does specify [<code class="idl"><a data-link-type="idl" href="#SecureContext" id="ref-for-SecureContext②⓪">SecureContext</a></code>].</p>
   <div class="example" id="example-92ad4c70">
    <a class="self-link" href="#example-92ad4c70"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④⓪">IDL fragment</a> defines an interface
    with one <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④①">operation</a> that is executable from all
    contexts, and two which are executable only from secure contexts.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">PowerfulFeature</c-> {
  // This call will succeed in all contexts.
  <c- b="">Promise</c-> &lt;<c- n="">Result</c->&gt; <c- g="">calculateNotSoSecretResult</c->();

  // This operation will not be exposed to a non-secure context. In such a context,
  // there will be no "calculateSecretResult" property on PowerfulFeature.prototype.
  [<c- g="">SecureContext</c->] <c- b="">Promise</c->&lt;<c- n="">Result</c->&gt; <c- g="">calculateSecretResult</c->();

  // The same applies here: the attribute will not be exposed to a non-secure context,
  // and in a non-secure context there will be no "secretBoolean" property on
  // PowerfulFeature.prototype.
  [<c- g="">SecureContext</c->] <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">boolean</c-> <c- g="">secretBoolean</c->;
};

// HeartbeatSensor will not be exposed in a non-secure context, nor will its members.
// In such a context, there will be no "HeartbeatSensor" property on Window.
[<c- g="">SecureContext</c->]
<c- b="">interface</c-> <c- g="">HeartbeatSensor</c-> {
  <c- b="">Promise</c->&lt;<c- b="">float</c->&gt; <c- g="">getHeartbeatsPerMinute</c->();
};

// The interface mixin members defined below will never be exposed in a non-secure context,
// regardless of whether the interface that includes them is.
// In a non-secure context, there will be no "snap" property on
// PowerfulFeature.prototype.
[<c- g="">SecureContext</c->]
<c- b="">interface</c-> <c- b="">mixin</c-> <c- g="">Snapshotable</c-> {
  <c- b="">Promise</c->&lt;<c- b="">boolean</c->&gt; <c- g="">snap</c->();
};
<c- n="">PowerfulFeature</c-> <c- b="">includes</c-> <c- n="">Snapshotable</c->;

// On the other hand, the following interface mixin members will be exposed
// to a non-secure context when included by a host interface
// that doesn’t have the [SecureContext] extended attribute.
// In a non-secure context, there will be a "log" property on
// PowerfulFeatures.prototype.
<c- b="">interface</c-> <c- b="">mixin</c-> <c- g="">Loggable</c-> {
  <c- b="">Promise</c->&lt;<c- b="">boolean</c->&gt; <c- g="">log</c->();
};
<c- n="">PowerfulFeatures</c-> <c- b="">includes</c-> <c- n="">Loggable</c->;
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.21" data-lt="TreatNonObjectAsNull" id="TreatNonObjectAsNull"><span class="secno">3.3.21. </span><span class="content">[TreatNonObjectAsNull]</span></h4>
   <div class="advisement">
    <p>The [<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull④">TreatNonObjectAsNull</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪⓪">extended attribute</a> is an undesirable feature.
    It exists only so that legacy Web platform features can be specified.
    It should not be used in specifications
    unless required to specify the behavior of legacy APIs,
    or for consistency with these APIs.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[TreatNonObjectAsNull]">filing an issue</a> before proceeding.</p>
    <p><small class="non-normative"> The [<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull⑤">TreatNonObjectAsNull</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪①">extended attribute</a> appears on
        the <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②③">callback functions</a> <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandlernonnull" id="ref-for-eventhandlernonnull">EventHandlerNonNull</a></code>, <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/webappapis.html#onbeforeunloadeventhandlernonnull" id="ref-for-onbeforeunloadeventhandlernonnull">OnBeforeUnloadEventHandlerNonNull</a></code>, and <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/webappapis.html#onerroreventhandlernonnull" id="ref-for-onerroreventhandlernonnull">OnErrorEventHandlerNonNull</a></code> used as the type of <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-idl-attributes" id="ref-for-event-handler-idl-attributes">event handler IDL attributes</a> such as <code>onclick</code> and <code>onerror</code>. <a data-link-type="biblio" href="#biblio-html">[HTML]</a> </small></p>
   </div>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull⑥">TreatNonObjectAsNull</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪②">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②④">callback function</a>,
then it indicates that any value assigned to an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④⑥">attribute</a> whose type is a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②⑧">nullable</a> <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②⑤">callback function</a> that is not an object will be converted to
the <emu-val>null</emu-val> value.</p>
   <p>See <a href="#es-nullable-type">§3.2.18 Nullable types — T?</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull⑦">TreatNonObjectAsNull</a></code>] entails.</p>
   <div class="example" id="example-3be1ee40">
    <a class="self-link" href="#example-3be1ee40"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④①">IDL fragment</a> defines an interface that has one
    attribute whose type is a [<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull⑧">TreatNonObjectAsNull</a></code>]-annotated <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②⑥">callback function</a> and another whose type is a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②⑦">callback function</a> without the <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪③">extended attribute</a>:</p>
<pre class="highlight"><c- b="">callback</c-> <c- g="">OccurrenceHandler</c-> = <c- b="">void</c-> (<c- b="">DOMString</c-> <c- g="">details</c->);

[<c- g="">TreatNonObjectAsNull</c->]
<c- b="">callback</c-> <c- g="">ErrorHandler</c-> = <c- b="">void</c-> (<c- b="">DOMString</c-> <c- g="">details</c->);

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Manager</c-> {
  <c- b="">attribute</c-> <c- n="">OccurrenceHandler</c->? <c- g="">handler1</c->;
  <c- b="">attribute</c-> <c- n="">ErrorHandler</c->? <c- g="">handler2</c->;
};
</pre>
    <p>In an ECMAScript implementation, assigning a value that is not
    an object (such as a Number value)
    to handler1 will have different behavior from that when assigning
    to handler2:</p>
<pre class="highlight"><c- a="">var</c-> manager <c- o="">=</c-> getManager<c- p="">();</c->  <c- c1="">// Get an instance of Manager.</c->

manager<c- p="">.</c->handler1 <c- o="">=</c-> <c- a="">function</c-><c- p="">()</c-> <c- p="">{</c-> <c- p="">};</c->
manager<c- p="">.</c->handler1<c- p="">;</c->            <c- c1="">// Evaluates to the function.</c->

<c- k="">try</c-> <c- p="">{</c->
  manager<c- p="">.</c->handler1 <c- o="">=</c-> <c- mi="">123</c-><c- p="">;</c->    <c- c1="">// Throws a TypeError.</c->
<c- p="">}</c-> <c- k="">catch</c-> <c- p="">(</c->e<c- p="">)</c-> <c- p="">{</c->
<c- p="">}</c->

manager<c- p="">.</c->handler2 <c- o="">=</c-> <c- a="">function</c-><c- p="">()</c-> <c- p="">{</c-> <c- p="">};</c->
manager<c- p="">.</c->handler2<c- p="">;</c->            <c- c1="">// Evaluates to the function.</c->

manager<c- p="">.</c->handler2 <c- o="">=</c-> <c- mi="">123</c-><c- p="">;</c->
manager<c- p="">.</c->handler2<c- p="">;</c->            <c- c1="">// Evaluates to null.</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.22" data-lt="TreatNullAs" id="TreatNullAs"><span class="secno">3.3.22. </span><span class="content">[TreatNullAs]</span></h4>
   <p class="advisement"> The [<code class="idl"><a data-link-type="idl" href="#TreatNullAs" id="ref-for-TreatNullAs②">TreatNullAs</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪④">extended attribute</a> is an undesirable feature.
    It exists only so that legacy Web platform features can be specified.
    It should not be used in specifications
    unless required to specify the behavior of legacy APIs,
    or for consistency with these APIs.
    Editors who wish to use this feature are strongly advised to discuss this
    by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20[TreatNullAs]">filing an issue</a> before proceeding. </p>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#TreatNullAs" id="ref-for-TreatNullAs③">TreatNullAs</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪⑤">extended attribute</a> appears on the <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString④④">DOMString</a></code> type, it creates a new
IDL type such that that when an ECMAScript <emu-val>null</emu-val> is converted to the IDL type, it
will be handled differently from its default handling. Instead of being stringified to
"<code>null</code>", which is the default, it will be converted to the empty string.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#TreatNullAs" id="ref-for-TreatNullAs④">TreatNullAs</a></code>] extended attribute must <a data-link-type="dfn" href="#dfn-xattr-identifier" id="ref-for-dfn-xattr-identifier⑥">take the identifier</a> <code>EmptyString</code>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#TreatNullAs" id="ref-for-TreatNullAs⑤">TreatNullAs</a></code>] extended attribute must not be <a data-link-type="dfn" href="#idl-type-extended-attribute-associated-with" id="ref-for-idl-type-extended-attribute-associated-with①⑦">associated with</a> a type that is not <code class="idl"><a data-link-type="idl" href="#idl-DOMString" id="ref-for-idl-DOMString④⑤">DOMString</a></code>.</p>
   <p class="note" role="note"><span>Note:</span> This means that even <code class="idl">DOMString?</code> must not use [<code class="idl"><a data-link-type="idl" href="#TreatNullAs" id="ref-for-TreatNullAs⑥">TreatNullAs</a></code>], since <emu-val>null</emu-val> is a valid value of that type.</p>
   <p>See <a href="#es-DOMString">§3.2.9 DOMString</a> for the specific requirements that the use of [<code class="idl"><a data-link-type="idl" href="#TreatNullAs" id="ref-for-TreatNullAs⑦">TreatNullAs</a></code>] entails.</p>
   <div class="example" id="example-7007b061">
    <a class="self-link" href="#example-7007b061"></a> The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④②">IDL fragment</a> defines an interface that has one attribute whose type has the
    extended attribute, and one operation whose argument’s type has the extended attribute: 
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Dog</c-> {
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">name</c->;
  <c- b="">attribute</c-> [<c- g="">TreatNullAs</c->=<c- n="">EmptyString</c->] <c- b="">DOMString</c-> <c- g="">owner</c->;

  <c- b="">boolean</c-> <c- g="">isMemberOfBreed</c->([<c- g="">TreatNullAs</c->=<c- n="">EmptyString</c->] <c- b="">DOMString</c-> <c- g="">breedName</c->);
};
</pre>
    <p>An ECMAScript implementation implementing the <code class="idl">Dog</code> interface would convert a <emu-val>null</emu-val> value
    assigned to the <code>owner</code> property or passed as the
    argument to the <code>isMemberOfBreed</code> function
    to the empty string rather than "<code>null</code>":</p>
<pre class="highlight"><c- a="">var</c-> d <c- o="">=</c-> getDog<c- p="">();</c->         <c- c1="">// Assume d is a platform object implementing the Dog</c->
                          <c- c1="">// interface.</c->

d<c- p="">.</c->name <c- o="">=</c-> <c- kc="">null</c-><c- p="">;</c->            <c- c1="">// This assigns the string "null" to the .name</c->
                          <c- c1="">// property.</c->

d<c- p="">.</c->owner <c- o="">=</c-> <c- kc="">null</c-><c- p="">;</c->           <c- c1="">// This assigns the string "" to the .owner property.</c->

d<c- p="">.</c->isMemberOfBreed<c- p="">(</c-><c- kc="">null</c-><c- p="">);</c->  <c- c1="">// This passes the string "" to the isMemberOfBreed</c->
                          <c- c1="">// function.</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.23" data-lt="Unforgeable" id="Unforgeable"><span class="secno">3.3.23. </span><span class="content">[Unforgeable]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable②">Unforgeable</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪⑥">extended attribute</a> appears on <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①③">regular attributes</a> or non-<a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①②">static</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④②">operations</a>,
it indicates that the attribute or operation
will be reflected as an ECMAScript property
in a way that means its behavior cannot be modified
and that performing a property lookup on the object
will always result in the attribute’s property value being returned.
In particular, the property will be non-configurable
and will exist as an own property on the object itself
rather than on its prototype.</p>
   <p>An attribute or operation is said to be <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-unforgeable-on-an-interface">unforgeable</dfn> on a given interface <var>A</var> if the attribute or operation is declared on <var>A</var>,
and is annotated with the [<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable③">Unforgeable</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪⑦">extended attribute</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable④">Unforgeable</a></code>] extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments①④">take no arguments</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable⑤">Unforgeable</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪⑧">extended attribute</a> must not appear
on anything other than a <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①④">regular attribute</a> or a non-<a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①③">static</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④③">operation</a>.
If it does appear on an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④④">operation</a>,
then it must appear on all operations
with the same <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥⓪">identifier</a> on that interface.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable⑥">Unforgeable</a></code>] extended attribute must not be used
on an attribute declared on a <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③⓪">namespace</a>.</p>
   <p>If an attribute or operation <var>X</var> is <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface">unforgeable</a> on an interface <var>A</var>,
and <var>A</var> is one of the <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①④">inherited interfaces</a> of another interface <var>B</var>,
then <var>B</var> must not have a <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①⑤">regular attribute</a> or non-<a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①④">static</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④⑤">operation</a> with the same <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥①">identifier</a> as <var>X</var>.</p>
   <div class="note" role="note">
    <p>For example, the following is disallowed:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">A1</c-> {
  [<c- g="">Unforgeable</c->] <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">x</c->;
};
[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">B1</c-> : <c- n="">A1</c-> {
  <c- b="">void</c-> <c- g="">x</c->();  // Invalid; would be shadowed by A1’s x.
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">B2</c-> : <c- n="">A1</c-> { };
<c- n="">B2</c-> <c- b="">includes</c-> <c- n="">M1</c->;
<c- b="">interface</c-> <c- b="">mixin</c-> <c- g="">M1</c-> {
  <c- b="">void</c-> <c- g="">x</c->();  // Invalid; B2’s copy of x would be shadowed by A1’s x.
};
</pre>
   </div>
   <p>See <a href="#es-attributes">§3.6.7 Attributes</a>, <a href="#es-operations">§3.6.8 Operations</a>, <a href="#es-platform-objects">§3.7 Platform objects implementing interfaces</a>, <a href="#es-legacy-platform-objects">§3.8 Legacy platform objects</a> and <a href="#legacy-platform-object-defineownproperty">§3.8.3 [[DefineOwnProperty]]</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable⑦">Unforgeable</a></code>] entails.</p>
   <div class="example" id="example-fce61cf3">
    <a class="self-link" href="#example-fce61cf3"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④③">IDL fragment</a> defines
    an interface that has two <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④⑦">attributes</a>,
    one of which is designated as [<code class="idl"><a data-link-type="idl" href="#Unforgeable" id="ref-for-Unforgeable⑧">Unforgeable</a></code>]:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">System</c-> {
  [<c- g="">Unforgeable</c->] <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">username</c->;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <c- b="">long</c-> <c- b="">long</c-> <c- g="">loginTime</c->;
};
</pre>
    <p>In an ECMAScript implementation of the interface, the username attribute will be exposed as a non-configurable property on the
    object itself:</p>
<pre class="highlight"><c- a="">var</c-> system <c- o="">=</c-> getSystem<c- p="">();</c->                      <c- c1="">// Get an instance of System.</c->

system<c- p="">.</c->hasOwnProperty<c- p="">(</c-><c- u="">"username"</c-><c- p="">);</c->             <c- c1="">// Evaluates to true.</c->
system<c- p="">.</c->hasOwnProperty<c- p="">(</c-><c- u="">"loginTime"</c-><c- p="">);</c->            <c- c1="">// Evaluates to false.</c->
System<c- p="">.</c->prototype<c- p="">.</c->hasOwnProperty<c- p="">(</c-><c- u="">"username"</c-><c- p="">);</c->   <c- c1="">// Evaluates to false.</c->
System<c- p="">.</c->prototype<c- p="">.</c->hasOwnProperty<c- p="">(</c-><c- u="">"loginTime"</c-><c- p="">);</c->  <c- c1="">// Evaluates to true.</c->

<c- k="">try</c-> <c- p="">{</c->
  <c- c1="">// This call would fail, since the property is non-configurable.</c->
  Object<c- p="">.</c->defineProperty<c- p="">(</c->system<c- p="">,</c-> <c- u="">"username"</c-><c- p="">,</c-> <c- p="">{</c-> value<c- o="">:</c-> <c- u="">"administrator"</c-> <c- p="">});</c->
<c- p="">}</c-> <c- k="">catch</c-> <c- p="">(</c->e<c- p="">)</c-> <c- p="">{</c-> <c- p="">}</c->

<c- c1="">// This defineProperty call would succeed, because System.prototype.loginTime</c->
<c- c1="">// is configurable.</c->
<c- a="">var</c-> forgedLoginTime <c- o="">=</c-> <c- mi="">5</c-><c- p="">;</c->
Object<c- p="">.</c->defineProperty<c- p="">(</c->System<c- p="">.</c->prototype<c- p="">,</c-> <c- u="">"loginTime"</c-><c- p="">,</c-> <c- p="">{</c-> value<c- o="">:</c-> forgedLoginTime <c- p="">});</c->

system<c- p="">.</c->loginTime<c- p="">;</c->  <c- c1="">// So this now evaluates to forgedLoginTime.</c->
</pre>
   </div>
   <h4 class="heading settled dfn-paneled idl-code" data-dfn-type="extended-attribute" data-export="" data-level="3.3.24" data-lt="Unscopable" id="Unscopable"><span class="secno">3.3.24. </span><span class="content">[Unscopable]</span></h4>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#Unscopable" id="ref-for-Unscopable">Unscopable</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⓪⑨">extended attribute</a> appears on a <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①⑥">regular attribute</a> or <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②③">regular operation</a>, it
indicates that an object that implements an interface with the given
interface member will not include its property name in any object
environment record with it as its base object.  The result of this is
that bare identifiers matching the property name will not resolve to
the property in a <code>with</code> statement.  This is achieved by
including the property name on the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object⑥">interface prototype object</a>’s <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols⑨">@@unscopables</a></code> property’s value.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Unscopable" id="ref-for-Unscopable①">Unscopable</a></code>]
extended attribute must <a data-link-type="dfn" href="#dfn-xattr-no-arguments" id="ref-for-dfn-xattr-no-arguments①⑤">take no arguments</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Unscopable" id="ref-for-Unscopable②">Unscopable</a></code>]
extended attribute must not appear on
anything other than a <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①⑦">regular attribute</a> or <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②④">regular operation</a>.</p>
   <p>The [<code class="idl"><a data-link-type="idl" href="#Unscopable" id="ref-for-Unscopable③">Unscopable</a></code>] extended attribute must not be used on an attribute declared on a <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③①">namespace</a>.</p>
   <p>See <a href="#interface-prototype-object">§3.6.3 Interface prototype object</a> for the specific requirements that the use of
[<code class="idl"><a data-link-type="idl" href="#Unscopable" id="ref-for-Unscopable④">Unscopable</a></code>] entails.</p>
   <div class="note" role="note">
    <p>For example, with the following IDL:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Thing</c-> {
  <c- b="">void</c-> <c- g="">f</c->();
  [<c- g="">Unscopable</c->] <c- n="">g</c->();
};
</pre>
    <p>the <code class="idl">f</code> property can be referenced with a bare identifier
    in a <code>with</code> statement but the <code class="idl">g</code> property cannot:</p>
<pre class="highlight"><c- a="">var</c-> thing <c- o="">=</c-> getThing<c- p="">();</c->  <c- c1="">// An instance of Thing</c->
<c- a="">with</c-> <c- p="">(</c->thing<c- p="">)</c-> <c- p="">{</c->
  f<c- p="">;</c->                     <c- c1="">// Evaluates to a Function object.</c->
  g<c- p="">;</c->                     <c- c1="">// Throws a ReferenceError.</c->
<c- p="">}</c->
</pre>
   </div>
   <h3 class="heading settled" data-level="3.4" id="es-security"><span class="secno">3.4. </span><span class="content">Security</span><a class="self-link" href="#es-security"></a></h3>
   <p>Certain algorithms in the sections below are defined to <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-perform-a-security-check">perform a security check</dfn> on a given
object.  This check is used to determine whether a given <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④⑥">operation</a> invocation or <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④⑧">attribute</a> access should be
allowed.  The security check takes the following three inputs:</p>
   <ol>
    <li data-md="">
     <p>the <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①⑧">platform object</a> on
which the operation invocation or attribute access is being done,</p>
    </li><li data-md="">
     <p>the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥②">identifier</a> of the operation or attribute, and</p>
    </li><li data-md="">
     <p>the type of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①⓪">function object</a> –
"<code>method</code>" (when it corresponds to an IDL operation), or
"<code>getter</code>" or "<code>setter</code>" (when it corresponds to the
getter or setter function of an IDL attribute).</p>
   </li></ol>
   <p class="note" role="note"><span>Note:</span> The HTML Standard defines how a security check is performed. <a data-link-type="biblio" href="#biblio-html">[HTML]</a></p>
   <h3 class="heading settled" data-level="3.5" id="es-overloads"><span class="secno">3.5. </span><span class="content">Overload resolution algorithm</span><a class="self-link" href="#es-overloads"></a></h3>
   <div class="algorithm" data-algorithm="overload resolution algorithm">
    <p>In order to define how function invocations are resolved, the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-overload-resolution-algorithm">overload resolution algorithm</dfn> is defined.  Its input is an <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set⑦">effective overload set</a>, <var>S</var>, and a list of ECMAScript values, <var>args</var>.
    Its output is a pair consisting of the <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④⑦">operation</a> or <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①⓪">extended attribute</a> of one of <var>S</var>’s entries
    and a list of IDL values or the special value “missing”.  The algorithm behaves as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>maxarg</var> be the length of the longest type list of the entries in <var>S</var>.</p>
     </li><li data-md="">
      <p>Let <var>n</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-size" id="ref-for-list-size②">size</a> of <var>args</var>.</p>
     </li><li data-md="">
      <p>Initialize <var>argcount</var> to be min(<var>maxarg</var>, <var>n</var>).</p>
     </li><li data-md="">
      <p>Remove from <var>S</var> all entries whose type list is not of length <var>argcount</var>.</p>
     </li><li data-md="">
      <p>If <var>S</var> is empty, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②⑧">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③①">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Initialize <var>d</var> to −1.</p>
     </li><li data-md="">
      <p>Initialize <var>method</var> to <emu-val>undefined</emu-val>.</p>
     </li><li data-md="">
      <p>If there is more than one entry in <var>S</var>, then set <var>d</var> to be the <a data-link-type="dfn" href="#dfn-distinguishing-argument-index" id="ref-for-dfn-distinguishing-argument-index③">distinguishing argument index</a> for the entries of <var>S</var>.</p>
     </li><li data-md="">
      <p>Initialize <var>values</var> to be an empty list, where each entry will be either an IDL value or the special value “missing”.</p>
     </li><li data-md="">
      <p>Initialize <var>i</var> to 0.</p>
     </li><li data-md="">
      <p>While <var>i</var> &lt; <var>d</var>:</p>
      <ol>
       <li data-md="">
        <p>Let <var>V</var> be <var>args</var>[<var>i</var>].</p>
       </li><li data-md="">
        <p>Let <var>type</var> be the type at index <var>i</var> in the type list of any entry in <var>S</var>.</p>
        <p class="note" role="note"><span>Note:</span> All entries in <var>S</var> at this point have the same type and <a data-link-type="dfn" href="#dfn-optionality-value" id="ref-for-dfn-optionality-value①">optionality value</a> at index <var>i</var>.</p>
       </li><li data-md="">
        <p>Let <var>optionality</var> be the value at index <var>i</var> in the list of <a data-link-type="dfn" href="#dfn-optionality-value" id="ref-for-dfn-optionality-value②">optionality values</a> of any entry in <var>S</var>.</p>
       </li><li data-md="">
        <p>If <var>optionality</var> is “optional” and <var>V</var> is <emu-val>undefined</emu-val>, then:</p>
        <ol>
         <li data-md="">
          <p>If the argument at index <var>i</var> is declared with a <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value⑧">default value</a>,
then append to <var>values</var> that default value.</p>
         </li><li data-md="">
          <p>Otherwise, append to <var>values</var> the special value “missing”.</p>
        </li></ol>
       </li><li data-md="">
        <p>Otherwise, append to <var>values</var> the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤⑧">converting</a> <var>V</var> to IDL type <var>type</var>.</p>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var> + 1.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>i</var> = <var>d</var>, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>V</var> be <var>args</var>[<var>i</var>].</p>
        <p class="note" role="note"><span>Note:</span> This is the argument that will be used to resolve which overload is selected.</p>
       </li><li data-md="">
        <p>If <var>V</var> is <emu-val>undefined</emu-val>, and there is an entry in <var>S</var> whose list of <a data-link-type="dfn" href="#dfn-optionality-value" id="ref-for-dfn-optionality-value③">optionality values</a> has “optional” at index <var>i</var>,
then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <var>V</var> is <emu-val>null</emu-val> or <emu-val>undefined</emu-val>,
and there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type②⑨">nullable type</a></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary①④">dictionary type</a></p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types⑨">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type⑥">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type③⑨">union type</a> or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①⓪">annotated</a> union type that <a data-link-type="dfn" href="#dfn-includes-a-nullable-type" id="ref-for-dfn-includes-a-nullable-type④">includes a nullable type</a> or that
has a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary①⑤">dictionary type</a> in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①①">flattened members</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <var>V</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object①⑨">platform object</a>, and
there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>an <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①⑦">interface type</a> that <var>V</var> implements</p>
         </li><li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②⑤">object</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③⓪">nullable</a> version of any of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①①">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type⑦">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④⓪">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③①">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①②">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①②">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <var>V</var> is a <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③①">DOMException</a></code> platform object and
there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③②">DOMException</a></code></p>
         </li><li data-md="">
          <p><code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error①④">Error</a></code></p>
         </li><li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②⑥">object</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③②">nullable</a> version of either of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①③">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type⑧">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④①">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③③">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①④">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①③">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②⑤">Type</a>(<var>V</var>) is Object, <var>V</var> has an [[ErrorData]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①⑥">internal slot</a>, and
there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p><code class="idl"><a class="idl-code" data-link-type="interface" href="#idl-Error" id="ref-for-idl-Error①⑤">Error</a></code></p>
         </li><li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②⑦">object</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③④">nullable</a> version of either of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①⑤">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type⑨">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④②">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③⑤">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①⑥">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①④">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②⑥">Type</a>(<var>V</var>) is Object, <var>V</var> has an [[ArrayBufferData]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①⑦">internal slot</a>, and
there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①⑤">ArrayBuffer</a></code></p>
         </li><li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②⑧">object</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③⑥">nullable</a> version of either of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①⑦">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①⓪">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④③">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③⑦">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①⑧">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①⑤">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②⑦">Type</a>(<var>V</var>) is Object, <var>V</var> has a [[DataView]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①⑧">internal slot</a>, and
there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-DataView" id="ref-for-idl-DataView⑤">DataView</a></code></p>
         </li><li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object②⑨">object</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③⑧">nullable</a> version of either of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types①⑨">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①①">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④④">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type③⑨">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②⓪">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①⑥">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②⑧">Type</a>(<var>V</var>) is Object, <var>V</var> has a [[TypedArrayName]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots①⑨">internal slot</a>, and
there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-typed-array-type" id="ref-for-dfn-typed-array-type②">typed array type</a> whose name
is equal to the value of <var>V</var>’s [[TypedArrayName]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②⓪">internal slot</a></p>
         </li><li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object③⓪">object</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④⓪">nullable</a> version of either of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②①">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①②">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④⑤">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④①">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②②">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①⑦">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable③">IsCallable</a>(<var>V</var>) is true,
and there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②⑧">callback function</a> type</p>
         </li><li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object③①">object</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④②">nullable</a> version of any of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②③">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①③">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④⑥">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④③">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②④">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①⑧">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values②⑨">Type</a>(<var>V</var>) is Object and
there is an entry in <var>S</var> that has one of the
following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>a <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type②⓪">sequence type</a></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-frozen-array-type" id="ref-for-dfn-frozen-array-type⑤">frozen array type</a></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④④">nullable</a> version of any of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②⑤">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①④">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④⑦">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④⑤">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②⑥">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types①⑨">flattened member types</a></p>
        </li></ul>
        <p>and after performing the following steps,</p>
        <ol>
         <li data-md="">
          <p>Let <var>method</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③②">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getmethod" id="ref-for-sec-getmethod④">GetMethod</a>(<var>V</var>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①⓪">@@iterator</a></code>).</p>
        </li></ol>
        <p><var>method</var> is not <emu-val>undefined</emu-val>, then remove from <var>S</var> all
other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③⓪">Type</a>(<var>V</var>) is Object and
there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②⑥">callback interface</a> type</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#idl-dictionary" id="ref-for-idl-dictionary①⑥">dictionary type</a></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#record-type" id="ref-for-record-type③">record type</a></p>
         </li><li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object③②">object</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④⑥">nullable</a> version of any of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②⑦">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①⑤">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④⑧">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④⑦">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②⑧">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types②⓪">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③①">Type</a>(<var>V</var>) is Boolean
and there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①⑦">boolean</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④⑧">nullable</a> <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①⑧">boolean</a></code></p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types②⑨">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①⑥">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type④⑨">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type④⑨">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③⓪">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types②①">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③②">Type</a>(<var>V</var>) is Number
and there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type①⓪">numeric type</a></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤⓪">nullable</a> <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type①①">numeric type</a></p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③①">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①⑦">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑤⓪">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤①">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③②">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types②②">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-string-type" id="ref-for-dfn-string-type④">string type</a></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤②">nullable</a> version of any of the above types</p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③③">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①⑧">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑤①">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤③">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③④">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types②③">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type①②">numeric type</a></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤④">nullable</a> <a data-link-type="dfn" href="#dfn-numeric-type" id="ref-for-dfn-numeric-type①③">numeric type</a></p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③⑤">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type①⑨">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑤②">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤⑤">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③⑥">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types②④">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if there is an entry in <var>S</var> that has one of the following types at position <var>i</var> of its type list,</p>
        <ul>
         <li data-md="">
          <p><code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean①⑨">boolean</a></code></p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤⑥">nullable</a> <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean②⓪">boolean</a></code></p>
         </li><li data-md="">
          <p>an <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③⑦">annotated type</a> whose <a data-link-type="dfn" href="#annotated-types-inner-type" id="ref-for-annotated-types-inner-type②⓪">inner type</a> is one of the above types</p>
         </li><li data-md="">
          <p>a <a data-link-type="dfn" href="#dfn-union-type" id="ref-for-dfn-union-type⑤③">union type</a>, <a data-link-type="dfn" href="#dfn-nullable-type" id="ref-for-dfn-nullable-type⑤⑦">nullable</a> union type, or <a data-link-type="dfn" href="#annotated-types" id="ref-for-annotated-types③⑧">annotated</a> union type
that has one of the above types in its <a data-link-type="dfn" href="#dfn-flattened-union-member-types" id="ref-for-dfn-flattened-union-member-types②⑤">flattened member types</a></p>
        </li></ul>
        <p>then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: if there is an entry in <var>S</var> that has <code class="idl"><a data-link-type="idl" href="#idl-any" id="ref-for-idl-any①④">any</a></code> at position <var>i</var> of its type list, then remove from <var>S</var> all other entries.</p>
       </li><li data-md="">
        <p>Otherwise: <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw②⑨">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③②">TypeError</a></code>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>callable</var> be the <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④⑧">operation</a> or <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①①">extended attribute</a> of the single entry in <var>S</var>.</p>
     </li><li data-md="">
      <p>If <var>i</var> = <var>d</var> and <var>method</var> is not <emu-val>undefined</emu-val>, then</p>
      <ol>
       <li data-md="">
        <p>Let <var>V</var> be <var>args</var>[<var>i</var>].</p>
       </li><li data-md="">
        <p>Let <var>T</var> be the type at index <var>i</var> in the
type list of the remaining entry in <var>S</var>.</p>
       </li><li data-md="">
        <p>If <var>T</var> is a <a data-link-type="dfn" href="#sequence-type" id="ref-for-sequence-type②①">sequence type</a>, then
append to <var>values</var> the result of <a data-link-type="dfn" href="#create-sequence-from-iterable" id="ref-for-create-sequence-from-iterable③">creating a sequence</a> of type <var>T</var> from <var>V</var> and <var>method</var>.</p>
       </li><li data-md="">
        <p>Otherwise, <var>T</var> is a <a data-link-type="dfn" href="#dfn-frozen-array-type" id="ref-for-dfn-frozen-array-type⑥">frozen array type</a>.
Append to <var>values</var> the result of <a data-link-type="dfn" href="#create-frozen-array-from-iterable" id="ref-for-create-frozen-array-from-iterable①">creating a frozen array of type T from V and method</a>.</p>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var> + 1.</p>
      </li></ol>
     </li><li data-md="">
      <p>While <var>i</var> &lt; <var>argcount</var>:</p>
      <ol>
       <li data-md="">
        <p>Let <var>V</var> be <var>args</var>[<var>i</var>].</p>
       </li><li data-md="">
        <p>Let <var>type</var> be the type at index <var>i</var> in the type list of the remaining entry in <var>S</var>.</p>
       </li><li data-md="">
        <p>Let <var>optionality</var> be the value at index <var>i</var> in the list of <a data-link-type="dfn" href="#dfn-optionality-value" id="ref-for-dfn-optionality-value④">optionality values</a> of the remaining entry in <var>S</var>.</p>
       </li><li data-md="">
        <p>If <var>optionality</var> is “optional” and <var>V</var> is <emu-val>undefined</emu-val>, then:</p>
        <ol>
         <li data-md="">
          <p>If the argument at index <var>i</var> is declared with a <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value⑨">default value</a>,
then append to <var>values</var> that default value.</p>
         </li><li data-md="">
          <p>Otherwise, append to <var>values</var> the special value “missing”.</p>
        </li></ol>
       </li><li data-md="">
        <p>Otherwise, append to <var>values</var> the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑤⑨">converting</a> <var>V</var> to IDL type <var>type</var>.</p>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var> + 1.</p>
      </li></ol>
     </li><li data-md="">
      <p>While <var>i</var> is less than the number of arguments <var>callable</var> is declared to take:</p>
      <ol>
       <li data-md="">
        <p>If <var>callable</var>’s argument at index <var>i</var> is declared with a <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value①⓪">default value</a>,
then append to <var>values</var> that default value.</p>
       </li><li data-md="">
        <p>Otherwise, if <var>callable</var>’s argument at index <var>i</var> is not variadic, then append to <var>values</var> the special value “missing”.</p>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var> + 1.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return the pair &lt;<var>callable</var>, <var>values</var>&gt;.</p>
    </li></ol>
   </div>
   <div class="note" role="note">
    <p>The overload resolution algorithm performs both the identification
    of which overloaded operation, constructor, etc. is being called,
    and the conversion of the ECMAScript argument values to their
    corresponding IDL values.  Informally, it operates as follows.</p>
    <p>First, the selection of valid overloads is done by considering
    the number of ECMAScript arguments that were passed in to the function:</p>
    <ul>
     <li data-md="">
      <p>If there are more arguments passed in than the longest
overload argument list, then they are ignored.</p>
     </li><li data-md="">
      <p>After ignoring these trailing arguments, only overloads
that can take this exact number of arguments are considered.
If there are none, then a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③③">TypeError</a></code> is thrown.</p>
    </li></ul>
    <p>Once we have a set of possible overloads with the right number
    of arguments, the ECMAScript values are converted from left to right.
    The nature of the restrictions on overloading means that if we
    have multiple possible overloads at this point, then there will
    be one position in the argument list that will be used to
    distinguish which overload we will finally select; this is
    the <a data-link-type="dfn" href="#dfn-distinguishing-argument-index" id="ref-for-dfn-distinguishing-argument-index④">distinguishing argument index</a>.</p>
    <p>We first convert the arguments to the left of the distinguishing
    argument.  (There is a requirement that an argument to the left of
    the distinguishing argument index has the same type as in the other
    overloads, at the same index.) Then we inspect the type of the
    ECMAScript value that is passed in at the distinguishing argument
    index to determine which IDL type it may correspond to.
    This allows us to select the final overload that will
    be invoked.  If the value passed in is <emu-val>undefined</emu-val> and there is an overload with an optional argument at this position, then
    we will choose that overload.  If there is no valid overload for the type of
    value passed in here, then we throw a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③④">TypeError</a></code>.
    The inspection of the value at the distinguishing argument index does not have any side effects;
    the only side effects that come from running the overload resolution
    algorithm are those that come from converting the ECMAScript values
    to IDL values.</p>
    <p>At this point, we have determined which overload to use.  We now
    convert the remaining arguments, from the distinguishing argument onwards,
    again ignoring any additional arguments that were ignored due to being passed
    after the last possible argument.</p>
    <p>When converting an optional argument’s ECMAScript value to its equivalent IDL value, <emu-val>undefined</emu-val> will be converted into
    the <a data-link-type="dfn" href="#dfn-optional-argument-default-value" id="ref-for-dfn-optional-argument-default-value①①">optional argument’s default value</a>,
    if it has one, or a special value “missing” otherwise.</p>
    <p>Optional arguments corresponding to a final, variadic argument do not treat <emu-val>undefined</emu-val> as a special “missing” value, however.
    The <emu-val>undefined</emu-val> value is converted to the type
    of variadic argument as would be done for a non-optional argument.</p>
   </div>
   <h3 class="heading settled" data-level="3.6" id="es-interfaces"><span class="secno">3.6. </span><span class="content">Interfaces</span><a class="self-link" href="#es-interfaces"></a></h3>
   <p>For every non-callback <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①⑤">interface</a> that is <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed②">exposed</a> in
a given ECMAScript global environment and that is not declared with
the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①⑧">NoInterfaceObject</a></code>] or [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace⑥">LegacyNamespace</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①②">extended attributes</a>,
a corresponding property must exist on the ECMAScript environment’s global object.
The name of the property is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥③">identifier</a> of the interface,
and its value is an object called the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-interface-object">interface object</dfn>.
The property has the attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.
The characteristics of an interface object are described in <a href="#interface-object">§3.6.1 Interface object</a>.</p>
   <p>If the [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias①⑤">LegacyWindowAlias</a></code>] extended attribute was specified on an <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed③">exposed</a> interface,
then for each <a data-link-type="dfn" href="#legacywindowalias-identifier" id="ref-for-legacywindowalias-identifier②">identifier</a> in [<code class="idl"><a data-link-type="idl" href="#LegacyWindowAlias" id="ref-for-LegacyWindowAlias①⑥">LegacyWindowAlias</a></code>]'s <a data-link-type="dfn" href="#legacywindowalias-identifier" id="ref-for-legacywindowalias-identifier③">identifiers</a> there must be a corresponding property on the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window⑤">Window</a></code> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①⑥">interface</a>.
The name of the property is the given <a data-link-type="dfn" href="#legacywindowalias-identifier" id="ref-for-legacywindowalias-identifier④">identifier</a>,
and its value is a reference to the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object⑨">interface object</a> for the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①⑦">interface</a>.
The property has the attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
   <p>In addition, for every [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor①⑨">NamedConstructor</a></code>] extended attribute on an <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed④">exposed</a> interface,
a corresponding property must exist on the ECMAScript global object.
The name of the property is the [<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor②⓪">NamedConstructor</a></code>]'s <a data-link-type="dfn" href="#namedconstructor-identifier" id="ref-for-namedconstructor-identifier②">identifier</a>,
and its value is an object called a <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-named-constructor">named constructor</dfn>,
which allows construction of objects that implement the interface.
The property has the attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.
The characteristics of a named constructor are described in <a href="#named-constructors">§3.6.2 Named constructors</a>.</p>
   <h4 class="heading settled" data-level="3.6.1" id="interface-object"><span class="secno">3.6.1. </span><span class="content">Interface object</span><span id="es-interface-call"></span><span id="es-constructible-interfaces"></span><a class="self-link" href="#interface-object"></a></h4>
   <p>The <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①⓪">interface object</a> for a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①⑧">interface</a> is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects⑦">built-in function object</a>.
It has properties that correspond to the <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②⑧">constants</a> and <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①⑤">static operations</a> defined on that interface,
as described in sections <a href="#es-constants">§3.6.6 Constants</a> and <a href="#es-operations">§3.6.8 Operations</a>.</p>
   <p>If the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①①⑨">interface</a> is declared with a [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①⑦">Constructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①③">extended attribute</a>,
then the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①①">interface object</a> can be called as a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#constructor" id="ref-for-constructor④">constructor</a> to create an object that implements that interface.
Calling that interface as a function will throw an exception.</p>
   <p><a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①②">Interface objects</a> whose <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②⓪">interfaces</a> are not declared
with a [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①⑧">Constructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①④">extended attribute</a> will throw when called,
both as a function and as a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#constructor" id="ref-for-constructor⑤">constructor</a>.</p>
   <p>An <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①③">interface object</a> for a non-callback <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②①">interface</a> has an associated object called the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object⑦">interface prototype object</a>.
This object has properties that correspond to
the <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①⑧">regular attributes</a> and <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②⑤">regular operations</a> defined on the interface,
and is described in more detail in <a href="#interface-prototype-object">§3.6.3 Interface prototype object</a>.</p>
   <p class="note" role="note"><span>Note:</span> Since an <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①④">interface object</a> is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①①">function object</a> the <code>typeof</code> operator will return "function" when applied to an interface object.</p>
   <div class="algorithm" data-algorithm="create an interface object">
    <p>The <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①⑤">interface object</a> for a given non-callback <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②②">interface</a> <var>I</var> with <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥④">identifier</a> <var>id</var> and in <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm③">Realm</a> <var>realm</var> is <dfn data-dfn-type="dfn" data-lt="create an interface object" data-noexport="" id="create-an-interface-object">created<a class="self-link" href="#create-an-interface-object"></a></dfn> as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>steps</var> be the following steps:</p>
      <ol>
       <li data-md="">
        <p>If <var>I</var> was not declared with a [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor①⑨">Constructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①⑤">extended attribute</a>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③⓪">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑤">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>If <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects⑧">NewTarget</a></code> is <emu-val>undefined</emu-val>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③①">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑥">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>args</var> be the passed arguments.</p>
       </li><li data-md="">
        <p>Let <var>n</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-size" id="ref-for-list-size③">size</a> of <var>args</var>.</p>
       </li><li data-md="">
        <p>Let <var>id</var> be the identifier of interface <var>I</var>.</p>
       </li><li data-md="">
        <p>Initialize <var>S</var> to the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set⑧">effective overload set</a> for constructors with <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥⑤">identifier</a> <var>id</var> on <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②③">interface</a> <var>I</var> and with argument count <var>n</var>.</p>
       </li><li data-md="">
        <p>Let &lt;<var>constructor</var>, <var>values</var>&gt; be the result
of passing <var>S</var> and <var>args</var>.
to the <a data-link-type="dfn" href="#dfn-overload-resolution-algorithm" id="ref-for-dfn-overload-resolution-algorithm③">overload resolution algorithm</a>.</p>
       </li><li data-md="">
        <p>Let <var>R</var> be the result of performing
the actions listed in the description of <var>constructor</var> with <var>values</var> as the argument values.
Rethrow any exceptions.</p>
       </li><li data-md="">
        <p>Let <var>O</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③⑧">converting</a> <var>R</var> to an ECMAScript <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①⑧">interface type</a> value <var>I</var>.</p>
       </li><li data-md="">
        <p class="assertion">Assert: <var>O</var> is an object that implements <var>I</var>.</p>
       </li><li data-md="">
        <p class="assertion">Assert: <var>O</var>.[[Realm]] is equal to <var>realm</var>.</p>
       </li><li data-md="">
        <p>Return <var>O</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>constructorProto</var> be <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-function-prototype-object" id="ref-for-sec-properties-of-the-function-prototype-object">%FunctionPrototype%</a></code>]].</p>
     </li><li data-md="">
      <p>If <var>I</var> inherits from some other interface <var>P</var>,
then set <var>constructorProto</var> to the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①⑥">interface object</a> of <var>P</var> in <var>realm</var>.</p>
     </li><li data-md="">
      <p>Let <var>F</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③③">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createbuiltinfunction" id="ref-for-sec-createbuiltinfunction">CreateBuiltinFunction</a>(<var>realm</var>, <var>steps</var>, <var>constructorProto</var>).</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③④">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionname" id="ref-for-sec-setfunctionname">SetFunctionName</a>(<var>F</var>, <var>id</var>).</p>
     </li><li data-md="">
      <p>Let <var>length</var> be 0.</p>
     </li><li data-md="">
      <p>If <var>I</var> was declared with a [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor②⓪">Constructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①⑥">extended attribute</a>, then</p>
      <ol>
       <li data-md="">
        <p>Initialize <var>S</var> to the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set⑨">effective overload set</a> for constructors with <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥⑥">identifier</a> <var>id</var> on <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②④">interface</a> <var>I</var> and
with argument count 0.</p>
       </li><li data-md="">
        <p>Set <var>length</var> to the length of the
shortest argument list of the entries in <var>S</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③⑤">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionlength" id="ref-for-sec-setfunctionlength">SetFunctionLength</a>(<var>F</var>, <var>length</var>).</p>
     </li><li data-md="">
      <p>Let <var>proto</var> be the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object⑧">interface prototype object</a> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②⑤">interface</a> <var>I</var> in <var>realm</var>.</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③⑥">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow" id="ref-for-sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<var>F</var>, "<code>prototype</code>",
PropertyDescriptor{[[Value]]: <var>proto</var>, [[Writable]]: <emu-val>false</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>false</emu-val>}).</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-constants" id="ref-for-define-the-constants">Define the constants</a> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②⑥">interface</a> <var>I</var> on <var>F</var> given <var>realm</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-static-attributes" id="ref-for-define-the-static-attributes">Define the static attributes</a> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②⑦">interface</a> <var>I</var> on <var>F</var> given <var>realm</var>.</p>
     </li><li data-md="">
      <p>Return <var>F</var>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.6.2" id="named-constructors"><span class="secno">3.6.2. </span><span class="content">Named constructors</span><a class="self-link" href="#named-constructors"></a></h4>
   <p>A <a data-link-type="dfn" href="#dfn-named-constructor" id="ref-for-dfn-named-constructor②">named constructor</a> that exists due to one or more
[<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor②①">NamedConstructor</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①⑦">extended attributes</a> with a given <a data-link-type="dfn" href="#namedconstructor-identifier" id="ref-for-namedconstructor-identifier③">identifier</a> is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects⑨">built-in function object</a>.
It allows constructing objects that
implement the interface on which the
[<code class="idl"><a data-link-type="idl" href="#NamedConstructor" id="ref-for-NamedConstructor②②">NamedConstructor</a></code>] extended attributes appear.</p>
   <p>If the actions listed in the description of the constructor return normally,
then those steps must return an object that implements interface <var>I</var>.
This object’s relevant <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm④">Realm</a> must be the same as that of the <a data-link-type="dfn" href="#dfn-named-constructor" id="ref-for-dfn-named-constructor③">named constructor</a>.</p>
   <div class="algorithm" data-algorithm="create a named constructor">
    <p>The <a data-link-type="dfn" href="#dfn-named-constructor" id="ref-for-dfn-named-constructor④">named constructor</a> with <a data-link-type="dfn" href="#namedconstructor-identifier" id="ref-for-namedconstructor-identifier④">identifier</a> <var>id</var> for a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②⑧">interface</a> <var>I</var> in Realm <var>realm</var> is <dfn data-dfn-type="dfn" data-lt="create a named constructor" data-noexport="" id="create-a-named-constructor">created<a class="self-link" href="#create-a-named-constructor"></a></dfn> as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>steps</var> be the following steps:</p>
      <ol>
       <li data-md="">
        <p>If <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①⓪">NewTarget</a></code> is <emu-val>undefined</emu-val>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③②">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑦">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>args</var> be the passed arguments.</p>
       </li><li data-md="">
        <p>Let <var>n</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-size" id="ref-for-list-size④">size</a> of <var>args</var>.</p>
       </li><li data-md="">
        <p>Initialize <var>S</var> to the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set①⓪">effective overload set</a> for constructors with <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥⑦">identifier</a> <var>id</var> on <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①②⑨">interface</a> <var>I</var> and with argument count <var>n</var>.</p>
       </li><li data-md="">
        <p>Let &lt;<var>constructor</var>, <var>values</var>&gt; be the result of passing <var>S</var> and <var>args</var> to the <a data-link-type="dfn" href="#dfn-overload-resolution-algorithm" id="ref-for-dfn-overload-resolution-algorithm④">overload resolution algorithm</a>.</p>
       </li><li data-md="">
        <p>Let <var>R</var> be the result of performing the actions listed in the description of <var>constructor</var> with <var>values</var> as the argument values.</p>
       </li><li data-md="">
        <p>Return the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value③⑨">converting</a> <var>R</var> to an ECMAScript <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface①⑨">interface type</a> value <var>I</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>F</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③⑦">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createbuiltinfunction" id="ref-for-sec-createbuiltinfunction①">CreateBuiltinFunction</a>(<var>realm</var>, <var>steps</var>, <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-function-prototype-object" id="ref-for-sec-properties-of-the-function-prototype-object①">%FunctionPrototype%</a></code>]]).</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③⑧">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionname" id="ref-for-sec-setfunctionname①">SetFunctionName</a>(<var>F</var>, <var>id</var>).</p>
     </li><li data-md="">
      <p>Initialize <var>S</var> to the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set①①">effective overload set</a> for constructors with identifier <var>id</var> on <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③⓪">interface</a> <var>I</var> and with argument count 0.</p>
     </li><li data-md="">
      <p>Let <var>length</var> be the length of the shortest argument list of the entries in <var>S</var>.</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands③⑨">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionlength" id="ref-for-sec-setfunctionlength①">SetFunctionLength</a>(<var>F</var>, <var>length</var>).</p>
     </li><li data-md="">
      <p>Let <var>proto</var> be the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object⑨">interface prototype object</a> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③①">interface</a> <var>I</var> in <var>realm</var>.</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④⓪">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow" id="ref-for-sec-definepropertyorthrow①">DefinePropertyOrThrow</a>(<var>F</var>, "<code>prototype</code>",
PropertyDescriptor{[[Value]]: <var>proto</var>, [[Writable]]: <emu-val>false</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>false</emu-val>}).</p>
     </li><li data-md="">
      <p>Return <var>F</var>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.6.3" id="interface-prototype-object"><span class="secno">3.6.3. </span><span class="content">Interface prototype object</span><a class="self-link" href="#interface-prototype-object"></a></h4>
   <p>There must exist an <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-interface-prototype-object">interface prototype object</dfn> for every non-callback <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③②">interface</a> defined,
regardless of whether the interface was declared
with the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject①⑨">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①⑧">extended attribute</a>.</p>
   <div class="algorithm" data-algorithm="create an interface prototype object">
    <p>The <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①⓪">interface prototype object</a> for a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③③">interface</a> <var>interface</var> and <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm⑤">Realm</a> <var>realm</var> is <dfn class="dfn-paneled" data-dfn-type="dfn" data-lt="create an interface prototype object" data-noexport="" id="create-an-interface-prototype-object">created</dfn> as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>proto</var> be null.</p>
     </li><li data-md="">
      <p>If <var>interface</var> is declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①③">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①①⑨">extended attribute</a>,
and <var>interface</var> <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties④">supports named properties</a>,
then set <var>proto</var> to the <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object③">named properties object</a> in <var>realm</var> of <var>interface</var>.</p>
     </li><li data-md="">
      <p>Otherwise, if <var>interface</var> is declared to inherit from another interface,
then set <var>proto</var> to the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①①">interface prototype object</a> in <var>realm</var> of that <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①⑤">inherited interface</a>.</p>
     </li><li data-md="">
      <p>Otherwise, if <var>interface</var> is the <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③③">DOMException</a></code> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③④">interface</a>,
then set <var>proto</var> to <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-error-prototype-object" id="ref-for-sec-properties-of-the-error-prototype-object">%ErrorPrototype%</a></code>]].</p>
     </li><li data-md="">
      <p>Otherwise, set <var>proto</var> to <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object" id="ref-for-sec-properties-of-the-object-prototype-object④">%ObjectPrototype%</a></code>]].</p>
     </li><li data-md="">
      <p class="assertion">Assert: <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③③">Type</a>(<var>proto</var>) is Object.</p>
     </li><li data-md="">
      <p>Let <var>interfaceProtoObj</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④①">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-objectcreate" id="ref-for-sec-objectcreate②">ObjectCreate</a>(<var>proto</var>).</p>
     </li><li data-md="">
      <p>If <var>interface</var> has any <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①⑧">member</a> declared with the [<code class="idl"><a data-link-type="idl" href="#Unscopable" id="ref-for-Unscopable⑤">Unscopable</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②⓪">extended attribute</a>,
then:</p>
      <p class="issue" id="issue-0112317b"><a class="self-link" href="#issue-0112317b"></a> Should an <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①①">@@unscopables</a></code> property also be defined if <var>interface</var> is
declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①④">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②①">extended attribute</a>?
This is discussed in <a href="https://github.com/heycam/webidl/issues/544">issue #544</a>.</p>
      <ol>
       <li data-md="">
        <p>Let <var>unscopableObject</var> be the result of performing <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④②">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-objectcreate" id="ref-for-sec-objectcreate③">ObjectCreate</a>(<emu-val>null</emu-val>).</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate⑧">For each</a> <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed⑤">exposed</a> <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member①⑨">member</a> <var>member</var> of <var>interface</var> that is declared with the [<code class="idl"><a data-link-type="idl" href="#Unscopable" id="ref-for-Unscopable⑥">Unscopable</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②②">extended attribute</a>:</p>
        <ol>
         <li data-md="">
          <p>Let <var>id</var> be <var>member</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥⑧">identifier</a>.</p>
         </li><li data-md="">
          <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④③">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createdataproperty" id="ref-for-sec-createdataproperty③">CreateDataProperty</a>(<var>unscopableObject</var>, <var>id</var>, <emu-val>true</emu-val>).</p>
        </li></ol>
       </li><li data-md="">
        <p>Let <var>desc</var> be the PropertyDescriptor{[[Value]]: <var>unscopableObject</var>,
[[Writable]]: <emu-val>false</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>,
[[Configurable]]: <emu-val>true</emu-val>}.</p>
       </li><li data-md="">
        <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④④">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow" id="ref-for-sec-definepropertyorthrow②">DefinePropertyOrThrow</a>(<var>interfaceProtoObj</var>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①②">@@unscopables</a></code>, <var>desc</var>).</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>interface</var> is declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①⑤">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②③">extended attribute</a>, or <var>interface</var> is in the set of <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①⑥">inherited interfaces</a> of an interface
that is declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①⑥">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②④">extended attribute</a>, then:</p>
      <ol>
       <li data-md="">
        <p>Set the internal methods of <var>interfaceProtoObj</var> which are specific to <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects" id="ref-for-sec-immutable-prototype-exotic-objects">immutable prototype exotic objects</a> to the definitions specified in <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects" id="ref-for-sec-immutable-prototype-exotic-objects①">ECMA-262 §9.4.7 Immutable prototype exotic objects</a>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>interface</var> is not declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①⑦">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②⑤">extended attribute</a>, then:</p>
      <ol>
       <li data-md="">
        <p><a data-link-type="dfn" href="#define-the-regular-attributes" id="ref-for-define-the-regular-attributes">Define the regular attributes</a> of <var>interface</var> on <var>interfaceProtoObj</var> given <var>realm</var>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="#define-the-regular-operations" id="ref-for-define-the-regular-operations">Define the regular operations</a> of <var>interface</var> on <var>interfaceProtoObj</var> given <var>realm</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-constants" id="ref-for-define-the-constants①">Define the constants</a> of <var>interface</var> on <var>interfaceProtoObj</var> given <var>realm</var>.</p>
     </li><li data-md="">
      <p>If the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject②⓪">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②⑥">extended attribute</a> was not specified on <var>interface</var>, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>constructor</var> be the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①⑦">interface object</a> of <var>interface</var> in <var>realm</var>.</p>
       </li><li data-md="">
        <p>Let <var>desc</var> be the PropertyDescriptor{[[Writable]]: <emu-val>true</emu-val>,
[[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val>,
[[Value]]: <var>constructor</var>}.</p>
       </li><li data-md="">
        <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④⑤">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow" id="ref-for-sec-definepropertyorthrow③">DefinePropertyOrThrow</a>(<var>interfaceProtoObj</var>, "<code>constructor</code>", <var>desc</var>).</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>interfaceProtoObj</var>.</p>
    </li></ol>
   </div>
   <p>Additionally, <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①②">interface prototype objects</a> get properties declaratively from:</p>
   <ul>
    <li data-md="">
     <p><a href="#es-stringifier">§3.6.8.2 Stringifiers</a>,</p>
    </li><li data-md="">
     <p><a href="#es-iterators">§3.6.9 Common iterator behavior</a>,</p>
    </li><li data-md="">
     <p><a href="#es-iterable">§3.6.10 Iterable declarations</a>,</p>
    </li><li data-md="">
     <p><a href="#es-maplike">§3.6.11 Maplike declarations</a>, and</p>
    </li><li data-md="">
     <p><a href="#es-setlike">§3.6.12 Setlike declarations</a>.</p>
   </li></ul>
   <p class="issue" id="issue-e7d418f6"><a class="self-link" href="#issue-e7d418f6"></a> Define those properties imperatively instead.</p>
   <div class="note" role="note">
    <p>The <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①③">interface prototype object</a> of an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③⑤">interface</a> that is defined with
    the [<code class="idl"><a data-link-type="idl" href="#NoInterfaceObject" id="ref-for-NoInterfaceObject②①">NoInterfaceObject</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②⑦">extended attribute</a> will be accessible.
    For example, with the following IDL:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->,
 <c- g="">NoInterfaceObject</c->]
<c- b="">interface</c-> <c- g="">Foo</c-> {
};

<c- b="">partial</c-> <c- b="">interface</c-> <c- g="">Window</c-> {
  <c- b="">attribute</c-> <c- n="">Foo</c-> <c- g="">foo</c->;
};
</pre>
    <p>it is not possible to access the interface prototype object through
    the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①⑧">interface object</a> (since it does not exist as <code>window.Foo</code>).  However, an instance
    of <code class="idl">Foo</code> can expose the interface prototype
    object by calling its [[GetPrototypeOf]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②①">internal method</a> – <code>Object.getPrototypeOf(window.foo)</code> in
    this example.</p>
   </div>
   <p>The <a data-link-type="dfn" href="#dfn-class-string" id="ref-for-dfn-class-string">class string</a> of an <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①④">interface prototype object</a> is the concatenation of
the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③⑥">interface</a>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑥⑨">identifier</a> and the string "<code>Prototype</code>".</p>
   <h4 class="heading settled" data-level="3.6.4" id="legacy-callback-interface-object"><span class="secno">3.6.4. </span><span class="content">Legacy callback interface object</span><a class="self-link" href="#legacy-callback-interface-object"></a></h4>
   <p>For every callback <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③⑦">interface</a> that is <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed⑥">exposed</a> in
a given ECMAScript global environment
and on which <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant②⑨">constants</a> are defined,
a corresponding property must exist on the ECMAScript environment’s global object.
The name of the property is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦⓪">identifier</a> of the interface,
and its value is an object called the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-legacy-callback-interface-object">legacy callback interface object</dfn>.
The property has the attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
   <p>The <a data-link-type="dfn" href="#dfn-legacy-callback-interface-object" id="ref-for-dfn-legacy-callback-interface-object①">legacy callback interface object</a> for a given <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②⑦">callback interface</a> is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①①">built-in function object</a>.
It has properties that correspond to the <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant③⓪">constants</a> defined on that interface,
as described in sections <a href="#es-constants">§3.6.6 Constants</a>.</p>
   <p class="note" role="note"><span>Note:</span> Since a legacy callback interface object is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①②">function object</a> the <code>typeof</code> operator will return "function"
when applied to a <a data-link-type="dfn" href="#dfn-legacy-callback-interface-object" id="ref-for-dfn-legacy-callback-interface-object②">legacy callback interface object</a>.</p>
   <div class="algorithm" data-algorithm="create a legacy callback interface object">
    <p>The <a data-link-type="dfn" href="#dfn-legacy-callback-interface-object" id="ref-for-dfn-legacy-callback-interface-object③">legacy callback interface object</a> for a given <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②⑧">callback interface</a> <var>interface</var> with <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦①">identifier</a> <var>id</var> and in <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm⑥">Realm</a> <var>realm</var> is <dfn data-dfn-type="dfn" data-lt="create a legacy callback interface object" data-noexport="" id="create-a-legacy-callback-interface-object">created<a class="self-link" href="#create-a-legacy-callback-interface-object"></a></dfn> as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>steps</var> be the following steps:</p>
      <ol>
       <li data-md="">
        <p><a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③③">Throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑧">TypeError</a></code>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>F</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④⑥">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createbuiltinfunction" id="ref-for-sec-createbuiltinfunction②">CreateBuiltinFunction</a>(<var>realm</var>, <var>steps</var>, <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-function-prototype-object" id="ref-for-sec-properties-of-the-function-prototype-object②">%FunctionPrototype%</a></code>]]).</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④⑦">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionname" id="ref-for-sec-setfunctionname②">SetFunctionName</a>(<var>F</var>, <var>id</var>).</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④⑧">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionlength" id="ref-for-sec-setfunctionlength②">SetFunctionLength</a>(<var>F</var>, 0).</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-constants" id="ref-for-define-the-constants②">Define the constants</a> of <var>interface</var> on <var>F</var> given <var>realm</var>.</p>
     </li><li data-md="">
      <p>Return <var>F</var>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.6.5" id="named-properties-object"><span class="secno">3.6.5. </span><span class="content">Named properties object</span><a class="self-link" href="#named-properties-object"></a></h4>
   <p>For every <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③⑧">interface</a> declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①⑧">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②⑧">extended attribute</a> that <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties⑤">supports named properties</a>,
there must exist an object known as the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-named-properties-object">named properties object</dfn> for that interface on which named properties are exposed.</p>
   <div class="algorithm" data-algorithm="create a named properties object">
     The <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object④">named properties object</a> for a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①③⑨">interface</a> <var>interface</var> and <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm⑦">Realm</a> <var>realm</var>,
    is <dfn data-dfn-type="dfn" data-lt="create a named properties object" data-noexport="" id="create-a-named-properties-object">created<a class="self-link" href="#create-a-named-properties-object"></a></dfn> as follows: 
    <ol>
     <li data-md="">
      <p>Let <var>proto</var> be null.</p>
     </li><li data-md="">
      <p>If <var>interface</var> is declared to inherit from another interface,
then set <var>proto</var> to the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①⑤">interface prototype object</a> in <var>realm</var> for the <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①⑦">inherited interface</a>.</p>
     </li><li data-md="">
      <p>Otherwise, set <var>proto</var> to <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object" id="ref-for-sec-properties-of-the-object-prototype-object⑤">%ObjectPrototype%</a></code>]].</p>
     </li><li data-md="">
      <p>Let <var>obj</var> be a newly created object.</p>
     </li><li data-md="">
      <p>Set <var>obj</var>’s internal methods to the definitions specified in <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots" id="ref-for-sec-ordinary-object-internal-methods-and-internal-slots③">ECMA-262 §9.1 Ordinary object internal methods and internal slots</a>,
unless they are specified in the the rest of <a href="#named-properties-object">§3.6.5 Named properties object</a>.</p>
     </li><li data-md="">
      <p>Set <var>obj</var>’s remaining internal methods to the definitions specified below.</p>
     </li><li data-md="">
      <p>Set <var>obj</var>.[[Prototype]] to <var>proto</var>.</p>
     </li><li data-md="">
      <p>Set <var>obj</var>.[[Extensible]] to <emu-val>true</emu-val>.</p>
     </li><li data-md="">
      <p>Return <var>obj</var>.</p>
    </li></ol>
   </div>
   <p>The <a data-link-type="dfn" href="#dfn-class-string" id="ref-for-dfn-class-string①">class string</a> of a <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object⑤">named properties object</a> is the concatenation of the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④⓪">interface</a>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦②">identifier</a> and the string "<code>Properties</code>".</p>
   <h5 class="heading settled" data-level="3.6.5.1" id="named-properties-object-getownproperty"><span class="secno">3.6.5.1. </span><span class="content">[[GetOwnProperty]]</span><a class="self-link" href="#named-properties-object-getownproperty"></a></h5>
   <div class="algorithm" data-algorithm="to invoke the internal [[GetOwnProperty]] method of named properties object">
    <p>When the [[GetOwnProperty]] internal method of a <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object⑥">named properties object</a> <var>O</var> is called with property key <var>P</var>, the following steps are taken:</p>
    <ol>
     <li data-md="">
      <p>Let <var>A</var> be the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④①">interface</a> for the <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object⑦">named properties object</a> <var>O</var>.</p>
     </li><li data-md="">
      <p>Let <var>object</var> be the sole object from <var>O</var>’s ECMAScript global environment that implements <var>A</var>.</p>
      <p class="note" role="note"><span>Note:</span> For example, if the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④②">interface</a> is the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window⑥">Window</a></code> interface,
then the sole object will be this global environment’s window object.</p>
     </li><li data-md="">
      <p>If the result of running the <a data-link-type="dfn" href="#dfn-named-property-visibility" id="ref-for-dfn-named-property-visibility">named property visibility algorithm</a> with
property name <var>P</var> and object <var>object</var> is true, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>operation</var> be the operation used to declare the named property getter.</p>
       </li><li data-md="">
        <p>Let <var>value</var> be an uninitialized variable.</p>
       </li><li data-md="">
        <p>If <var>operation</var> was defined without an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦③">identifier</a>, then
set <var>value</var> to the result of performing the steps listed in the interface description to <a data-link-type="dfn" href="#dfn-determine-the-value-of-a-named-property" id="ref-for-dfn-determine-the-value-of-a-named-property">determine the value of a named property</a> with <var>P</var> as the name.</p>
       </li><li data-md="">
        <p>Otherwise, <var>operation</var> was defined with an identifier.  Set <var>value</var> to the result
of performing the steps listed in the description of <var>operation</var> with <var>P</var> as the only argument value.</p>
       </li><li data-md="">
        <p>Let <var>desc</var> be a newly created <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-property-descriptor-specification-type" id="ref-for-sec-property-descriptor-specification-type">Property Descriptor</a> with no fields.</p>
       </li><li data-md="">
        <p>Set <var>desc</var>.[[Value]] to the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④⓪">converting</a> <var>value</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p>If <var>A</var> implements an interface with the
[<code class="idl"><a data-link-type="idl" href="#LegacyUnenumerableNamedProperties" id="ref-for-LegacyUnenumerableNamedProperties⑥">LegacyUnenumerableNamedProperties</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①②⑨">extended attribute</a>,
then set <var>desc</var>.[[Enumerable]] to <emu-val>false</emu-val>,
otherwise set it to <emu-val>true</emu-val>.</p>
       </li><li data-md="">
        <p>Set <var>desc</var>.[[Writable]] to <emu-val>true</emu-val> and <var>desc</var>.[[Configurable]] to <emu-val>true</emu-val>.</p>
       </li><li data-md="">
        <p>Return <var>desc</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ordinarygetownproperty" id="ref-for-sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<var>O</var>, <var>P</var>).</p>
    </li></ol>
   </div>
   <h5 class="heading settled" data-level="3.6.5.2" id="named-properties-object-defineownproperty"><span class="secno">3.6.5.2. </span><span class="content">[[DefineOwnProperty]]</span><a class="self-link" href="#named-properties-object-defineownproperty"></a></h5>
   <div class="algorithm" data-algorithm="to invoke the [[DefineOwnProperty]] internal method of named properties object">
    <p>When the [[DefineOwnProperty]] internal method of a <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object⑧">named properties object</a> is called,
    the following steps are taken:</p>
    <ol>
     <li data-md="">
      <p>Return <emu-val>false</emu-val>.</p>
    </li></ol>
   </div>
   <h5 class="heading settled" data-level="3.6.5.3" id="named-properties-object-delete"><span class="secno">3.6.5.3. </span><span class="content">[[Delete]]</span><a class="self-link" href="#named-properties-object-delete"></a></h5>
   <div class="algorithm" data-algorithm="to invoke the [[Delete]] internal method of named properties object">
    <p>When the [[Delete]] internal method of a <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object⑨">named properties object</a> is called,
    the following steps are taken:</p>
    <ol>
     <li data-md="">
      <p>Return <emu-val>false</emu-val>.</p>
    </li></ol>
   </div>
   <h5 class="heading settled" data-level="3.6.5.4" id="named-properties-object-setprototypeof"><span class="secno">3.6.5.4. </span><span class="content">[[SetPrototypeOf]]</span><a class="self-link" href="#named-properties-object-setprototypeof"></a></h5>
   <div class="algorithm" data-algorithm="to invoke the [[SetPrototypeOf]] internal method of a named properties object">
    <p>When the [[SetPrototypeOf]] internal method of a <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object①⓪">named properties object</a> <var>O</var> is called with
    ECMAScript language value <var>V</var>, the following step is taken:</p>
    <ol>
     <li data-md="">
      <p>Return <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands④⑨">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-set-immutable-prototype" id="ref-for-sec-set-immutable-prototype">SetImmutablePrototype</a>(<var>O</var>, <var>V</var>).</p>
    </li></ol>
   </div>
   <h5 class="heading settled" data-level="3.6.5.5" id="named-properties-object-preventextensions"><span class="secno">3.6.5.5. </span><span class="content">[[PreventExtensions]]</span><a class="self-link" href="#named-properties-object-preventextensions"></a></h5>
   <div class="algorithm" data-algorithm="to invoke the [[PreventExtensions]] internal method of named properties object">
    <p>When the [[PreventExtensions]] internal method of a <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object①①">named properties object</a> is called,
    the following steps are taken:</p>
    <ol>
     <li data-md="">
      <p>Return <emu-val>false</emu-val>.</p>
    </li></ol>
    <p class="note" role="note"><span>Note:</span> this keeps <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object①②">named properties object</a> extensible by
    making [[PreventExtensions]] fail.</p>
   </div>
   <h4 class="heading settled" data-level="3.6.6" id="es-constants"><span class="secno">3.6.6. </span><span class="content">Constants</span><a class="self-link" href="#es-constants"></a></h4>
   <p><a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant③①">Constants</a> are exposed on <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object①⑨">interface objects</a>, <a data-link-type="dfn" href="#dfn-legacy-callback-interface-object" id="ref-for-dfn-legacy-callback-interface-object④">legacy callback interface objects</a>, <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①⑥">interface prototype objects</a>, and
on the single object that implements the interface,
when an interface is declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global①⑨">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③⓪">extended attribute</a>.</p>
   <div class="algorithm" data-algorithm="define the constants">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="define-the-constants">define the constants</dfn> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④③">interface</a> <var>interface</var> on <var>target</var>,
    given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm⑧">Realm</a> <var>realm</var>, run the following steps: 
    <ol>
     <li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate⑨">For each</a> <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant③②">constant</a> <var>const</var> that is a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②⓪">member</a> of <var>interface</var>:</p>
      <ol>
       <li data-md="">
        <p>If <var>const</var> is not <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed⑦">exposed</a> in <var>realm</var>, then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#iteration-continue" id="ref-for-iteration-continue">continue</a>.</p>
       </li><li data-md="">
        <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④①">converting</a> <var>const</var>’s IDL value to an ECMAScript value.</p>
       </li><li data-md="">
        <p>Let <var>desc</var> be the PropertyDescriptor{[[Writable]]: <emu-val>false</emu-val>,
[[Enumerable]]: <emu-val>true</emu-val>, [[Configurable]]: <emu-val>false</emu-val>,
[[Value]]: <var>value</var>}.</p>
       </li><li data-md="">
        <p>Let <var>id</var> be <var>const</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦④">identifier</a>.</p>
       </li><li data-md="">
        <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤⓪">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow" id="ref-for-sec-definepropertyorthrow④">DefinePropertyOrThrow</a>(<var>target</var>, <var>id</var>, <var>desc</var>).</p>
      </li></ol>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.6.7" id="es-attributes"><span class="secno">3.6.7. </span><span class="content">Attributes</span><a class="self-link" href="#es-attributes"></a></h4>
   <p><a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute①⓪">Static attributes</a> are exposed on the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object②⓪">interface object</a>. <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute①⑨">Regular attributes</a> are exposed on the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①⑦">interface prototype object</a>,
unless the attribute is <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface①">unforgeable</a> or
if the interface was declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②⓪">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③①">extended attribute</a>,
in which case they are exposed on every object that implements the interface.</p>
   <div class="algorithm" data-algorithm="define the regular attributes">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="define-the-regular-attributes">define the regular attributes</dfn> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④④">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③②">namespace</a> <var>definition</var> on <var>target</var>,
    given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm⑨">Realm</a> <var>realm</var>, run the following steps: 
    <ol>
     <li data-md="">
      <p>Let <var>attributes</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list⑥">list</a> of <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute②⓪">regular attributes</a> that are <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②①">members</a> of <var>definition</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-remove" id="ref-for-list-remove">Remove</a> from <var>attributes</var> all the <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute④⑨">attributes</a> that are <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface②">unforgeable</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-attributes" id="ref-for-define-the-attributes">Define the attributes</a> <var>attributes</var> of <var>definition</var> on <var>target</var> given <var>realm</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="define the static attributes">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="define-the-static-attributes">define the static attributes</dfn> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④⑤">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③③">namespace</a> <var>definition</var> on <var>target</var>,
    given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①⓪">Realm</a> <var>realm</var>, run the following steps: 
    <ol>
     <li data-md="">
      <p>Let <var>attributes</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list⑦">list</a> of <a data-link-type="dfn" href="#dfn-static-attribute" id="ref-for-dfn-static-attribute①①">static attributes</a> that are <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②②">members</a> of <var>definition</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-attributes" id="ref-for-define-the-attributes①">Define the attributes</a> <var>attributes</var> of <var>definition</var> on <var>target</var> given <var>realm</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="define the unforgeable regular attributes">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="define-the-unforgeable-regular-attributes">define the unforgeable regular attributes</dfn> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④⑥">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③④">namespace</a> <var>definition</var> on <var>target</var>,
    given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①①">Realm</a> <var>realm</var>, run the following steps: 
    <ol>
     <li data-md="">
      <p>Let <var>attributes</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list⑧">list</a> of <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface③">unforgeable</a> <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute②①">regular attributes</a> that are <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②③">members</a> of <var>definition</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-attributes" id="ref-for-define-the-attributes②">Define the attributes</a> <var>attributes</var> of <var>definition</var> on <var>target</var> given <var>realm</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="define the attributes">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="define-the-attributes">define the attributes</dfn> <var>attributes</var> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④⑦">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③⑤">namespace</a> <var>definition</var> on <var>target</var> given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①②">Realm</a> <var>realm</var>, run the following steps: 
    <ol>
     <li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate①⓪">For each</a> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑤⓪">attribute</a> <var>attr</var> of <var>attributes</var>:</p>
      <ol>
       <li data-md="">
        <p>If <var>attr</var> is not <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed⑧">exposed</a> in <var>realm</var>, then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#iteration-continue" id="ref-for-iteration-continue①">continue</a>.</p>
       </li><li data-md="">
        <p>Let <var>getter</var> be the result of creating an <a data-link-type="dfn" href="#dfn-attribute-getter" id="ref-for-dfn-attribute-getter①">attribute getter</a> given <var>attr</var>, <var>definition</var>, and <var>realm</var>.</p>
       </li><li data-md="">
        <p>Let <var>setter</var> be the result of creating an <a data-link-type="dfn" href="#dfn-attribute-setter" id="ref-for-dfn-attribute-setter①">attribute setter</a> given <var>attr</var>, <var>definition</var>, and <var>realm</var>.</p>
        <p class="note" role="note"><span>Note:</span> the algorithm to create an <a data-link-type="dfn" href="#dfn-attribute-setter" id="ref-for-dfn-attribute-setter②">attribute setter</a> returns <emu-val>undefined</emu-val> if <var>attr</var> is <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①⑦">read only</a>.</p>
       </li><li data-md="">
        <p>Let <var>configurable</var> be <emu-val>false</emu-val> if <var>attr</var> is <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface④">unforgeable</a> and <emu-val>true</emu-val> otherwise.</p>
       </li><li data-md="">
        <p>Let <var>desc</var> be the PropertyDescriptor{[[Get]]: <var>getter</var>, [[Set]]: <var>setter</var>,
[[Enumerable]]: <emu-val>true</emu-val>, [[Configurable]]: <var>configurable</var>}.</p>
       </li><li data-md="">
        <p>Let <var>id</var> be <var>attr</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦⑤">identifier</a>.</p>
       </li><li data-md="">
        <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤①">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow" id="ref-for-sec-definepropertyorthrow⑤">DefinePropertyOrThrow</a>(<var>target</var>, <var>id</var>, <var>desc</var>).</p>
      </li></ol>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="attribute getter">
    <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-attribute-getter">attribute getter</dfn> is created as follows, given an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑤①">attribute</a> <var>attribute</var>, a <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③⑥">namespace</a> or <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④⑧">interface</a> <var>target</var>, and a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①③">Realm</a> <var>realm</var>:</p>
    <ol>
     <li data-md="">
      <p>Let <var>steps</var> be the following series of steps:</p>
      <ol>
       <li data-md="">
        <p>Try running the following steps:</p>
        <ol>
         <li data-md="">
          <p>Let <var>O</var> be <emu-val>null</emu-val>.</p>
         </li><li data-md="">
          <p>If <var>target</var> is an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①④⑨">interface</a>, and <var>attribute</var> is a <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute②②">regular attribute</a>:</p>
          <ol>
           <li data-md="">
            <p>If the <emu-val>this</emu-val> value is <emu-val>null</emu-val> or <emu-val>undefined</emu-val>, set <var>O</var> to <var>realm</var>’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-global" id="ref-for-concept-realm-global">global object</a>.
(This will subsequently cause a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑨">TypeError</a></code> in a few steps, if
the global object does not implement <var>target</var> and [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis⑧">LenientThis</a></code>] is not
specified.)</p>
           </li><li data-md="">
            <p>Otherwise, set <var>O</var> to the <emu-val>this</emu-val> value.</p>
           </li><li data-md="">
            <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②⓪">platform object</a>, then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check">perform a security check</a>, passing <var>O</var>, <var>attribute</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦⑥">identifier</a>, and "getter".</p>
           </li><li data-md="">
            <p>If <var>O</var> is not a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②①">platform object</a> that implements the interface <var>target</var>,
then:</p>
            <ol>
             <li data-md="">
              <p>If <var>attribute</var> was specified with the [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis⑨">LenientThis</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③②">extended attribute</a>, then return <emu-val>undefined</emu-val>.</p>
             </li><li data-md="">
              <p>Otherwise, <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③④">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④⓪">TypeError</a></code>.</p>
            </li></ol>
          </li></ol>
         </li><li data-md="">
          <p>Let <var>R</var> be the result of <a data-link-type="dfn" href="#get-the-underlying-value" id="ref-for-get-the-underlying-value①">getting the underlying value</a> of <var>attribute</var> given <var>O</var>.</p>
         </li><li data-md="">
          <p>Return the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④②">converting</a> <var>R</var> to an
ECMAScript value of the type <var>attribute</var> is declared as.</p>
        </li></ol>
      </li></ol>
      <p>And then, if <a data-link-type="dfn" href="#an-exception-was-thrown" id="ref-for-an-exception-was-thrown">an exception <var>E</var> was thrown</a>:</p>
      <ol>
       <li data-md="">
        <p>If <var>attribute</var>’s type is a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type⑧">promise type</a>, then return <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤②">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call②">Call</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise.reject" id="ref-for-sec-promise.reject">%Promise_reject%</a></code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise-constructor" id="ref-for-sec-promise-constructor①">%Promise%</a></code>, «<var>E</var>»).</p>
       </li><li data-md="">
        <p>Otherwise, end these steps and allow the exception to propagate.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>F</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤③">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createbuiltinfunction" id="ref-for-sec-createbuiltinfunction③">CreateBuiltinFunction</a>(<var>realm</var>, <var>steps</var>, <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-function-prototype-object" id="ref-for-sec-properties-of-the-function-prototype-object③">%FunctionPrototype%</a></code>]]).</p>
     </li><li data-md="">
      <p>Let <var>name</var> be the string "<code>get </code>" prepended to <var>attribute</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦⑦">identifier</a>.</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤④">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionname" id="ref-for-sec-setfunctionname③">SetFunctionName</a>(<var>F</var>, <var>name</var>).</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤⑤">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionlength" id="ref-for-sec-setfunctionlength③">SetFunctionLength</a>(<var>F</var>, 0).</p>
     </li><li data-md="">
      <p>Return <var>F</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="attribute setter">
    <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-attribute-setter">attribute setter</dfn> is created as follows, given an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑤②">attribute</a> <var>attribute</var>, an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤⓪">interface</a> <var>target</var>, and a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①④">Realm</a> <var>realm</var>:</p>
    <ol>
     <li data-md="">
      <p>If <var>attribute</var> is <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①⑧">read only</a> and does not have a
[<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter①③">LenientSetter</a></code>], [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①⑤">PutForwards</a></code>] or [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable①①">Replaceable</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③③">extended attribute</a>, return <emu-val>undefined</emu-val>; there is no <a data-link-type="dfn" href="#dfn-attribute-setter" id="ref-for-dfn-attribute-setter③">attribute setter</a> function.</p>
     </li><li data-md="">
      <p class="assertion">Assert: <var>attribute</var>’s type is not a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type⑨">promise type</a>.</p>
     </li><li data-md="">
      <p>Let <var>steps</var> be the following series of steps:</p>
      <ol>
       <li data-md="">
        <p>If no arguments were passed, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③⑤">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④①">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>V</var> be the value of the first argument passed.</p>
       </li><li data-md="">
        <p>Let <var>id</var> be <var>attribute</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦⑧">identifier</a>.</p>
       </li><li data-md="">
        <p>Let <var>O</var> be <emu-val>null</emu-val>.</p>
       </li><li data-md="">
        <p>If <var>attribute</var> is a <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute②③">regular attribute</a>:</p>
        <ol>
         <li data-md="">
          <p>If the <emu-val>this</emu-val> value is <emu-val>null</emu-val> or <emu-val>undefined</emu-val>, set <var>O</var> to <var>realm</var>’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-global" id="ref-for-concept-realm-global①">global object</a>.
(This will subsequently cause a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④②">TypeError</a></code> in a few steps, if
the global object does not implement <var>target</var> and [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis①⓪">LenientThis</a></code>] is not
specified.)</p>
         </li><li data-md="">
          <p>Otherwise, set <var>O</var> to the <emu-val>this</emu-val> value.</p>
         </li><li data-md="">
          <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②②">platform object</a>, then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①">perform a security check</a>, passing <var>O</var>, <var>id</var>, and "setter".</p>
         </li><li data-md="">
          <p>Let <var>validThis</var> be true if <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②③">platform object</a> that implements the
interface <var>target</var>, or false otherwise.</p>
         </li><li data-md="">
          <p>If <var>validThis</var> is false and <var>attribute</var> was not specified with the [<code class="idl"><a data-link-type="idl" href="#LenientThis" id="ref-for-LenientThis①①">LenientThis</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③④">extended attribute</a>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③⑥">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④③">TypeError</a></code>.</p>
         </li><li data-md="">
          <p>If <var>attribute</var> is declared with the [<code class="idl"><a data-link-type="idl" href="#Replaceable" id="ref-for-Replaceable①②">Replaceable</a></code>] extended attribute, then:</p>
          <ol>
           <li data-md="">
            <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤⑥">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createdataproperty" id="ref-for-sec-createdataproperty④">CreateDataProperty</a>(<var>O</var>, <var>id</var>, <var>V</var>).</p>
           </li><li data-md="">
            <p>Return <emu-val>undefined</emu-val>.</p>
          </li></ol>
         </li><li data-md="">
          <p>If <var>validThis</var> is false, then return <emu-val>undefined</emu-val>.</p>
         </li><li data-md="">
          <p>If <var>attribute</var> is declared with a [<code class="idl"><a data-link-type="idl" href="#LenientSetter" id="ref-for-LenientSetter①④">LenientSetter</a></code>] extended attribute, then
return <emu-val>undefined</emu-val>.</p>
         </li><li data-md="">
          <p>If <var>attribute</var> is declared with a [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①⑥">PutForwards</a></code>] extended attribute, then:</p>
          <ol>
           <li data-md="">
            <p>Let <var>Q</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤⑦">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p②">Get</a>(<var>O</var>, <var>id</var>).</p>
           </li><li data-md="">
            <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③④">Type</a>(<var>Q</var>) is not Object, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③⑦">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④④">TypeError</a></code>.</p>
           </li><li data-md="">
            <p>Let <var>forwardId</var> be the identifier argument of the [<code class="idl"><a data-link-type="idl" href="#PutForwards" id="ref-for-PutForwards①⑦">PutForwards</a></code>] extended
attribute.</p>
           </li><li data-md="">
            <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤⑧">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-set-o-p-v-throw" id="ref-for-sec-set-o-p-v-throw">Set</a>(<var>Q</var>, <var>forwardId</var>, <var>V</var>, <emu-val>true</emu-val>).</p>
           </li><li data-md="">
            <p>Return <emu-val>undefined</emu-val>.</p>
          </li></ol>
        </li></ol>
       </li><li data-md="">
        <p>Let <var>idlValue</var> be determined as follows:</p>
        <dl class="switch">
         <dt><var>attribute</var>’s type is an <a data-link-type="dfn" href="#dfn-enumeration" id="ref-for-dfn-enumeration①⑧">enumeration</a>
         </dt><dd>
          <ol>
           <li data-md="">
            <p>Let <var>S</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑤⑨">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tostring" id="ref-for-sec-tostring⑥">ToString</a>(<var>V</var>).</p>
           </li><li data-md="">
            <p>If <var>S</var> is not one of the <a data-link-type="dfn" href="#dfn-enumeration-value" id="ref-for-dfn-enumeration-value⑥">enumeration’s values</a>, then
return <emu-val>undefined</emu-val>.</p>
           </li><li data-md="">
            <p>Otherwise, <var>idlValue</var> is the enumeration value equal to <var>S</var>.</p>
          </li></ol>
         </dd><dt>Otherwise
         </dt><dd> <var>idlValue</var> is the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥⓪">converting</a> <var>V</var> to an
        IDL value of <var>attribute</var>’s type. 
        </dd></dl>
       </li><li data-md="">
        <p>Perform the actions listed in the description of <var>attribute</var> that occur on setting, on <var>O</var> if <var>O</var> is not <emu-val>null</emu-val>.</p>
       </li><li data-md="">
        <p>Return <emu-val>undefined</emu-val></p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>F</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥⓪">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createbuiltinfunction" id="ref-for-sec-createbuiltinfunction④">CreateBuiltinFunction</a>(<var>realm</var>, <var>steps</var>, <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-function-prototype-object" id="ref-for-sec-properties-of-the-function-prototype-object④">%FunctionPrototype%</a></code>]]).</p>
     </li><li data-md="">
      <p>Let <var>name</var> be the string "<code>set </code>" prepended to <var>id</var>.</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥①">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionname" id="ref-for-sec-setfunctionname④">SetFunctionName</a>(<var>F</var>, <var>name</var>).</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥②">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionlength" id="ref-for-sec-setfunctionlength④">SetFunctionLength</a>(<var>F</var>, 1).</p>
     </li><li data-md="">
      <p>Return <var>F</var>.</p>
    </li></ol>
   </div>
   <p class="note" role="note"><span>Note:</span> Although there is only a single property for an IDL attribute, since
accessor property getters and setters are passed a <emu-val>this</emu-val> value for the object on which property corresponding to the IDL attribute is
accessed, they are able to expose instance-specific data.</p>
   <p class="note" role="note"><span>Note:</span> Attempting to assign to a property corresponding to a <a data-link-type="dfn" href="#dfn-read-only" id="ref-for-dfn-read-only①⑨">read only</a> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑤③">attribute</a> results in different behavior depending on whether the script doing so is in strict mode.
When in strict mode, such an assignment will result in a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑤">TypeError</a></code> being thrown.  When not in strict mode, the assignment attempt will be ignored.</p>
   <h4 class="heading settled" data-level="3.6.8" id="es-operations"><span class="secno">3.6.8. </span><span class="content">Operations</span><a class="self-link" href="#es-operations"></a></h4>
   <p>For each unique <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑦⑨">identifier</a> of an <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed⑨">exposed</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation④⑨">operation</a> defined on the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤①">interface</a>,
there exist a corresponding property. <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①⑥">Static operations</a> are exposed of the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object②①">interface object</a>. <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②⑥">Regular operations</a> are exposed on the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①⑧">interface prototype object</a>,
unless the operation is <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface⑤">unforgeable</a> or
the interface was declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②①">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③⑤">extended attribute</a>,
in which case they are exposed on every object that implements the interface.</p>
   <div class="algorithm" data-algorithm="define the regular operations">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="define-the-regular-operations">define the regular operations</dfn> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤②">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③⑦">namespace</a> <var>definition</var> on <var>target</var>, given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①⑤">Realm</a> <var>realm</var>,
    run the following steps: 
    <ol>
     <li data-md="">
      <p>Let <var>operations</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list⑨">list</a> of <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②⑦">regular operations</a> that are <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②④">members</a> of <var>definition</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-remove" id="ref-for-list-remove①">Remove</a> from <var>operations</var> all the <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤⓪">operations</a> that are <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface⑥">unforgeable</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-operations" id="ref-for-define-the-operations">Define the operations</a> <var>operations</var> of <var>definition</var> on <var>target</var> given <var>realm</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="define the static operations">
     To <dfn data-dfn-type="dfn" data-noexport="" id="define-the-static-operations">define the static operations<a class="self-link" href="#define-the-static-operations"></a></dfn> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤③">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③⑧">namespace</a> <var>definition</var> on <var>target</var>, given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①⑥">Realm</a> <var>realm</var>,
    run the following steps: 
    <ol>
     <li data-md="">
      <p>Let <var>operations</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①⓪">list</a> of <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①⑦">static operations</a> that are <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②⑤">members</a> of <var>definition</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-operations" id="ref-for-define-the-operations①">Define the operations</a> <var>operations</var> of <var>definition</var> on <var>target</var> given <var>realm</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="define the unforgeable regular operations">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="define-the-unforgeable-regular-operations">define the unforgeable regular operations</dfn> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤④">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace③⑨">namespace</a> <var>definition</var> on <var>target</var>, given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①⑦">Realm</a> <var>realm</var>,
    run the following steps: 
    <ol>
     <li data-md="">
      <p>Let <var>operations</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①①">list</a> of <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface⑦">unforgeable</a> <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②⑧">regular operations</a> that are <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②⑥">members</a> of <var>definition</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-operations" id="ref-for-define-the-operations②">Define the operations</a> <var>operations</var> of <var>definition</var> on <var>target</var> given <var>realm</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="define the operations">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="define-the-operations">define the operations</dfn> <var>operations</var> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤⑤">interface</a> or <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace④⓪">namespace</a> <var>definition</var> on <var>target</var>,
    given <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①⑧">Realm</a> <var>realm</var>, run the following steps: 
    <ol>
     <li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-iterate" id="ref-for-list-iterate①①">For each</a> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤①">operation</a> <var>op</var> of <var>operations</var>:</p>
      <ol>
       <li data-md="">
        <p>If <var>op</var> is not <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed①⓪">exposed</a> in <var>realm</var>, then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#iteration-continue" id="ref-for-iteration-continue②">continue</a>.</p>
       </li><li data-md="">
        <p>Let <var>method</var> be the result of <a data-link-type="dfn" href="#dfn-create-operation-function" id="ref-for-dfn-create-operation-function">creating an operation function</a> given <var>op</var>, <var>definition</var>, and <var>realm</var>.</p>
       </li><li data-md="">
        <p>Let <var>modifiable</var> be <emu-val>false</emu-val> if <var>op</var> is <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface⑧">unforgeable</a> and <emu-val>true</emu-val> otherwise.</p>
       </li><li data-md="">
        <p>Let <var>desc</var> be the PropertyDescriptor{[[Value]]: <var>method</var>,
[[Writable]]: <var>modifiable</var>, [[Enumerable]]: <emu-val>true</emu-val>,
[[Configurable]]: <var>modifiable</var>}.</p>
       </li><li data-md="">
        <p>Let <var>id</var> be <var>op</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧⓪">identifier</a>.</p>
       </li><li data-md="">
        <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥③">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow" id="ref-for-sec-definepropertyorthrow⑥">DefinePropertyOrThrow</a>(<var>target</var>, <var>id</var>, <var>desc</var>).</p>
      </li></ol>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="creating an operation function">
     To <dfn class="dfn-paneled" data-dfn-type="dfn" data-lt="creating an operation function" data-noexport="" id="dfn-create-operation-function">create an operation function</dfn>,
    given an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤②">operation</a> <var>op</var>, a <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace④①">namespace</a> or <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤⑥">interface</a> <var>target</var>, and a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm①⑨">Realm</a> <var>realm</var>: 
    <ol>
     <li data-md="">
      <p>Let <var>id</var> be <var>op</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧①">identifier</a>.</p>
     </li><li data-md="">
      <p>Let <var>steps</var> be the following series of steps, given function argument
values <var>args</var>:</p>
      <ol>
       <li data-md="">
        <p>Try running the following steps:</p>
        <ol>
         <li data-md="">
          <p>Let <var>O</var> be <emu-val>null</emu-val>.</p>
         </li><li data-md="">
          <p>If <var>target</var> is an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤⑦">interface</a>, and <var>op</var> is not a <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①⑧">static operation</a>:</p>
          <ol>
           <li data-md="">
            <p>If the <emu-val>this</emu-val> value is <emu-val>null</emu-val> or <emu-val>undefined</emu-val>, set <var>O</var> to <var>realm</var>’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-global" id="ref-for-concept-realm-global②">global object</a>. (This
will subsequently cause a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑥">TypeError</a></code> in a few steps, if the global
object does not implement <var>target</var>.)</p>
           </li><li data-md="">
            <p>Otherwise, set <var>O</var> to the <emu-val>this</emu-val> value.</p>
           </li><li data-md="">
            <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②④">platform object</a>, then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check②">perform a security check</a>, passing <var>O</var>, <var>id</var>, and "method".</p>
           </li><li data-md="">
            <p>If <var>O</var> is not a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②⑤">platform object</a> that implements the interface <var>target</var>, <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③⑧">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑦">TypeError</a></code>.</p>
          </li></ol>
         </li><li data-md="">
          <p>Let <var>n</var> be the <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-size" id="ref-for-list-size⑤">size</a> of <var>args</var>.</p>
         </li><li data-md="">
          <p>Let <var>S</var> be the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set①②">effective overload set</a> for <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation②⑨">regular operations</a> (if <var>op</var> is a
regular operation) or for <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation①⑨">static operations</a> (if <var>op</var> is a static operation) with <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧②">identifier</a> <var>id</var> on <var>target</var> and with argument count <var>n</var>.</p>
         </li><li data-md="">
          <p>Let &lt;<var>operation</var>, <var>values</var>&gt; be the result of passing <var>S</var> and <var>args</var> to the <a data-link-type="dfn" href="#dfn-overload-resolution-algorithm" id="ref-for-dfn-overload-resolution-algorithm⑤">overload resolution algorithm</a>.</p>
         </li><li data-md="">
          <p>Let <var>R</var> be <emu-val>null</emu-val>.</p>
         </li><li data-md="">
          <p>If <var>operation</var> is declared with a [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default⑥">Default</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③⑥">extended attribute</a>,
then:</p>
          <ol>
           <li data-md="">
            <p>Set <var>R</var> be the result of performing the actions listed in <var>operation</var>’s <a data-link-type="dfn" href="#corresponding-default-operation" id="ref-for-corresponding-default-operation②">corresponding default operation</a> on <var>O</var>,
with <var>values</var> as the argument values.</p>
          </li></ol>
         </li><li data-md="">
          <p>Otherwise:</p>
          <ol>
           <li data-md="">
            <p>Set <var>R</var> be the result of performing the actions listed in the
description of <var>operation</var>, on <var>O</var> if <var>O</var> is not <emu-val>null</emu-val>, with <var>values</var> as the argument values.</p>
           </li><li data-md="">
            <p>Return the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④③">converting</a> <var>R</var> to
an ECMAScript value of the type <var>op</var> is declared to return.</p>
          </li></ol>
        </li></ol>
      </li></ol>
      <p>And then, if <a data-link-type="dfn" href="#an-exception-was-thrown" id="ref-for-an-exception-was-thrown①">an exception <var>E</var> was thrown</a>:</p>
      <ol>
       <li data-md="">
        <p>If <var>op</var> has a <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type④">return type</a> that is a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type①⓪">promise type</a>, then return <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥④">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call③">Call</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise.reject" id="ref-for-sec-promise.reject①">%Promise_reject%</a></code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise-constructor" id="ref-for-sec-promise-constructor②">%Promise%</a></code>, «<var>E</var>»).</p>
       </li><li data-md="">
        <p>Otherwise, end these steps and allow the exception to propagate.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>F</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥⑤">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createbuiltinfunction" id="ref-for-sec-createbuiltinfunction⑤">CreateBuiltinFunction</a>(<var>realm</var>, <var>steps</var>, <var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-function-prototype-object" id="ref-for-sec-properties-of-the-function-prototype-object⑤">%FunctionPrototype%</a></code>]]).</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥⑥">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionname" id="ref-for-sec-setfunctionname⑤">SetFunctionName</a>(<var>F</var>, <var>id</var>).</p>
     </li><li data-md="">
      <p>Let <var>S</var> be the <a data-link-type="dfn" href="#dfn-effective-overload-set" id="ref-for-dfn-effective-overload-set①③">effective overload set</a> for <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation③⓪">regular operations</a> (if <var>op</var> is a regular
operation) or for <a data-link-type="dfn" href="#dfn-static-operation" id="ref-for-dfn-static-operation②⓪">static operations</a> (if <var>op</var> is a static operation) with <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧③">identifier</a> <var>id</var> on <var>target</var> and with argument count 0.</p>
     </li><li data-md="">
      <p>Let <var>length</var> be the length of the shortest argument list in the entries in <var>S</var>.</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥⑦">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-setfunctionlength" id="ref-for-sec-setfunctionlength⑤">SetFunctionLength</a>(<var>F</var>, <var>length</var>).</p>
     </li><li data-md="">
      <p>Return <var>F</var>.</p>
    </li></ol>
   </div>
   <h5 class="heading settled" data-level="3.6.8.1" id="es-default-operations"><span class="secno">3.6.8.1. </span><span class="content">Default operations</span><a class="self-link" href="#es-default-operations"></a></h5>
   <p>Only <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation③①">regular operations</a> which have a <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="corresponding-default-operation">corresponding default operation</dfn> defined below
may be declared with a [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default⑦">Default</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③⑦">extended attribute</a>.</p>
   <h6 class="heading settled" data-level="3.6.8.1.1" id="es-default-tojson"><span class="secno">3.6.8.1.1. </span><span class="content">Default toJSON operation</span><a class="self-link" href="#es-default-tojson"></a></h6>
   <p>The <a data-link-type="dfn" href="#corresponding-default-operation" id="ref-for-corresponding-default-operation③">corresponding default operation</a> of the <code>toJSON</code> operation is the <a data-link-type="dfn" href="#default-tojson-operation" id="ref-for-default-tojson-operation①">default toJSON operation</a>.</p>
   <p>The <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type⑤">return type</a> of the <a data-link-type="dfn" href="#default-tojson-operation" id="ref-for-default-tojson-operation②">default toJSON operation</a> must be <code class="idl"><a data-link-type="idl" href="#idl-object" id="ref-for-idl-object③③">object</a></code>.</p>
   <div class="algorithm" data-algorithm="default toJSON operation">
    <p>To invoke the <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="default-tojson-operation">default toJSON operation</dfn> of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤⑧">interface</a> <var>I</var> on <var>O</var>,
    run the the following steps:</p>
    <ol>
     <li data-md="">
      <p>Let <var>map</var> be a new <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map⑥">ordered map</a>.</p>
     </li><li data-md="">
      <p>Let <var>stack</var> be the result of <a data-link-type="dfn" href="#create-an-inheritance-stack" id="ref-for-create-an-inheritance-stack">creating an inheritance stack</a> for <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑤⑨">interface</a> <var>I</var>.</p>
     </li><li data-md="">
      <p>Invoke <a data-link-type="dfn" href="#collect-attribute-values-of-an-inheritance-stack" id="ref-for-collect-attribute-values-of-an-inheritance-stack">collect attribute values of an inheritance stack</a> on <var>O</var>,
passing it <var>stack</var> and <var>map</var> as arguments.</p>
     </li><li data-md="">
      <p>Let <var>result</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥⑧">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-objectcreate" id="ref-for-sec-objectcreate④">ObjectCreate</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object" id="ref-for-sec-properties-of-the-object-prototype-object⑥">%ObjectPrototype%</a></code>).</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-iterate" id="ref-for-map-iterate①">For each</a> <var>key</var> → <var>value</var> of <var>map</var>,</p>
      <ol>
       <li data-md="">
        <p>Let <var>k</var> be <var>key</var> <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④④">converted to an ECMAScript value</a>.</p>
       </li><li data-md="">
        <p>Let <var>v</var> be <var>value</var> <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④⑤">converted to an ECMAScript value</a>.</p>
       </li><li data-md="">
        <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑥⑨">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createdataproperty" id="ref-for-sec-createdataproperty⑤">CreateDataProperty</a>(<var>result</var>, <var>k</var>, <var>v</var>).</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>result</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="collect attribute values of an inheritance stack">
    <p>To invoke the <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="collect-attribute-values-of-an-inheritance-stack">collect attribute values of an inheritance stack</dfn> abstract operation on <var>O</var> with <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#stack" id="ref-for-stack">stack</a> <var>stack</var> and <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map⑦">ordered map</a> <var>map</var> as arguments,
    run the the following steps:</p>
    <ol>
     <li data-md="">
      <p>Let <var>I</var> be the result of <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#stack-pop" id="ref-for-stack-pop">popping</a> from <var>stack</var>.</p>
     </li><li data-md="">
      <p>Invoke <a data-link-type="dfn" href="#collect-attribute-values" id="ref-for-collect-attribute-values">collect attribute values</a> on <var>O</var>,
passing it <var>I</var> and <var>map</var> as arguments.</p>
     </li><li data-md="">
      <p>If <var>stack</var> <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-is-empty" id="ref-for-list-is-empty①">is not empty</a>,
then invoke <a data-link-type="dfn" href="#collect-attribute-values-of-an-inheritance-stack" id="ref-for-collect-attribute-values-of-an-inheritance-stack①">collect attribute values of an inheritance stack</a> on <var>O</var>,
passing it <var>stack</var> and <var>map</var> as arguments.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="collect attribute values">
    <p>To invoke the <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="collect-attribute-values">collect attribute values</dfn> abstract operation on <var>O</var> with <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥⓪">interface</a> <var>I</var> and <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#ordered-map" id="ref-for-ordered-map⑧">ordered map</a> <var>map</var> as arguments,
    run the the following steps:</p>
    <ol>
     <li data-md="">
      <p>If a <code>toJSON</code> operation with a [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default⑧">Default</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③⑧">extended attribute</a> is declared on <var>I</var>, then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①②">for each</a> <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed①①">exposed</a> <a data-link-type="dfn" href="#dfn-regular-attribute" id="ref-for-dfn-regular-attribute②④">regular attribute</a> <var>attr</var> that is an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②⑥">interface member</a> of <var>I</var>, in order:</p>
      <ol>
       <li data-md="">
        <p>Let <var>id</var> be the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧④">identifier</a> of <var>attr</var>.</p>
       </li><li data-md="">
        <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#get-the-underlying-value" id="ref-for-get-the-underlying-value②">getting the underlying value</a> of <var>attr</var> given <var>O</var>.</p>
       </li><li data-md="">
        <p>If <var>value</var> is a <a data-link-type="dfn" href="#dfn-json-types" id="ref-for-dfn-json-types①③">JSON type</a>, then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#map-set" id="ref-for-map-set①">set</a> <var>map</var>[<var>id</var>] to <var>value</var>.</p>
      </li></ol>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="create an inheritance stack">
    <p>To <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="create-an-inheritance-stack">create an inheritance stack</dfn> for <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥①">interface</a> <var>I</var>,
    run the the following steps:</p>
    <ol>
     <li data-md="">
      <p>Let <var>stack</var> be a new <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#stack" id="ref-for-stack①">stack</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#stack-push" id="ref-for-stack-push">Push</a> <var>I</var> onto <var>stack</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#iteration-while" id="ref-for-iteration-while①">While</a> <var>I</var> <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit①⓪">inherits</a> from an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥②">interface</a>,</p>
      <ol>
       <li data-md="">
        <p>Let <var>I</var> be that <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥③">interface</a>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#stack-push" id="ref-for-stack-push①">Push</a> <var>I</var> onto <var>stack</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <var>stack</var>.</p>
    </li></ol>
   </div>
   <div class="example" id="example-tojson-default-inheritance-and-mixins">
    <a class="self-link" href="#example-tojson-default-inheritance-and-mixins"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④④">IDL fragment</a> defines a number of <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥④">interfaces</a>,
    which are <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①⑧">inherited interfaces</a> of <code class="idl">A</code>,
    and <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④⑦">interface mixins</a>, which are <a data-link-type="dfn" href="#include" id="ref-for-include①①">included</a> by <code class="idl">A</code> or
    by <code class="idl">A</code>’s <a data-link-type="dfn" href="#dfn-inherited-interfaces" id="ref-for-dfn-inherited-interfaces①⑨">inherited interfaces</a>,
    as show in the below inheritance tree.</p>
<pre>     C* - M4
     |
     B - M3
     |
M1 - A - M2*
</pre>
    <p><a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥⑤">Interfaces</a> and <a data-link-type="dfn" href="#interface-mixin" id="ref-for-interface-mixin④⑧">interface mixins</a> marked with an asterisk ("*")
    declare a <code>toJSON</code> <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤③">operation</a> with a [<code class="idl"><a data-link-type="idl" href="#Default" id="ref-for-Default⑨">Default</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①③⑨">extended attribute</a>.</p>
<pre class="webidl">[Exposed=Window]
interface A : B {
  attribute DOMString a;
};

[Exposed=Window]
interface B : C {
  attribute DOMString b;
};

[Exposed=Window]
interface C {
  [Default] object toJSON();
  attribute DOMString c;
};

interface mixin M1 {
  attribute DOMString m1;
};

interface mixin M2 {
  [Default] object toJSON();
  attribute DOMString m2;
};

interface mixin M3 {
  attribute DOMString m3;
};

interface mixin M4 {
  attribute DOMString m4;
};

A includes M1;
A includes M2;
B includes M3;
C includes M4;
</pre>
    <p>Calling the <code>toJSON()</code> method of an object
    implementing interface <code class="idl">A</code> defined above
    would return the following JSON object:</p>
<pre class="highlight"><c- p="">{</c->
    <c- f="">"a"</c-><c- p="">:</c-> <c- u="">"..."</c-><c- p="">,</c->
    <c- f="">"m1"</c-><c- p="">:</c-> <c- u="">"..."</c-><c- p="">,</c->
    <c- f="">"m2"</c-><c- p="">:</c-> <c- u="">"..."</c-><c- p="">,</c->
    <c- f="">"c"</c-><c- p="">:</c-> <c- u="">"..."</c-><c- p="">,</c->
    <c- f="">"m4"</c-><c- p="">:</c-> <c- u="">"..."</c->
<c- p="">}</c->
</pre>
    <p>An object implementing interface <code class="idl">B</code> would return:</p>
<pre class="highlight"><c- p="">{</c->
    <c- f="">"c"</c-><c- p="">:</c-> <c- u="">"..."</c-><c- p="">,</c->
    <c- f="">"m4"</c-><c- p="">:</c-> <c- u="">"..."</c->
<c- p="">}</c->
</pre>
   </div>
   <h5 class="heading settled" data-level="3.6.8.2" id="es-stringifier"><span class="secno">3.6.8.2. </span><span class="content">Stringifiers</span><a class="self-link" href="#es-stringifier"></a></h5>
   <p>If the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥⑥">interface</a> has an <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed①②">exposed</a> <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier⑥">stringifier</a>,
then there must exist a property with the following characteristics:</p>
   <ul>
    <li data-md="">
     <p>The name of the property is "<code>toString</code>".</p>
    </li><li data-md="">
     <p>If the <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier⑦">stringifier</a> is <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface⑨">unforgeable</a> on the interface
or if the interface was declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②②">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④⓪">extended attribute</a>,
then the property exists on every object that implements the interface.
Otherwise, the property exists on the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object①⑨">interface prototype object</a>.</p>
    </li><li data-md="">
     <p>The property has attributes
{ [[Writable]]: <var>B</var>, [[Enumerable]]: <emu-val>true</emu-val>, [[Configurable]]: <var>B</var> },
where <var>B</var> is <emu-val>false</emu-val> if the stringifier is <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface①⓪">unforgeable</a> on the interface,
and <emu-val>true</emu-val> otherwise.</p>
    </li><li data-md="">
     <div class="algorithm" data-algorithm="to invoke the toString method of interfaces">
      <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①②">built-in function object</a>, which behaves as follows:</p>
      <ol>
       <li data-md="">
        <p>Let <var>O</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toobject" id="ref-for-sec-toobject">ToObject</a> on the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②⑥">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check③">perform a security check</a>, passing:</p>
        <ul>
         <li data-md="">
          <p>the platform object <var>O</var>,</p>
         </li><li data-md="">
          <p>the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧⑤">identifier</a> of the <a data-link-type="dfn" href="#dfn-stringifier" id="ref-for-dfn-stringifier⑧">stringifier</a>, and</p>
         </li><li data-md="">
          <p>the type "<code>method</code>".</p>
        </li></ul>
       </li><li data-md="">
        <p>If <var>O</var> is not an object that implements the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥⑦">interface</a> on which the stringifier was declared, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw③⑨">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑧">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>V</var> be an uninitialized variable.</p>
       </li><li data-md="">
        <p>Depending on where <code>stringifier</code> was specified:</p>
        <dl class="switch">
         <dt data-md="">on an <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑤④">attribute</a>
         </dt><dd data-md="">
          <p>Set <var>V</var> to the result of performing the actions listed in the description of the attribute that occur when getting
(or those listed in the description of the inherited attribute, if this attribute is declared to <a data-link-type="dfn" href="#dfn-inherit-getter" id="ref-for-dfn-inherit-getter①">inherit its getter</a>),
with <var>O</var> as the object.</p>
         </dd><dt data-md="">on an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤④">operation</a> with an identifier
         </dt><dd data-md="">
          <p>Set <var>V</var> to the result of performing the actions listed in the description
of the operation, using <var>O</var> as the <emu-val>this</emu-val> value
and passing no arguments.</p>
         </dd><dt data-md="">on an <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤⑤">operation</a> with no identifier
         </dt><dd data-md="">
          <p>Set <var>V</var> to the result of performing the <a data-link-type="dfn" href="#dfn-stringification-behavior" id="ref-for-dfn-stringification-behavior">stringification behavior</a> of the interface.</p>
        </dd></dl>
       </li><li data-md="">
        <p>Return the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④⑥">converting</a> <var>V</var> to a String value.</p>
      </li></ol>
     </div>
    </li><li data-md="">
     <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①③">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>0</emu-val>.</p>
    </li><li data-md="">
     <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①④">function object</a>’s <code class="idl">name</code> property is the String value "<code>toString</code>".</p>
   </li></ul>
   <h4 class="heading settled" data-level="3.6.9" id="es-iterators"><span class="secno">3.6.9. </span><span class="content">Common iterator behavior</span><a class="self-link" href="#es-iterators"></a></h4>
   <h5 class="heading settled" data-level="3.6.9.1" id="es-iterator"><span class="secno">3.6.9.1. </span><span class="content">@@iterator</span><a class="self-link" href="#es-iterator"></a></h5>
   <p>If the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥⑧">interface</a> has any of the following:</p>
   <ul>
    <li data-md="">
     <p>an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①⓪">iterable declaration</a></p>
    </li><li data-md="">
     <p>an <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter⑤">indexed property getter</a> and
an <a data-link-type="dfn" href="#dfn-integer-type" id="ref-for-dfn-integer-type⑥">integer-typed</a> <code class="idl">length</code> <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑤⑤">attribute</a></p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration⑧">maplike declaration</a></p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration⑧">setlike declaration</a></p>
   </li></ul>
   <p>then a property must exist
whose name is the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①③">@@iterator</a></code> symbol, with attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }
and whose value is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①⑤">function object</a>.</p>
   <p>The location of the property is determined as follows:</p>
   <ul>
    <li data-md="">
     <p>If the interface was declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②③">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④①">extended attribute</a>,
then the property exists on the single object that implements the interface.</p>
    </li><li data-md="">
     <p>Otherwise, the property exists solely on the interface’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②⓪">interface prototype object</a>.</p>
   </li></ul>
   <p>If the interface defines an <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter⑥">indexed property getter</a>,
then the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①⑥">function object</a> is <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-array.prototype.values" id="ref-for-sec-array.prototype.values">%ArrayProto_values%</a></code>.</p>
   <div class="algorithm" data-algorithm="to invoke the @@iterator property of interfaces with a pair iterator">
    <p>If the interface has a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator③">pair iterator</a>, then the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①⑦">function object</a> is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①③">built-in function object</a> that,
    when invoked, must behave as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>object</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toobject" id="ref-for-sec-toobject①">ToObject</a> on the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>If <var>object</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②⑦">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check④">perform a security check</a>, passing:</p>
      <ul>
       <li data-md="">
        <p>the platform object <var>object</var>,</p>
       </li><li data-md="">
        <p>the identifier "<code>@@iterator</code>", and</p>
       </li><li data-md="">
        <p>the type "<code>method</code>".</p>
      </li></ul>
     </li><li data-md="">
      <p>Let <var>interface</var> be the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑥⑨">interface</a> the <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①①">iterable declaration</a> is on.</p>
     </li><li data-md="">
      <p>If <var>object</var> is not a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②⑧">platform object</a> that implements <var>interface</var>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④⓪">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑨">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>iterator</var> be a newly created <a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object">default iterator object</a> for <var>interface</var> with <var>object</var> as its target and iterator kind "<code>key+value</code>".</p>
     </li><li data-md="">
      <p>Return <var>iterator</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="to invoke the @@iterator property of interfaces with maplike or setlike declarations">
    <p>If the interface has a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration⑨">maplike declaration</a> or <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration⑨">setlike declaration</a>,
    then the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①⑧">function object</a> is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①④">built-in function object</a> that,
    when invoked, must behave as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>object</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toobject" id="ref-for-sec-toobject②">ToObject</a> on the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>If <var>object</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object②⑨">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check⑤">perform a security check</a>, passing:</p>
      <ul>
       <li data-md="">
        <p>the platform object <var>object</var>,</p>
       </li><li data-md="">
        <p>the identifier "<code>@@iterator</code>", and</p>
       </li><li data-md="">
        <p>the type "<code>method</code>".</p>
      </li></ul>
     </li><li data-md="">
      <p>If <var>object</var> is not a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③⓪">platform object</a> that implements the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦⓪">interface</a> on which the <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①⓪">maplike declaration</a> or <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①⓪">setlike declaration</a> is defined,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④①">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⓪">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>If the interface has a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①①">maplike declaration</a>, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>backing</var> be the value of the [[BackingMap]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②②">internal slot</a> of <var>object</var>.</p>
       </li><li data-md="">
        <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createmapiterator" id="ref-for-sec-createmapiterator">CreateMapIterator</a>(<var>backing</var>, "<code>key+value</code>").</p>
      </li></ol>
     </li><li data-md="">
      <p>Otherwise:</p>
      <ol>
       <li data-md="">
        <p>Let <var>backing</var> be the value of the [[BackingSet]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②③">internal slot</a> of <var>object</var>.</p>
       </li><li data-md="">
        <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createsetiterator" id="ref-for-sec-createsetiterator">CreateSetIterator</a>(<var>backing</var>, "<code>value</code>").</p>
      </li></ol>
    </li></ol>
   </div>
   <p>The value of the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①④">@@iterator</a></code> <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object①⑨">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>0</emu-val>.</p>
   <p>The value of the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①⑤">@@iterator</a></code> <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②⓪">function object</a>’s <code class="idl">name</code> property
is the String value "<code>entries</code>"
if the interface has a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator④">pair iterator</a> or a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①②">maplike declaration</a> and the String "<code>values</code>"
if the interface has a <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①①">setlike declaration</a>.</p>
   <h5 class="heading settled" data-level="3.6.9.2" id="es-forEach"><span class="secno">3.6.9.2. </span><span class="content">forEach</span><a class="self-link" href="#es-forEach"></a></h5>
   <p>If the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦①">interface</a> has any of the following:</p>
   <ul>
    <li data-md="">
     <p>an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①②">iterable declaration</a></p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①③">maplike declaration</a></p>
    </li><li data-md="">
     <p>a <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①②">setlike declaration</a></p>
   </li></ul>
   <p>then a <code class="idl">forEach</code> data property must exist with attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>true</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }
and whose value is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②①">function object</a>.</p>
   <p>The location of the property is determined as follows:</p>
   <ul>
    <li data-md="">
     <p>If the interface was declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②④">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④②">extended attribute</a>,
then the property exists on the single object that implements the interface.</p>
    </li><li data-md="">
     <p>Otherwise, the property exists solely on the interface’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②①">interface prototype object</a>.</p>
   </li></ul>
   <p>If the interface defines an <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter⑦">indexed property getter</a>,
then the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②②">function object</a> is <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-array.prototype.foreach" id="ref-for-sec-array.prototype.foreach">%ArrayProto_forEach%</a></code>.</p>
   <div class="algorithm" data-algorithm="to invoke the forEach method of interfaces with indexed properties">
    <p>If the interface has a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator⑤">pair iterator</a>,
    then the method must have the same behavior,
    when invoked with argument <var>callback</var> and optional argument <var>thisArg</var>,
    as one that would exist assuming the interface had this <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤⑥">operation</a> instead of the <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①③">iterable declaration</a>:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Iterable</c-> {
  <c- b="">void</c-> <c- g="">forEach</c->(<c- n="">Function</c-> <c- g="">callback</c->, <c- b="">optional</c-> <c- b="">any</c-> <c- g="">thisArg</c->);
};
</pre>
    <p>with the following prose definition:</p>
    <ol>
     <li data-md="">
      <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>Let <var>pairs</var> be the list of <a data-link-type="dfn" href="#dfn-value-pairs-to-iterate-over" id="ref-for-dfn-value-pairs-to-iterate-over①">value pairs to iterate over</a>.</p>
     </li><li data-md="">
      <p>Let <var>i</var> be 0.</p>
     </li><li data-md="">
      <p>While <var>i</var> is less than the length of <var>pairs</var>:</p>
      <ol>
       <li data-md="">
        <p>Let <var>pair</var> be the entry in <var>pairs</var> at index <var>i</var>.</p>
       </li><li data-md="">
        <p>Let <var>key</var> be <var>pair</var>’s key.</p>
       </li><li data-md="">
        <p>Let <var>value</var> be <var>pair</var>’s value.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="#invoke-a-callback-function" id="ref-for-invoke-a-callback-function">Invoke</a> <var>callback</var> with <var>thisArg</var> (or <emu-val>undefined</emu-val>, if the argument was not supplied)
as the <a data-link-type="dfn" href="#dfn-callback-this-value" id="ref-for-dfn-callback-this-value">callback this value</a> and <var>value</var>, <var>key</var> and <var>O</var> as its arguments.</p>
       </li><li data-md="">
        <p>Update <var>pairs</var> to the current list of <a data-link-type="dfn" href="#dfn-value-pairs-to-iterate-over" id="ref-for-dfn-value-pairs-to-iterate-over②">value pairs to iterate over</a>.</p>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var> + 1.</p>
      </li></ol>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="to invoke the forEach method of interfaces with maplike or setlike declarations">
    <p>If the interface has a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①④">maplike declaration</a> or <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①③">setlike declaration</a> then
    the method, when invoked, must behave as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>object</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toobject" id="ref-for-sec-toobject③">ToObject</a> on the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>If <var>object</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③①">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check⑥">perform a security check</a>, passing:</p>
      <ul>
       <li data-md="">
        <p>the platform object <var>object</var>,</p>
       </li><li data-md="">
        <p>the identifier "<code>forEach</code>", and</p>
       </li><li data-md="">
        <p>the type "<code>method</code>".</p>
      </li></ul>
     </li><li data-md="">
      <p>Let <var>interface</var> be the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦②">interface</a> on which the <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①⑤">maplike declaration</a> or <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①④">setlike declaration</a> is declared.</p>
     </li><li data-md="">
      <p>If <var>object</var> is not a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③②">platform object</a> that implements <var>interface</var>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④②">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤①">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>callbackFn</var> be the value of the first argument passed to the function, or <emu-val>undefined</emu-val> if the argument was not supplied.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable④">IsCallable</a>(<var>callbackFn</var>) is <emu-val>false</emu-val>, <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④③">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤②">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>thisArg</var> be the value of the second argument passed to the function, or <emu-val>undefined</emu-val> if the argument was not supplied.</p>
     </li><li data-md="">
      <p>Let <var>backing</var> be the value of the [[BackingMap]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②④">internal slot</a> of <var>object</var>,
if the interface has a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①⑥">maplike declaration</a>,
or the [[BackingSet]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②⑤">internal slot</a> of <var>object</var> otherwise.</p>
     </li><li data-md="">
      <p>Let <var>callbackWrapper</var> be a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①⑤">built-in function object</a> that, when invoked, behaves as follows:</p>
      <ol>
       <li data-md="">
        <p>Let <var>v</var> and <var>k</var> be the first two arguments passed to the function.</p>
       </li><li data-md="">
        <p>Let <var>thisArg</var> be the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p><a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call④">Call</a>(<var>callbackFn</var>, <var>thisArg</var>, «<var>v</var>, <var>k</var>, <var>object</var>»).</p>
      </li></ol>
      <p class="note" role="note"><span>Note:</span> The <var>callbackWrapper</var> function simply calls the incoming <var>callbackFn</var> with <var>object</var> as the third argument rather than its internal [[BackingMap]] or [[BackingSet]] object.</p>
      <p class="issue" id="issue-f7a0c46d"><a class="self-link" href="#issue-f7a0c46d"></a> Can the script author observe that <var>callbackWrapper</var> might be a new function
    every time forEach is called?  What’s the best way of specifying that there’s only
    one function that has captured an environment? </p>
     </li><li data-md="">
      <p>Let <var>forEach</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦⓪">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getmethod" id="ref-for-sec-getmethod⑤">GetMethod</a>(<var>backing</var>, "<code>forEach</code>").</p>
     </li><li data-md="">
      <p>If <var>forEach</var> is <emu-val>undefined</emu-val>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④④">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤③">TypeError</a></code>.</p>
     </li><li data-md="">
      <p><a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call⑤">Call</a>(<var>forEach</var>, <var>backing</var>, «<var>callbackWrapper</var>, <var>thisArg</var>»).</p>
     </li><li data-md="">
      <p>Return <emu-val>undefined</emu-val>.</p>
    </li></ol>
   </div>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②③">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>1</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②④">function object</a>’s <code class="idl">name</code> property is the String value "<code>forEach</code>".</p>
   <h4 class="heading settled" data-level="3.6.10" id="es-iterable"><span class="secno">3.6.10. </span><span class="content">Iterable declarations</span><a class="self-link" href="#es-iterable"></a></h4>
   <h5 class="heading settled" data-level="3.6.10.1" id="es-iterable-entries"><span class="secno">3.6.10.1. </span><span class="content">entries</span><a class="self-link" href="#es-iterable-entries"></a></h5>
   <p>If the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦③">interface</a> has an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①④">iterable declaration</a>,
then an <code class="idl">entries</code> data property must exist with attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>true</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }
and whose value is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②⑤">function object</a>.</p>
   <p>The location of the property is determined as follows:</p>
   <ul>
    <li data-md="">
     <p>If the interface was declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②⑤">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④③">extended attribute</a>,
then the property exists on the single object that implements the interface.</p>
    </li><li data-md="">
     <p>Otherwise, the property exists solely on the interface’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②②">interface prototype object</a>.</p>
   </li></ul>
   <p>If the interface has a <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator⑥">value iterator</a>,
then the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②⑥">function object</a> is <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-array.prototype.entries" id="ref-for-sec-array.prototype.entries">%ArrayProto_entries%</a></code>.</p>
   <p>If the interface has a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator⑥">pair iterator</a>,
then the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②⑦">function object</a> is
the value of the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①⑥">@@iterator</a></code> property.</p>
   <h5 class="heading settled" data-level="3.6.10.2" id="es-iterable-keys"><span class="secno">3.6.10.2. </span><span class="content">keys</span><a class="self-link" href="#es-iterable-keys"></a></h5>
   <p>If the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦④">interface</a> has an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①⑤">iterable declaration</a>,
then a <code class="idl">keys</code> data property must exist with attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>true</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }
and whose value is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②⑧">function object</a>.</p>
   <p>The location of the property is determined as follows:</p>
   <ul>
    <li data-md="">
     <p>If the interface was declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②⑥">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④④">extended attribute</a>,
then the property exists on the single object that implements the interface.</p>
    </li><li data-md="">
     <p>Otherwise, the property exists solely on the interface’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②③">interface prototype object</a>.</p>
   </li></ul>
   <p>If the interface has a <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator⑦">value iterator</a>,
then the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object②⑨">function object</a> is <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-array.prototype.keys" id="ref-for-sec-array.prototype.keys">%ArrayProto_keys%</a></code>.</p>
   <div class="algorithm" data-algorithm="to invoke the keys method of interfaces with a pair iterator">
    <p>If the interface has a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator⑦">pair iterator</a>,
    then the method, when invoked, must behave as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>object</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toobject" id="ref-for-sec-toobject④">ToObject</a> on the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>If <var>object</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③③">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check⑦">perform a security check</a>, passing:</p>
      <ul>
       <li data-md="">
        <p>the platform object <var>object</var>,</p>
       </li><li data-md="">
        <p>the identifier "<code>keys</code>", and</p>
       </li><li data-md="">
        <p>the type "<code>method</code>".</p>
      </li></ul>
     </li><li data-md="">
      <p>Let <var>interface</var> be the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦⑤">interface</a> on which the <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①⑥">iterable declaration</a> is declared on.</p>
     </li><li data-md="">
      <p>If <var>object</var> is not a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③④">platform object</a> that implements <var>interface</var>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④⑤">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤④">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>iterator</var> be a newly created <a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object①">default iterator object</a> for <var>interface</var> with <var>object</var> as its target and iterator kind "<code>key</code>".</p>
     </li><li data-md="">
      <p>Return <var>iterator</var>.</p>
    </li></ol>
   </div>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③⓪">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>0</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③①">function object</a>’s <code class="idl">name</code> property is the String value "<code>keys</code>".</p>
   <h5 class="heading settled" data-level="3.6.10.3" id="es-iterable-values"><span class="secno">3.6.10.3. </span><span class="content">values</span><a class="self-link" href="#es-iterable-values"></a></h5>
   <p>If the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦⑥">interface</a> has an <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①⑦">iterable declaration</a>,
then a <code class="idl">values</code> data property must exist
with attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>true</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }
and whose value is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③②">function object</a>.</p>
   <p>The location of the property is determined as follows:</p>
   <ul>
    <li data-md="">
     <p>If the interface was declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②⑦">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④⑤">extended attribute</a>,
then the property exists on the single object that implements the interface.</p>
    </li><li data-md="">
     <p>Otherwise, the property exists solely on the interface’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②④">interface prototype object</a>.</p>
   </li></ul>
   <p>If the interface has a <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator⑧">value iterator</a>,
then the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③③">function object</a> is
the value of the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①⑦">@@iterator</a></code> property.</p>
   <div class="algorithm" data-algorithm="to invoke the values method of interfaces with a pair iterator">
    <p>If the interface has a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator⑧">pair iterator</a>,
    then the method, when invoked, must behave as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>object</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toobject" id="ref-for-sec-toobject⑤">ToObject</a> on the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>If <var>object</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③⑤">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check⑧">perform a security check</a>, passing:</p>
      <ul>
       <li data-md="">
        <p>the platform object <var>object</var>,</p>
       </li><li data-md="">
        <p>the identifier "<code>entries</code>", and</p>
       </li><li data-md="">
        <p>the type "<code>method</code>".</p>
      </li></ul>
     </li><li data-md="">
      <p>Let <var>interface</var> be the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦⑦">interface</a> on which the <a data-link-type="dfn" href="#dfn-iterable-declaration" id="ref-for-dfn-iterable-declaration①⑧">iterable declaration</a> is declared on.</p>
     </li><li data-md="">
      <p>If <var>object</var> is not a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③⑥">platform object</a> that implements <var>interface</var>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④⑥">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑤">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>iterator</var> be a newly created <a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object②">default iterator object</a> for <var>interface</var> with <var>object</var> as its target and iterator kind "<code>value</code>".</p>
     </li><li data-md="">
      <p>Return <var>iterator</var>.</p>
    </li></ol>
   </div>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③④">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>0</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③⑤">function object</a>’s <code class="idl">name</code> property is the String value "<code>values</code>".</p>
   <h5 class="heading settled" data-level="3.6.10.4" id="es-default-iterator-object"><span class="secno">3.6.10.4. </span><span class="content">Default iterator objects</span><a class="self-link" href="#es-default-iterator-object"></a></h5>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-default-iterator-object">default iterator object</dfn> for a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦⑧">interface</a>, target and iteration kind
is an object whose [[Prototype]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②⑥">internal slot</a> is the <a data-link-type="dfn" href="#dfn-iterator-prototype-object" id="ref-for-dfn-iterator-prototype-object①">iterator prototype object</a> for the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑦⑨">interface</a>.</p>
   <p>A <a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object③">default iterator object</a> has three internal values:</p>
   <ol>
    <li data-md="">
     <p>its <em>target</em>, which is an object whose values are to be iterated,</p>
    </li><li data-md="">
     <p>its <em>kind</em>, which is the iteration kind,</p>
    </li><li data-md="">
     <p>its <em>index</em>, which is the current index into the values value to be iterated.</p>
   </li></ol>
   <p class="note" role="note"><span>Note:</span> Default iterator objects are only used for <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator⑨">pair iterators</a>; <a data-link-type="dfn" href="#dfn-value-iterator" id="ref-for-dfn-value-iterator⑨">value iterators</a>, as they are currently
restricted to iterating over an object’s <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties⑨">supported indexed properties</a>,
use standard ECMAScript Array iterator objects.</p>
   <p>When a <a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object④">default iterator object</a> is first created,
its index is set to 0.</p>
   <p><a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object⑤">Default iterator objects</a> do not have <a data-link-type="dfn" href="#dfn-class-string" id="ref-for-dfn-class-string②">class strings</a>; when <code class="idl">Object.prototype.toString()</code> is called on a <a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object⑥">default
iterator object</a> of a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧⓪">interface</a>, the <a data-link-type="dfn" href="#dfn-class-string" id="ref-for-dfn-class-string③">class string</a> of the <a data-link-type="dfn" href="#dfn-iterator-prototype-object" id="ref-for-dfn-iterator-prototype-object②">iterator prototype object</a> of that <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧①">interface</a> is used.</p>
   <h5 class="heading settled" data-level="3.6.10.5" id="es-iterator-prototype-object"><span class="secno">3.6.10.5. </span><span class="content">Iterator prototype object</span><a class="self-link" href="#es-iterator-prototype-object"></a></h5>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-iterator-prototype-object">iterator prototype object</dfn> for a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧②">interface</a> is an object that exists for every interface that has a <a data-link-type="dfn" href="#dfn-pair-iterator" id="ref-for-dfn-pair-iterator①⓪">pair iterator</a>.  It serves as the
prototype for <a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object⑦">default iterator objects</a> for the interface.</p>
   <p>The [[Prototype]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②⑦">internal slot</a> of an <a data-link-type="dfn" href="#dfn-iterator-prototype-object" id="ref-for-dfn-iterator-prototype-object③">iterator prototype object</a> must be <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object" id="ref-for-sec-%iteratorprototype%-object">%IteratorPrototype%</a></code>.</p>
   <div class="algorithm" data-algorithm="to invoke the next property of iterators">
    <p>An <a data-link-type="dfn" href="#dfn-iterator-prototype-object" id="ref-for-dfn-iterator-prototype-object④">iterator prototype object</a> must have a <code class="idl">next</code> data property with attributes
    { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>true</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }
    and whose value is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①⑥">built-in function object</a> that behaves as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>interface</var> be the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧③">interface</a> for which the <a data-link-type="dfn" href="#dfn-iterator-prototype-object" id="ref-for-dfn-iterator-prototype-object⑤">iterator prototype object</a> exists.</p>
     </li><li data-md="">
      <p>Let <var>object</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-toobject" id="ref-for-sec-toobject⑥">ToObject</a> on the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>If <var>object</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③⑦">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check⑨">perform a security check</a>, passing:</p>
      <ul>
       <li data-md="">
        <p>the platform object <var>object</var>,</p>
       </li><li data-md="">
        <p>the identifier "<code>next</code>", and</p>
       </li><li data-md="">
        <p>the type "<code>method</code>".</p>
      </li></ul>
     </li><li data-md="">
      <p>If <var>object</var> is not a <a data-link-type="dfn" href="#dfn-default-iterator-object" id="ref-for-dfn-default-iterator-object⑧">default iterator object</a> for <var>interface</var>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④⑦">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑥">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>index</var> be <var>object</var>’s index.</p>
     </li><li data-md="">
      <p>Let <var>kind</var> be <var>object</var>’s kind.</p>
     </li><li data-md="">
      <p>Let <var>values</var> be the list of <a data-link-type="dfn" href="#dfn-value-pairs-to-iterate-over" id="ref-for-dfn-value-pairs-to-iterate-over③">value pairs to iterate over</a>.</p>
     </li><li data-md="">
      <p>Let <var>len</var> be the length of <var>values</var>.</p>
     </li><li data-md="">
      <p>If <var>index</var> is greater than or equal to <var>len</var>, then
return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createiterresultobject" id="ref-for-sec-createiterresultobject">CreateIterResultObject</a>(<emu-val>undefined</emu-val>, <emu-val>true</emu-val>).</p>
     </li><li data-md="">
      <p>Let <var>pair</var> be the entry in <var>values</var> at index <var>index</var>.</p>
     </li><li data-md="">
      <p>Set <var>object</var>’s index to <var>index</var> + 1.</p>
     </li><li data-md="">
      <p>Let <var>result</var> be a value determined by the value of <var>kind</var>:</p>
      <dl class="switch">
       <dt data-md="">"<code>key</code>"
       </dt><dd data-md="">
        <ol>
         <li data-md="">
          <p>Let <var>idlKey</var> be <var>pair</var>’s key.</p>
         </li><li data-md="">
          <p>Let <var>key</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④⑦">converting</a> <var>idlKey</var> to an ECMAScript value.</p>
         </li><li data-md="">
          <p><var>result</var> is <var>key</var>.</p>
        </li></ol>
       </dd><dt data-md="">"<code>value</code>"
       </dt><dd data-md="">
        <ol>
         <li data-md="">
          <p>Let <var>idlValue</var> be <var>pair</var>’s value.</p>
         </li><li data-md="">
          <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④⑧">converting</a> <var>idlValue</var> to an ECMAScript value.</p>
         </li><li data-md="">
          <p><var>result</var> is <var>value</var>.</p>
        </li></ol>
       </dd><dt data-md="">"<code>key+value</code>"
       </dt><dd data-md="">
        <ol>
         <li data-md="">
          <p>Let <var>idlKey</var> be <var>pair</var>’s key.</p>
         </li><li data-md="">
          <p>Let <var>idlValue</var> be <var>pair</var>’s value.</p>
         </li><li data-md="">
          <p>Let <var>key</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value④⑨">converting</a> <var>idlKey</var> to an ECMAScript value.</p>
         </li><li data-md="">
          <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤⓪">converting</a> <var>idlValue</var> to an ECMAScript value.</p>
         </li><li data-md="">
          <p>Let <var>array</var> be the result of performing <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-arraycreate" id="ref-for-sec-arraycreate">ArrayCreate</a>(2).</p>
         </li><li data-md="">
          <p>Call <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createdataproperty" id="ref-for-sec-createdataproperty⑥">CreateDataProperty</a>(<var>array</var>, "<code>0</code>", <var>key</var>).</p>
         </li><li data-md="">
          <p>Call <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createdataproperty" id="ref-for-sec-createdataproperty⑦">CreateDataProperty</a>(<var>array</var>, "<code>1</code>", <var>value</var>).</p>
         </li><li data-md="">
          <p><var>result</var> is <var>array</var>.</p>
        </li></ol>
      </dd></dl>
     </li><li data-md="">
      <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-createiterresultobject" id="ref-for-sec-createiterresultobject①">CreateIterResultObject</a>(<var>result</var>, <emu-val>false</emu-val>).</p>
    </li></ol>
   </div>
   <p>The <a data-link-type="dfn" href="#dfn-class-string" id="ref-for-dfn-class-string④">class string</a> of an <a data-link-type="dfn" href="#dfn-iterator-prototype-object" id="ref-for-dfn-iterator-prototype-object⑥">iterator prototype object</a> for a given <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧④">interface</a> is the result of concatenating the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧⑥">identifier</a> of the <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧⑤">interface</a> and the string "<code> Iterator</code>".</p>
   <h4 class="heading settled" data-level="3.6.11" id="es-maplike"><span class="secno">3.6.11. </span><span class="content">Maplike declarations</span><a class="self-link" href="#es-maplike"></a></h4>
   <p>Any object that implements an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧⑥">interface</a> that has a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①⑦">maplike declaration</a> must have a [[BackingMap]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②⑧">internal slot</a>, which is
initially set to a newly created <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects①">Map</a></code> object.
This <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects②">Map</a></code> object’s [[MapData]] internal slot is
the object’s <a data-link-type="dfn" href="#dfn-map-entries" id="ref-for-dfn-map-entries②">map entries</a>.</p>
   <p>If an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧⑦">interface</a> <var>A</var> is declared with
a <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①⑧">maplike declaration</a>, then
there exists a number of additional properties on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②⑤">interface prototype object</a>.
These additional properties are described in the sub-sections below.</p>
   <div class="algorithm" data-algorithm="forwards to the internal map object">
    <p>Some of the properties below are defined to have a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③⑥">function object</a> value that <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-forwards-to-the-internal-map-object">forwards to the internal map object</dfn> for a given function name.  Such functions behave as follows when invoked:</p>
    <ol>
     <li data-md="">
      <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>Let <var>arguments</var> be the list of arguments passed to this function.</p>
     </li><li data-md="">
      <p>Let <var>name</var> be the function name.</p>
     </li><li data-md="">
      <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③⑧">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①⓪">perform a security check</a>, passing:</p>
      <ul>
       <li data-md="">
        <p>the platform object <var>O</var>,</p>
       </li><li data-md="">
        <p>an identifier equal to <var>name</var>, and</p>
       </li><li data-md="">
        <p>the type "<code>method</code>".</p>
      </li></ul>
     </li><li data-md="">
      <p>If <var>O</var> is not an object that implements <var>A</var>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④⑧">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑦">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>map</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects③">Map</a></code> object that is the value of <var>O</var>’s [[BackingMap]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots②⑨">internal slot</a>.</p>
     </li><li data-md="">
      <p>Let <var>function</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦①">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getmethod" id="ref-for-sec-getmethod⑥">GetMethod</a>(<var>map</var>, <var>name</var>).</p>
     </li><li data-md="">
      <p>If <var>function</var> is <emu-val>undefined</emu-val>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw④⑨">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑧">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call⑥">Call</a>(<var>function</var>, <var>map</var>, <var>arguments</var>).</p>
    </li></ol>
   </div>
   <h5 class="heading settled" data-level="3.6.11.1" id="es-map-size"><span class="secno">3.6.11.1. </span><span class="content">size</span><a class="self-link" href="#es-map-size"></a></h5>
   <p>There must exist a <code class="idl">size</code> property on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②⑥">interface prototype object</a> with the following characteristics:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes
{ [[Get]]: <var>G</var>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> },
where <var>G</var> is the interface’s <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-map-size-getter">map size getter</dfn>,
defined below.</p>
    </li><li data-md="">
     <div class="algorithm" data-algorithm="to invoke the size method of Maps">
      <p>The <a data-link-type="dfn" href="#dfn-map-size-getter" id="ref-for-dfn-map-size-getter①">map size getter</a> is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①⑦">built-in function object</a> whose behavior when invoked is as follows:</p>
      <ol>
       <li data-md="">
        <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object③⑨">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①①">perform a security check</a>, passing:</p>
        <ul>
         <li data-md="">
          <p>the platform object <var>O</var>,</p>
         </li><li data-md="">
          <p>the identifier "<code>size</code>", and</p>
         </li><li data-md="">
          <p>the type "<code>getter</code>".</p>
        </li></ul>
       </li><li data-md="">
        <p>If <var>O</var> is not an object that implements <var>A</var>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤⓪">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑨">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>map</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects④">Map</a></code> object that is the value of <var>O</var>’s [[BackingMap]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③⓪">internal slot</a>.</p>
       </li><li data-md="">
        <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p③">Get</a>(<var>map</var>, "<code>size</code>").</p>
      </li></ol>
     </div>
     <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③⑦">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>0</emu-val>.</p>
     <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③⑧">function object</a>’s <code class="idl">name</code> property is the String value "<code>size</code>".</p>
   </li></ul>
   <h5 class="heading settled" data-level="3.6.11.2" id="es-map-entries"><span class="secno">3.6.11.2. </span><span class="content">entries</span><a class="self-link" href="#es-map-entries"></a></h5>
   <p>An <code class="idl">entries</code> data property must exist on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②⑦">interface prototype object</a> with attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }
and whose value is the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object③⑨">function object</a> that is the value of
the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①⑧">@@iterator</a></code> property.</p>
   <h5 class="heading settled" data-level="3.6.11.3" id="es-map-keys-values"><span class="secno">3.6.11.3. </span><span class="content">keys and values</span><a class="self-link" href="#es-map-keys-values"></a></h5>
   <p>For both of <code class="idl">keys</code> and <code class="idl">values</code>, there must exist a data property with that name on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②⑧">interface prototype object</a> with the following characteristics:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①⑧">built-in function object</a> that <a data-link-type="dfn" href="#dfn-forwards-to-the-internal-map-object" id="ref-for-dfn-forwards-to-the-internal-map-object">forwards that name to the internal map object</a>.</p>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④⓪">function objects</a>’ <code class="idl">length</code> properties is the Number value <emu-val>0</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④①">function object</a>’s <code class="idl">name</code> property is the String value "<code>keys</code>" or "<code>values</code>", correspondingly.</p>
   <h5 class="heading settled" data-level="3.6.11.4" id="es-map-get-has"><span class="secno">3.6.11.4. </span><span class="content">get and has</span><a class="self-link" href="#es-map-get-has"></a></h5>
   <p>For both of <code class="idl">get</code> and <code class="idl">has</code>, there must exist a data property with that name on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object②⑨">interface prototype object</a> with the following characteristics:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <div class="algorithm" data-algorithm="to invoke the get and has methods of Maps">
      <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects①⑨">built-in function object</a> that behaves as follows when invoked:</p>
      <ol>
       <li data-md="">
        <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p>Let <var>name</var> be the name of the property – "<code>get</code>" or "<code>has</code>".</p>
       </li><li data-md="">
        <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④⓪">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①②">perform a security check</a>, passing:</p>
        <ul>
         <li data-md="">
          <p>the platform object <var>O</var>,</p>
         </li><li data-md="">
          <p>an identifier equal to <var>name</var>, and</p>
         </li><li data-md="">
          <p>the type "<code>method</code>".</p>
        </li></ul>
       </li><li data-md="">
        <p>If <var>O</var> is not an object that implements <var>A</var>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤①">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⓪">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>map</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects⑤">Map</a></code> object that is the value of <var>O</var>’s [[BackingMap]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③①">internal slot</a>.</p>
       </li><li data-md="">
        <p>Let <var>keyType</var> be the key type specified in the <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration①⑨">maplike declaration</a>.</p>
       </li><li data-md="">
        <p>Let <var>function</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦②">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p④">Get</a>(<var>map</var>, <var>name</var>).</p>
       </li><li data-md="">
        <p>Let <var>keyArg</var> be the first argument passed to this function, or <emu-val>undefined</emu-val> if not supplied.</p>
       </li><li data-md="">
        <p>Let <var>keyIDL</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥①">converting</a> <var>keyArg</var> to an IDL value of type <var>keyType</var>.</p>
       </li><li data-md="">
        <p>Let <var>key</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤①">converting</a> <var>keyIDL</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call⑦">Call</a>(<var>function</var>, <var>map</var>, «<var>key</var>»).</p>
      </li></ol>
     </div>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④②">function object</a>’s <code class="idl">length</code> properties is the Number value <emu-val>1</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④③">function object</a>’s <code class="idl">name</code> property is the String value "<code>get</code>" or "<code>has</code>", correspondingly.</p>
   <h5 class="heading settled" data-level="3.6.11.5" id="es-map-clear"><span class="secno">3.6.11.5. </span><span class="content">clear</span><a class="self-link" href="#es-map-clear"></a></h5>
   <p>If <var>A</var> does not declare a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②⑦">member</a> with identifier "<code>clear</code>", and <var>A</var> was declared with a read–write maplike declaration,
then a <code class="idl">clear</code> data property with the following characteristics
must exist on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③⓪">interface prototype object</a>:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②⓪">built-in function object</a> that <a data-link-type="dfn" href="#dfn-forwards-to-the-internal-map-object" id="ref-for-dfn-forwards-to-the-internal-map-object①">forwards <code class="idl">clear</code> to the internal map object</a>.</p>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④④">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>0</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④⑤">function object</a>’s <code class="idl">name</code> property is the String value "<code>clear</code>".</p>
   <h5 class="heading settled" data-level="3.6.11.6" id="es-map-delete"><span class="secno">3.6.11.6. </span><span class="content">delete</span><a class="self-link" href="#es-map-delete"></a></h5>
   <p>If <var>A</var> does not declare a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②⑧">member</a> with identifier "<code>delete</code>", and <var>A</var> was declared with a read–write maplike declaration,
then a <code class="idl">delete</code> data property with the following characteristics
must exist on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③①">interface prototype object</a>:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <div class="algorithm" data-algorithm="to invoke the delete method of Maps">
      <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②①">built-in function object</a> that behaves as follows when invoked:</p>
      <ol>
       <li data-md="">
        <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④①">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①③">perform a security check</a>, passing:</p>
        <ul>
         <li data-md="">
          <p>the platform object <var>O</var>,</p>
         </li><li data-md="">
          <p>the identifier "<code>delete</code>", and</p>
         </li><li data-md="">
          <p>the type "<code>method</code>".</p>
        </li></ul>
       </li><li data-md="">
        <p>If <var>O</var> is not an object that implements <var>A</var>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤②">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥①">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>map</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects⑥">Map</a></code> object that is the value of <var>O</var>’s [[BackingMap]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③②">internal slot</a>.</p>
       </li><li data-md="">
        <p>Let <var>keyType</var> be the key type specified in the <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration②⓪">maplike declaration</a>.</p>
       </li><li data-md="">
        <p>Let <var>function</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦③">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p⑤">Get</a>(<var>map</var>, "<code>delete</code>").</p>
       </li><li data-md="">
        <p>Let <var>keyArg</var> be the first argument passed to this function, or <emu-val>undefined</emu-val> if not supplied.</p>
       </li><li data-md="">
        <p>Let <var>keyIDL</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥②">converting</a> <var>keyArg</var> to an IDL value of type <var>keyType</var>.</p>
       </li><li data-md="">
        <p>Let <var>key</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤②">converting</a> <var>keyIDL</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call⑧">Call</a>(<var>function</var>, <var>map</var>, «<var>key</var>»).</p>
      </li></ol>
     </div>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④⑥">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>1</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④⑦">function object</a>’s <code class="idl">name</code> property is the String value "<code>delete</code>".</p>
   <h5 class="heading settled" data-level="3.6.11.7" id="es-map-set"><span class="secno">3.6.11.7. </span><span class="content">set</span><a class="self-link" href="#es-map-set"></a></h5>
   <p>If <var>A</var> does not declare a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member②⑨">member</a> with identifier "<code>set</code>",
and <var>A</var> was declared with a read–write maplike declaration,
then a <code class="idl">set</code> data property with the following characteristics
must exist on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③②">interface prototype object</a>:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <div class="algorithm" data-algorithm="to invoke the set method of Maps">
      <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②②">built-in function object</a> that behaves as follows when invoked:</p>
      <ol>
       <li data-md="">
        <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④②">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①④">perform a security check</a>, passing:</p>
        <ul>
         <li data-md="">
          <p>the platform object <var>O</var>,</p>
         </li><li data-md="">
          <p>the identifier "<code>set</code>", and</p>
         </li><li data-md="">
          <p>the type "<code>method</code>".</p>
        </li></ul>
       </li><li data-md="">
        <p>If <var>O</var> is not an object that implements <var>A</var>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤③">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥②">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>map</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects⑦">Map</a></code> object that is the value of <var>O</var>’s [[BackingMap]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③③">internal slot</a>.</p>
       </li><li data-md="">
        <p>Let <var>keyType</var> and <var>valueType</var> be the key and value types specified in the <a data-link-type="dfn" href="#dfn-maplike-declaration" id="ref-for-dfn-maplike-declaration②①">maplike declaration</a>.</p>
       </li><li data-md="">
        <p>Let <var>function</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦④">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p⑥">Get</a>(<var>map</var>, "<code>set</code>").</p>
       </li><li data-md="">
        <p>Let <var>keyArg</var> be the first argument passed to this function, or <emu-val>undefined</emu-val> if not supplied.</p>
       </li><li data-md="">
        <p>Let <var>valueArg</var> be the second argument passed to this function, or <emu-val>undefined</emu-val> if not supplied.</p>
       </li><li data-md="">
        <p>Let <var>keyIDL</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥③">converting</a> <var>keyArg</var> to an IDL value of type <var>keyType</var>.</p>
       </li><li data-md="">
        <p>Let <var>valueIDL</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥④">converting</a> <var>valueArg</var> to an IDL value of type <var>valueType</var>.</p>
       </li><li data-md="">
        <p>Let <var>key</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤③">converting</a> <var>keyIDL</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤④">converting</a> <var>valueIDL</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦⑤">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call⑨">Call</a>(<var>function</var>, <var>map</var>, «<var>key</var>, <var>value</var>»).</p>
       </li><li data-md="">
        <p>Return <var>O</var>.</p>
      </li></ol>
     </div>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④⑧">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>2</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object④⑨">function object</a>’s <code class="idl">name</code> property is the String value "<code>set</code>".</p>
   <h4 class="heading settled" data-level="3.6.12" id="es-setlike"><span class="secno">3.6.12. </span><span class="content">Setlike declarations</span><a class="self-link" href="#es-setlike"></a></h4>
   <p>Any object that implements an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧⑧">interface</a> that has a <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①⑤">setlike declaration</a> must have a [[BackingSet]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③④">internal slot</a>, which is
initially set to a newly created <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-set-objects" id="ref-for-sec-set-objects①">Set</a></code> object.
This <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-set-objects" id="ref-for-sec-set-objects②">Set</a></code> object’s [[SetData]] internal slot is
the object’s <a data-link-type="dfn" href="#dfn-set-entries" id="ref-for-dfn-set-entries②">set entries</a>.</p>
   <p>If an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑧⑨">interface</a> <var>A</var> is declared with a <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①⑥">setlike declaration</a>, then
there exists a number of additional properties
on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③③">interface prototype object</a>.
These additional properties are described in the sub-sections below.</p>
   <div class="algorithm" data-algorithm="forwards to the internal set object">
    <p>Some of the properties below are defined to have a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②③">built-in function object</a> value that <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-forwards-to-the-internal-set-object">forwards to the internal set object</dfn> for a given function name. Such functions behave as follows when invoked:</p>
    <ol>
     <li data-md="">
      <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
     </li><li data-md="">
      <p>Let <var>arguments</var> be the list of arguments passed to this function.</p>
     </li><li data-md="">
      <p>Let <var>name</var> be the function name.</p>
     </li><li data-md="">
      <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④③">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①⑤">perform a security check</a>, passing:</p>
      <ul>
       <li data-md="">
        <p>the platform object <var>O</var>,</p>
       </li><li data-md="">
        <p>an identifier equal to <var>name</var>, and</p>
       </li><li data-md="">
        <p>the type "<code>method</code>".</p>
      </li></ul>
     </li><li data-md="">
      <p>If <var>O</var> is not an object that implements <var>A</var>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤④">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥③">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Let <var>set</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-set-objects" id="ref-for-sec-set-objects③">Set</a></code> object that is
the value of <var>O</var>’s [[BackingSet]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③⑤">internal slot</a>.</p>
     </li><li data-md="">
      <p>Let <var>function</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦⑥">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-getmethod" id="ref-for-sec-getmethod⑦">GetMethod</a>(<var>set</var>, <var>name</var>).</p>
     </li><li data-md="">
      <p>If <var>function</var> is <emu-val>undefined</emu-val>,
then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤⑤">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥④">TypeError</a></code>.</p>
     </li><li data-md="">
      <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①⓪">Call</a>(<var>function</var>, <var>set</var>, <var>arguments</var>).</p>
    </li></ol>
   </div>
   <h5 class="heading settled" data-level="3.6.12.1" id="es-set-size"><span class="secno">3.6.12.1. </span><span class="content">size</span><a class="self-link" href="#es-set-size"></a></h5>
   <p>A <code class="idl">size</code> property must exist on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③④">interface prototype object</a> with the following characteristics:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes { [[Get]]: <var>G</var>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> },
where <var>G</var> is the interface’s <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-set-size-getter">set size getter</dfn>,
defined below.</p>
    </li><li data-md="">
     <div class="algorithm" data-algorithm="to invoke the size method of Sets">
      <p>The <a data-link-type="dfn" href="#dfn-set-size-getter" id="ref-for-dfn-set-size-getter">set size getter</a> is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②④">built-in function object</a> whose behavior when invoked is as follows:</p>
      <ol>
       <li data-md="">
        <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④④">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①⑥">perform a security check</a>, passing:</p>
        <ul>
         <li data-md="">
          <p>the platform object <var>O</var>,</p>
         </li><li data-md="">
          <p>the identifier "<code>size</code>", and</p>
         </li><li data-md="">
          <p>the type "<code>getter</code>".</p>
        </li></ul>
       </li><li data-md="">
        <p>If <var>O</var> is not an object that implements <var>A</var>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤⑥">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑤">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>set</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-set-objects" id="ref-for-sec-set-objects④">Set</a></code> object that is the value of <var>O</var>’s [[BackingSet]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③⑥">internal slot</a>.</p>
       </li><li data-md="">
        <p>Return the result of calling the [[Get]] internal method of <var>set</var> passing "<code>size</code>" and <var>set</var> as arguments.</p>
      </li></ol>
     </div>
     <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤⓪">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>0</emu-val>.</p>
     <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤①">function object</a>’s <code class="idl">name</code> property is the String value "<code>size</code>".</p>
   </li></ul>
   <h5 class="heading settled" data-level="3.6.12.2" id="es-set-values"><span class="secno">3.6.12.2. </span><span class="content">values</span><a class="self-link" href="#es-set-values"></a></h5>
   <p>A <code class="idl">values</code> data property must exist on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③⑤">interface prototype object</a> with attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }
and whose value is the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤②">function object</a> that is the value of
the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-well-known-symbols" id="ref-for-sec-well-known-symbols①⑨">@@iterator</a></code> property.</p>
   <h5 class="heading settled" data-level="3.6.12.3" id="es-set-entries-keys"><span class="secno">3.6.12.3. </span><span class="content">entries and keys</span><a class="self-link" href="#es-set-entries-keys"></a></h5>
   <p>For both of <code class="idl">entries</code> and <code class="idl">keys</code>, there must exist a data property with that name on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③⑥">interface prototype object</a> with the following characteristics:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②⑤">built-in function object</a> that <a data-link-type="dfn" href="#dfn-forwards-to-the-internal-set-object" id="ref-for-dfn-forwards-to-the-internal-set-object">forwards that name to the internal set object</a>.</p>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤③">function object</a>’s <code class="idl">length</code> properties is
the Number value <emu-val>0</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤④">function object</a>’s <code class="idl">name</code> property is
the String value "<code>entries</code>" or "<code>keys</code>", correspondingly.</p>
   <h5 class="heading settled" data-level="3.6.12.4" id="es-set-has"><span class="secno">3.6.12.4. </span><span class="content">has</span><a class="self-link" href="#es-set-has"></a></h5>
   <p>There must exist a <code class="idl">has</code> data property on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③⑦">interface prototype object</a> with the following characteristics:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <div class="algorithm" data-algorithm="to invoke the has method of Sets">
      <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②⑥">built-in function object</a> that behaves as follows when invoked:</p>
      <ol>
       <li data-md="">
        <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④⑤">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①⑦">perform a security check</a>, passing:</p>
        <ul>
         <li data-md="">
          <p>the platform object <var>O</var>,</p>
         </li><li data-md="">
          <p>the identifier "<code>has</code>", and</p>
         </li><li data-md="">
          <p>the type "<code>method</code>".</p>
        </li></ul>
       </li><li data-md="">
        <p>If <var>O</var> is not an object that implements <var>A</var>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤⑦">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑥">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>set</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-set-objects" id="ref-for-sec-set-objects⑤">Set</a></code> object that is the value of <var>O</var>’s [[BackingSet]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③⑦">internal slot</a>.</p>
       </li><li data-md="">
        <p>Let <var>type</var> be the value type specified in the <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①⑦">setlike declaration</a>.</p>
       </li><li data-md="">
        <p>Let <var>function</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦⑦">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p⑦">Get</a>(<var>set</var>, "<code>has</code>").</p>
       </li><li data-md="">
        <p>Let <var>arg</var> be the first argument passed to this function, or <emu-val>undefined</emu-val> if not supplied.</p>
       </li><li data-md="">
        <p>Let <var>idlValue</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥⑤">converting</a> <var>arg</var> to an IDL value of type <var>type</var>.</p>
       </li><li data-md="">
        <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤⑤">converting</a> <var>idlValue</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p><a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①①">Call</a>(<var>function</var>, <var>set</var>, «<var>value</var>»).</p>
      </li></ol>
     </div>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤⑤">function object</a>’s <code class="idl">length</code> property is a Number value <emu-val>1</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤⑥">function object</a>’s <code class="idl">name</code> property is the String value "<code>has</code>".</p>
   <h5 class="heading settled" data-level="3.6.12.5" id="es-add-delete"><span class="secno">3.6.12.5. </span><span class="content">add and delete</span><a class="self-link" href="#es-add-delete"></a></h5>
   <p>For both of <code class="idl">add</code> and <code class="idl">delete</code>, if:</p>
   <ul>
    <li data-md="">
     <p><var>A</var> does not declare an <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member③⓪">member</a> with a matching identifier, and</p>
    </li><li data-md="">
     <p><var>A</var> was declared with a read–write setlike declaration,</p>
   </li></ul>
   <p>then a data property with that name and the following characteristics
must exist on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③⑧">interface prototype object</a>:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <div class="algorithm" data-algorithm="to invoke the add and delete methods of Sets">
      <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②⑦">built-in function object</a> that behaves as follows when invoked:</p>
      <ol>
       <li data-md="">
        <p>Let <var>O</var> be the <emu-val>this</emu-val> value.</p>
       </li><li data-md="">
        <p>Let <var>name</var> be the name of the property – "<code>add</code>" or "<code>delete</code>".</p>
       </li><li data-md="">
        <p>If <var>O</var> is a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④⑥">platform object</a>,
then <a data-link-type="dfn" href="#dfn-perform-a-security-check" id="ref-for-dfn-perform-a-security-check①⑧">perform a security check</a>, passing:</p>
        <ul>
         <li data-md="">
          <p>the platform object <var>O</var>,</p>
         </li><li data-md="">
          <p>an identifier equal to <var>name</var>, and</p>
         </li><li data-md="">
          <p>the type "<code>method</code>".</p>
        </li></ul>
       </li><li data-md="">
        <p>If <var>O</var> is not an object that implements <var>A</var>, then <a data-link-type="dfn" href="#ecmascript-throw" id="ref-for-ecmascript-throw⑤⑧">throw</a> a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑦">TypeError</a></code>.</p>
       </li><li data-md="">
        <p>Let <var>set</var> be the <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-set-objects" id="ref-for-sec-set-objects⑥">Set</a></code> object that is the value of <var>O</var>’s [[BackingSet]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③⑧">internal slot</a>.</p>
       </li><li data-md="">
        <p>Let <var>type</var> be the value type specified in the <a data-link-type="dfn" href="#dfn-setlike-declaration" id="ref-for-dfn-setlike-declaration①⑧">setlike declaration</a>.</p>
       </li><li data-md="">
        <p>Let <var>function</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦⑧">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p⑧">Get</a>(<var>set</var>, <var>name</var>).</p>
       </li><li data-md="">
        <p>Let <var>arg</var> be the first argument passed to this function, or <emu-val>undefined</emu-val> if not supplied.</p>
       </li><li data-md="">
        <p>Let <var>idlValue</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥⑥">converting</a> <var>arg</var> to an IDL value of type <var>type</var>.</p>
       </li><li data-md="">
        <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤⑥">converting</a> <var>idlValue</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p>Let <var>result</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑦⑨">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①②">Call</a>(<var>function</var>, <var>set</var>, «<var>value</var>»).</p>
       </li><li data-md="">
        <p>If <var>name</var> is "delete", then return <var>result</var>.</p>
       </li><li data-md="">
        <p>Otherwise, return <var>O</var>.</p>
      </li></ol>
     </div>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤⑦">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>1</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤⑧">function object</a>’s <code class="idl">name</code> property is the String value "<code>add</code>" or "<code>delete</code>", correspondingly.</p>
   <h5 class="heading settled" data-level="3.6.12.6" id="es-set-clear"><span class="secno">3.6.12.6. </span><span class="content">clear</span><a class="self-link" href="#es-set-clear"></a></h5>
   <p>If <var>A</var> does not declare a <a data-link-type="dfn" href="#dfn-member" id="ref-for-dfn-member③①">member</a> with a matching identifier, and <var>A</var> was declared with a read–write setlike declaration,
then a <code class="idl">clear</code> data property with the following characteristics
must exist on <var>A</var>’s <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object③⑨">interface prototype object</a>:</p>
   <ul>
    <li data-md="">
     <p>The property has attributes { [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.</p>
    </li><li data-md="">
     <p>The value of the property is a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-built-in-function-objects" id="ref-for-sec-built-in-function-objects②⑧">built-in function object</a> that <a data-link-type="dfn" href="#dfn-forwards-to-the-internal-set-object" id="ref-for-dfn-forwards-to-the-internal-set-object①">forwards <code class="idl">clear</code> to the internal map object</a>.</p>
   </li></ul>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑤⑨">function object</a>’s <code class="idl">length</code> property is the Number value <emu-val>0</emu-val>.</p>
   <p>The value of the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑥⓪">function object</a>’s <code class="idl">name</code> property is the String value "<code>clear</code>".</p>
   <h3 class="heading settled" data-level="3.7" id="es-platform-objects"><span class="secno">3.7. </span><span class="content">Platform objects implementing interfaces</span><a class="self-link" href="#es-platform-objects"></a></h3>
   <p>Every <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④⑦">platform object</a> is associated with a global environment, just
as the <a data-link-type="dfn" href="#dfn-initial-object" id="ref-for-dfn-initial-object③">initial objects</a> are.
It is the responsibility of specifications using Web IDL to state
which global environment (or, by proxy, which global object) each platform
object is associated with.</p>
   <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-primary-interface">primary interface</dfn> of a platform object
that implements one or more interfaces is the most-derived <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨⓪">interface</a> that it implements.  The value of the [[Prototype]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots③⑨">internal slot</a> of the platform object is the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object④⓪">interface prototype object</a> of the <a data-link-type="dfn" href="#dfn-primary-interface" id="ref-for-dfn-primary-interface">primary interface</a> from the <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④⑧">platform object</a>’s associated global environment.</p>
   <p>The global environment that a given <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object④⑨">platform object</a> is associated with can <dfn data-dfn-for="global environment" data-dfn-type="dfn" data-export="" id="dfn-change-global-environment">change<a class="self-link" href="#dfn-change-global-environment"></a></dfn> after it has been created.  When
the global environment associated with a platform object is changed, its
[[Prototype]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots④⓪">internal slot</a> must be immediately
updated to be the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object④①">interface prototype object</a> of the <a data-link-type="dfn" href="#dfn-primary-interface" id="ref-for-dfn-primary-interface①">primary interface</a> from the <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤⓪">platform object</a>’s newly associated global environment.</p>
   <p>The <a data-link-type="dfn" href="#dfn-class-string" id="ref-for-dfn-class-string⑤">class string</a> of
a platform object that implements one or more interfaces
must be the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧⑦">identifier</a> of
the <a data-link-type="dfn" href="#dfn-primary-interface" id="ref-for-dfn-primary-interface②">primary interface</a> of the platform object.</p>
   <p>The <a data-link-type="dfn" href="#dfn-class-string" id="ref-for-dfn-class-string⑥">class string</a> of an interface with the [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace⑦">LegacyNamespace</a></code>] extended
attribute is the concatenation of the class string of the namespace, ".",
and the class string that the interface would otherwise have without this
extended attribute.</p>
   <p><a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤①">Platform objects</a> have an internal [[SetPrototypeOf]] method
as defined in <a href="#platform-object-setprototypeof">§3.7.1 [[SetPrototypeOf]]</a>.</p>
   <p>Within a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm②⓪">Realm</a> <var>realm</var>,
for each <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨①">interface</a> <var>interface</var> implemented by a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤②">platform object</a> <var>obj</var>,
the following steps must be run as part of <var>obj</var>’s creation:</p>
   <ol>
    <li data-md="">
     <p><a data-link-type="dfn" href="#define-the-unforgeable-regular-operations" id="ref-for-define-the-unforgeable-regular-operations">Define the unforgeable regular operations</a> of <var>interface</var> on <var>obj</var>, given <var>realm</var>.</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#define-the-unforgeable-regular-attributes" id="ref-for-define-the-unforgeable-regular-attributes">Define the unforgeable regular attributes</a> of <var>interface</var> on <var>obj</var>, given <var>realm</var>.</p>
   </li></ol>
   <p>If within a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm②①">Realm</a> <var>realm</var> a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤③">platform object</a> <var>obj</var> implements
an interface which is declared with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②⑧">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④⑥">extended attribute</a>, then
for each <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨②">interface</a> <var>interface</var> implemented by <var>obj</var>,
the following steps must be run as part of <var>obj</var>’s creation:</p>
   <ol>
    <li data-md="">
     <p><a data-link-type="dfn" href="#define-the-regular-operations" id="ref-for-define-the-regular-operations①">Define the regular operations</a> of <var>interface</var> on <var>obj</var>, given <var>realm</var>.</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="#define-the-regular-attributes" id="ref-for-define-the-regular-attributes①">Define the regular attributes</a> of <var>interface</var> on <var>obj</var>, given <var>realm</var>.</p>
   </li></ol>
   <p>Additionaly, <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤④">platform objects</a> which implement an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨③">interface</a> which has a [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global②⑨">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④⑦">extended attribute</a> get properties declaratively from:</p>
   <ul>
    <li data-md="">
     <p><a href="#es-stringifier">§3.6.8.2 Stringifiers</a>,</p>
    </li><li data-md="">
     <p><a href="#es-iterators">§3.6.9 Common iterator behavior</a>,</p>
    </li><li data-md="">
     <p><a href="#es-iterable">§3.6.10 Iterable declarations</a>,</p>
    </li><li data-md="">
     <p><a href="#es-maplike">§3.6.11 Maplike declarations</a>, and</p>
    </li><li data-md="">
     <p><a href="#es-setlike">§3.6.12 Setlike declarations</a>.</p>
   </li></ul>
   <p class="issue" id="issue-e7d418f6①"><a class="self-link" href="#issue-e7d418f6①"></a> Define those properties imperatively instead.</p>
   <h4 class="heading settled" data-level="3.7.1" id="platform-object-setprototypeof"><span class="secno">3.7.1. </span><span class="content">[[SetPrototypeOf]]</span><span id="platformobjectsetprototypeof"></span><a class="self-link" href="#platform-object-setprototypeof"></a></h4>
   <div class="algorithm" data-algorithm="to invoke the internal [[SetPrototypeOf]] method of a platform object that implements an interface with [Global] extended attribute">
    <p>When the [[SetPrototypeOf]] internal method of a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤⑤">platform object</a> <var>O</var> that implements an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨④">interface</a> with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global③⓪">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④⑧">extended attribute</a> is called with
    ECMAScript language value <var>V</var>, the following step is taken:</p>
    <ol>
     <li data-md="">
      <p>Return <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧⓪">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-set-immutable-prototype" id="ref-for-sec-set-immutable-prototype①">SetImmutablePrototype</a>(<var>O</var>, <var>V</var>).</p>
    </li></ol>
   </div>
   <p class="note" role="note"><span>Note:</span> For <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window⑦">Window</a></code> objects, it is unobservable whether this is implemented, since the presence of
the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#windowproxy" id="ref-for-windowproxy">WindowProxy</a></code> object ensures that [[SetPrototypeOf]] is never called on a <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/window-object.html#window" id="ref-for-window⑧">Window</a></code> object
directly. For other global objects, however, this is necessary.</p>
   <h3 class="heading settled" data-level="3.8" id="es-legacy-platform-objects"><span class="secno">3.8. </span><span class="content">Legacy platform objects</span><span id="indexed-and-named-properties"></span><a class="self-link" href="#es-legacy-platform-objects"></a></h3>
   <p><a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object②">Legacy platform objects</a> will appear to have additional properties that correspond to their <a data-link-type="dfn" href="#idl-indexed-properties" id="ref-for-idl-indexed-properties①">indexed</a> and <a data-link-type="dfn" href="#idl-named-properties" id="ref-for-idl-named-properties②">named properties</a>.  These properties are not “real” own
properties on the object, but are made to look like they are by being exposed
by the <a href="#legacy-platform-object-getownproperty" id="ref-for-legacy-platform-object-getownproperty①">[[GetOwnProperty]] internal method</a> .</p>
   <p>It is permissible for an object to implement multiple interfaces that support indexed properties.
However, if so, and there are conflicting definitions as to the object’s <a data-link-type="dfn" href="#dfn-supported-property-indices" id="ref-for-dfn-supported-property-indices③">supported property indices</a>,
then it is undefined what additional properties the object will appear to
have, or what its exact behavior will be with regard to its indexed properties.
The same applies for named properties.</p>
   <p>The <a data-link-type="dfn" href="#dfn-indexed-property-getter" id="ref-for-dfn-indexed-property-getter⑧">indexed property getter</a> that is defined on the derived-most interface that the
legacy platform object implements is the one that defines the behavior
when indexing the object with an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#array-index" id="ref-for-array-index">array index</a>.  Similarly for <a data-link-type="dfn" href="#dfn-indexed-property-setter" id="ref-for-dfn-indexed-property-setter③">indexed property setters</a>.
This way, the definitions of these special operations from
ancestor interfaces can be overridden.</p>
   <p>A property name is an <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-unforgeable-property-name">unforgeable property name</dfn> on a
given platform object <var>O</var> if the object implements an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨⑤">interface</a> that
has an <a data-link-type="dfn" href="#dfn-interface-member" id="ref-for-dfn-interface-member②⑦">interface member</a> with that identifier
and that interface member is <a data-link-type="dfn" href="#dfn-unforgeable-on-an-interface" id="ref-for-dfn-unforgeable-on-an-interface①①">unforgeable</a> on any of
the interfaces that <var>O</var> implements.</p>
   <p>Support for <a data-link-type="dfn" href="#dfn-getter" id="ref-for-dfn-getter">getters</a> is handled in <a href="#legacy-platform-object-getownproperty" id="ref-for-legacy-platform-object-getownproperty②">§3.8.1 [[GetOwnProperty]]</a>,
and for <a data-link-type="dfn" href="#dfn-setter" id="ref-for-dfn-setter">setters</a> in <a href="#legacy-platform-object-defineownproperty">§3.8.3 [[DefineOwnProperty]]</a> and <a href="#legacy-platform-object-set">§3.8.2 [[Set]]</a>.</p>
   <p>Additionaly, <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object③">legacy platform objects</a> must have internal methods as defined in:</p>
   <ul>
    <li data-md="">
     <p><a href="#legacy-platform-object-delete">§3.8.4 [[Delete]]</a>,</p>
    </li><li data-md="">
     <p><a href="#legacy-platform-object-preventextensions">§3.8.5 [[PreventExtensions]]</a>, and</p>
    </li><li data-md="">
     <p><a href="#legacy-platform-object-ownpropertykeys">§3.8.6 [[OwnPropertyKeys]]</a>.</p>
   </li></ul>
   <p class="issue" id="issue-2ed0bed1"><a class="self-link" href="#issue-2ed0bed1"></a> Define those internal methods imperatively instead.</p>
   <h4 class="heading settled dfn-paneled" data-dfn-for="legacy platform object" data-dfn-type="dfn" data-level="3.8.1" data-lt="GetOwnProperty" data-noexport="" id="legacy-platform-object-getownproperty"><span class="secno">3.8.1. </span><span class="content">[[GetOwnProperty]]</span><span id="getownproperty"></span></h4>
   <div class="algorithm" data-algorithm="to invoke the [[GetOwnProperty]] internal method of legacy platform objects">
    <p>The [[GetOwnProperty]] internal method of every <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object④">legacy platform object</a> <var>O</var> must behave as follows when called with property name <var>P</var>:</p>
    <ol>
     <li data-md="">
      <p>Return <a data-link-type="abstract-op" href="#LegacyPlatformObjectGetOwnProperty" id="ref-for-LegacyPlatformObjectGetOwnProperty">LegacyPlatformObjectGetOwnProperty</a>(<var>O</var>, <var>P</var>, <emu-val>false</emu-val>).</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.8.2" id="legacy-platform-object-set"><span class="secno">3.8.2. </span><span class="content">[[Set]]</span><span id="platformobjectset"></span><a class="self-link" href="#legacy-platform-object-set"></a></h4>
   <div class="algorithm" data-algorithm="to invoke the [[Set]] internal method of legacy platform objects">
    <p>The [[Set]] internal method of every <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object⑤">legacy platform object</a> <var>O</var> must behave as follows when called with
    property name <var>P</var>, value <var>V</var>, and ECMAScript language value <var>Receiver</var>:</p>
    <ol>
     <li data-md="">
      <p>If <var>O</var> and <var>Receiver</var> are the same object, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties①⓪">supports indexed properties</a>, <var>P</var> <a data-link-type="dfn" href="#is-an-array-index" id="ref-for-is-an-array-index">is an array index</a>, and <var>O</var> implements an interface with an <a data-link-type="dfn" href="#dfn-indexed-property-setter" id="ref-for-dfn-indexed-property-setter④">indexed property setter</a>, then:</p>
        <ol>
         <li data-md="">
          <p><a data-link-type="dfn" href="#invoke-indexed-setter" id="ref-for-invoke-indexed-setter">Invoke the indexed property setter</a> with <var>P</var> and <var>V</var>.</p>
         </li><li data-md="">
          <p>Return <emu-val>true</emu-val>.</p>
        </li></ol>
       </li><li data-md="">
        <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties⑥">supports named properties</a>, <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③⑤">Type</a>(<var>P</var>) is String, <var>P</var> <a data-link-type="dfn" href="#is-an-array-index" id="ref-for-is-an-array-index①">is not an array index</a>,
and <var>O</var> implements an interface with a <a data-link-type="dfn" href="#dfn-named-property-setter" id="ref-for-dfn-named-property-setter③">named property setter</a>, then:</p>
        <ol>
         <li data-md="">
          <p><a data-link-type="dfn" href="#invoke-named-setter" id="ref-for-invoke-named-setter">Invoke the named property setter</a> with <var>P</var> and <var>V</var>.</p>
         </li><li data-md="">
          <p>Return <emu-val>true</emu-val>.</p>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>ownDesc</var> be <a data-link-type="abstract-op" href="#LegacyPlatformObjectGetOwnProperty" id="ref-for-LegacyPlatformObjectGetOwnProperty①">LegacyPlatformObjectGetOwnProperty</a>(<var>O</var>, <var>P</var>, <emu-val>true</emu-val>).</p>
     </li><li data-md="">
      <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧①">?</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ordinarysetwithowndescriptor" id="ref-for-sec-ordinarysetwithowndescriptor">OrdinarySetWithOwnDescriptor</a>(<var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>, <var>ownDesc</var>).</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.8.3" id="legacy-platform-object-defineownproperty"><span class="secno">3.8.3. </span><span class="content">[[DefineOwnProperty]]</span><span id="defineownproperty"></span><a class="self-link" href="#legacy-platform-object-defineownproperty"></a></h4>
   <div class="algorithm" data-algorithm="to invoke the [[DefineOwnProperty]] internal method of legacy platform objects">
    <p>When the [[DefineOwnProperty]] internal method of a <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object⑥">legacy platform object</a> <var>O</var> is called with property key <var>P</var> and <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-property-descriptor-specification-type" id="ref-for-sec-property-descriptor-specification-type①">Property Descriptor</a> <var>Desc</var>,
    the following steps must be taken:</p>
    <ol>
     <li data-md="">
      <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties①①">supports indexed properties</a> and <var>P</var> <a data-link-type="dfn" href="#is-an-array-index" id="ref-for-is-an-array-index②">is an array index</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-isdatadescriptor" id="ref-for-sec-isdatadescriptor">IsDataDescriptor</a>(<var>Desc</var>) is <emu-val>false</emu-val>, then return <emu-val>false</emu-val>.</p>
       </li><li data-md="">
        <p>If <var>O</var> does not implement an interface with an <a data-link-type="dfn" href="#dfn-indexed-property-setter" id="ref-for-dfn-indexed-property-setter⑤">indexed property setter</a>, then return <emu-val>false</emu-val>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="#invoke-indexed-setter" id="ref-for-invoke-indexed-setter①">Invoke the indexed property setter</a> with <var>P</var> and <var>Desc</var>.[[Value]].</p>
       </li><li data-md="">
        <p>Return <emu-val>true</emu-val>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties⑦">supports named properties</a>, <var>O</var> does not implement an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨⑥">interface</a> with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global③①">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①④⑨">extended attribute</a>, <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③⑥">Type</a>(<var>P</var>) is String,
and <var>P</var> is not an <a data-link-type="dfn" href="#dfn-unforgeable-property-name" id="ref-for-dfn-unforgeable-property-name">unforgeable property name</a> of <var>O</var>, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>creating</var> be true if <var>P</var> is not a <a data-link-type="dfn" href="#dfn-supported-property-names" id="ref-for-dfn-supported-property-names③">supported property name</a>, and false otherwise.</p>
       </li><li data-md="">
        <p>If <var>O</var> implements an interface with the [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins⑨">OverrideBuiltins</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤⓪">extended attribute</a> or <var>O</var> does not have an own property
named <var>P</var>, then:</p>
        <ol>
         <li data-md="">
          <p>If <var>creating</var> is false and <var>O</var> does not implement an
interface with a <a data-link-type="dfn" href="#dfn-named-property-setter" id="ref-for-dfn-named-property-setter④">named property setter</a>, then return <emu-val>false</emu-val>.</p>
         </li><li data-md="">
          <p>If <var>O</var> implements an interface with a <a data-link-type="dfn" href="#dfn-named-property-setter" id="ref-for-dfn-named-property-setter⑤">named property setter</a>, then:</p>
          <ol>
           <li data-md="">
            <p>If the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-isdatadescriptor" id="ref-for-sec-isdatadescriptor①">IsDataDescriptor</a>(<var>Desc</var>) is <emu-val>false</emu-val>, then return <emu-val>false</emu-val>.</p>
           </li><li data-md="">
            <p><a data-link-type="dfn" href="#invoke-named-setter" id="ref-for-invoke-named-setter①">Invoke the named property setter</a> with <var>P</var> and <var>Desc</var>.[[Value]].</p>
           </li><li data-md="">
            <p>Return <emu-val>true</emu-val>.</p>
          </li></ol>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>If <var>O</var> does not implement an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨⑦">interface</a> with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global③②">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤①">extended attribute</a>,
then set <var>Desc</var>.[[Configurable]] to <emu-val>true</emu-val>.</p>
     </li><li data-md="">
      <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ordinarydefineownproperty" id="ref-for-sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<var>O</var>, <var>P</var>, <var>Desc</var>).</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.8.4" id="legacy-platform-object-delete"><span class="secno">3.8.4. </span><span class="content">[[Delete]]</span><span id="delete"></span><a class="self-link" href="#legacy-platform-object-delete"></a></h4>
   <div class="algorithm" data-algorithm="to invoke the [[Delete]] internal method of legacy platform objects">
    <p>The [[Delete]] internal method of every <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object⑦">legacy platform object</a> <var>O</var> must behave as follows when called with property name <var>P</var>.</p>
    <ol>
     <li data-md="">
      <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties①②">supports indexed properties</a> and <var>P</var> <a data-link-type="dfn" href="#is-an-array-index" id="ref-for-is-an-array-index③">is an array index</a>, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>index</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-touint32" id="ref-for-sec-touint32②">ToUint32</a>(<var>P</var>).</p>
       </li><li data-md="">
        <p>If <var>index</var> is not a <a data-link-type="dfn" href="#dfn-supported-property-indices" id="ref-for-dfn-supported-property-indices④">supported property index</a>, then return <emu-val>true</emu-val>.</p>
       </li><li data-md="">
        <p>Return <emu-val>false</emu-val>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties⑧">supports named properties</a>, <var>O</var> does not implement an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨⑧">interface</a> with the [<code class="idl"><a data-link-type="idl" href="#Global" id="ref-for-Global③③">Global</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤②">extended attribute</a> and the result of calling the <a data-link-type="dfn" href="#dfn-named-property-visibility" id="ref-for-dfn-named-property-visibility①">named property visibility algorithm</a> with property name <var>P</var> and object <var>O</var> is true, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>O</var> does not implement an interface with a <a data-link-type="dfn" href="#dfn-named-property-deleter" id="ref-for-dfn-named-property-deleter④">named property deleter</a>, then return <emu-val>false</emu-val>.</p>
       </li><li data-md="">
        <p>Let <var>operation</var> be the operation used to declare the named property deleter.</p>
       </li><li data-md="">
        <p>If <var>operation</var> was defined without an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧⑧">identifier</a>, then:</p>
        <ol>
         <li data-md="">
          <p>Perform the steps listed in the interface description to <a data-link-type="dfn" href="#dfn-delete-an-existing-named-property" id="ref-for-dfn-delete-an-existing-named-property">delete an existing named property</a> with <var>P</var> as the name.</p>
         </li><li data-md="">
          <p>If the steps indicated that the deletion failed, then return <emu-val>false</emu-val>.</p>
        </li></ol>
       </li><li data-md="">
        <p>Otherwise, <var>operation</var> was defined with an identifier:</p>
        <ol>
         <li data-md="">
          <p>Perform the steps listed in the description of <var>operation</var> with <var>P</var> as the only argument value.</p>
         </li><li data-md="">
          <p>If <var>operation</var> was declared with a <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type⑥">return type</a> of <code class="idl"><a data-link-type="idl" href="#idl-boolean" id="ref-for-idl-boolean②①">boolean</a></code> and the steps returned <emu-val>false</emu-val>, then return <emu-val>false</emu-val>.</p>
        </li></ol>
       </li><li data-md="">
        <p>Return <emu-val>true</emu-val>.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>O</var> has an own property with name <var>P</var>, then:</p>
      <ol>
       <li data-md="">
        <p>If the property is not configurable, then return <emu-val>false</emu-val>.</p>
       </li><li data-md="">
        <p>Otherwise, remove the property from <var>O</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <emu-val>true</emu-val>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.8.5" id="legacy-platform-object-preventextensions"><span class="secno">3.8.5. </span><span class="content">[[PreventExtensions]]</span><span id="preventextensions"></span><a class="self-link" href="#legacy-platform-object-preventextensions"></a></h4>
   <div class="algorithm" data-algorithm="to invoke the internal [[PreventExtensions]] method of legacy platform objects">
    <p>When the [[PreventExtensions]] internal method of a <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object⑧">legacy platform object</a> is called,
    the following steps are taken:</p>
    <ol>
     <li data-md="">
      <p>Return <emu-val>false</emu-val>.</p>
    </li></ol>
    <p class="note" role="note"><span>Note:</span> this keeps <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object⑨">legacy platform objects</a> extensible by
    making [[PreventExtensions]] fail for them.</p>
   </div>
   <h4 class="heading settled" data-level="3.8.6" id="legacy-platform-object-ownpropertykeys"><span class="secno">3.8.6. </span><span class="content">[[OwnPropertyKeys]]</span><span id="property-enumeration"></span><span id="legacy-platform-object-property-enumeration"></span><a class="self-link" href="#legacy-platform-object-ownpropertykeys"></a></h4>
   <p>This document does not define a complete property enumeration order
for <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤⑥">platform objects</a> implementing <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface①⑨⑨">interfaces</a> (or for <a href="#es-exception-objects" id="ref-for-es-exception-objects">platform objects representing exceptions</a>).
However, it does for <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object①⓪">legacy platform objects</a> by defining the [[OwnPropertyKeys]]
internal method as follows.</p>
   <div class="algorithm" data-algorithm="to invoke the internal [[OwnPropertyKeys]] method of legacy platform objects">
    <p>When the [[OwnPropertyKeys]] internal method of a <a data-link-type="dfn" href="#dfn-legacy-platform-object" id="ref-for-dfn-legacy-platform-object①①">legacy platform object</a> <var>O</var> is called,
    the following steps are taken:</p>
    <ol>
     <li data-md="">
      <p>Let <var>keys</var> be a new empty <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①③">list</a> of ECMAScript String and Symbol values.</p>
     </li><li data-md="">
      <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties①③">supports indexed properties</a>, then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①④">for each</a> <var>index</var> of <var>O</var>’s <a data-link-type="dfn" href="#dfn-supported-property-indices" id="ref-for-dfn-supported-property-indices⑤">supported property indices</a>, in ascending numerical order, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①⑤">append</a> <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧②">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-tostring" id="ref-for-sec-tostring⑦">ToString</a>(<var>index</var>) to <var>keys</var>.</p>
     </li><li data-md="">
      <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties⑨">supports named properties</a>, then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①⑥">for each</a> <var>P</var> of <var>O</var>’s <a data-link-type="dfn" href="#dfn-supported-property-names" id="ref-for-dfn-supported-property-names④">supported property names</a> that is visible according to the <a data-link-type="dfn" href="#dfn-named-property-visibility" id="ref-for-dfn-named-property-visibility②">named property visibility algorithm</a>, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①⑦">append</a> <var>P</var> to <var>keys</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①⑧">For each</a> <var>P</var> of <var>O</var>’s own property keys that is a String, in ascending chronological order of
property creation, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list①⑨">append</a> <var>P</var> to <var>keys</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list②⓪">For each</a> <var>P</var> of <var>O</var>’s own property keys that is a Symbol, in ascending chronological order of
property creation, <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list②①">append</a> <var>P</var> to <var>keys</var>.</p>
     </li><li data-md="">
      <p class="assertion">Assert: <var>keys</var> has no duplicate items.</p>
     </li><li data-md="">
      <p>Return <var>keys</var>.</p>
    </li></ol>
   </div>
   <h4 class="heading settled" data-level="3.8.7" id="legacy-platform-object-abstract-ops"><span class="secno">3.8.7. </span><span class="content">Abstract operations</span><a class="self-link" href="#legacy-platform-object-abstract-ops"></a></h4>
   <div class="algorithm" data-algorithm="to determine if a property name is an array index">
    <p>To determine if a property name <var>P</var> <dfn class="dfn-paneled" data-dfn-type="dfn" data-lt="is an array index|is not an array index" data-noexport="" id="is-an-array-index">is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#array-index" id="ref-for-array-index①">array index</a><span id="dfn-array-index-property-name"></span></dfn>, the following algorithm is
    applied:</p>
    <ol>
     <li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values" id="ref-for-sec-ecmascript-data-types-and-values③⑦">Type</a>(<var>P</var>) is not String, then return <emu-val>false</emu-val>.</p>
     </li><li data-md="">
      <p>Let <var>index</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧③">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-canonicalnumericindexstring" id="ref-for-sec-canonicalnumericindexstring">CanonicalNumericIndexString</a>(<var>P</var>).</p>
     </li><li data-md="">
      <p>If <var>index</var> is <emu-val>undefined</emu-val>, then return <emu-val>false</emu-val>.</p>
     </li><li data-md="">
      <p>If <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-isinteger" id="ref-for-sec-isinteger">IsInteger</a>(<var>index</var>) is <emu-val>false</emu-val>,
then return <emu-val>false</emu-val>.</p>
     </li><li data-md="">
      <p>If <var>index</var> is −0, then return <emu-val>false</emu-val>.</p>
     </li><li data-md="">
      <p>If <var>index</var> &lt; 0, then return <emu-val>false</emu-val>.</p>
     </li><li data-md="">
      <p>If <var>index</var> ≥ 2<sup>32</sup> − 1, then return <emu-val>false</emu-val>.</p>
      <p class="note" role="note"><span>Note:</span> 2<sup>32</sup> − 1 is the maximum array length allowed by ECMAScript.</p>
     </li><li data-md="">
      <p>Return <emu-val>true</emu-val>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="named property visibility algorithm">
    <p>The <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-named-property-visibility">named property visibility algorithm</dfn> is used to determine if a given named property is exposed on an object.
    Some named properties are not exposed on an object depending on whether
    the [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins①⓪">OverrideBuiltins</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤③">extended attribute</a> was used.
    The algorithm operates as follows, with property name <var>P</var> and object <var>O</var>:</p>
    <ol>
     <li data-md="">
      <p>If <var>P</var> is not a <a data-link-type="dfn" href="#dfn-supported-property-names" id="ref-for-dfn-supported-property-names⑤">supported property name</a> of <var>O</var>, then return false.</p>
     </li><li data-md="">
      <p>If <var>O</var> has an own property named <var>P</var>, then return false.</p>
      <p class="note" role="note"><span>Note:</span> This will include cases in which <var>O</var> has unforgeable properties,
  because in practice those are always set up before objects have any supported property names,
  and once set up will make the corresponding named properties invisible.</p>
     </li><li data-md="">
      <p>If <var>O</var> implements an interface that has the [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins①①">OverrideBuiltins</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤④">extended attribute</a>, then return true.</p>
     </li><li data-md="">
      <p>Let <var>prototype</var> be <var>O</var>.[[GetPrototypeOf]]().</p>
     </li><li data-md="">
      <p>While <var>prototype</var> is not null:</p>
      <ol>
       <li data-md="">
        <p>If <var>prototype</var> is not a <a data-link-type="dfn" href="#dfn-named-properties-object" id="ref-for-dfn-named-properties-object①③">named properties object</a>,
and <var>prototype</var> has an own property named <var>P</var>, then return false.</p>
       </li><li data-md="">
        <p>Set <var>prototype</var> to <var>prototype</var>.[[GetPrototypeOf]]().</p>
      </li></ol>
     </li><li data-md="">
      <p>Return true.</p>
    </li></ol>
   </div>
   <div class="note" role="note">
    <p>This should ensure that for objects with named properties, property resolution is done in the following order:</p>
    <ol>
     <li data-md="">
      <p>Indexed properties.</p>
     </li><li data-md="">
      <p>Own properties, including unforgeable attributes and operations.</p>
     </li><li data-md="">
      <p>Then, if [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins①②">OverrideBuiltins</a></code>]:</p>
      <ol>
       <li data-md="">
        <p>Named properties.</p>
       </li><li data-md="">
        <p>Properties from the prototype chain.</p>
      </li></ol>
     </li><li data-md="">
      <p>Otherwise, if not [<code class="idl"><a data-link-type="idl" href="#OverrideBuiltins" id="ref-for-OverrideBuiltins①③">OverrideBuiltins</a></code>]:</p>
      <ol>
       <li data-md="">
        <p>Properties from the prototype chain.</p>
       </li><li data-md="">
        <p>Named properties.</p>
      </li></ol>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="invoke the indexed property setter">
    <p>To <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="invoke the indexed property setter" id="invoke-indexed-setter">invoke an indexed property setter<span id="invoking-indexed-setter"></span></dfn> with property name <var>P</var> and ECMAScript value <var>V</var>, the following steps must be performed:</p>
    <ol>
     <li data-md="">
      <p>Let <var>index</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-touint32" id="ref-for-sec-touint32③">ToUint32</a>(<var>P</var>).</p>
     </li><li data-md="">
      <p>Let <var>creating</var> be true if <var>index</var> is not a <a data-link-type="dfn" href="#dfn-supported-property-indices" id="ref-for-dfn-supported-property-indices⑥">supported property index</a>,
and false otherwise.</p>
     </li><li data-md="">
      <p>Let <var>operation</var> be the operation used to declare the indexed property setter.</p>
     </li><li data-md="">
      <p>Let <var>T</var> be the type of the second argument of <var>operation</var>.</p>
     </li><li data-md="">
      <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥⑦">converting</a> <var>V</var> to an IDL value of type <var>T</var>.</p>
     </li><li data-md="">
      <p>If <var>operation</var> was defined without an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑧⑨">identifier</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>creating</var> is true, then perform the steps listed in the interface description to <a data-link-type="dfn" href="#dfn-set-the-value-of-a-new-indexed-property" id="ref-for-dfn-set-the-value-of-a-new-indexed-property">set the value of a new indexed property</a> with <var>index</var> as the index and <var>value</var> as the value.</p>
       </li><li data-md="">
        <p>Otherwise, <var>creating</var> is false.  Perform the steps listed in the interface description to <a data-link-type="dfn" href="#dfn-set-the-value-of-an-existing-indexed-property" id="ref-for-dfn-set-the-value-of-an-existing-indexed-property">set the value of an existing indexed property</a> with <var>index</var> as the index and <var>value</var> as the value.</p>
      </li></ol>
     </li><li data-md="">
      <p>Otherwise, <var>operation</var> was defined with an identifier.  Perform the steps listed in the description of <var>operation</var> with <var>index</var> and <var>value</var> as the two argument values.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="invoke the named property setter">
    <p>To <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" data-lt="invoke the named property setter" id="invoke-named-setter">invoke a named property setter<span id="invoking-named-setter"></span></dfn> with property name <var>P</var> and ECMAScript value <var>V</var>, the following steps must be performed:</p>
    <ol>
     <li data-md="">
      <p>Let <var>creating</var> be true if <var>P</var> is not a <a data-link-type="dfn" href="#dfn-supported-property-names" id="ref-for-dfn-supported-property-names⑥">supported property name</a>, and false otherwise.</p>
     </li><li data-md="">
      <p>Let <var>operation</var> be the operation used to declare the named property setter.</p>
     </li><li data-md="">
      <p>Let <var>T</var> be the type of the second argument of <var>operation</var>.</p>
     </li><li data-md="">
      <p>Let <var>value</var> be the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥⑧">converting</a> <var>V</var> to an IDL value of type <var>T</var>.</p>
     </li><li data-md="">
      <p>If <var>operation</var> was defined without an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨⓪">identifier</a>, then:</p>
      <ol>
       <li data-md="">
        <p>If <var>creating</var> is true, then perform the steps listed in the interface description to <a data-link-type="dfn" href="#dfn-set-the-value-of-a-new-named-property" id="ref-for-dfn-set-the-value-of-a-new-named-property">set the value of a new named property</a> with <var>P</var> as the name and <var>value</var> as the value.</p>
       </li><li data-md="">
        <p>Otherwise, <var>creating</var> is false.  Perform the steps listed in the interface description to <a data-link-type="dfn" href="#dfn-set-the-value-of-an-existing-named-property" id="ref-for-dfn-set-the-value-of-an-existing-named-property">set the value of an existing named property</a> with <var>P</var> as the name and <var>value</var> as the value.</p>
      </li></ol>
     </li><li data-md="">
      <p>Otherwise, <var>operation</var> was defined with an identifier.  Perform the steps listed in the description of <var>operation</var> with <var>P</var> and <var>value</var> as the two argument values.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="LegacyPlatformObjectGetOwnProperty">
    <p>The <dfn class="dfn-paneled" data-dfn-type="abstract-op" data-export="" id="LegacyPlatformObjectGetOwnProperty">LegacyPlatformObjectGetOwnProperty<span id="getownproperty-guts"></span></dfn> abstract operation performs the following steps when called with
    an object <var>O</var>, a property name <var>P</var>, and a boolean <var>ignoreNamedProps</var> value:</p>
    <ol>
     <li data-md="">
      <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-indexed-properties" id="ref-for-dfn-support-indexed-properties①④">supports indexed properties</a> and <var>P</var> <a data-link-type="dfn" href="#is-an-array-index" id="ref-for-is-an-array-index④">is an array index</a>, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>index</var> be the result of calling <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-touint32" id="ref-for-sec-touint32④">ToUint32</a>(<var>P</var>).</p>
       </li><li data-md="">
        <p>If <var>index</var> is a <a data-link-type="dfn" href="#dfn-supported-property-indices" id="ref-for-dfn-supported-property-indices⑦">supported property index</a>, then:</p>
        <ol>
         <li data-md="">
          <p>Let <var>operation</var> be the operation used to declare the indexed property getter.</p>
         </li><li data-md="">
          <p>Let <var>value</var> be an uninitialized variable.</p>
         </li><li data-md="">
          <p>If <var>operation</var> was defined without an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨①">identifier</a>, then
set <var>value</var> to the result of performing the steps listed in the interface description to <a data-link-type="dfn" href="#dfn-determine-the-value-of-an-indexed-property" id="ref-for-dfn-determine-the-value-of-an-indexed-property">determine the value of an indexed property</a> with <var>index</var> as the index.</p>
         </li><li data-md="">
          <p>Otherwise, <var>operation</var> was defined with an identifier.  Set <var>value</var> to the result
of performing the steps listed in the description of <var>operation</var> with <var>index</var> as the only argument value.</p>
         </li><li data-md="">
          <p>Let <var>desc</var> be a newly created <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-property-descriptor-specification-type" id="ref-for-sec-property-descriptor-specification-type②">Property Descriptor</a> with no fields.</p>
         </li><li data-md="">
          <p>Set <var>desc</var>.[[Value]] to the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤⑦">converting</a> <var>value</var> to an ECMAScript value.</p>
         </li><li data-md="">
          <p>If <var>O</var> implements an interface with an <a data-link-type="dfn" href="#dfn-indexed-property-setter" id="ref-for-dfn-indexed-property-setter⑥">indexed property setter</a>, then set <var>desc</var>.[[Writable]] to <emu-val>true</emu-val>, otherwise set it to <emu-val>false</emu-val>.</p>
         </li><li data-md="">
          <p>Set <var>desc</var>.[[Enumerable]] and <var>desc</var>.[[Configurable]] to <emu-val>true</emu-val>.</p>
         </li><li data-md="">
          <p>Return <var>desc</var>.</p>
        </li></ol>
       </li><li data-md="">
        <p>Set <var>ignoreNamedProps</var> to true.</p>
      </li></ol>
     </li><li data-md="">
      <p>If <var>O</var> <a data-link-type="dfn" href="#dfn-support-named-properties" id="ref-for-dfn-support-named-properties①⓪">supports named properties</a>,
the result of running the <a data-link-type="dfn" href="#dfn-named-property-visibility" id="ref-for-dfn-named-property-visibility③">named property visibility algorithm</a> with
property name <var>P</var> and object <var>O</var> is true, and <var>ignoreNamedProps</var> is false, then:</p>
      <ol>
       <li data-md="">
        <p>Let <var>operation</var> be the operation used to declare the named property getter.</p>
       </li><li data-md="">
        <p>Let <var>value</var> be an uninitialized variable.</p>
       </li><li data-md="">
        <p>If <var>operation</var> was defined without an <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨②">identifier</a>, then
set <var>value</var> to the result of performing the steps listed in the interface description to <a data-link-type="dfn" href="#dfn-determine-the-value-of-a-named-property" id="ref-for-dfn-determine-the-value-of-a-named-property①">determine the value of a named property</a> with <var>P</var> as the name.</p>
       </li><li data-md="">
        <p>Otherwise, <var>operation</var> was defined with an identifier.  Set <var>value</var> to the result
of performing the steps listed in the description of <var>operation</var> with <var>P</var> as the only argument value.</p>
       </li><li data-md="">
        <p>Let <var>desc</var> be a newly created <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-property-descriptor-specification-type" id="ref-for-sec-property-descriptor-specification-type③">Property Descriptor</a> with no fields.</p>
       </li><li data-md="">
        <p>Set <var>desc</var>.[[Value]] to the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤⑧">converting</a> <var>value</var> to an ECMAScript value.</p>
       </li><li data-md="">
        <p>If <var>O</var> implements an interface with a <a data-link-type="dfn" href="#dfn-named-property-setter" id="ref-for-dfn-named-property-setter⑥">named property setter</a>, then set <var>desc</var>.[[Writable]] to <emu-val>true</emu-val>, otherwise set it to <emu-val>false</emu-val>.</p>
       </li><li data-md="">
        <p>If <var>O</var> implements an interface with the
[<code class="idl"><a data-link-type="idl" href="#LegacyUnenumerableNamedProperties" id="ref-for-LegacyUnenumerableNamedProperties⑦">LegacyUnenumerableNamedProperties</a></code>] <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤⑤">extended attribute</a>,
then set <var>desc</var>.[[Enumerable]] to <emu-val>false</emu-val>,
otherwise set it to <emu-val>true</emu-val>.</p>
       </li><li data-md="">
        <p>Set <var>desc</var>.[[Configurable]] to <emu-val>true</emu-val>.</p>
       </li><li data-md="">
        <p>Return <var>desc</var>.</p>
      </li></ol>
     </li><li data-md="">
      <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-ordinarygetownproperty" id="ref-for-sec-ordinarygetownproperty①">OrdinaryGetOwnProperty</a>(<var>O</var>, <var>P</var>).</p>
    </li></ol>
   </div>
   <h3 class="heading settled" data-level="3.9" id="es-user-objects"><span class="secno">3.9. </span><span class="content">User objects implementing callback interfaces</span><a class="self-link" href="#es-user-objects"></a></h3>
   <p>As described in <a href="#idl-objects">§2.11 Objects implementing interfaces</a>, <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface②⑨">callback interfaces</a> can be
implemented in script by an ECMAScript object.
The following cases determine whether and how a given object
is considered to be a user object implementing a callback interface:</p>
   <ul>
    <li data-md="">
     <p>If the interface is a <a data-link-type="dfn" href="#dfn-single-operation-callback-interface" id="ref-for-dfn-single-operation-callback-interface">single operation callback interface</a> (defined below) then any object is considered to implement the interface.
The implementation of the operation (or set of overloaded operations) is
as follows:</p>
     <ul>
      <li data-md="">
       <p>If the object is <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable⑤">callable</a>,
then the implementation of the operation (or set of overloaded operations) is
the callable object itself.</p>
      </li><li data-md="">
       <p>Otherwise, the object is not <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable⑥">callable</a>.
The implementation of the operation (or set of overloaded operations) is
the result of invoking the internal [[Get]] method
on the object with a property name that is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨③">identifier</a> of the operation.</p>
     </li></ul>
    </li><li data-md="">
     <p>Otherwise, the interface is not a <a data-link-type="dfn" href="#dfn-single-operation-callback-interface" id="ref-for-dfn-single-operation-callback-interface①">single operation callback interface</a>.
Any object is considered to implement the interface.
For each operation declared on the interface with a given <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨④">identifier</a>, the implementation
is the result of invoking [[Get]] on the object with a
property name that is that identifier.</p>
   </li></ul>
   <p>Note that ECMAScript objects need not have
properties corresponding to <a data-link-type="dfn" href="#dfn-constant" id="ref-for-dfn-constant③③">constants</a> on them to be considered as <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object⑦">user objects</a> implementing <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⓪⓪">interfaces</a> that happen
to have constants declared on them.</p>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-single-operation-callback-interface">single operation callback interface</dfn> is
a <a data-link-type="dfn" href="#dfn-callback-interface" id="ref-for-dfn-callback-interface③⓪">callback interface</a> that:</p>
   <ul>
    <li data-md="">
     <p>is not declared to <a data-link-type="dfn" href="#dfn-inherit" id="ref-for-dfn-inherit①①">inherit</a> from another interface,</p>
    </li><li data-md="">
     <p>has no <a data-link-type="dfn" href="#dfn-attribute" id="ref-for-dfn-attribute⑤⑥">attributes</a>, and</p>
    </li><li data-md="">
     <p>has one or more <a data-link-type="dfn" href="#dfn-regular-operation" id="ref-for-dfn-regular-operation③②">regular operations</a> that all have the same <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨⑤">identifier</a>,
and no others.</p>
   </li></ul>
   <p>A <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="web-idl-arguments-list">Web IDL arguments list</dfn> is a <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list②②">list</a> of values each of which is either an IDL value or
the special value “missing”, which represents a missing optional argument.</p>
   <div class="algorithm" data-algorithm="converting">
     To <dfn class="dfn-paneled" data-dfn-for="Web IDL arguments list" data-dfn-type="dfn" data-lt="converting" data-noexport="" id="web-idl-arguments-list-converting">convert a Web IDL arguments list to an
    ECMAScript arguments list</dfn>, given a <a data-link-type="dfn" href="#web-idl-arguments-list" id="ref-for-web-idl-arguments-list">Web IDL arguments list</a> <var>args</var>, perform the
    following steps: 
    <ol>
     <li data-md="">
      <p>Let <var>esArgs</var> be an empty <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list" id="ref-for-list②③">list</a>.</p>
     </li><li data-md="">
      <p>Let <var>i</var> be 0.</p>
     </li><li data-md="">
      <p>Let <var>count</var> be 0.</p>
     </li><li data-md="">
      <p>While <var>i</var> &lt; <var>args</var>’s <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-size" id="ref-for-list-size⑥">size</a>:</p>
      <ol>
       <li data-md="">
        <p>If <var>args</var>[<var>i</var>] is the special value “missing”, then <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append⑧">append</a> <emu-val>undefined</emu-val> to <var>esArgs</var>.</p>
       </li><li data-md="">
        <p>Otherwise, <var>args</var>[<var>i</var>] is an IDL value:</p>
        <ol>
         <li data-md="">
          <p>Let <var>convertResult</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑤⑨">converting</a> <var>args</var>[<var>i</var>] to an ECMAScript value. Rethrow any exceptions.</p>
         </li><li data-md="">
          <p><a data-link-type="dfn" href="https://infra.spec.whatwg.org/#list-append" id="ref-for-list-append⑨">Append</a> <var>convertResult</var> to <var>esArgs</var>.</p>
         </li><li data-md="">
          <p>Set <var>count</var> to <var>i</var> + 1.</p>
        </li></ol>
       </li><li data-md="">
        <p>Set <var>i</var> to <var>i</var> + 1.</p>
      </li></ol>
     </li><li data-md="">
      <p>Truncate <var>esArgs</var> to contain <var>count</var> items.</p>
     </li><li data-md="">
      <p>Return <var>esArgs</var>.</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="to call a user object’s operation">
    <p>To <dfn data-dfn-type="dfn" data-export="" id="call-a-user-objects-operation">call a user object’s operation<a class="self-link" href="#call-a-user-objects-operation"></a></dfn>,
    given a <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface②⓪">callback interface type</a> value <var>value</var>,
    sometimes-optional operation name <var>opName</var>, <a data-link-type="dfn" href="#web-idl-arguments-list" id="ref-for-web-idl-arguments-list①">Web IDL arguments list</a> <var>args</var>, and optional <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-callback-this-value">callback this value</dfn> <var>thisArg</var>,
    perform the following steps.
    These steps will either return an IDL value or throw an exception.</p>
    <ol>
     <li data-md="">
      <p>Let <var>completion</var> be an uninitialized variable.</p>
     </li><li data-md="">
      <p>If <var>thisArg</var> was not given, let <var>thisArg</var> be <emu-val>undefined</emu-val>.</p>
     </li><li data-md="">
      <p>Let <var>O</var> be the ECMAScript object corresponding to <var>value</var>.</p>
     </li><li data-md="">
      <p>Let <var>realm</var> be <var>O</var>’s <a data-link-type="dfn" href="#dfn-associated-realm" id="ref-for-dfn-associated-realm">associated Realm</a>.</p>
     </li><li data-md="">
      <p>Let <var>relevant settings</var> be <var>realm</var>’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-settings-object" id="ref-for-concept-realm-settings-object">settings object</a>.</p>
     </li><li data-md="">
      <p>Let <var>stored settings</var> be <var>value</var>’s <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context⑥">callback context</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-script" id="ref-for-prepare-to-run-script">Prepare to run script</a> with <var>relevant settings</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-a-callback" id="ref-for-prepare-to-run-a-callback">Prepare to run a callback</a> with <var>stored settings</var>.</p>
     </li><li data-md="">
      <p>Determine the implementation of the operation, <var>X</var>:</p>
      <ol>
       <li data-md="">
        <p>If <var>value</var>’s interface is a <a data-link-type="dfn" href="#dfn-single-operation-callback-interface" id="ref-for-dfn-single-operation-callback-interface②">single operation callback interface</a> and <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧④">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable⑦">IsCallable</a>(<var>O</var>) is true,
then set <var>X</var> to <var>O</var>.</p>
       </li><li data-md="">
        <p>Otherwise, <var>opName</var> must be supplied:</p>
        <ol>
         <li data-md="">
          <p>Let <var>getResult</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p⑨">Get</a>(<var>O</var>, <var>opName</var>).</p>
         </li><li data-md="">
          <p>If <var>getResult</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type">abrupt completion</a>, set <var>completion</var> to <var>getResult</var> and jump to the step labeled <a href="#call-user-object-operation-return"><i>return</i></a>.</p>
         </li><li data-md="">
          <p>Set <var>X</var> to <var>getResult</var>.[[Value]].</p>
        </li></ol>
      </li></ol>
     </li><li data-md="">
      <p>If <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧⑤">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable⑧">IsCallable</a>(<var>X</var>) is <emu-val>false</emu-val>,
then set <var>completion</var> to a new <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-completion" id="ref-for-sec-completion">Completion</a>{[[Type]]: throw, [[Value]]: a
newly created <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑧">TypeError</a></code> object, [[Target]]: empty}, and jump
to the step labeled <a href="#call-user-object-operation-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>If <var>value</var>’s interface is not a <a data-link-type="dfn" href="#dfn-single-operation-callback-interface" id="ref-for-dfn-single-operation-callback-interface③">single operation callback interface</a>,
or if <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧⑥">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable⑨">IsCallable</a>(<var>O</var>) is <emu-val>false</emu-val>,
set <var>thisArg</var> to <var>O</var> (overriding the provided value).</p>
     </li><li data-md="">
      <p>Let <var>esArgs</var> be the result of <a data-link-type="dfn" href="#web-idl-arguments-list-converting" id="ref-for-web-idl-arguments-list-converting">converting</a> <var>args</var> to an ECMAScript
arguments list. If this throws an exception, set <var>completion</var> to the completion value
representing the thrown exception and jump to the step labeled <a href="#call-user-object-operation-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>Let <var>callResult</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①③">Call</a>(<var>X</var>, <var>thisArg</var>, <var>esArgs</var>).</p>
     </li><li data-md="">
      <p>If <var>callResult</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①">abrupt completion</a>, set <var>completion</var> to <var>callResult</var> and jump to the step labeled <a href="#call-user-object-operation-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>Set <var>completion</var> to the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑥⑨">converting</a> <var>callResult</var>.[[Value]] to an IDL value of the same type as the operation’s
return type.</p>
     </li><li data-md="">
      <p><i id="call-user-object-operation-return">Return:</i> at this
point <var>completion</var> will be set to an ECMAScript completion value.</p>
      <ol>
       <li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback" id="ref-for-clean-up-after-running-a-callback">Clean up after running a callback</a> with <var>stored settings</var>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script" id="ref-for-clean-up-after-running-script">Clean up after running script</a> with <var>relevant settings</var>.</p>
       </li><li data-md="">
        <p>If <var>completion</var> is a normal completion, return <var>completion</var>.</p>
       </li><li data-md="">
        <p>If <var>completion</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type②">abrupt completion</a> and the operation has a <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type⑦">return type</a> that is <em>not</em> a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type①①">promise type</a>, return <var>completion</var>.</p>
       </li><li data-md="">
        <p>Let <var>rejectedPromise</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧⑦">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①④">Call</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise.reject" id="ref-for-sec-promise.reject②">%Promise_reject%</a></code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise-constructor" id="ref-for-sec-promise-constructor③">%Promise%</a></code>, «<var>completion</var>.[[Value]]»).</p>
       </li><li data-md="">
        <p>Return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑦⓪">converting</a> <var>rejectedPromise</var> to the operation’s return type.</p>
      </li></ol>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="get a user object’s attribute value">
    <p>To <dfn data-dfn-type="dfn" data-export="" id="get-a-user-objects-attribute-value">get a user object’s attribute value<a class="self-link" href="#get-a-user-objects-attribute-value"></a></dfn>,
    given a <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface②①">callback interface type</a> value <var>object</var> and
    attribute name <var>attributeName</var>, perform the following steps.
    These steps will either return an IDL value or throw an exception.</p>
    <ol>
     <li data-md="">
      <p>Let <var>completion</var> be an uninitialized variable.</p>
     </li><li data-md="">
      <p>Let <var>O</var> be the ECMAScript object corresponding to <var>object</var>.</p>
     </li><li data-md="">
      <p>Let <var>realm</var> be <var>O</var>’s <a data-link-type="dfn" href="#dfn-associated-realm" id="ref-for-dfn-associated-realm①">associated Realm</a>.</p>
     </li><li data-md="">
      <p>Let <var>relevant settings</var> be <var>realm</var>’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-settings-object" id="ref-for-concept-realm-settings-object①">settings object</a>.</p>
     </li><li data-md="">
      <p>Let <var>stored settings</var> be <var>object</var>’s <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context⑦">callback context</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-script" id="ref-for-prepare-to-run-script①">Prepare to run script</a> with <var>relevant settings</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-a-callback" id="ref-for-prepare-to-run-a-callback①">Prepare to run a callback</a> with <var>stored settings</var>.</p>
     </li><li data-md="">
      <p>Let <var>getResult</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-get-o-p" id="ref-for-sec-get-o-p①⓪">Get</a>(<var>O</var>, <var>attributeName</var>).</p>
     </li><li data-md="">
      <p>If <var>getResult</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type③">abrupt completion</a>, set <var>completion</var> to <var>getResult</var> and jump to the step labeled <a href="#get-user-object-attribute-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>Set <var>completion</var> to the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑦①">converting</a> <var>getResult</var>.[[Value]] to
an IDL value of the same type as the attribute’s type.</p>
     </li><li data-md="">
      <p><i id="get-user-object-attribute-return">Return:</i> at this
point <var>completion</var> will be set to an ECMAScript completion value.</p>
      <ol>
       <li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback" id="ref-for-clean-up-after-running-a-callback①">Clean up after running a callback</a> with <var>stored settings</var>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script" id="ref-for-clean-up-after-running-script①">Clean up after running script</a> with <var>relevant settings</var>.</p>
       </li><li data-md="">
        <p>If <var>completion</var> is a normal completion, return <var>completion</var>.</p>
       </li><li data-md="">
        <p>If <var>completion</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type④">abrupt completion</a> and the attribute’s type is <em>not</em> a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type①②">promise type</a>, return <var>completion</var>.</p>
       </li><li data-md="">
        <p>Let <var>rejectedPromise</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧⑧">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①⑤">Call</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise.reject" id="ref-for-sec-promise.reject③">%Promise_reject%</a></code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise-constructor" id="ref-for-sec-promise-constructor④">%Promise%</a></code>, «<var>completion</var>.[[Value]]»).</p>
       </li><li data-md="">
        <p>Return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑦②">converting</a> <var>rejectedPromise</var> to the attribute’s type.</p>
      </li></ol>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="set a user object’s attribute value">
    <p>To <dfn data-dfn-type="dfn" data-export="" id="set-a-user-objects-attribute-value">set a user object’s attribute value<a class="self-link" href="#set-a-user-objects-attribute-value"></a></dfn>,
    given a <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface②②">callback interface type</a> value <var>object</var>,
    attribute name <var>attributeName</var>, and IDL value <var>value</var>,
    perform the following steps.
    These steps will not return anything, but could throw an exception.</p>
    <ol>
     <li data-md="">
      <p>Let <var>completion</var> be an uninitialized variable.</p>
     </li><li data-md="">
      <p>Let <var>O</var> be the ECMAScript object corresponding to <var>object</var>.</p>
     </li><li data-md="">
      <p>Let <var>realm</var> be <var>O</var>’s <a data-link-type="dfn" href="#dfn-associated-realm" id="ref-for-dfn-associated-realm②">associated Realm</a>.</p>
     </li><li data-md="">
      <p>Let <var>relevant settings</var> be <var>realm</var>’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-settings-object" id="ref-for-concept-realm-settings-object②">settings object</a>.</p>
     </li><li data-md="">
      <p>Let <var>stored settings</var> be <var>object</var>’s <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context⑧">callback context</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-script" id="ref-for-prepare-to-run-script②">Prepare to run script</a> with <var>relevant settings</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-a-callback" id="ref-for-prepare-to-run-a-callback②">Prepare to run a callback</a> with <var>stored settings</var>.</p>
     </li><li data-md="">
      <p>Let <var>convertResult</var> be the result of <a data-link-type="dfn" href="#dfn-convert-idl-to-ecmascript-value" id="ref-for-dfn-convert-idl-to-ecmascript-value⑥⓪">converting</a> <var>value</var> to an ECMAScript value.</p>
     </li><li data-md="">
      <p>If <var>convertResult</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type⑤">abrupt completion</a>, set <var>completion</var> to <var>convertResult</var> and jump to the step labeled <a href="#set-user-object-attribute-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>Set <var>completion</var> to <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-set-o-p-v-throw" id="ref-for-sec-set-o-p-v-throw①">Set</a>(<var>O</var>, <var>attributeName</var>, <var>convertResult</var>.[[Value]], <emu-val>true</emu-val>).</p>
     </li><li data-md="">
      <p><i id="set-user-object-attribute-return">Return:</i> at this
point <var>completion</var> will be set to an ECMAScript completion value, which is
either an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type⑥">abrupt completion</a> or a normal completion for the value <emu-val>true</emu-val> (as returned by <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-set-o-p-v-throw" id="ref-for-sec-set-o-p-v-throw②">Set</a>).</p>
      <ol>
       <li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback" id="ref-for-clean-up-after-running-a-callback②">Clean up after running a callback</a> with <var>stored settings</var>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script" id="ref-for-clean-up-after-running-script②">Clean up after running script</a> with <var>relevant settings</var>.</p>
       </li><li data-md="">
        <p>If <var>completion</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type⑦">abrupt completion</a>, return <var>completion</var>.</p>
       </li><li data-md="">
        <p>Return <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-normalcompletion" id="ref-for-sec-normalcompletion">NormalCompletion</a>(<code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void⑦">void</a></code>).</p>
      </li></ol>
    </li></ol>
   </div>
   <h3 class="heading settled" data-level="3.10" id="es-invoking-callback-functions"><span class="secno">3.10. </span><span class="content">Invoking callback functions</span><a class="self-link" href="#es-invoking-callback-functions"></a></h3>
   <p>An ECMAScript <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable①⓪">callable</a> object that is being
used as a <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function②⑨">callback function</a> value is
called in a manner similar to how <a data-link-type="dfn" href="#dfn-operation" id="ref-for-dfn-operation⑤⑦">operations</a> on <a data-link-type="dfn" href="#dfn-user-object" id="ref-for-dfn-user-object⑧">user objects</a> are called (as
described in the previous section).</p>
   <div class="algorithm" data-algorithm="invoke">
    <p>To <dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="invoke-a-callback-function">invoke</dfn> a <a data-link-type="dfn" href="#idl-callback-function" id="ref-for-idl-callback-function⑤">callback function type</a> value <var>callable</var> with a <a data-link-type="dfn" href="#web-idl-arguments-list" id="ref-for-web-idl-arguments-list②">Web IDL arguments list</a> <var>args</var> and an optional <a data-link-type="dfn" href="#dfn-callback-this-value" id="ref-for-dfn-callback-this-value①">callback this value</a> <var>thisArg</var>,
    perform the following steps.
    These steps will either return an IDL value or throw an exception.</p>
    <ol>
     <li data-md="">
      <p>Let <var>completion</var> be an uninitialized variable.</p>
     </li><li data-md="">
      <p>If <var>thisArg</var> was not given, let <var>thisArg</var> be <emu-val>undefined</emu-val>.</p>
     </li><li data-md="">
      <p>Let <var>F</var> be the ECMAScript object corresponding to <var>callable</var>.</p>
     </li><li data-md="">
      <p>If <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑧⑨">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-iscallable" id="ref-for-sec-iscallable①①">IsCallable</a>(<var>F</var>) is <emu-val>false</emu-val>:</p>
      <ol>
       <li data-md="">
        <p>If the callback function’s return type is <code class="idl"><a data-link-type="idl" href="#idl-void" id="ref-for-idl-void⑧">void</a></code>, return.</p>
        <p class="note" role="note"><span>Note:</span> This is only possible when the callback function came from an attribute
marked with [<code class="idl"><a data-link-type="idl" href="#TreatNonObjectAsNull" id="ref-for-TreatNonObjectAsNull⑨">TreatNonObjectAsNull</a></code>].</p>
       </li><li data-md="">
        <p>Return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑦③">converting</a> <emu-val>undefined</emu-val> to the callback function’s return type.</p>
      </li></ol>
     </li><li data-md="">
      <p>Let <var>realm</var> be <var>F</var>’s <a data-link-type="dfn" href="#dfn-associated-realm" id="ref-for-dfn-associated-realm③">associated Realm</a>.</p>
     </li><li data-md="">
      <p>Let <var>relevant settings</var> be <var>realm</var>’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-settings-object" id="ref-for-concept-realm-settings-object③">settings object</a>.</p>
     </li><li data-md="">
      <p>Let <var>stored settings</var> be <var>callable</var>’s <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context⑨">callback context</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-script" id="ref-for-prepare-to-run-script③">Prepare to run script</a> with <var>relevant settings</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-a-callback" id="ref-for-prepare-to-run-a-callback③">Prepare to run a callback</a> with <var>stored settings</var>.</p>
     </li><li data-md="">
      <p>Let <var>esArgs</var> be the result of <a data-link-type="dfn" href="#web-idl-arguments-list-converting" id="ref-for-web-idl-arguments-list-converting①">converting</a> <var>args</var> to an ECMAScript
arguments list. If this throws an exception, set <var>completion</var> to the completion value
representing the thrown exception and jump to the step labeled <a href="#invoke-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>Let <var>callResult</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①⑥">Call</a>(<var>F</var>, <var>thisArg</var>, <var>esArgs</var>).</p>
     </li><li data-md="">
      <p>If <var>callResult</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type⑧">abrupt completion</a>, set <var>completion</var> to <var>callResult</var> and jump to the step labeled <a href="#invoke-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>Set <var>completion</var> to the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑦④">converting</a> <var>callResult</var>.[[Value]] to an IDL value of the same type as the operation’s
return type.</p>
     </li><li data-md="">
      <p><i id="invoke-return">Return:</i> at this
point <var>completion</var> will be set to an ECMAScript completion value.</p>
      <ol>
       <li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback" id="ref-for-clean-up-after-running-a-callback③">Clean up after running a callback</a> with <var>stored settings</var>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script" id="ref-for-clean-up-after-running-script③">Clean up after running script</a> with <var>relevant settings</var>.</p>
       </li><li data-md="">
        <p>If <var>completion</var> is a normal completion, return <var>completion</var>.</p>
       </li><li data-md="">
        <p>If <var>completion</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type⑨">abrupt completion</a> and the callback function has a <a data-link-type="dfn" href="#dfn-return-type" id="ref-for-dfn-return-type⑧">return type</a> that is <em>not</em> a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type①③">promise type</a>, return <var>completion</var>.</p>
       </li><li data-md="">
        <p>Let <var>rejectedPromise</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑨⓪">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-call" id="ref-for-sec-call①⑦">Call</a>(<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise.reject" id="ref-for-sec-promise.reject④">%Promise_reject%</a></code>, <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-promise-constructor" id="ref-for-sec-promise-constructor⑤">%Promise%</a></code>, «<var>completion</var>.[[Value]]»).</p>
       </li><li data-md="">
        <p>Return the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑦⑤">converting</a> <var>rejectedPromise</var> to the callback function’s return type.</p>
      </li></ol>
    </li></ol>
   </div>
   <p>Some callback functions are instead used as <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#constructor" id="ref-for-constructor⑥">constructors</a>. Such callback functions must not have
a return type that is a <a data-link-type="dfn" href="#dfn-promise-type" id="ref-for-dfn-promise-type①④">promise type</a>.</p>
   <div class="algorithm" data-algorithm="construct">
    <p>To <dfn data-dfn-type="dfn" data-export="" id="construct-a-callback-function">construct<a class="self-link" href="#construct-a-callback-function"></a></dfn> a <a data-link-type="dfn" href="#idl-callback-function" id="ref-for-idl-callback-function⑥">callback function type</a> value <var>callable</var> with a <a data-link-type="dfn" href="#web-idl-arguments-list" id="ref-for-web-idl-arguments-list③">Web IDL arguments list</a> <var>args</var>,
    perform the following steps.
    These steps will either return an IDL value or throw an exception.</p>
    <ol>
     <li data-md="">
      <p>Let <var>completion</var> be an uninitialized variable.</p>
     </li><li data-md="">
      <p>Let <var>F</var> be the ECMAScript object corresponding to <var>callable</var>.</p>
     </li><li data-md="">
      <p>If <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑨①">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-isconstructor" id="ref-for-sec-isconstructor">IsConstructor</a>(<var>F</var>) is <emu-val>false</emu-val>, throw a <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror" id="ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑨">TypeError</a></code> exception.</p>
     </li><li data-md="">
      <p>Let <var>realm</var> be <var>F</var>’s <a data-link-type="dfn" href="#dfn-associated-realm" id="ref-for-dfn-associated-realm④">associated Realm</a>.</p>
     </li><li data-md="">
      <p>Let <var>relevant settings</var> be <var>realm</var>’s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-settings-object" id="ref-for-concept-realm-settings-object④">settings object</a>.</p>
     </li><li data-md="">
      <p>Let <var>stored settings</var> be <var>callable</var>’s <a data-link-type="dfn" href="#dfn-callback-context" id="ref-for-dfn-callback-context①⓪">callback context</a>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-script" id="ref-for-prepare-to-run-script④">Prepare to run script</a> with <var>relevant settings</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-a-callback" id="ref-for-prepare-to-run-a-callback④">Prepare to run a callback</a> with <var>stored settings</var>.</p>
     </li><li data-md="">
      <p>Let <var>esArgs</var> be the result of <a data-link-type="dfn" href="#web-idl-arguments-list-converting" id="ref-for-web-idl-arguments-list-converting②">converting</a> <var>args</var> to an ECMAScript
arguments list. If this throws an exception, set <var>completion</var> to the completion value
representing the thrown exception and jump to the step labeled <a href="#construct-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>Let <var>callResult</var> be <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-construct" id="ref-for-sec-construct">Construct</a>(<var>F</var>, <var>esArgs</var>).</p>
     </li><li data-md="">
      <p>If <var>callResult</var> is an <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①⓪">abrupt completion</a>, set <var>completion</var> to <var>callResult</var> and jump to the step labeled <a href="#construct-return"><i>return</i></a>.</p>
     </li><li data-md="">
      <p>Set <var>completion</var> to the result of <a data-link-type="dfn" href="#dfn-convert-ecmascript-to-idl-value" id="ref-for-dfn-convert-ecmascript-to-idl-value⑦⑥">converting</a> <var>callResult</var>.[[Value]] to an IDL value of the same type as the operation’s
return type.</p>
     </li><li data-md="">
      <p><i id="construct-return">Return:</i> at this
point <var>completion</var> will be set to an ECMAScript completion value.</p>
      <ol>
       <li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback" id="ref-for-clean-up-after-running-a-callback④">Clean up after running a callback</a> with <var>stored settings</var>.</p>
       </li><li data-md="">
        <p><a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script" id="ref-for-clean-up-after-running-script④">Clean up after running script</a> with <var>relevant settings</var>.</p>
       </li><li data-md="">
        <p>Return <var>completion</var>.</p>
      </li></ol>
    </li></ol>
   </div>
   <h3 class="heading settled" data-level="3.11" id="es-namespaces"><span class="secno">3.11. </span><span class="content">Namespaces</span><a class="self-link" href="#es-namespaces"></a></h3>
   <p>For every <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace④②">namespace</a> that is <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed①③">exposed</a> in a given ECMAScript global environment,
a corresponding property must exist on the ECMAScript
environment’s global object. The name of the property is the <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨⑥">identifier</a> of the namespace, and its value is an object
called the <dfn data-dfn-type="dfn" data-export="" id="dfn-namespace-object">namespace object<a class="self-link" href="#dfn-namespace-object"></a></dfn>.</p>
   <p>The property has the attributes
{ [[Writable]]: <emu-val>true</emu-val>, [[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val> }.
The characteristics of a namespace object are described in <a href="#namespace-object">§3.11.1 Namespace object</a>.</p>
   <h4 class="heading settled" data-level="3.11.1" id="namespace-object"><span class="secno">3.11.1. </span><span class="content">Namespace object</span><a class="self-link" href="#namespace-object"></a></h4>
   <div class="algorithm" data-algorithm="to create a namespace object">
    <p>The namespace object for a given <a data-link-type="dfn" href="#dfn-namespace" id="ref-for-dfn-namespace④③">namespace</a> <var>namespace</var> and <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm②②">Realm</a> <var>realm</var> is created as follows:</p>
    <ol>
     <li data-md="">
      <p>Let <var>namespaceObject</var> be <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑨②">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-objectcreate" id="ref-for-sec-objectcreate⑤">ObjectCreate</a>(<var>realm</var>.[[Intrinsics]].[[<code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object" id="ref-for-sec-properties-of-the-object-prototype-object⑦">%ObjectPrototype%</a></code>]]).</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-regular-attributes" id="ref-for-define-the-regular-attributes②">Define the regular attributes</a> of <var>namespace</var> on <var>namespaceObject</var> given <var>realm</var>.</p>
     </li><li data-md="">
      <p><a data-link-type="dfn" href="#define-the-regular-operations" id="ref-for-define-the-regular-operations②">Define the regular operations</a> of <var>namespace</var> on <var>namespaceObject</var> given <var>realm</var>.</p>
     </li><li data-md="">
      <p>For each <a data-link-type="dfn" href="#dfn-exposed" id="ref-for-dfn-exposed①④">exposed</a> <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⓪①">interface</a> <var>interface</var> which has the [<code class="idl"><a data-link-type="idl" href="#LegacyNamespace" id="ref-for-LegacyNamespace⑧">LegacyNamespace</a></code>] extended
attribute with the identifier of this namespace as its argument,</p>
      <ol>
       <li data-md="">
        <p>Let <var>I</var> be the <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object②②">interface object</a> for <var>interface</var>.</p>
       </li><li data-md="">
        <p>Let <var>newDesc</var> be the PropertyDescriptor{[[Writable]]: <emu-val>true</emu-val>,
[[Enumerable]]: <emu-val>false</emu-val>, [[Configurable]]: <emu-val>true</emu-val>, [[Value]]: <var>I</var>}.</p>
       </li><li data-md="">
        <p>Perform <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑨③">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow" id="ref-for-sec-definepropertyorthrow⑦">DefinePropertyOrThrow</a>(<var>namespaceObject</var>, <var>interface</var>’s <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨⑦">identifier</a>, <var>newDesc</var>).</p>
      </li></ol>
    </li></ol>
   </div>
   <h3 class="heading settled" data-level="3.12" id="es-exceptions"><span class="secno">3.12. </span><span class="content">Exceptions</span><a class="self-link" href="#es-exceptions"></a></h3>
   <h4 class="heading settled" data-level="3.12.1" id="es-DOMException-specialness"><span class="secno">3.12.1. </span><span class="content"><code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③④">DOMException</a></code> custom bindings</span><span id="es-DOMException-constructor-object"></span><span id="es-DOMException-prototype-object"></span><a class="self-link" href="#es-DOMException-specialness"></a></h4>
   <p>In the ECMAScript binding, the <a data-link-type="dfn" href="#dfn-interface-prototype-object" id="ref-for-dfn-interface-prototype-object④②">interface prototype object</a> for <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③⑤">DOMException</a></code> has its [[Prototype]] <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-object-internal-methods-and-internal-slots" id="ref-for-sec-object-internal-methods-and-internal-slots④①">internal slot</a> set to the intrinsic object <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-properties-of-the-error-prototype-object" id="ref-for-sec-properties-of-the-error-prototype-object①">%ErrorPrototype%</a></code>,
as defined in the <a data-link-type="dfn" href="#create-an-interface-prototype-object" id="ref-for-create-an-interface-prototype-object">create an interface prototype object</a> abstract operation.</p>
   <p>Additionaly, if an implementation gives native <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-error-objects" id="ref-for-sec-error-objects④">Error</a></code> objects special powers or
nonstandard properties (such as a <code>stack</code> property),
it should also expose those on <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③⑥">DOMException</a></code> instances.</p>
   <h4 class="heading settled dfn-paneled" data-dfn-type="dfn" data-level="3.12.2" data-lt="Exception objects" data-noexport="" id="es-exception-objects"><span class="secno">3.12.2. </span><span class="content">Exception objects</span></h4>
   <p><a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception⑥">Simple exceptions</a> are represented
by native ECMAScript objects of the corresponding type.</p>
   <p>A <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③⑦">DOMException</a></code> is represented by a <a data-link-type="dfn" href="#dfn-platform-object" id="ref-for-dfn-platform-object⑤⑦">platform object</a> that implements the <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③⑧">DOMException</a></code> interface.</p>
   <h4 class="heading settled" data-level="3.12.3" id="es-creating-throwing-exceptions"><span class="secno">3.12.3. </span><span class="content">Creating and throwing exceptions</span><a class="self-link" href="#es-creating-throwing-exceptions"></a></h4>
   <div class="algorithm" data-algorithm="to create a simple exception or DOMException">
    <p>To <a data-link-type="dfn" href="#dfn-create-exception" id="ref-for-dfn-create-exception③">create</a> a <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception⑦">simple exception</a> or <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException③⑨">DOMException</a></code> <var>E</var>, with a string giving the <a data-link-type="dfn" href="#dfn-exception-error-name" id="ref-for-dfn-exception-error-name⑥">error name</a> <var>N</var> for the <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④⓪">DOMException</a></code> case and optionally a string giving a user
    agent-defined message <var>M</var>:</p>
    <ol>
     <li data-md="">
      <p>If <var>M</var> was not specified, let <var>M</var> be <emu-val>undefined</emu-val>.</p>
     </li><li data-md="">
      <p>Let <var>args</var> be a list of ECMAScript values determined based on the type of <var>E</var>:</p>
      <dl class="switch">
       <dt data-md=""><var>E</var> is <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④①">DOMException</a></code>
       </dt><dd data-md="">
        <p><var>args</var> is «<var>M</var>, <var>N</var>».</p>
       </dd><dt data-md=""><var>E</var> is a <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception⑧">simple exception</a>
       </dt><dd data-md="">
        <p><var>args</var> is «<var>M</var>».</p>
      </dd></dl>
     </li><li data-md="">
      <p>Let <var>X</var> be an object determined based on the type of <var>E</var>:</p>
      <dl class="switch">
       <dt data-md=""><var>E</var> is <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④②">DOMException</a></code>
       </dt><dd data-md="">
        <p><var>X</var> is the <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④③">DOMException</a></code> <a data-link-type="dfn" href="#dfn-interface-object" id="ref-for-dfn-interface-object②③">interface object</a> from the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#current-realm" id="ref-for-current-realm①">current Realm</a>.</p>
       </dd><dt data-md=""><var>E</var> is a <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception⑨">simple exception</a>
       </dt><dd data-md="">
        <p><var>X</var> is the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#constructor" id="ref-for-constructor⑦">constructor</a> for the corresponding ECMAScript error
from the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#current-realm" id="ref-for-current-realm②">current Realm</a>.</p>
      </dd></dl>
     </li><li data-md="">
      <p>Return <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑨④">!</a> <a data-link-type="abstract-op" href="https://tc39.github.io/ecma262/#sec-construct" id="ref-for-sec-construct①">Construct</a>(<var>X</var>, <var>args</var>).</p>
    </li></ol>
   </div>
   <div class="algorithm" data-algorithm="throw an exception">
    <p>To <a data-link-type="dfn" href="#dfn-throw" id="ref-for-dfn-throw②">throw</a> a <a data-link-type="dfn" href="#dfn-simple-exception" id="ref-for-dfn-simple-exception①⓪">simple exception</a> or <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④④">DOMException</a></code>, with a string giving the <a data-link-type="dfn" href="#dfn-exception-error-name" id="ref-for-dfn-exception-error-name⑦">error name</a> for the <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④⑤">DOMException</a></code> case and optionally a string giving a user
    agent-defined message:</p>
    <ol>
     <li data-md="">
      <p>Let <var>O</var> be the result of <a data-link-type="dfn" href="#dfn-create-exception" id="ref-for-dfn-create-exception④">creating an exception</a> with the same arguments.</p>
     </li><li data-md="">
      <p>Throw <var>O</var>.</p>
    </li></ol>
   </div>
   <div class="note" role="note">
    <p>The above algorithms restrict <a data-link-type="dfn" href="#es-exception-objects" id="ref-for-es-exception-objects①">objects representing exceptions</a> propagating
    out of a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑥①">function object</a> to be ones that are associated with the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm②③">Realm</a> of that <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#function-object" id="ref-for-function-object⑥②">function object</a> (i.e., the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#current-realm" id="ref-for-current-realm③">current Realm</a> at the time the function
    executes). For example, consider the IDL:</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">MathUtils</c-> {
  // If x is negative, throws a "<a href="#notsupportederror" id="ref-for-notsupportederror①">NotSupportedError</a>" <a href="dfn-DOMException">DOMException</a>.
  <c- b="">double</c-> <c- g="">computeSquareRoot</c->(<c- b="">double</c-> <c- g="">x</c->);
};
</pre>
    <p>If we apply <code class="idl">computeSquareRoot</code> to a <code class="idl">MathUtils</code> object from a different <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm②④">Realm</a>, then the exception thrown will be from the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#realm" id="ref-for-realm②⑤">Realm</a> of the
    method, not the object it is applied to:</p>
<pre class="highlight"><c- kr="">const</c-> myMU <c- o="">=</c-> window<c- p="">.</c->getMathUtils<c- p="">();</c->          <c- c1="">// A MathUtils object from this Realm</c->
<c- kr="">const</c-> otherMU <c- o="">=</c-> otherWindow<c- p="">.</c->getMathUtils<c- p="">();</c->  <c- c1="">// A MathUtils object from a different Realm</c->

myMU <c- k="">instanceof</c-> Object<c- p="">;</c->                      <c- c1="">// Evaluates to true.</c->
otherMU <c- k="">instanceof</c-> Object<c- p="">;</c->                   <c- c1="">// Evaluates to false.</c->
otherMU <c- k="">instanceof</c-> otherWindow<c- p="">.</c->Object<c- p="">;</c->       <c- c1="">// Evaluates to true.</c->

<c- k="">try</c-> <c- p="">{</c->
  otherMU<c- p="">.</c->doComputation<c- p="">.</c->call<c- p="">(</c->myMU<c- p="">,</c-> <c- o="">-</c-><c- mi="">1</c-><c- p="">);</c->
<c- p="">}</c-> <c- k="">catch</c-> <c- p="">(</c->e<c- p="">)</c-> <c- p="">{</c->
  console<c- p="">.</c->assert<c- p="">(</c-><c- o="">!</c-><c- p="">(</c->e <c- k="">instanceof</c-> DOMException<c- p="">));</c->
  console<c- p="">.</c->assert<c- p="">(</c->e <c- k="">instanceof</c-> otherWindow<c- p="">.</c->DOMException<c- p="">);</c->
<c- p="">}</c->
</pre>
   </div>
   <h4 class="heading settled" data-level="3.12.4" id="es-handling-exceptions"><span class="secno">3.12.4. </span><span class="content">Handling exceptions</span><a class="self-link" href="#es-handling-exceptions"></a></h4>
   <p>Unless specified otherwise,
whenever ECMAScript runtime semantics are invoked due
to requirements in this document and
end due to an exception being thrown, that exception
must propagate to the caller, and if
not caught there, to its caller, and so on.</p>
   <p>Per <a href="#conventions">Document conventions</a>, an algorithm specified in this document may intercept thrown exceptions, either by specifying
the exact steps to take if <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="an-exception-was-thrown">an exception was thrown</dfn>, or by explicitly handling <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①①">abrupt completions</a>.</p>
   <div class="example" id="example-17059fd2">
    <a class="self-link" href="#example-17059fd2"></a> 
    <p>The following <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④⑤">IDL fragment</a> defines two <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⓪②">interfaces</a> and an <a data-link-type="dfn" href="#dfn-exception" id="ref-for-dfn-exception">exception</a>.
    The <code>valueOf</code> attribute on <code class="idl">ExceptionThrower</code> is defined to throw an exception whenever an attempt is made
    to get its value.</p>
<pre class="highlight">[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Dahut</c-> {
  <c- b="">attribute</c-> <c- b="">DOMString</c-> <c- g="">type</c->;
};

[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">ExceptionThrower</c-> {
  // This attribute always throws a NotSupportedError and never returns a value.
  <c- b="">attribute</c-> <c- b="">long</c-> <c- g="">valueOf</c->;
};
</pre>
    <p>Assuming an ECMAScript implementation supporting this interface,
    the following code demonstrates how exceptions are handled:</p>
<pre class="highlight"><c- a="">var</c-> d <c- o="">=</c-> getDahut<c- p="">();</c->              <c- c1="">// Obtain an instance of Dahut.</c->
<c- a="">var</c-> et <c- o="">=</c-> getExceptionThrower<c- p="">();</c->  <c- c1="">// Obtain an instance of ExceptionThrower.</c->

<c- k="">try</c-> <c- p="">{</c->
  d<c- p="">.</c->type <c- o="">=</c-> <c- p="">{</c-> toString<c- o="">:</c-> <c- a="">function</c-><c- p="">()</c-> <c- p="">{</c-> <c- k="">throw</c-> <c- u="">"abc"</c-><c- p="">;</c-> <c- p="">}</c-> <c- p="">};</c->
<c- p="">}</c-> <c- k="">catch</c-> <c- p="">(</c->e<c- p="">)</c-> <c- p="">{</c->
  <c- c1="">// The string "abc" is caught here, since as part of the conversion</c->
  <c- c1="">// from the native object to a string, the anonymous function</c->
  <c- c1="">// was invoked, and none of the [[DefaultValue]], ToPrimitive or</c->
  <c- c1="">// ToString algorithms are defined to catch the exception.</c->
<c- p="">}</c->

<c- k="">try</c-> <c- p="">{</c->
  d<c- p="">.</c->type <c- o="">=</c-> <c- p="">{</c-> toString<c- o="">:</c-> <c- p="">{</c-> <c- p="">}</c-> <c- p="">};</c->
<c- p="">}</c-> <c- k="">catch</c-> <c- p="">(</c->e<c- p="">)</c-> <c- p="">{</c->
  <c- c1="">// An exception is caught here, since an attempt is made to invoke</c->
  <c- c1="">// [[Call]] on the native object that is the value of toString</c->
  <c- c1="">// property.</c->
<c- p="">}</c->

<c- k="">try</c-> <c- p="">{</c->
  d<c- p="">.</c->type <c- o="">=</c-> Symbol<c- p="">();</c->
<c- p="">}</c-> <c- k="">catch</c-> <c- p="">(</c->e<c- p="">)</c-> <c- p="">{</c->
  <c- c1="">// An exception is caught here, since an attempt is made to invoke</c->
  <c- c1="">// the ECMAScript ToString abstract operation on a Symbol value.</c->
<c- p="">}</c->

d<c- p="">.</c->type <c- o="">=</c-> et<c- p="">;</c->
<c- c1="">// An uncaught "NotSupportedError" DOMException is thrown here, since the</c->
<c- c1="">// [[DefaultValue]] algorithm attempts to get the value of the</c->
<c- c1="">// "valueOf" property on the ExceptionThrower object.  The exception</c->
<c- c1="">// propagates out of this block of code.</c->
</pre>
   </div>
   <h2 class="heading settled" data-level="4" id="common"><span class="secno">4. </span><span class="content">Common definitions</span><a class="self-link" href="#common"></a></h2>
   <p>This section specifies some common definitions that all <a data-link-type="dfn" href="#dfn-conforming-implementation" id="ref-for-dfn-conforming-implementation">conforming implementations</a> must support.</p>
   <h3 class="heading settled dfn-paneled idl-code" data-dfn-type="typedef" data-export="" data-level="4.1" data-lt="ArrayBufferView" id="ArrayBufferView"><span class="secno">4.1. </span><span class="content">ArrayBufferView</span><span id="common-ArrayBufferView"></span></h3>
<pre class="idl highlight def"><c- b="">typedef</c-> (<a class="idl-code" data-link-type="interface" href="#idl-Int8Array" id="ref-for-idl-Int8Array③"><c- b="">Int8Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Int16Array" id="ref-for-idl-Int16Array②"><c- b="">Int16Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Int32Array" id="ref-for-idl-Int32Array②"><c- b="">Int32Array</c-></a> <c- b="">or</c->
         <a class="idl-code" data-link-type="interface" href="#idl-Uint8Array" id="ref-for-idl-Uint8Array④"><c- b="">Uint8Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Uint16Array" id="ref-for-idl-Uint16Array②"><c- b="">Uint16Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Uint32Array" id="ref-for-idl-Uint32Array②"><c- b="">Uint32Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Uint8ClampedArray" id="ref-for-idl-Uint8ClampedArray②"><c- b="">Uint8ClampedArray</c-></a> <c- b="">or</c->
         <a class="idl-code" data-link-type="interface" href="#idl-Float32Array" id="ref-for-idl-Float32Array②"><c- b="">Float32Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Float64Array" id="ref-for-idl-Float64Array②"><c- b="">Float64Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-DataView" id="ref-for-idl-DataView⑥"><c- b="">DataView</c-></a>) <a class="idl-code" data-link-type="typedef" href="#ArrayBufferView" id="ref-for-ArrayBufferView"><c- g="">ArrayBufferView</c-></a>;
</pre>
   <p>The <code class="idl"><a data-link-type="idl" href="#ArrayBufferView" id="ref-for-ArrayBufferView①">ArrayBufferView</a></code> typedef is used to represent
objects that provide a view on to an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①⑥">ArrayBuffer</a></code>.</p>
   <h3 class="heading settled dfn-paneled idl-code" data-dfn-type="typedef" data-export="" data-level="4.2" data-lt="BufferSource" id="BufferSource"><span class="secno">4.2. </span><span class="content">BufferSource</span><span id="common-BufferSource"></span></h3>
<pre class="idl highlight def"><c- b="">typedef</c-> (<a class="n" data-link-type="idl-name" href="#ArrayBufferView" id="ref-for-ArrayBufferView②"><c- n="">ArrayBufferView</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①⑦"><c- b="">ArrayBuffer</c-></a>) <a class="idl-code" data-link-type="typedef" href="#BufferSource" id="ref-for-BufferSource①"><c- g="">BufferSource</c-></a>;</pre>
   <p>The <code class="idl"><a data-link-type="idl" href="#BufferSource" id="ref-for-BufferSource②">BufferSource</a></code> typedef is used to represent objects
that are either themselves an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①⑧">ArrayBuffer</a></code> or which
provide a view on to an <code class="idl"><a data-link-type="idl" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①⑨">ArrayBuffer</a></code>.</p>
   <h3 class="heading settled dfn-paneled idl-code" data-dfn-type="interface" data-export="" data-level="4.3" data-lt="DOMException" id="idl-DOMException"><span class="secno">4.3. </span><span class="content">DOMException</span><span id="dfn-DOMException"></span></h3>
   <p>The <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④⑥">DOMException</a></code> type is an <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface②③">interface type</a> defined by the following IDL
fragment:</p>
<pre class="idl highlight def">[
 <a class="idl-code" data-link-type="extended-attribute" href="#Exposed" id="ref-for-Exposed②⑧"><c- g="">Exposed</c-></a>=(<c- n="">Window</c->,<c- n="">Worker</c->),
 <a class="idl-code" data-link-type="constructor" href="#dom-domexception-domexception" id="ref-for-dom-domexception-domexception"><c- g="">Constructor</c-></a>(<c- b="">optional</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMString" id="ref-for-idl-DOMString④⑥"><c- b="">DOMString</c-></a> <dfn class="idl-code" data-dfn-for="DOMException/DOMException(message, name)" data-dfn-type="argument" data-export="" id="dom-domexception-domexception-message-name-message"><code><c- g="">message</c-></code><a class="self-link" href="#dom-domexception-domexception-message-name-message"></a></dfn> = "", <c- b="">optional</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMString" id="ref-for-idl-DOMString④⑦"><c- b="">DOMString</c-></a> <dfn class="idl-code" data-dfn-for="DOMException/DOMException(message, name)" data-dfn-type="argument" data-export="" id="dom-domexception-domexception-message-name-name"><code><c- g="">name</c-></code><a class="self-link" href="#dom-domexception-domexception-message-name-name"></a></dfn> = "Error")
]
<c- b="">interface</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMException" id="ref-for-idl-DOMException④⑦"><c- g="">DOMException</c-></a> { // but see below note about ECMAScript binding
  <c- b="">readonly</c-> <c- b="">attribute</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMString" id="ref-for-idl-DOMString④⑧"><c- b="">DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly="" data-type="DOMString" href="#dom-domexception-name" id="ref-for-dom-domexception-name"><c- g="">name</c-></a>;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMString" id="ref-for-idl-DOMString④⑨"><c- b="">DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly="" data-type="DOMString" href="#dom-domexception-message" id="ref-for-dom-domexception-message"><c- g="">message</c-></a>;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short⑧"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly="" data-type="unsigned short" href="#dom-domexception-code" id="ref-for-dom-domexception-code"><c- g="">code</c-></a>;

  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short⑨"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-index_size_err" id="ref-for-dom-domexception-index_size_err"><c- g="">INDEX_SIZE_ERR</c-></a> = 1;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⓪"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-domstring_size_err" id="ref-for-dom-domexception-domstring_size_err"><c- g="">DOMSTRING_SIZE_ERR</c-></a> = 2;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-hierarchy_request_err" id="ref-for-dom-domexception-hierarchy_request_err"><c- g="">HIERARCHY_REQUEST_ERR</c-></a> = 3;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①②"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-wrong_document_err" id="ref-for-dom-domexception-wrong_document_err"><c- g="">WRONG_DOCUMENT_ERR</c-></a> = 4;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①③"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_character_err" id="ref-for-dom-domexception-invalid_character_err"><c- g="">INVALID_CHARACTER_ERR</c-></a> = 5;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①④"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-no_data_allowed_err" id="ref-for-dom-domexception-no_data_allowed_err"><c- g="">NO_DATA_ALLOWED_ERR</c-></a> = 6;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑤"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-no_modification_allowed_err" id="ref-for-dom-domexception-no_modification_allowed_err"><c- g="">NO_MODIFICATION_ALLOWED_ERR</c-></a> = 7;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑥"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-not_found_err" id="ref-for-dom-domexception-not_found_err"><c- g="">NOT_FOUND_ERR</c-></a> = 8;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑦"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-not_supported_err" id="ref-for-dom-domexception-not_supported_err"><c- g="">NOT_SUPPORTED_ERR</c-></a> = 9;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑧"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-inuse_attribute_err" id="ref-for-dom-domexception-inuse_attribute_err"><c- g="">INUSE_ATTRIBUTE_ERR</c-></a> = 10;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑨"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_state_err" id="ref-for-dom-domexception-invalid_state_err"><c- g="">INVALID_STATE_ERR</c-></a> = 11;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⓪"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-syntax_err" id="ref-for-dom-domexception-syntax_err"><c- g="">SYNTAX_ERR</c-></a> = 12;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_modification_err" id="ref-for-dom-domexception-invalid_modification_err"><c- g="">INVALID_MODIFICATION_ERR</c-></a> = 13;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②②"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-namespace_err" id="ref-for-dom-domexception-namespace_err"><c- g="">NAMESPACE_ERR</c-></a> = 14;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②③"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_access_err" id="ref-for-dom-domexception-invalid_access_err"><c- g="">INVALID_ACCESS_ERR</c-></a> = 15;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②④"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-validation_err" id="ref-for-dom-domexception-validation_err"><c- g="">VALIDATION_ERR</c-></a> = 16;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑤"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-type_mismatch_err" id="ref-for-dom-domexception-type_mismatch_err"><c- g="">TYPE_MISMATCH_ERR</c-></a> = 17;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑥"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-security_err" id="ref-for-dom-domexception-security_err"><c- g="">SECURITY_ERR</c-></a> = 18;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑦"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-network_err" id="ref-for-dom-domexception-network_err"><c- g="">NETWORK_ERR</c-></a> = 19;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑧"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-abort_err" id="ref-for-dom-domexception-abort_err"><c- g="">ABORT_ERR</c-></a> = 20;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑨"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-url_mismatch_err" id="ref-for-dom-domexception-url_mismatch_err"><c- g="">URL_MISMATCH_ERR</c-></a> = 21;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③⓪"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-quota_exceeded_err" id="ref-for-dom-domexception-quota_exceeded_err"><c- g="">QUOTA_EXCEEDED_ERR</c-></a> = 22;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-timeout_err" id="ref-for-dom-domexception-timeout_err"><c- g="">TIMEOUT_ERR</c-></a> = 23;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③②"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_node_type_err" id="ref-for-dom-domexception-invalid_node_type_err"><c- g="">INVALID_NODE_TYPE_ERR</c-></a> = 24;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③③"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-data_clone_err" id="ref-for-dom-domexception-data_clone_err"><c- g="">DATA_CLONE_ERR</c-></a> = 25;
};
</pre>
   <p class="note" role="note"><span>Note:</span> as discussed in <a href="#es-DOMException-specialness">§3.12.1 DOMException custom bindings</a>, the ECMAScript binding imposes additional
requirements beyond the normal ones for <a data-link-type="dfn" href="#idl-interface" id="ref-for-idl-interface②④">interface types</a>.</p>
   <p>Each <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④⑧">DOMException</a></code> object has an associated <dfn class="dfn-paneled" data-dfn-for="DOMException" data-dfn-type="dfn" data-noexport="" id="domexception-name">name</dfn> and <dfn class="dfn-paneled" data-dfn-for="DOMException" data-dfn-type="dfn" data-noexport="" id="domexception-message">message</dfn>, both <a data-link-type="dfn" href="https://infra.spec.whatwg.org/#javascript-string" id="ref-for-javascript-string">JavaScript strings</a>.</p>
   <p>The <dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="constructor" data-export="" id="dom-domexception-domexception"><code>DOMException(<var>message</var>, <var>name</var>)</code></dfn> constructor, when invoked, must run these steps:</p>
   <ol>
    <li data-md="">
     <p>Let <var>e</var> be a new <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException④⑨">DOMException</a></code> object.</p>
    </li><li data-md="">
     <p>Set <var>e</var>’s <a data-link-type="dfn" href="#domexception-name" id="ref-for-domexception-name">name</a> to <var>name</var>.</p>
    </li><li data-md="">
     <p>Set <var>e</var>’s <a data-link-type="dfn" href="#domexception-message" id="ref-for-domexception-message">message</a> to <var>message</var>.</p>
    </li><li data-md="">
     <p>Return <var>e</var>.</p>
   </li></ol>
   <p>The <dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="attribute" data-export="" id="dom-domexception-name"><code>name</code></dfn> attribute’s getter must return this <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException⑤⓪">DOMException</a></code> object’s <a data-link-type="dfn" href="#domexception-name" id="ref-for-domexception-name①">name</a>.</p>
   <p>The <dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="attribute" data-export="" id="dom-domexception-message"><code>message</code></dfn> attribute’s getter must return this <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException⑤①">DOMException</a></code> object’s <a data-link-type="dfn" href="#domexception-message" id="ref-for-domexception-message①">message</a>.</p>
   <p>The <dfn class="dfn-paneled idl-code" data-dfn-for="DOMException" data-dfn-type="attribute" data-export="" id="dom-domexception-code"><code>code</code></dfn> attribute’s getter must return the
legacy code indicated in the <a data-link-type="dfn" href="#dfn-error-names-table" id="ref-for-dfn-error-names-table①">error names table</a> for this <code class="idl"><a data-link-type="idl" href="#idl-DOMException" id="ref-for-idl-DOMException⑤②">DOMException</a></code> object’s <a data-link-type="dfn" href="#domexception-name" id="ref-for-domexception-name②">name</a>, or 0 if no such entry exists in the table.</p>
   <h3 class="heading settled dfn-paneled idl-code" data-dfn-type="typedef" data-export="" data-level="4.4" data-lt="DOMTimeStamp" id="DOMTimeStamp"><span class="secno">4.4. </span><span class="content">DOMTimeStamp</span><span id="common-DOMTimeStamp"></span></h3>
<pre class="idl highlight def"><c- b="">typedef</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long⑨"><c- b="">unsigned</c-> <c- b="">long</c-> <c- b="">long</c-></a> <a class="idl-code" data-link-type="typedef" href="#DOMTimeStamp" id="ref-for-DOMTimeStamp"><c- g="">DOMTimeStamp</c-></a>;</pre>
   <p>The <code class="idl"><a data-link-type="idl" href="#DOMTimeStamp" id="ref-for-DOMTimeStamp①">DOMTimeStamp</a></code> type is used for representing
a number of milliseconds, either as an absolute time (relative to some epoch)
or as a relative amount of time.  Specifications that use this type will need
to define how the number of milliseconds is to be interpreted.</p>
   <h3 class="heading settled dfn-paneled idl-code" data-dfn-type="callback" data-export="" data-level="4.5" data-lt="Function" id="Function"><span class="secno">4.5. </span><span class="content">Function</span><span id="common-Function"></span></h3>
<pre class="idl highlight def"><c- b="">callback</c-> <a class="idl-code" data-link-type="callback" href="#Function" id="ref-for-Function"><c- g="">Function</c-></a> = <c- b="">any</c-> (<c- b="">any</c->... <dfn class="idl-code" data-dfn-for="Function" data-dfn-type="argument" data-export="" id="dom-function-arguments"><code><c- g="">arguments</c-></code><a class="self-link" href="#dom-function-arguments"></a></dfn>);</pre>
   <p>The <code class="idl"><a data-link-type="idl" href="#Function" id="ref-for-Function①">Function</a></code> <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function③⓪">callback function</a> type is used for representing function values with no restriction on what arguments
are passed to it or what kind of value is returned from it.</p>
   <h3 class="heading settled dfn-paneled idl-code" data-dfn-type="callback" data-export="" data-level="4.6" data-lt="VoidFunction" id="VoidFunction"><span class="secno">4.6. </span><span class="content">VoidFunction</span></h3>
<pre class="idl highlight def"><c- b="">callback</c-> <a class="idl-code" data-link-type="callback" href="#VoidFunction" id="ref-for-VoidFunction"><c- g="">VoidFunction</c-></a> = <c- b="">void</c-> ();</pre>
   <p>The <code class="idl"><a data-link-type="idl" href="#VoidFunction" id="ref-for-VoidFunction①">VoidFunction</a></code> <a data-link-type="dfn" href="#dfn-callback-function" id="ref-for-dfn-callback-function③①">callback function</a> type is used for representing function values that take no arguments and do not
return any value.</p>
   <h2 class="heading settled" data-level="5" id="extensibility"><span class="secno">5. </span><span class="content">Extensibility</span><a class="self-link" href="#extensibility"></a></h2>
   <p><i>This section is informative.</i></p>
   <p>Extensions to language binding requirements can be specified
using <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤⑥">extended attributes</a> that do not conflict with those defined in this document.  Extensions for
private, project-specific use should not be included in <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④⑥">IDL fragments</a> appearing in other specifications.  It is recommended that extensions
that are required for use in other specifications be coordinated
with the group responsible for work on <cite>Web IDL</cite>, which
at the time of writing is the <a href="http://www.w3.org/WebPlatform/WG/">W3C Web Platform Working Group</a>,
for possible inclusion in a future version of this document.</p>
   <p>Extensions to any other aspect of the IDL language are
strongly discouraged.</p>
   <h2 class="heading settled" data-level="6" id="legacy-constructs"><span class="secno">6. </span><span class="content">Legacy constructs</span><a class="self-link" href="#legacy-constructs"></a></h2>
   <p><i>This section is informative.</i></p>
   <p>Legacy WebIDL constructs exist only so that
legacy Web platform features can be specified.
They are generally prefixed with the "<code>Legacy</code>" string.
It is strongly discouraged to use legacy WebIDL constructs in specifications
unless required to specify the behavior of legacy Web platform features,
or for consistency with such features.
Editors who wish to use legacy WebIDL constructs are strongly advised to discuss this
by <a href="https://github.com/heycam/webidl/issues/new?title=Intent%20to%20use%20a%20legacy%20WebIDL%20construct">filing an issue</a> before proceeding.</p>
   <p>Marking a construct as legacy does not, in itself,
imply that it is about to be removed from this specification.
It does suggest however, that it is a good candidate
for future removal from this specification,
whenever various heuristics indicate that
the Web platform features it helps specify can be removed altogether
or can be modified to rely on non-legacy WebIDL constructs instead.</p>
   <h2 class="heading settled" data-level="7" id="referencing"><span class="secno">7. </span><span class="content">Referencing this specification</span><a class="self-link" href="#referencing"></a></h2>
   <p><i>This section is informative.</i></p>
   <p>It is expected that other specifications that define Web platform interfaces
using one or more <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④⑦">IDL fragments</a> will reference this specification.  It is suggested
that those specifications include a sentence such as the following,
to indicate that the IDL is to be interpreted as described in this
specification:</p>
   <blockquote>
    <p>The IDL fragment in Appendix A of this specification must, in conjunction
    with the IDL fragments defined in this specification’s normative references,
    be interpreted as required for <em>conforming sets of IDL fragments</em>, as described in the
    “Web IDL” specification. [WEBIDL]</p>
   </blockquote>
   <p>In addition, it is suggested that the conformance class for user
agents in referencing specifications be linked to the <a data-link-type="dfn" href="#dfn-conforming-implementation" id="ref-for-dfn-conforming-implementation①">conforming implementation</a> class from this specification:</p>
   <blockquote>
    <p>A conforming FooML user agent must also be a <em>conforming implementation</em> of the IDL fragment in Appendix A
    of this specification, as described in the
    “Web IDL” specification. [WEBIDL]</p>
   </blockquote>
   <h2 class="heading settled" data-level="8" id="acknowledgements"><span class="secno">8. </span><span class="content">Acknowledgements</span><a class="self-link" href="#acknowledgements"></a></h2>
   <p><i>This section is informative.</i></p>
   <p>The editor would like to thank the following people for contributing
to this specification:
Glenn Adams,
David Andersson,
L. David Baron,
Art Barstow,
Nils Barth,
Robin Berjon,
David Bruant,
Jan-Ivar Bruaroey,
Marcos Cáceres,
Giovanni Campagna,
Domenic Denicola,
Chris Dumez,
Michael Dyck,
Brendan Eich,
João Eiras,
Gorm Haug Eriksen,
Sigbjorn Finne,
David Flanagan,
Aryeh Gregor,
Dimitry Golubovsky,
James Graham,
Aryeh Gregor,
Tiancheng “Timothy” Gu,
Kartikaya Gupta,
Marcin Hanclik,
Jed Hartman,
Stefan Haustein,
Dominique Hazaël-Massieux,
Ian Hickson,
Björn Höhrmann,
Kyle Huey,
Lachlan Hunt,
Oliver Hunt,
Jim Jewett,
Wolfgang Keller,
Anne van Kesteren,
Olav Junker Kjær,
Takayoshi Kochi,
Magnus Kristiansen,
Takeshi Kurosawa,
Yves Lafon,
Travis Leithead,
Jim Ley,
Kevin Lindsey,
Jens Lindström,
Peter Linss,
呂康豪 (Kang-Hao Lu),
Kyle Machulis,
Mark Miller,
Ms2ger,
Andrew Oakley,
岡坂 史紀 (Shiki Okasaka),
Jason Orendorff,
Olli Pettay,
Simon Pieters,
Andrei Popescu,
François Remy,
Tim Renouf,
Tim Ruffles,
Alex Russell,
Takashi Sakamoto,
Doug Schepers,
Jonas Sicking,
Garrett Smith,
Geoffrey Sneddon,
Jungkee Song,
Josh Soref,
Maciej Stachowiak,
Anton Tayanovskyy,
Peter Van der Beken,
Jeff Walden,
Allen Wirfs-Brock,
Jeffrey Yasskin and,
Collin Xu.</p>
   <p>Special thanks also go to Sam Weinig for maintaining this document
while the editor was unavailable to do so.</p>
   <h2 class="no-num heading settled" id="idl-grammar"><span class="content">IDL grammar</span><a class="self-link" href="#idl-grammar"></a></h2>
   <p>This section defines an LL(1) grammar whose start symbol, <emu-nt><a href="#prod-Definitions">Definitions</a></emu-nt>, matches an
entire <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④⑧">IDL fragment</a>.</p>
   <p>Each production in the grammar has on its right hand side either a
non-zero sequence of terminal and non-terminal symbols, or an
epsilon (ε) which indicates no symbols.
Symbols that begin with an uppercase letter are non-terminal symbols.
Symbols in monospaced fonts are terminal symbols.
Symbols in sans-serif font that begin with a lowercase letter are terminal
symbols that are matched by the regular expressions (using Perl 5 regular
expression syntax <a data-link-type="biblio" href="#biblio-perlre">[PERLRE]</a>) as follows:</p>
   <table class="grammar data">
    <tbody>
     <tr>
      <td id="prod-integer"><emu-t class="regex">integer</emu-t>
      </td><td><code>=</code>
      </td><td><code class="regex"><span class="mute">/</span>-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)<span class="mute">/</span></code>
     </td></tr><tr>
      <td id="prod-float"><emu-t class="regex">float</emu-t>
      </td><td><code>=</code>
      </td><td><code class="regex"><span class="mute">/</span>-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)<span class="mute">/</span></code>
     </td></tr><tr>
      <td id="prod-identifier"><emu-t class="regex">identifier</emu-t>
      </td><td><code>=</code>
      </td><td><code class="regex"><span class="mute">/</span>_?[A-Za-z][0-9A-Z_a-z-]*<span class="mute">/</span></code>
     </td></tr><tr>
      <td id="prod-string"><emu-t class="regex">string</emu-t>
      </td><td><code>=</code>
      </td><td><code class="regex"><span class="mute">/</span>"[^"]*"<span class="mute">/</span></code>
     </td></tr><tr>
      <td id="prod-whitespace"><emu-t class="regex">whitespace</emu-t>
      </td><td><code>=</code>
      </td><td><code class="regex"><span class="mute">/</span>[\t\n\r ]+<span class="mute">/</span></code>
     </td></tr><tr>
      <td id="prod-comment"><emu-t class="regex">comment</emu-t>
      </td><td><code>=</code>
      </td><td><code class="regex"><span class="mute">/</span><span class="mute">\</span>/<span class="mute">\</span>/.*|<span class="mute">\</span>/\*(.|\n)*?\*<span class="mute">\</span>/<span class="mute">/</span></code>
     </td></tr><tr>
      <td id="prod-other"><emu-t class="regex">other</emu-t>
      </td><td><code>=</code>
      </td><td><code class="regex"><span class="mute">/</span>[^\t\n\r 0-9A-Za-z]<span class="mute">/</span></code>
   </td></tr></tbody></table>
   <p>The tokenizer operates on a sequence of Unicode characters <a data-link-type="biblio" href="#biblio-unicode">[UNICODE]</a>.
When tokenizing, the longest possible match must be used.  For example, if the input
text is “<span class="input">a1</span>”, it is tokenized as a single <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>,
and not as a separate <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> and <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t>.
If the longest possible match could match one of the above named terminal symbols or
one of the other terminal symbols from the grammar, it must be tokenized as the latter.
Thus, the input text “<span class="input">long</span>” is tokenized as the quoted terminal symbol <emu-t>long</emu-t> rather than an <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> called "<code>long</code>",
and “<span class="input">.</span>” is tokenized as the quoted terminal symbol <emu-t>.</emu-t> rather than an <emu-t class="regex"><a href="#prod-other">other</a></emu-t>.</p>
   <p>The IDL syntax is case sensitive, both for the quoted terminal symbols
used in the grammar and the values used for <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> terminals.  Thus, for
example, the input text “<span class="input">Const</span>” is tokenized as
an <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> rather than the
terminal symbol <emu-t>const</emu-t>, an <a data-link-type="dfn" href="#dfn-interface" id="ref-for-dfn-interface②⓪③">interface</a> with <a data-link-type="dfn" href="#dfn-identifier" id="ref-for-dfn-identifier⑨⑧">identifier</a> "<code>A</code>" is distinct from one named "<code>a</code>", and an <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤⑦">extended attribute</a> [<code class="idl">constructor</code>] will not be recognized as
the [<code class="idl"><a data-link-type="idl" href="#Constructor" id="ref-for-Constructor②①">Constructor</a></code>]
extended attribute.</p>
   <p>Implicitly, any number of <emu-t class="regex"><a href="#prod-whitespace">whitespace</a></emu-t> and <emu-t class="regex"><a href="#prod-comment">comment</a></emu-t> terminals are allowed between every other terminal
in the input text being parsed.  Such <emu-t class="regex"><a href="#prod-whitespace">whitespace</a></emu-t> and <emu-t class="regex"><a href="#prod-comment">comment</a></emu-t> terminals are ignored while parsing.</p>
   <p>The following LL(1) grammar, starting with <emu-nt><a href="#prod-Definitions">Definitions</a></emu-nt>,
matches an <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment④⑨">IDL fragment</a>:</p>
   <div data-fill-with="grammar-index"><pre class="grammar"><emu-nt id="index-prod-Definitions"><a href="#index-prod-Definitions">Definitions</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#index-prod-Definition">Definition</a></emu-nt> <emu-nt><a href="#index-prod-Definitions">Definitions</a></emu-nt>
    ε

<emu-nt id="index-prod-Definition"><a href="#index-prod-Definition">Definition</a></emu-nt> ::
    <emu-nt><a href="#index-prod-CallbackOrInterfaceOrMixin">CallbackOrInterfaceOrMixin</a></emu-nt>
    <emu-nt><a href="#index-prod-Namespace">Namespace</a></emu-nt>
    <emu-nt><a href="#index-prod-Partial">Partial</a></emu-nt>
    <emu-nt><a href="#index-prod-Dictionary">Dictionary</a></emu-nt>
    <emu-nt><a href="#index-prod-Enum">Enum</a></emu-nt>
    <emu-nt><a href="#index-prod-Typedef">Typedef</a></emu-nt>
    <emu-nt><a href="#index-prod-IncludesStatement">IncludesStatement</a></emu-nt>

<emu-nt id="index-prod-ArgumentNameKeyword"><a href="#index-prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt> ::
    <emu-t>attribute</emu-t>
    <emu-t>callback</emu-t>
    <emu-t>const</emu-t>
    <emu-t>deleter</emu-t>
    <emu-t>dictionary</emu-t>
    <emu-t>enum</emu-t>
    <emu-t>getter</emu-t>
    <emu-t>includes</emu-t>
    <emu-t>inherit</emu-t>
    <emu-t>interface</emu-t>
    <emu-t>iterable</emu-t>
    <emu-t>maplike</emu-t>
    <emu-t>namespace</emu-t>
    <emu-t>partial</emu-t>
    <emu-t>required</emu-t>
    <emu-t>setlike</emu-t>
    <emu-t>setter</emu-t>
    <emu-t>static</emu-t>
    <emu-t>stringifier</emu-t>
    <emu-t>typedef</emu-t>
    <emu-t>unrestricted</emu-t>

<emu-nt id="index-prod-CallbackOrInterfaceOrMixin"><a href="#index-prod-CallbackOrInterfaceOrMixin">CallbackOrInterfaceOrMixin</a></emu-nt> ::
    <emu-t>callback</emu-t> <emu-nt><a href="#index-prod-CallbackRestOrInterface">CallbackRestOrInterface</a></emu-nt>
    <emu-t>interface</emu-t> <emu-nt><a href="#index-prod-InterfaceOrMixin">InterfaceOrMixin</a></emu-nt>

<emu-nt id="index-prod-CallbackRestOrInterface"><a href="#index-prod-CallbackRestOrInterface">CallbackRestOrInterface</a></emu-nt> ::
    <emu-nt><a href="#index-prod-CallbackRest">CallbackRest</a></emu-nt>
    <emu-t>interface</emu-t> <emu-nt><a href="#index-prod-InterfaceRest">InterfaceRest</a></emu-nt>

<emu-nt id="index-prod-InterfaceOrMixin"><a href="#index-prod-InterfaceOrMixin">InterfaceOrMixin</a></emu-nt> ::
    <emu-nt><a href="#index-prod-InterfaceRest">InterfaceRest</a></emu-nt>
    <emu-nt><a href="#index-prod-MixinRest">MixinRest</a></emu-nt>

<emu-nt id="index-prod-InterfaceRest"><a href="#index-prod-InterfaceRest">InterfaceRest</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#index-prod-Inheritance">Inheritance</a></emu-nt> <emu-t>{</emu-t> <emu-nt><a href="#index-prod-InterfaceMembers">InterfaceMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-Partial"><a href="#index-prod-Partial">Partial</a></emu-nt> ::
    <emu-t>partial</emu-t> <emu-nt><a href="#index-prod-PartialDefinition">PartialDefinition</a></emu-nt>

<emu-nt id="index-prod-PartialDefinition"><a href="#index-prod-PartialDefinition">PartialDefinition</a></emu-nt> ::
    <emu-t>interface</emu-t> <emu-nt><a href="#index-prod-PartialInterfaceOrPartialMixin">PartialInterfaceOrPartialMixin</a></emu-nt>
    <emu-nt><a href="#index-prod-PartialDictionary">PartialDictionary</a></emu-nt>
    <emu-nt><a href="#index-prod-Namespace">Namespace</a></emu-nt>

<emu-nt id="index-prod-PartialInterfaceOrPartialMixin"><a href="#index-prod-PartialInterfaceOrPartialMixin">PartialInterfaceOrPartialMixin</a></emu-nt> ::
    <emu-nt><a href="#index-prod-PartialInterfaceRest">PartialInterfaceRest</a></emu-nt>
    <emu-nt><a href="#index-prod-MixinRest">MixinRest</a></emu-nt>

<emu-nt id="index-prod-PartialInterfaceRest"><a href="#index-prod-PartialInterfaceRest">PartialInterfaceRest</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#index-prod-InterfaceMembers">InterfaceMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-InterfaceMembers"><a href="#index-prod-InterfaceMembers">InterfaceMembers</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#index-prod-InterfaceMember">InterfaceMember</a></emu-nt> <emu-nt><a href="#index-prod-InterfaceMembers">InterfaceMembers</a></emu-nt>
    ε

<emu-nt id="index-prod-InterfaceMember"><a href="#index-prod-InterfaceMember">InterfaceMember</a></emu-nt> ::
    <emu-nt><a href="#index-prod-Const">Const</a></emu-nt>
    <emu-nt><a href="#index-prod-Operation">Operation</a></emu-nt>
    <emu-nt><a href="#index-prod-Stringifier">Stringifier</a></emu-nt>
    <emu-nt><a href="#index-prod-StaticMember">StaticMember</a></emu-nt>
    <emu-nt><a href="#index-prod-Iterable">Iterable</a></emu-nt>
    <emu-nt><a href="#index-prod-ReadOnlyMember">ReadOnlyMember</a></emu-nt>
    <emu-nt><a href="#index-prod-ReadWriteAttribute">ReadWriteAttribute</a></emu-nt>
    <emu-nt><a href="#index-prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt>
    <emu-nt><a href="#index-prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt>

<emu-nt id="index-prod-Inheritance"><a href="#index-prod-Inheritance">Inheritance</a></emu-nt> ::
    <emu-t>:</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
    ε

<emu-nt id="index-prod-MixinRest"><a href="#index-prod-MixinRest">MixinRest</a></emu-nt> ::
    <emu-t>mixin</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#index-prod-MixinMembers">MixinMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-MixinMembers"><a href="#index-prod-MixinMembers">MixinMembers</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#index-prod-MixinMember">MixinMember</a></emu-nt> <emu-nt><a href="#index-prod-MixinMembers">MixinMembers</a></emu-nt>
    ε

<emu-nt id="index-prod-MixinMember"><a href="#index-prod-MixinMember">MixinMember</a></emu-nt> ::
    <emu-nt><a href="#index-prod-Const">Const</a></emu-nt>
    <emu-nt><a href="#index-prod-RegularOperation">RegularOperation</a></emu-nt>
    <emu-nt><a href="#index-prod-Stringifier">Stringifier</a></emu-nt>
    <emu-nt><a href="#index-prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#index-prod-AttributeRest">AttributeRest</a></emu-nt>

<emu-nt id="index-prod-IncludesStatement"><a href="#index-prod-IncludesStatement">IncludesStatement</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>includes</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-Const"><a href="#index-prod-Const">Const</a></emu-nt> ::
    <emu-t>const</emu-t> <emu-nt><a href="#index-prod-ConstType">ConstType</a></emu-nt> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-nt><a href="#index-prod-ConstValue">ConstValue</a></emu-nt> <emu-t>;</emu-t>

<emu-nt id="index-prod-ConstValue"><a href="#index-prod-ConstValue">ConstValue</a></emu-nt> ::
    <emu-nt><a href="#index-prod-BooleanLiteral">BooleanLiteral</a></emu-nt>
    <emu-nt><a href="#index-prod-FloatLiteral">FloatLiteral</a></emu-nt>
    <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t>
    <emu-t>null</emu-t>

<emu-nt id="index-prod-BooleanLiteral"><a href="#index-prod-BooleanLiteral">BooleanLiteral</a></emu-nt> ::
    <emu-t>true</emu-t>
    <emu-t>false</emu-t>

<emu-nt id="index-prod-FloatLiteral"><a href="#index-prod-FloatLiteral">FloatLiteral</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-float">float</a></emu-t>
    <emu-t>-Infinity</emu-t>
    <emu-t>Infinity</emu-t>
    <emu-t>NaN</emu-t>

<emu-nt id="index-prod-ConstType"><a href="#index-prod-ConstType">ConstType</a></emu-nt> ::
    <emu-nt><a href="#index-prod-PrimitiveType">PrimitiveType</a></emu-nt> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>

<emu-nt id="index-prod-ReadOnlyMember"><a href="#index-prod-ReadOnlyMember">ReadOnlyMember</a></emu-nt> ::
    <emu-t>readonly</emu-t> <emu-nt><a href="#index-prod-ReadOnlyMemberRest">ReadOnlyMemberRest</a></emu-nt>

<emu-nt id="index-prod-ReadOnlyMemberRest"><a href="#index-prod-ReadOnlyMemberRest">ReadOnlyMemberRest</a></emu-nt> ::
    <emu-nt><a href="#index-prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#index-prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt>
    <emu-nt><a href="#index-prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt>

<emu-nt id="index-prod-ReadWriteAttribute"><a href="#index-prod-ReadWriteAttribute">ReadWriteAttribute</a></emu-nt> ::
    <emu-t>inherit</emu-t> <emu-nt><a href="#index-prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#index-prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#index-prod-AttributeRest">AttributeRest</a></emu-nt>

<emu-nt id="index-prod-AttributeRest"><a href="#index-prod-AttributeRest">AttributeRest</a></emu-nt> ::
    <emu-t>attribute</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-nt><a href="#index-prod-AttributeName">AttributeName</a></emu-nt> <emu-t>;</emu-t>

<emu-nt id="index-prod-AttributeName"><a href="#index-prod-AttributeName">AttributeName</a></emu-nt> ::
    <emu-nt><a href="#index-prod-AttributeNameKeyword">AttributeNameKeyword</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>

<emu-nt id="index-prod-AttributeNameKeyword"><a href="#index-prod-AttributeNameKeyword">AttributeNameKeyword</a></emu-nt> ::
    <emu-t>required</emu-t>

<emu-nt id="index-prod-ReadOnly"><a href="#index-prod-ReadOnly">ReadOnly</a></emu-nt> ::
    <emu-t>readonly</emu-t>
    ε

<emu-nt id="index-prod-DefaultValue"><a href="#index-prod-DefaultValue">DefaultValue</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ConstValue">ConstValue</a></emu-nt>
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t>
    <emu-t>[</emu-t> <emu-t>]</emu-t>

<emu-nt id="index-prod-Operation"><a href="#index-prod-Operation">Operation</a></emu-nt> ::
    <emu-nt><a href="#index-prod-RegularOperation">RegularOperation</a></emu-nt>
    <emu-nt><a href="#index-prod-SpecialOperation">SpecialOperation</a></emu-nt>

<emu-nt id="index-prod-RegularOperation"><a href="#index-prod-RegularOperation">RegularOperation</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ReturnType">ReturnType</a></emu-nt> <emu-nt><a href="#index-prod-OperationRest">OperationRest</a></emu-nt>

<emu-nt id="index-prod-SpecialOperation"><a href="#index-prod-SpecialOperation">SpecialOperation</a></emu-nt> ::
    <emu-nt><a href="#index-prod-Special">Special</a></emu-nt> <emu-nt><a href="#index-prod-RegularOperation">RegularOperation</a></emu-nt>

<emu-nt id="index-prod-Special"><a href="#index-prod-Special">Special</a></emu-nt> ::
    <emu-t>getter</emu-t>
    <emu-t>setter</emu-t>
    <emu-t>deleter</emu-t>

<emu-nt id="index-prod-OperationRest"><a href="#index-prod-OperationRest">OperationRest</a></emu-nt> ::
    <emu-nt><a href="#index-prod-OptionalIdentifier">OptionalIdentifier</a></emu-nt> <emu-t>(</emu-t> <emu-nt><a href="#index-prod-ArgumentList">ArgumentList</a></emu-nt> <emu-t>)</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-OptionalIdentifier"><a href="#index-prod-OptionalIdentifier">OptionalIdentifier</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
    ε

<emu-nt id="index-prod-ArgumentList"><a href="#index-prod-ArgumentList">ArgumentList</a></emu-nt> ::
    <emu-nt><a href="#index-prod-Argument">Argument</a></emu-nt> <emu-nt><a href="#index-prod-Arguments">Arguments</a></emu-nt>
    ε

<emu-nt id="index-prod-Arguments"><a href="#index-prod-Arguments">Arguments</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-nt><a href="#index-prod-Argument">Argument</a></emu-nt> <emu-nt><a href="#index-prod-Arguments">Arguments</a></emu-nt>
    ε

<emu-nt id="index-prod-Argument"><a href="#index-prod-Argument">Argument</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#index-prod-ArgumentRest">ArgumentRest</a></emu-nt>

<emu-nt id="index-prod-ArgumentRest"><a href="#index-prod-ArgumentRest">ArgumentRest</a></emu-nt> ::
    <emu-t>optional</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-nt><a href="#index-prod-ArgumentName">ArgumentName</a></emu-nt> <emu-nt><a href="#index-prod-Default">Default</a></emu-nt>
    <emu-nt><a href="#index-prod-Type">Type</a></emu-nt> <emu-nt><a href="#index-prod-Ellipsis">Ellipsis</a></emu-nt> <emu-nt><a href="#index-prod-ArgumentName">ArgumentName</a></emu-nt>

<emu-nt id="index-prod-ArgumentName"><a href="#index-prod-ArgumentName">ArgumentName</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>

<emu-nt id="index-prod-Ellipsis"><a href="#index-prod-Ellipsis">Ellipsis</a></emu-nt> ::
    <emu-t>...</emu-t>
    ε

<emu-nt id="index-prod-ReturnType"><a href="#index-prod-ReturnType">ReturnType</a></emu-nt> ::
    <emu-nt><a href="#index-prod-Type">Type</a></emu-nt>
    <emu-t>void</emu-t>

<emu-nt id="index-prod-Stringifier"><a href="#index-prod-Stringifier">Stringifier</a></emu-nt> ::
    <emu-t>stringifier</emu-t> <emu-nt><a href="#index-prod-StringifierRest">StringifierRest</a></emu-nt>

<emu-nt id="index-prod-StringifierRest"><a href="#index-prod-StringifierRest">StringifierRest</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#index-prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#index-prod-RegularOperation">RegularOperation</a></emu-nt>
    <emu-t>;</emu-t>

<emu-nt id="index-prod-StaticMember"><a href="#index-prod-StaticMember">StaticMember</a></emu-nt> ::
    <emu-t>static</emu-t> <emu-nt><a href="#index-prod-StaticMemberRest">StaticMemberRest</a></emu-nt>

<emu-nt id="index-prod-StaticMemberRest"><a href="#index-prod-StaticMemberRest">StaticMemberRest</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ReadOnly">ReadOnly</a></emu-nt> <emu-nt><a href="#index-prod-AttributeRest">AttributeRest</a></emu-nt>
    <emu-nt><a href="#index-prod-RegularOperation">RegularOperation</a></emu-nt>

<emu-nt id="index-prod-Iterable"><a href="#index-prod-Iterable">Iterable</a></emu-nt> ::
    <emu-t>iterable</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-nt><a href="#index-prod-OptionalType">OptionalType</a></emu-nt> <emu-t>&gt;</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-OptionalType"><a href="#index-prod-OptionalType">OptionalType</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt>
    ε

<emu-nt id="index-prod-ReadWriteMaplike"><a href="#index-prod-ReadWriteMaplike">ReadWriteMaplike</a></emu-nt> ::
    <emu-nt><a href="#index-prod-MaplikeRest">MaplikeRest</a></emu-nt>

<emu-nt id="index-prod-MaplikeRest"><a href="#index-prod-MaplikeRest">MaplikeRest</a></emu-nt> ::
    <emu-t>maplike</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>,</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-ReadWriteSetlike"><a href="#index-prod-ReadWriteSetlike">ReadWriteSetlike</a></emu-nt> ::
    <emu-nt><a href="#index-prod-SetlikeRest">SetlikeRest</a></emu-nt>

<emu-nt id="index-prod-SetlikeRest"><a href="#index-prod-SetlikeRest">SetlikeRest</a></emu-nt> ::
    <emu-t>setlike</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-Namespace"><a href="#index-prod-Namespace">Namespace</a></emu-nt> ::
    <emu-t>namespace</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#index-prod-NamespaceMembers">NamespaceMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-NamespaceMembers"><a href="#index-prod-NamespaceMembers">NamespaceMembers</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#index-prod-NamespaceMember">NamespaceMember</a></emu-nt> <emu-nt><a href="#index-prod-NamespaceMembers">NamespaceMembers</a></emu-nt>
    ε

<emu-nt id="index-prod-NamespaceMember"><a href="#index-prod-NamespaceMember">NamespaceMember</a></emu-nt> ::
    <emu-nt><a href="#index-prod-RegularOperation">RegularOperation</a></emu-nt>
    <emu-t>readonly</emu-t> <emu-nt><a href="#index-prod-AttributeRest">AttributeRest</a></emu-nt>

<emu-nt id="index-prod-Dictionary"><a href="#index-prod-Dictionary">Dictionary</a></emu-nt> ::
    <emu-t>dictionary</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#index-prod-Inheritance">Inheritance</a></emu-nt> <emu-t>{</emu-t> <emu-nt><a href="#index-prod-DictionaryMembers">DictionaryMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-DictionaryMembers"><a href="#index-prod-DictionaryMembers">DictionaryMembers</a></emu-nt> ::
    <emu-nt><a href="#index-prod-DictionaryMember">DictionaryMember</a></emu-nt> <emu-nt><a href="#index-prod-DictionaryMembers">DictionaryMembers</a></emu-nt>
    ε

<emu-nt id="index-prod-DictionaryMember"><a href="#index-prod-DictionaryMember">DictionaryMember</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#index-prod-DictionaryMemberRest">DictionaryMemberRest</a></emu-nt>

<emu-nt id="index-prod-DictionaryMemberRest"><a href="#index-prod-DictionaryMemberRest">DictionaryMemberRest</a></emu-nt> ::
    <emu-t>required</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#index-prod-Default">Default</a></emu-nt> <emu-t>;</emu-t>
    <emu-nt><a href="#index-prod-Type">Type</a></emu-nt> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#index-prod-Default">Default</a></emu-nt> <emu-t>;</emu-t>

<emu-nt id="index-prod-PartialDictionary"><a href="#index-prod-PartialDictionary">PartialDictionary</a></emu-nt> ::
    <emu-t>dictionary</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#index-prod-DictionaryMembers">DictionaryMembers</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-Default"><a href="#index-prod-Default">Default</a></emu-nt> ::
    <emu-t>=</emu-t> <emu-nt><a href="#index-prod-DefaultValue">DefaultValue</a></emu-nt>
    ε

<emu-nt id="index-prod-Enum"><a href="#index-prod-Enum">Enum</a></emu-nt> ::
    <emu-t>enum</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>{</emu-t> <emu-nt><a href="#index-prod-EnumValueList">EnumValueList</a></emu-nt> <emu-t>}</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-EnumValueList"><a href="#index-prod-EnumValueList">EnumValueList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t> <emu-nt><a href="#index-prod-EnumValueListComma">EnumValueListComma</a></emu-nt>

<emu-nt id="index-prod-EnumValueListComma"><a href="#index-prod-EnumValueListComma">EnumValueListComma</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-nt><a href="#index-prod-EnumValueListString">EnumValueListString</a></emu-nt>
    ε

<emu-nt id="index-prod-EnumValueListString"><a href="#index-prod-EnumValueListString">EnumValueListString</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t> <emu-nt><a href="#index-prod-EnumValueListComma">EnumValueListComma</a></emu-nt>
    ε

<emu-nt id="index-prod-CallbackRest"><a href="#index-prod-CallbackRest">CallbackRest</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-nt><a href="#index-prod-ReturnType">ReturnType</a></emu-nt> <emu-t>(</emu-t> <emu-nt><a href="#index-prod-ArgumentList">ArgumentList</a></emu-nt> <emu-t>)</emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-Typedef"><a href="#index-prod-Typedef">Typedef</a></emu-nt> ::
    <emu-t>typedef</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>;</emu-t>

<emu-nt id="index-prod-Type"><a href="#index-prod-Type">Type</a></emu-nt> ::
    <emu-nt><a href="#index-prod-SingleType">SingleType</a></emu-nt>
    <emu-nt><a href="#index-prod-UnionType">UnionType</a></emu-nt> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>

<emu-nt id="index-prod-TypeWithExtendedAttributes"><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#index-prod-Type">Type</a></emu-nt>

<emu-nt id="index-prod-SingleType"><a href="#index-prod-SingleType">SingleType</a></emu-nt> ::
    <emu-nt><a href="#index-prod-NonAnyType">NonAnyType</a></emu-nt>
    <emu-t>any</emu-t>

<emu-nt id="index-prod-UnionType"><a href="#index-prod-UnionType">UnionType</a></emu-nt> ::
    <emu-t>(</emu-t> <emu-nt><a href="#index-prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-t>or</emu-t> <emu-nt><a href="#index-prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-nt><a href="#index-prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt> <emu-t>)</emu-t>

<emu-nt id="index-prod-UnionMemberType"><a href="#index-prod-UnionMemberType">UnionMemberType</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> <emu-nt><a href="#index-prod-NonAnyType">NonAnyType</a></emu-nt>
    <emu-nt><a href="#index-prod-UnionType">UnionType</a></emu-nt> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>

<emu-nt id="index-prod-UnionMemberTypes"><a href="#index-prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt> ::
    <emu-t>or</emu-t> <emu-nt><a href="#index-prod-UnionMemberType">UnionMemberType</a></emu-nt> <emu-nt><a href="#index-prod-UnionMemberTypes">UnionMemberTypes</a></emu-nt>
    ε

<emu-nt id="index-prod-NonAnyType"><a href="#index-prod-NonAnyType">NonAnyType</a></emu-nt> ::
    <emu-nt><a href="#index-prod-PromiseType">PromiseType</a></emu-nt> ε
    <emu-nt><a href="#index-prod-PrimitiveType">PrimitiveType</a></emu-nt> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#index-prod-StringType">StringType</a></emu-nt> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-t>sequence</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-t>object</emu-t> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-t>symbol</emu-t> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-t>Error</emu-t> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#index-prod-BufferRelatedType">BufferRelatedType</a></emu-nt> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-t>FrozenArray</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>
    <emu-nt><a href="#index-prod-RecordType">RecordType</a></emu-nt> <emu-nt><a href="#index-prod-Null">Null</a></emu-nt>

<emu-nt id="index-prod-PrimitiveType"><a href="#index-prod-PrimitiveType">PrimitiveType</a></emu-nt> ::
    <emu-nt><a href="#index-prod-UnsignedIntegerType">UnsignedIntegerType</a></emu-nt>
    <emu-nt><a href="#index-prod-UnrestrictedFloatType">UnrestrictedFloatType</a></emu-nt>
    <emu-t>boolean</emu-t>
    <emu-t>byte</emu-t>
    <emu-t>octet</emu-t>

<emu-nt id="index-prod-UnrestrictedFloatType"><a href="#index-prod-UnrestrictedFloatType">UnrestrictedFloatType</a></emu-nt> ::
    <emu-t>unrestricted</emu-t> <emu-nt><a href="#index-prod-FloatType">FloatType</a></emu-nt>
    <emu-nt><a href="#index-prod-FloatType">FloatType</a></emu-nt>

<emu-nt id="index-prod-FloatType"><a href="#index-prod-FloatType">FloatType</a></emu-nt> ::
    <emu-t>float</emu-t>
    <emu-t>double</emu-t>

<emu-nt id="index-prod-UnsignedIntegerType"><a href="#index-prod-UnsignedIntegerType">UnsignedIntegerType</a></emu-nt> ::
    <emu-t>unsigned</emu-t> <emu-nt><a href="#index-prod-IntegerType">IntegerType</a></emu-nt>
    <emu-nt><a href="#index-prod-IntegerType">IntegerType</a></emu-nt>

<emu-nt id="index-prod-IntegerType"><a href="#index-prod-IntegerType">IntegerType</a></emu-nt> ::
    <emu-t>short</emu-t>
    <emu-t>long</emu-t> <emu-nt><a href="#index-prod-OptionalLong">OptionalLong</a></emu-nt>

<emu-nt id="index-prod-OptionalLong"><a href="#index-prod-OptionalLong">OptionalLong</a></emu-nt> ::
    <emu-t>long</emu-t>
    ε

<emu-nt id="index-prod-StringType"><a href="#index-prod-StringType">StringType</a></emu-nt> ::
    <emu-t>ByteString</emu-t>
    <emu-t>DOMString</emu-t>
    <emu-t>USVString</emu-t>

<emu-nt id="index-prod-PromiseType"><a href="#index-prod-PromiseType">PromiseType</a></emu-nt> ::
    <emu-t>Promise</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#index-prod-ReturnType">ReturnType</a></emu-nt> <emu-t>&gt;</emu-t>

<emu-nt id="index-prod-RecordType"><a href="#index-prod-RecordType">RecordType</a></emu-nt> ::
    <emu-t>record</emu-t> <emu-t>&lt;</emu-t> <emu-nt><a href="#index-prod-StringType">StringType</a></emu-nt> <emu-t>,</emu-t> <emu-nt><a href="#index-prod-TypeWithExtendedAttributes">TypeWithExtendedAttributes</a></emu-nt> <emu-t>&gt;</emu-t>

<emu-nt id="index-prod-Null"><a href="#index-prod-Null">Null</a></emu-nt> ::
    <emu-t>?</emu-t>
    ε

<emu-nt id="index-prod-BufferRelatedType"><a href="#index-prod-BufferRelatedType">BufferRelatedType</a></emu-nt> ::
    <emu-t>ArrayBuffer</emu-t>
    <emu-t>DataView</emu-t>
    <emu-t>Int8Array</emu-t>
    <emu-t>Int16Array</emu-t>
    <emu-t>Int32Array</emu-t>
    <emu-t>Uint8Array</emu-t>
    <emu-t>Uint16Array</emu-t>
    <emu-t>Uint32Array</emu-t>
    <emu-t>Uint8ClampedArray</emu-t>
    <emu-t>Float32Array</emu-t>
    <emu-t>Float64Array</emu-t>

<emu-nt id="index-prod-ExtendedAttributeList"><a href="#index-prod-ExtendedAttributeList">ExtendedAttributeList</a></emu-nt> ::
    <emu-t>[</emu-t> <emu-nt><a href="#index-prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt> <emu-nt><a href="#index-prod-ExtendedAttributes">ExtendedAttributes</a></emu-nt> <emu-t>]</emu-t>
    ε

<emu-nt id="index-prod-ExtendedAttributes"><a href="#index-prod-ExtendedAttributes">ExtendedAttributes</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-nt><a href="#index-prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt> <emu-nt><a href="#index-prod-ExtendedAttributes">ExtendedAttributes</a></emu-nt>
    ε

<emu-nt id="index-prod-ExtendedAttribute"><a href="#index-prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt> ::
    <emu-t>(</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>)</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt>
    <emu-t>[</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>]</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt>
    <emu-t>{</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>}</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt>
    <emu-nt><a href="#index-prod-Other">Other</a></emu-nt> <emu-nt><a href="#index-prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt>

<emu-nt id="index-prod-ExtendedAttributeRest"><a href="#index-prod-ExtendedAttributeRest">ExtendedAttributeRest</a></emu-nt> ::
    <emu-nt><a href="#index-prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt>
    ε

<emu-nt id="index-prod-ExtendedAttributeInner"><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> ::
    <emu-t>(</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>)</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt>
    <emu-t>[</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>]</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt>
    <emu-t>{</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt> <emu-t>}</emu-t> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt>
    <emu-nt><a href="#index-prod-OtherOrComma">OtherOrComma</a></emu-nt> <emu-nt><a href="#index-prod-ExtendedAttributeInner">ExtendedAttributeInner</a></emu-nt>
    ε

<emu-nt id="index-prod-Other"><a href="#index-prod-Other">Other</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-integer">integer</a></emu-t>
    <emu-t class="regex"><a href="#prod-float">float</a></emu-t>
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>
    <emu-t class="regex"><a href="#prod-string">string</a></emu-t>
    <emu-t class="regex"><a href="#prod-other">other</a></emu-t>
    <emu-t>-</emu-t>
    <emu-t>-Infinity</emu-t>
    <emu-t>.</emu-t>
    <emu-t>...</emu-t>
    <emu-t>:</emu-t>
    <emu-t>;</emu-t>
    <emu-t>&lt;</emu-t>
    <emu-t>=</emu-t>
    <emu-t>&gt;</emu-t>
    <emu-t>?</emu-t>
    <emu-t>ByteString</emu-t>
    <emu-t>DOMString</emu-t>
    <emu-t>FrozenArray</emu-t>
    <emu-t>Infinity</emu-t>
    <emu-t>NaN</emu-t>
    <emu-t>USVString</emu-t>
    <emu-t>any</emu-t>
    <emu-t>boolean</emu-t>
    <emu-t>byte</emu-t>
    <emu-t>double</emu-t>
    <emu-t>false</emu-t>
    <emu-t>float</emu-t>
    <emu-t>long</emu-t>
    <emu-t>null</emu-t>
    <emu-t>object</emu-t>
    <emu-t>octet</emu-t>
    <emu-t>or</emu-t>
    <emu-t>optional</emu-t>
    <emu-t>sequence</emu-t>
    <emu-t>short</emu-t>
    <emu-t>true</emu-t>
    <emu-t>unsigned</emu-t>
    <emu-t>void</emu-t>
    <emu-nt><a href="#index-prod-ArgumentNameKeyword">ArgumentNameKeyword</a></emu-nt>
    <emu-nt><a href="#index-prod-BufferRelatedType">BufferRelatedType</a></emu-nt>

<emu-nt id="index-prod-OtherOrComma"><a href="#index-prod-OtherOrComma">OtherOrComma</a></emu-nt> ::
    <emu-nt><a href="#index-prod-Other">Other</a></emu-nt>
    <emu-t>,</emu-t>

<emu-nt id="index-prod-IdentifierList"><a href="#index-prod-IdentifierList">IdentifierList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#index-prod-Identifiers">Identifiers</a></emu-nt>

<emu-nt id="index-prod-Identifiers"><a href="#index-prod-Identifiers">Identifiers</a></emu-nt> ::
    <emu-t>,</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-nt><a href="#index-prod-Identifiers">Identifiers</a></emu-nt>
    ε

<emu-nt id="index-prod-ExtendedAttributeNoArgs"><a href="#index-prod-ExtendedAttributeNoArgs">ExtendedAttributeNoArgs</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>

<emu-nt id="index-prod-ExtendedAttributeArgList"><a href="#index-prod-ExtendedAttributeArgList">ExtendedAttributeArgList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>(</emu-t> <emu-nt><a href="#index-prod-ArgumentList">ArgumentList</a></emu-nt> <emu-t>)</emu-t>

<emu-nt id="index-prod-ExtendedAttributeIdent"><a href="#index-prod-ExtendedAttributeIdent">ExtendedAttributeIdent</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t>

<emu-nt id="index-prod-ExtendedAttributeIdentList"><a href="#index-prod-ExtendedAttributeIdentList">ExtendedAttributeIdentList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-t>(</emu-t> <emu-nt><a href="#index-prod-IdentifierList">IdentifierList</a></emu-nt> <emu-t>)</emu-t>

<emu-nt id="index-prod-ExtendedAttributeNamedArgList"><a href="#index-prod-ExtendedAttributeNamedArgList">ExtendedAttributeNamedArgList</a></emu-nt> ::
    <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>=</emu-t> <emu-t class="regex"><a href="#prod-identifier">identifier</a></emu-t> <emu-t>(</emu-t> <emu-nt><a href="#index-prod-ArgumentList">ArgumentList</a></emu-nt> <emu-t>)</emu-t>

</pre></div>
   <p class="note" role="note"><span>Note:</span> The <emu-nt><a href="#prod-Other">Other</a></emu-nt> non-terminal matches any single terminal symbol except for <emu-t>(</emu-t>, <emu-t>)</emu-t>, <emu-t>[</emu-t>, <emu-t>]</emu-t>, <emu-t>{</emu-t>, <emu-t>}</emu-t> and <emu-t>,</emu-t>.</p>
   <p>While the <emu-nt><a href="#prod-ExtendedAttribute">ExtendedAttribute</a></emu-nt> non-terminal matches any non-empty sequence of terminal symbols (as long as any
parentheses, square brackets or braces are balanced, and the <emu-t>,</emu-t> token appears only within those balanced brackets),
only a subset of those
possible sequences are used by the <a data-link-type="dfn" href="#dfn-extended-attribute" id="ref-for-dfn-extended-attribute①⑤⑧">extended attributes</a> defined in this specification — see <a href="#idl-extended-attributes">§2.13 Extended attributes</a> for the syntaxes that are used by these extended attributes.</p>
   <h2 class="no-num heading settled" id="conventions"><span class="content">Document conventions</span><a class="self-link" href="#conventions"></a></h2>
   <p>The following typographic conventions are used in this document:</p>
   <ul>
    <li data-md="">
     <p>Defining instances of terms: <dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport="" id="dfn-example-term">example term</dfn></p>
    </li><li data-md="">
     <p>Links to terms defined in this document or elsewhere: <a data-link-type="dfn" href="#dfn-example-term" id="ref-for-dfn-example-term">example term</a></p>
    </li><li data-md="">
     <p>Grammar terminals: <emu-t>sometoken</emu-t></p>
    </li><li data-md="">
     <p>Grammar non-terminals: <emu-nt>ExampleGrammarNonTerminal</emu-nt></p>
    </li><li data-md="">
     <p>Grammar symbols: <emu-t class="regex">identifier</emu-t></p>
    </li><li data-md="">
     <p>IDL types: <code class="idl"><a data-link-type="idl" href="#idl-unsigned-long" id="ref-for-idl-unsigned-long①②">unsigned long</a></code></p>
    </li><li data-md="">
     <p>ECMAScript classes: <code class="idl"><a data-link-type="idl" href="https://tc39.github.io/ecma262/#sec-map-objects" id="ref-for-sec-map-objects⑧">Map</a></code></p>
    </li><li data-md="">
     <p>ECMAScript language types: Object</p>
    </li><li data-md="">
     <p>Code snippets: <code>a = b + obj.f()</code></p>
    </li><li data-md="">
     <p>Unicode characters: <span class="char">U+0030 DIGIT ZERO ("0")</span></p>
    </li><li data-md="">
     <p>Extended attributes: [<code class="idl">ExampleExtendedAttribute</code>]</p>
    </li><li data-md="">
     <p>Variable names in prose and algorithms: <var>exampleVariableName</var>.</p>
    </li><li data-md="">
     <p>IDL informal syntax examples:</p>
<pre class="syntax highlight">[<c- g="">extended_attributes</c->]
<c- b="">interface</c-> <c- g="">identifier</c-> {
  <mark>/* interface_members... */</mark>
};
</pre>
     <p>(Specific parts of the syntax discussed in surrounding prose are <mark>highlighted</mark>.)</p>
    </li><li data-md="">
     <p>IDL grammar snippets:</p>
<pre class="grammar no-index"><emu-nt>ExampleGrammarNonTerminal</emu-nt> ::
    <emu-nt>OtherNonTerminal</emu-nt> <emu-t>sometoken</emu-t>
    <emu-t class="regex"><a href="#prod-other">other</a></emu-t> <emu-nt>AnotherNonTerminal</emu-nt>
    ε  // <emu-nt>nothing</emu-nt>
</pre>
    </li><li data-md="">
     <p>Non-normative notes:</p>
     <p class="note" role="note"><span>Note:</span> This is a note.</p>
    </li><li data-md="">
     <p>Non-normative examples:</p>
     <div class="example" id="example-263fb1aa"><a class="self-link" href="#example-263fb1aa"></a> This is an example. </div>
    </li><li data-md="">
     <p>Normative warnings:</p>
     <p class="advisement"> This is a warning. </p>
    </li><li data-md="">
     <p>Code blocks:</p>
<pre class="highlight">// This is an IDL code block.
[<c- g="">Exposed</c->=<c- n="">Window</c->]
<c- b="">interface</c-> <c- g="">Example</c-> {
  <c- b="">attribute</c-> <c- b="">long</c-> <c- g="">something</c->;
};
</pre>
<pre class="highlight"><c- c1="">// This is an ECMAScript code block.</c->
window<c- p="">.</c->onload <c- o="">=</c-> <c- a="">function</c-><c- p="">()</c-> <c- p="">{</c-> window<c- p="">.</c->alert<c- p="">(</c-><c- u="">"loaded"</c-><c- p="">);</c-> <c- p="">};</c->
</pre>
   </li></ul>
   <p>The following conventions are used in the algorithms in this document:</p>
   <ul>
    <li data-md="">
     <p>Algorithms use the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-algorithm-conventions" id="ref-for-sec-algorithm-conventions②">conventions</a> of the ECMAScript specification,
including the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑨⑤">!</a> and <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands" id="ref-for-sec-returnifabrupt-shorthands⑨⑥">?</a> notation for unwrapping <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①②">Completion Records</a>.</p>
    </li><li data-md="">
     <p>Algorithms sometimes treat returning/throwing values and returning <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①③">Completion Records</a> interchangeably. That is, an algorithm that uses return/throw terminology may be treated as
returning a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①④">Completion Record</a>, while one that returns a <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①⑤">Completion Record</a> may be treated as
returning a value or throwing an exception. Similarly, to catch exceptions, defining the
behavior to adopt when <a data-link-type="dfn" href="#an-exception-was-thrown" id="ref-for-an-exception-was-thrown②">an exception was thrown</a> and checking if the <a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①⑥">Completion Record</a>’s
[[Type]] field is “throw” are equivalent.</p>
    </li><li data-md="">
     <p><a data-link-type="dfn" href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type" id="ref-for-sec-completion-record-specification-type①⑦">Completion Records</a> are extended by allowing them to contain values that are not ECMAScript
values, such as Web IDL values.</p>
   </li></ul>
   <h2 class="no-num heading settled" id="conformance"><span class="content">Conformance</span><span id="conformant-algorithms"></span><a class="self-link" href="#conformance"></a></h2>
   <p>Everything in this specification is normative except for diagrams,
examples, notes and sections marked as being informative.</p>
   <p>The keywords “must”,
“must not”,
“required”,
“shall”,
“shall not”,
“should”,
“should not”,
“recommended”,
“may” and
“optional” in this document are to be
interpreted as described in <cite><a href="http://tools.ietf.org/html/rfc2119">Key words for use in RFCs to
Indicate Requirement Levels</a></cite> <a data-link-type="biblio" href="#biblio-rfc2119">[RFC2119]</a>.</p>
   <p>Requirements phrased in the imperative as part of algorithms (such as
“strip any leading space characters” or “return false and abort these
steps”) are to be interpreted with the meaning of the key word (“must”,
“should”, “may”, etc) used in introducing the algorithm.</p>
   <p>Conformance requirements phrased as algorithms or specific steps can be
implemented in any manner, so long as the end result is <dfn data-dfn-type="dfn" data-lt="processing equivalence" data-noexport="" id="dfn-processing-equivalence">equivalent<a class="self-link" href="#dfn-processing-equivalence"></a></dfn>. In
particular, the algorithms defined in this specification are intended to
be easy to understand and are not intended to be performant. Implementers
are encouraged to optimize.</p>
   <p>The following conformance classes are defined by this specification:</p>
   <dl>
    <dt data-md=""><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-conforming-set-of-idl-fragments">conforming set of IDL fragments</dfn>
    </dt><dd data-md="">
     <p>A set of <a data-link-type="dfn" href="#dfn-idl-fragment" id="ref-for-dfn-idl-fragment⑤⓪">IDL fragments</a> is considered
to be a <a data-link-type="dfn" href="#dfn-conforming-set-of-idl-fragments" id="ref-for-dfn-conforming-set-of-idl-fragments">conforming set of IDL fragments</a> if, taken together, they satisfy all of the
must-,
required- and shall-level
criteria in this specification that apply to IDL fragments.</p>
    </dd><dt data-md=""><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-conforming-implementation">conforming implementation</dfn>
    </dt><dd data-md="">
     <p>A user agent is considered to be a <a data-link-type="dfn" href="#dfn-conforming-implementation" id="ref-for-dfn-conforming-implementation②">conforming implementation</a> relative to a <a data-link-type="dfn" href="#dfn-conforming-set-of-idl-fragments" id="ref-for-dfn-conforming-set-of-idl-fragments①">conforming set of IDL fragments</a> if it satisfies all of the must-,
required- and shall-level
criteria in this specification that apply to implementations for all language
bindings that the user agent supports.</p>
    </dd><dt data-md=""><dfn class="dfn-paneled" data-dfn-type="dfn" data-export="" id="dfn-conforming-ecmascript-implementation">conforming ECMAScript implementation</dfn>
    </dt><dd data-md="">
     <p>A user agent is considered to be a <a data-link-type="dfn" href="#dfn-conforming-ecmascript-implementation" id="ref-for-dfn-conforming-ecmascript-implementation">conforming ECMAScript implementation</a> relative to a <a data-link-type="dfn" href="#dfn-conforming-set-of-idl-fragments" id="ref-for-dfn-conforming-set-of-idl-fragments②">conforming set of IDL fragments</a> if it satisfies all of the must-,
required- and shall-level
criteria in this specification that apply to implementations for the ECMAScript
language binding.</p>
   </dd></dl>

<script>
    // Rotated Table Headers
    /*! modernizr 3.3.1 (Custom Build) | MIT *
     * https://modernizr.com/download/?-csstransforms-setclasses !*/
    !function(e,n,t){function r(e,n){return typeof e===n}function o(){var e,n,t,o,s,i,a;for(var l in C)if(C.hasOwnProperty(l)){if(e=[],n=C[l],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;t<n.options.aliases.length;t++)e.push(n.options.aliases[t].toLowerCase());for(o=r(n.fn,"function")?n.fn():n.fn,s=0;s<e.length;s++)i=e[s],a=i.split("."),1===a.length?Modernizr[a[0]]=o:(!Modernizr[a[0]]||Modernizr[a[0]]instanceof Boolean||(Modernizr[a[0]]=new Boolean(Modernizr[a[0]])),Modernizr[a[0]][a[1]]=o),g.push((o?"":"no-")+a.join("-"))}}function s(e){var n=_.className,t=Modernizr._config.classPrefix||"";if(S&&(n=n.baseVal),Modernizr._config.enableJSClass){var r=new RegExp("(^|\\s)"+t+"no-js(\\s|$)");n=n.replace(r,"$1"+t+"js$2")}Modernizr._config.enableClasses&&(n+=" "+t+e.join(" "+t),S?_.className.baseVal=n:_.className=n)}function i(e,n){return!!~(""+e).indexOf(n)}function a(){return"function"!=typeof n.createElement?n.createElement(arguments[0]):S?n.createElementNS.call(n,"http://www.w3.org/2000/svg",arguments[0]):n.createElement.apply(n,arguments)}function l(e){return e.replace(/([a-z])-([a-z])/g,function(e,n,t){return n+t.toUpperCase()}).replace(/^-/,"")}function f(e,n){return function(){return e.apply(n,arguments)}}function u(e,n,t){var o;for(var s in e)if(e[s]in n)return t===!1?e[s]:(o=n[e[s]],r(o,"function")?f(o,t||n):o);return!1}function d(e){return e.replace(/([A-Z])/g,function(e,n){return"-"+n.toLowerCase()}).replace(/^ms-/,"-ms-")}function c(){var e=n.body;return e||(e=a(S?"svg":"body"),e.fake=!0),e}function p(e,t,r,o){var s,i,l,f,u="modernizr",d=a("div"),p=c();if(parseInt(r,10))for(;r--;)l=a("div"),l.id=o?o[r]:u+(r+1),d.appendChild(l);return s=a("style"),s.type="text/css",s.id="s"+u,(p.fake?p:d).appendChild(s),p.appendChild(d),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(n.createTextNode(e)),d.id=u,p.fake&&(p.style.background="",p.style.overflow="hidden",f=_.style.overflow,_.style.overflow="hidden",_.appendChild(p)),i=t(d,e),p.fake?(p.parentNode.removeChild(p),_.style.overflow=f,_.offsetHeight):d.parentNode.removeChild(d),!!i}function m(n,r){var o=n.length;if("CSS"in e&&"supports"in e.CSS){for(;o--;)if(e.CSS.supports(d(n[o]),r))return!0;return!1}if("CSSSupportsRule"in e){for(var s=[];o--;)s.push("("+d(n[o])+":"+r+")");return s=s.join(" or "),p("@supports ("+s+") { #modernizr { position: absolute; } }",function(e){return"absolute"==getComputedStyle(e,null).position})}return t}function h(e,n,o,s){function f(){d&&(delete z.style,delete z.modElem)}if(s=r(s,"undefined")?!1:s,!r(o,"undefined")){var u=m(e,o);if(!r(u,"undefined"))return u}for(var d,c,p,h,v,y=["modernizr","tspan","samp"];!z.style&&y.length;)d=!0,z.modElem=a(y.shift()),z.style=z.modElem.style;for(p=e.length,c=0;p>c;c++)if(h=e[c],v=z.style[h],i(h,"-")&&(h=l(h)),z.style[h]!==t){if(s||r(o,"undefined"))return f(),"pfx"==n?h:!0;try{z.style[h]=o}catch(g){}if(z.style[h]!=v)return f(),"pfx"==n?h:!0}return f(),!1}function v(e,n,t,o,s){var i=e.charAt(0).toUpperCase()+e.slice(1),a=(e+" "+b.join(i+" ")+i).split(" ");return r(n,"string")||r(n,"undefined")?h(a,n,o,s):(a=(e+" "+E.join(i+" ")+i).split(" "),u(a,n,t))}function y(e,n,r){return v(e,t,t,n,r)}var g=[],C=[],w={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){C.push({name:e,fn:n,options:t})},addAsyncTest:function(e){C.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=w,Modernizr=new Modernizr;var _=n.documentElement,S="svg"===_.nodeName.toLowerCase(),x="Moz O ms Webkit",b=w._config.usePrefixes?x.split(" "):[];w._cssomPrefixes=b;var E=w._config.usePrefixes?x.toLowerCase().split(" "):[];w._domPrefixes=E;var P={elem:a("modernizr")};Modernizr._q.push(function(){delete P.elem});var z={style:P.elem.style};Modernizr._q.unshift(function(){delete z.style}),w.testAllProps=v,w.testAllProps=y,Modernizr.addTest("csstransforms",function(){return-1===navigator.userAgent.indexOf("Android 2.")&&y("transform","scale(1)",!0)}),o(),s(g),delete w.addTest,delete w.addAsyncTest;for(var N=0;N<Modernizr._q.length;N++)Modernizr._q[N]();e.Modernizr=Modernizr}(window,document);

    // Scrollspy
    var createScrollSpy = (function() {

        function targetId(element) {
            return (element.href || "").split("#")[1] || null;
        }

        function getScrollTop() {
            return (window.pageYOffset !== undefined)
                ? window.pageYOffset
                : (document.documentElement || document.body.parentNode || document.body).scrollTop;
        }

        function addClassToParents(element, className, parentClassName) {
            do {
                element = element.parentNode;
            } while (element && element.tagName != "LI")
            if (element) {
                var a = element.querySelector("a");
                if (a) a.className = className;
                addClassToParents(element, parentClassName ? parentClassName : className);
            }
        }

        function getPosition(element, container) {
            var eR = element.getBoundingClientRect();
            var cR = container.getBoundingClientRect();
            if (eR.bottom < cR.top) return "above";
            if (eR.top > cR.bottom) return "below";
            return "visible";
        }

        function createScrollSpy(options) {
            options = options || {};

            var OFFSET = 80,
                needsUpdate = false,
                previous = null,
                current = null,
                currentNav = null,
                tocContainer,
                toc,
                sections;

            tocContainer = document.querySelector(options.id);
            toc = [].slice.call(tocContainer.querySelectorAll("a"), 0);
            sections = toc.reduce(function(sections, a) {
                var id = targetId(a);
                var section = id ? document.getElementById(id) : null;
                if (section) { sections.push(section); }
                return sections;
            }, []);

            function onscroll() {
                if (!needsUpdate) {
                    needsUpdate = true;
                    requestAnimationFrame(updatePosition);
                }
            }

            function updatePosition() {
                needsUpdate = false;
                var scrollTop = (options.offset || 0) + getScrollTop();
                current = sections.filter(function(section){
                    return section.offsetTop < scrollTop;
                }).pop();
                current = current ? current.id : null;

                if (previous !== current) {
                    previous = current;
                    toc.forEach(function(a) {
                        if (targetId(a) == current) {
                            currentNav = a;
                        } else {
                            a.className = "";
                        }
                    });
                    if (options.markParents) {
                        addClassToParents(currentNav, options.className, options.parentClassName)
                    } else {
                        currentNav.className = options.className;
                    }
                    if (options.scrollIntoView && typeof currentNav.scrollIntoView == "function") {
                        var p = getPosition(currentNav, tocContainer);
                        if (p == "above") {
                            currentNav.scrollIntoView(true);
                        } else if (p == "below") {
                            currentNav.scrollIntoView(false);
                        }
                    }
                }
            }

            return {
                start: function() {
                    window.addEventListener("scroll", onscroll, false);
                },

                stop: function() {
                    window.removeEventListener("scroll", onscroll, false);
                    toc.forEach(function(a) {
                        a.className = "";
                    });
                }
            }
        }

        return createScrollSpy;
    })();

    (function() {
        var spy = createScrollSpy({
            offset: 80,
            id: "#toc",
            className: "current",
            parentClassName: "current-parent",
            markParents: true,
            scrollIntoView: true
        });

        var mm = window.matchMedia('screen and (min-width: 78em)');
        if (mm.matches) {
            spy.start();
        }
        mm.addListener(function(m) {
            if (m.matches) spy.start();
            else spy.stop();
        });
    })();
</script>
  </main>
  <p id="back-to-top" role="navigation"><a href="#toc"><abbr title="Back to top">↑</abbr></a></p>
  . 
<script src="https://www.w3.org/scripts/TR/2016/fixup.js"></script>
  <h2 class="no-num no-ref heading settled" id="index"><span class="content">Index</span><a class="self-link" href="#index"></a></h2>
  <h3 class="no-num no-ref heading settled" id="index-defined-here"><span class="content">Terms defined by this specification</span><a class="self-link" href="#index-defined-here"></a></h3>
  <ul class="index">
   <li><a href="#dom-domexception-abort_err">ABORT_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#aborterror">AbortError</a><span>, in §2.7.1</span>
   </li><li><a href="#AllowShared">AllowShared</a><span>, in §3.3</span>
   </li><li><a href="#an-exception-was-thrown">an exception was thrown</a><span>, in §3.12.4</span>
   </li><li><a href="#annotated-types">annotated types</a><span>, in §2.12.29</span>
   </li><li><a href="#idl-any">any</a><span>, in §2.12</span>
   </li><li><a href="#extended-attributes-applicable-to-types">applicable to types</a><span>, in §2.12.29</span>
   </li><li><a href="#idl-ArrayBuffer">ArrayBuffer</a><span>, in §2.12.31</span>
   </li><li><a href="#ArrayBufferView">ArrayBufferView</a><span>, in §4</span>
   </li><li><a href="#dfn-associated-realm">associated Realm</a><span>, in §3.1</span>
   </li><li><a href="#dfn-attribute">attribute</a><span>, in §2.4.2</span>
   </li><li><a href="#dfn-attribute-getter">attribute getter</a><span>, in §3.6.7</span>
   </li><li><a href="#dfn-attribute-setter">attribute setter</a><span>, in §3.6.7</span>
   </li><li><a href="#available-in-both-secure-and-non-secure-contexts">available in both secure and non-secure contexts</a><span>, in §3.3.20</span>
   </li><li><a href="#dfn-available-only-in-secure-contexts">available only in secure contexts</a><span>, in §3.3.20</span>
   </li><li><a href="#idl-boolean">boolean</a><span>, in §2.12.1</span>
   </li><li><a href="#BufferSource">BufferSource</a><span>, in §4.1</span>
   </li><li><a href="#dfn-buffer-source-type">buffer source types</a><span>, in §2.12</span>
   </li><li><a href="#idl-byte">byte</a><span>, in §2.12.2</span>
   </li><li><a href="#idl-ByteString">ByteString</a><span>, in §2.12.15</span>
   </li><li><a href="#effective-overload-set-tuple-callable">callable</a><span>, in §2.4.6</span>
   </li><li><a href="#call-a-user-objects-operation">call a user object’s operation</a><span>, in §3.9</span>
   </li><li><a href="#dfn-callback-context">callback context</a><span>, in §2.12.20</span>
   </li><li><a href="#dfn-callback-function">callback function</a><span>, in §2.9</span>
   </li><li><a href="#idl-callback-function">Callback function types</a><span>, in §2.12.22</span>
   </li><li><a href="#dfn-callback-interface">callback interface</a><span>, in §2.2</span>
   </li><li><a href="#dfn-callback-this-value">callback this value</a><span>, in §3.9</span>
   </li><li><a href="#dfn-change-global-environment">change</a><span>, in §3.7</span>
   </li><li><a href="#Clamp">Clamp</a><span>, in §3.3.1</span>
   </li><li><a href="#dfn-class-string">class string</a><span>, in §3</span>
   </li><li><a href="#dom-domexception-code">code</a><span>, in §4.3</span>
   </li><li><a href="#dfn-code-unit">code units</a><span>, in §2.4.3</span>
   </li><li><a href="#collect-attribute-values">collect attribute values</a><span>, in §3.6.8.1.1</span>
   </li><li><a href="#collect-attribute-values-of-an-inheritance-stack">collect attribute values of an inheritance stack</a><span>, in §3.6.8.1.1</span>
   </li><li><a href="#dfn-conforming-ecmascript-implementation">conforming ECMAScript implementation</a><span>, in §Unnumbered section</span>
   </li><li><a href="#dfn-conforming-implementation">conforming implementation</a><span>, in §Unnumbered section</span>
   </li><li><a href="#dfn-conforming-set-of-idl-fragments">conforming set of IDL fragments</a><span>, in §Unnumbered section</span>
   </li><li><a href="#dfn-constant">constant</a><span>, in §2.4.1</span>
   </li><li><a href="#constrainterror">ConstraintError</a><span>, in §2.7.1</span>
   </li><li><a href="#construct-a-callback-function">construct</a><span>, in §3.10</span>
   </li><li><a href="#Constructor">Constructor</a><span>, in §3.3.2</span>
   </li><li><a href="#dfn-convert-idl-to-ecmascript-value">converted to an ECMAScript value</a><span>, in §3.2</span>
   </li><li><a href="#dfn-convert-ecmascript-to-idl-value">converted to an IDL value</a><span>, in §3.2</span>
   </li><li><a href="#dfn-convert-idl-to-ecmascript-value">converted to ECMAScript values</a><span>, in §3.2</span>
   </li><li><a href="#dfn-convert-ecmascript-to-idl-value">converted to IDL values</a><span>, in §3.2</span>
   </li><li><a href="#web-idl-arguments-list-converting">converting</a><span>, in §3.9</span>
   </li><li><a href="#dfn-obtain-unicode">convert to a sequence of Unicode scalar values</a><span>, in §2.12.15</span>
   </li><li><a href="#abstract-opdef-converttoint">ConvertToInt</a><span>, in §3.2.4.9</span>
   </li><li><a href="#corresponding-default-operation">corresponding default operation</a><span>, in §3.6.8.1</span>
   </li><li><a href="#dfn-create-frozen-array">create a frozen array</a><span>, in §3.2.26</span>
   </li><li><a href="#create-a-legacy-callback-interface-object">create a legacy callback interface object</a><span>, in §3.6.4</span>
   </li><li><a href="#create-a-named-constructor">create a named constructor</a><span>, in §3.6.2</span>
   </li><li><a href="#create-a-named-properties-object">create a named properties object</a><span>, in §3.6.5</span>
   </li><li><a href="#create-an-inheritance-stack">create an inheritance stack</a><span>, in §3.6.8.1.1</span>
   </li><li><a href="#create-an-interface-object">create an interface object</a><span>, in §3.6.1</span>
   </li><li><a href="#create-an-interface-prototype-object">create an interface prototype object</a><span>, in §3.6.3</span>
   </li><li><a href="#dfn-create-exception">created</a><span>, in §2.7</span>
   </li><li><a href="#create-frozen-array-from-iterable">Creating a frozen array from an iterable</a><span>, in §3.2.26</span>
   </li><li><a href="#dfn-create-operation-function">creating an operation function</a><span>, in §3.6.8</span>
   </li><li><a href="#create-sequence-from-iterable">Creating a sequence from an iterable</a><span>, in §3.2.19</span>
   </li><li><a href="#dom-domexception-data_clone_err">DATA_CLONE_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#datacloneerror">DataCloneError</a><span>, in §2.7.1</span>
   </li><li><a href="#dataerror">DataError</a><span>, in §2.7.1</span>
   </li><li><a href="#idl-DataView">DataView</a><span>, in §2.12.31</span>
   </li><li><a href="#Default">Default</a><span>, in §3.3.3</span>
   </li><li><a href="#dfn-default-iterator-object">default iterator object</a><span>, in §3.6.10.4</span>
   </li><li><a href="#default-tojson-operation">default toJSON operation</a><span>, in §3.6.8.1.1</span>
   </li><li>
    default value
    <ul>
     <li><a href="#dfn-dictionary-member-default-value">dfn for dictionary member</a><span>, in §2.6</span>
     </li><li><a href="#dfn-optional-argument-default-value">dfn for optional argument</a><span>, in §2.4.3</span>
    </li></ul>
   </li><li><a href="#define-the-attributes">define the attributes</a><span>, in §3.6.7</span>
   </li><li><a href="#define-the-constants">define the constants</a><span>, in §3.6.6</span>
   </li><li><a href="#define-the-operations">define the operations</a><span>, in §3.6.8</span>
   </li><li><a href="#define-the-regular-attributes">define the regular attributes</a><span>, in §3.6.7</span>
   </li><li><a href="#define-the-regular-operations">define the regular operations</a><span>, in §3.6.8</span>
   </li><li><a href="#define-the-static-attributes">define the static attributes</a><span>, in §3.6.7</span>
   </li><li><a href="#define-the-static-operations">define the static operations</a><span>, in §3.6.8</span>
   </li><li><a href="#define-the-unforgeable-regular-attributes">define the unforgeable regular attributes</a><span>, in §3.6.7</span>
   </li><li><a href="#define-the-unforgeable-regular-operations">define the unforgeable regular operations</a><span>, in §3.6.8</span>
   </li><li><a href="#dfn-definition">definitions</a><span>, in §2</span>
   </li><li><a href="#dfn-delete-an-existing-named-property">delete an existing named property</a><span>, in §2.4.4.3</span>
   </li><li><a href="#dfn-deleter">deleter</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-detach">detach</a><span>, in §3.2.25</span>
   </li><li><a href="#dfn-determine-the-value-of-a-named-property">determine the value of a named property</a><span>, in §2.4.4.3</span>
   </li><li><a href="#dfn-determine-the-value-of-an-indexed-property">determine the value of an indexed property</a><span>, in §2.4.4.2</span>
   </li><li><a href="#dfn-dictionary">dictionary</a><span>, in §2.6</span>
   </li><li><a href="#dfn-dictionary-member">dictionary members</a><span>, in §2.6</span>
   </li><li><a href="#idl-dictionary">Dictionary types</a><span>, in §2.12.20</span>
   </li><li><a href="#dfn-distinguishable">distinguishable</a><span>, in §2.4.6</span>
   </li><li><a href="#dfn-distinguishing-argument-index">distinguishing argument index</a><span>, in §2.4.6</span>
   </li><li><a href="#idl-DOMException">DOMException</a><span>, in §4.2</span>
   </li><li><a href="#dom-domexception-domexception">DOMException(message, name)</a><span>, in §4.3</span>
   </li><li><a href="#idl-DOMString">DOMString</a><span>, in §2.12.14</span>
   </li><li><a href="#dom-domexception-domstring_size_err">DOMSTRING_SIZE_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#domstringsizeerror">DOMStringSizeError</a><span>, in §2.7.1</span>
   </li><li><a href="#DOMTimeStamp">DOMTimeStamp</a><span>, in §4.3</span>
   </li><li><a href="#idl-double">double</a><span>, in §2.12.12</span>
   </li><li><a href="#ecmascript-throw">ECMAScript throw</a><span>, in §3</span>
   </li><li><a href="#dfn-effective-overload-set">effective overload set</a><span>, in §2.4.6</span>
   </li><li><a href="#encodingerror">EncodingError</a><span>, in §2.7.1</span>
   </li><li><a href="#EnforceRange">EnforceRange</a><span>, in §3.3.4</span>
   </li><li><a href="#dfn-enumeration">enumeration</a><span>, in §2.8</span>
   </li><li><a href="#idl-enumeration">Enumeration types</a><span>, in §2.12.21</span>
   </li><li><a href="#dfn-enumeration-value">enumeration value</a><span>, in §2.8</span>
   </li><li><a href="#idl-Error">Error</a><span>, in §2.12.29</span>
   </li><li><a href="#dfn-exception-error-name">error name</a><span>, in §2.7</span>
   </li><li><a href="#dfn-error-names-table">error names table</a><span>, in §2.7.1</span>
   </li><li><a href="#exceptiondef-evalerror">EvalError</a><span>, in §2.7</span>
   </li><li><a href="#dfn-example-term">example term</a><span>, in §Unnumbered section</span>
   </li><li><a href="#dfn-exception">exception</a><span>, in §2.7</span>
   </li><li><a href="#es-exception-objects">Exception objects</a><span>, in §3.12.1</span>
   </li><li><a href="#dfn-exception-type">exception types</a><span>, in §2.12</span>
   </li><li><a href="#Exposed">Exposed</a><span>, in §3.3.5</span>
   </li><li><a href="#dfn-exposed">exposed</a><span>, in §3.3.6</span>
   </li><li><a href="#dfn-expose">exposes</a><span>, in §3.1</span>
   </li><li><a href="#dfn-exposure-set">exposure set</a><span>, in §3.3.6</span>
   </li><li><a href="#dfn-extended-attribute">extended attribute</a><span>, in §2.13</span>
   </li><li><a href="#idl-type-extended-attribute-associated-with">extended attribute associated with</a><span>, in §2.12.29</span>
   </li><li><a href="#idl-type-extended-attribute-associated-with">extended attributes associated with</a><span>, in §2.12.29</span>
   </li><li><a href="#dfn-flattened-union-member-types">flattened member types</a><span>, in §2.12.28</span>
   </li><li><a href="#idl-float">float</a><span>, in §2.12.10</span>
   </li><li><a href="#idl-Float32Array">Float32Array</a><span>, in §2.12.31</span>
   </li><li><a href="#idl-Float64Array">Float64Array</a><span>, in §2.12.31</span>
   </li><li><a href="#dfn-forwards-to-the-internal-map-object">forwards to the internal map object</a><span>, in §3.6.11</span>
   </li><li><a href="#dfn-forwards-to-the-internal-set-object">forwards to the internal set object</a><span>, in §3.6.12</span>
   </li><li><a href="#idl-frozen-array">FrozenArray</a><span>, in §2.12.31</span>
   </li><li><a href="#idl-frozen-array">FrozenArray&lt;T&gt;</a><span>, in §2.12.31</span>
   </li><li><a href="#dfn-frozen-array-type">frozen array type</a><span>, in §2.12.32</span>
   </li><li><a href="#Function">Function</a><span>, in §4.4</span>
   </li><li><a href="#dfn-get-buffer-source-copy">get a copy of the buffer source</a><span>, in §2.12.31</span>
   </li><li><a href="#dfn-get-buffer-source-reference">get a reference to the buffer source</a><span>, in §2.12.31</span>
   </li><li><a href="#get-a-user-objects-attribute-value">get a user object’s attribute value</a><span>, in §3.9</span>
   </li><li><a href="#legacy-platform-object-getownproperty">GetOwnProperty</a><span>, in §3.8</span>
   </li><li><a href="#dfn-getter">getter</a><span>, in §2.4.4</span>
   </li><li><a href="#get-the-underlying-value">get the underlying value</a><span>, in §2.4.2</span>
   </li><li><a href="#Global">Global</a><span>, in §3.3.6</span>
   </li><li><a href="#dfn-global-name">global names</a><span>, in §3.3.7</span>
   </li><li><a href="#dom-domexception-hierarchy_request_err">HIERARCHY_REQUEST_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#hierarchyrequesterror">HierarchyRequestError</a><span>, in §2.7.1</span>
   </li><li><a href="#host-interfaces">host interfaces</a><span>, in §2.3</span>
   </li><li><a href="#dfn-identifier">identifier</a><span>, in §2.1</span>
   </li><li><a href="#dfn-idl-fragment">IDL fragment</a><span>, in §2</span>
   </li><li><a href="#include">include</a><span>, in §2.3</span>
   </li><li><a href="#dfn-includes-a-nullable-type">includes a nullable type</a><span>, in §2.12.28</span>
   </li><li><a href="#includes-statement">includes statement</a><span>, in §2.3</span>
   </li><li><a href="#idl-indexed-properties">Indexed properties</a><span>, in §2.4.4.1</span>
   </li><li><a href="#dfn-indexed-property-getter">indexed property getter</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-indexed-property-setter">indexed property setter</a><span>, in §2.4.4</span>
   </li><li><a href="#dom-domexception-index_size_err">INDEX_SIZE_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#indexsizeerror">IndexSizeError</a><span>, in §2.7.1</span>
   </li><li>
    inherit
    <ul>
     <li><a href="#dfn-inherit-dictionary">dfn for dictionary</a><span>, in §2.6</span>
     </li><li><a href="#dfn-inherit">dfn for interface</a><span>, in §2.2</span>
    </li></ul>
   </li><li><a href="#dfn-inherited-dictionaries">inherited dictionaries</a><span>, in §2.6</span>
   </li><li><a href="#dfn-inherited-interfaces">inherited interfaces</a><span>, in §2.2</span>
   </li><li><a href="#dfn-inherit-getter">inherit its getter</a><span>, in §2.4.2</span>
   </li><li><a href="#dfn-initial-object">initial objects</a><span>, in §3.1</span>
   </li><li>
    inner type
    <ul>
     <li><a href="#annotated-types-inner-type">dfn for annotated types</a><span>, in §2.12.29</span>
     </li><li><a href="#dfn-inner-type">dfn for nullable types</a><span>, in §2.12.24</span>
    </li></ul>
   </li><li><a href="#idl-Int16Array">Int16Array</a><span>, in §2.12.31</span>
   </li><li><a href="#idl-Int32Array">Int32Array</a><span>, in §2.12.31</span>
   </li><li><a href="#idl-Int8Array">Int8Array</a><span>, in §2.12.31</span>
   </li><li><a href="#abstract-opdef-integerpart">IntegerPart</a><span>, in §3.2.4.9</span>
   </li><li><a href="#dfn-integer-type">integer types</a><span>, in §2.12</span>
   </li><li><a href="#dfn-interface">interface</a><span>, in §2.2</span>
   </li><li><a href="#dfn-interface-member">interface member</a><span>, in §2.2</span>
   </li><li><a href="#interface-mixin">interface mixin</a><span>, in §2.3</span>
   </li><li><a href="#interface-mixin-member">interface mixin member</a><span>, in §2.3</span>
   </li><li><a href="#dfn-interface-object">interface object</a><span>, in §3.6</span>
   </li><li><a href="#dfn-interface-prototype-object">interface prototype object</a><span>, in §3.6.3</span>
   </li><li><a href="#idl-interface">Interface types</a><span>, in §2.12.19</span>
   </li><li><a href="#dom-domexception-inuse_attribute_err">INUSE_ATTRIBUTE_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#inuseattributeerror">InUseAttributeError</a><span>, in §2.7.1</span>
   </li><li><a href="#dom-domexception-invalid_access_err">INVALID_ACCESS_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#invalidaccesserror">InvalidAccessError</a><span>, in §2.7.1</span>
   </li><li><a href="#dom-domexception-invalid_character_err">INVALID_CHARACTER_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#invalidcharactererror">InvalidCharacterError</a><span>, in §2.7.1</span>
   </li><li><a href="#dom-domexception-invalid_modification_err">INVALID_MODIFICATION_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#invalidmodificationerror">InvalidModificationError</a><span>, in §2.7.1</span>
   </li><li><a href="#dom-domexception-invalid_node_type_err">INVALID_NODE_TYPE_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#invalidnodetypeerror">InvalidNodeTypeError</a><span>, in §2.7.1</span>
   </li><li><a href="#dom-domexception-invalid_state_err">INVALID_STATE_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#invalidstateerror">InvalidStateError</a><span>, in §2.7.1</span>
   </li><li><a href="#invoke-a-callback-function">invoke</a><span>, in §3.10</span>
   </li><li><a href="#invoke-indexed-setter">invoke the indexed property setter</a><span>, in §3.8.7</span>
   </li><li><a href="#invoke-named-setter">invoke the named property setter</a><span>, in §3.8.7</span>
   </li><li><a href="#is-an-array-index">is an array index</a><span>, in §3.8.7</span>
   </li><li><a href="#is-an-array-index">is not an array index</a><span>, in §3.8.7</span>
   </li><li><a href="#dfn-iterable">iterable</a><span>, in §2.4.7</span>
   </li><li><a href="#dfn-iterable-declaration">iterable declaration</a><span>, in §2.4.7</span>
   </li><li><a href="#dfn-iterator-prototype-object">iterator prototype object</a><span>, in §3.6.10.5</span>
   </li><li><a href="#dfn-json-types">JSON type</a><span>, in §2.4.3.1</span>
   </li><li><a href="#dfn-legacy-callback-interface-object">legacy callback interface object</a><span>, in §3.6.4</span>
   </li><li><a href="#LegacyNamespace">LegacyNamespace</a><span>, in §3.3.7</span>
   </li><li><a href="#LegacyPlatformObjectGetOwnProperty">LegacyPlatformObjectGetOwnProperty</a><span>, in §3.8.7</span>
   </li><li><a href="#dfn-legacy-platform-object">Legacy platform objects</a><span>, in §2.11</span>
   </li><li><a href="#LegacyUnenumerableNamedProperties">LegacyUnenumerableNamedProperties</a><span>, in §3.3.8</span>
   </li><li><a href="#LegacyWindowAlias">LegacyWindowAlias</a><span>, in §3.3.9</span>
   </li><li><a href="#legacywindowalias-identifier">LegacyWindowAlias identifier</a><span>, in §3.3.10</span>
   </li><li><a href="#LenientSetter">LenientSetter</a><span>, in §3.3.10</span>
   </li><li><a href="#LenientThis">LenientThis</a><span>, in §3.3.11</span>
   </li><li><a href="#idl-long">long</a><span>, in §2.12.6</span>
   </li><li><a href="#idl-long-long">long long</a><span>, in §2.12.8</span>
   </li><li><a href="#dfn-map-entries">map entries</a><span>, in §2.4.8</span>
   </li><li><a href="#dfn-maplike">maplike</a><span>, in §2.4.8</span>
   </li><li><a href="#dfn-maplike-declaration">maplike declaration</a><span>, in §2.4.8</span>
   </li><li><a href="#dfn-map-size-getter">map size getter</a><span>, in §3.6.11.1</span>
   </li><li><a href="#dfn-member">members</a><span>, in §2.4</span>
   </li><li><a href="#dfn-union-member-type">member types</a><span>, in §2.12.28</span>
   </li><li>
    message
    <ul>
     <li><a href="#dom-domexception-message">attribute for DOMException</a><span>, in §4.3</span>
     </li><li><a href="#domexception-message">dfn for DOMException</a><span>, in §4.3</span>
     </li><li><a href="#dfn-exception-message">dfn for exception</a><span>, in §2.7</span>
    </li></ul>
   </li><li>
    name
    <ul>
     <li><a href="#dom-domexception-name">attribute for DOMException</a><span>, in §4.3</span>
     </li><li><a href="#domexception-name">dfn for DOMException</a><span>, in §4.3</span>
    </li></ul>
   </li><li><a href="#dfn-named-constructor">named constructor</a><span>, in §3.6</span>
   </li><li><a href="#NamedConstructor">NamedConstructor</a><span>, in §3.3.12</span>
   </li><li><a href="#namedconstructor-identifier">NamedConstructor identifier</a><span>, in §3.3.13</span>
   </li><li><a href="#dfn-named-definition">named definition</a><span>, in §2.1</span>
   </li><li><a href="#idl-named-properties">Named properties</a><span>, in §2.4.4.2</span>
   </li><li><a href="#dfn-named-properties-object">named properties object</a><span>, in §3.6.5</span>
   </li><li><a href="#dfn-named-property-deleter">named property deleter</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-named-property-getter">named property getter</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-named-property-setter">named property setter</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-named-property-visibility">named property visibility algorithm</a><span>, in §3.8.7</span>
   </li><li><a href="#dfn-namespace">namespace</a><span>, in §2.5</span>
   </li><li><a href="#dom-domexception-namespace_err">NAMESPACE_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#namespaceerror">NamespaceError</a><span>, in §2.7.1</span>
   </li><li><a href="#dfn-namespace-member">namespace member</a><span>, in §2.5</span>
   </li><li><a href="#dfn-namespace-object">namespace object</a><span>, in §3.11</span>
   </li><li><a href="#dom-domexception-network_err">NETWORK_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#networkerror">NetworkError</a><span>, in §2.7.1</span>
   </li><li><a href="#NewObject">NewObject</a><span>, in §3.3.13</span>
   </li><li><a href="#dom-domexception-no_data_allowed_err">NO_DATA_ALLOWED_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#nodataallowederror">NoDataAllowedError</a><span>, in §2.7.1</span>
   </li><li><a href="#NoInterfaceObject">NoInterfaceObject</a><span>, in §3.3.14</span>
   </li><li><a href="#dom-domexception-no_modification_allowed_err">NO_MODIFICATION_ALLOWED_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#nomodificationallowederror">NoModificationAllowedError</a><span>, in §2.7.1</span>
   </li><li><a href="#notallowederror">NotAllowedError</a><span>, in §2.7.1</span>
   </li><li><a href="#dom-domexception-not_found_err">NOT_FOUND_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#notfounderror">NotFoundError</a><span>, in §2.7.1</span>
   </li><li><a href="#dfn-present">not present</a><span>, in §2.6</span>
   </li><li><a href="#notreadableerror">NotReadableError</a><span>, in §2.7.1</span>
   </li><li><a href="#dom-domexception-not_supported_err">NOT_SUPPORTED_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#notsupportederror">NotSupportedError</a><span>, in §2.7.1</span>
   </li><li><a href="#dfn-nullable-type">nullable type</a><span>, in §2.12.24</span>
   </li><li><a href="#dfn-number-of-nullable-member-types">number of nullable member types</a><span>, in §2.12.28</span>
   </li><li><a href="#dfn-numeric-type">numeric types</a><span>, in §2.12</span>
   </li><li><a href="#idl-object">object</a><span>, in §2.12.17</span>
   </li><li><a href="#dfn-object-type">object types</a><span>, in §2.12</span>
   </li><li><a href="#dfn-obtain-unicode">obtain Unicode</a><span>, in §2.12.15</span>
   </li><li><a href="#idl-octet">octet</a><span>, in §2.12.3</span>
   </li><li><a href="#dfn-operation">operation</a><span>, in §2.4.3</span>
   </li><li><a href="#operationerror">OperationError</a><span>, in §2.7.1</span>
   </li><li><a href="#dfn-optional-argument">optional argument</a><span>, in §2.4.3</span>
   </li><li><a href="#optionality-list">optionality list</a><span>, in §2.4.6</span>
   </li><li><a href="#dfn-optionality-value">optionality values</a><span>, in §2.4.6</span>
   </li><li><a href="#dfn-overloaded">overloaded</a><span>, in §2.4.6</span>
   </li><li><a href="#dfn-overload-resolution-algorithm">overload resolution algorithm</a><span>, in §3.5</span>
   </li><li><a href="#OverrideBuiltins">OverrideBuiltins</a><span>, in §3.3.15</span>
   </li><li><a href="#own-exposure-set">own exposure set</a><span>, in §3.3.6</span>
   </li><li><a href="#dfn-pair-iterator">pair iterator</a><span>, in §2.4.7</span>
   </li><li><a href="#dfn-partial-dictionary">partial dictionary</a><span>, in §2.6</span>
   </li><li><a href="#dfn-partial-interface">partial interface</a><span>, in §2.2</span>
   </li><li><a href="#partial-interface-mixin">partial interface mixin</a><span>, in §2.3</span>
   </li><li><a href="#dfn-partial-namespace">partial namespace</a><span>, in §2.5</span>
   </li><li><a href="#dfn-perform-a-security-check">perform a security check</a><span>, in §3.4</span>
   </li><li><a href="#dfn-platform-object">platform object</a><span>, in §2.11</span>
   </li><li><a href="#dfn-present">present</a><span>, in §2.6</span>
   </li><li><a href="#dfn-primary-interface">primary interface</a><span>, in §3.7</span>
   </li><li><a href="#dfn-primitive-type">primitive types</a><span>, in §2.12</span>
   </li><li><a href="#dfn-processing-equivalence">processing equivalence</a><span>, in §Unnumbered section</span>
   </li><li><a href="#idl-promise">Promise</a><span>, in §2.12.26</span>
   </li><li><a href="#idl-promise">Promise&lt;T&gt;</a><span>, in §2.12.26</span>
   </li><li><a href="#dfn-promise-type">promise type</a><span>, in §2.12.27</span>
   </li><li><a href="#PutForwards">PutForwards</a><span>, in §3.3.16</span>
   </li><li><a href="#dom-domexception-quota_exceeded_err">QUOTA_EXCEEDED_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#quotaexceedederror">QuotaExceededError</a><span>, in §2.7.1</span>
   </li><li><a href="#exceptiondef-rangeerror">RangeError</a><span>, in §2.7</span>
   </li><li><a href="#dfn-read-only">read only</a><span>, in §2.4.2</span>
   </li><li><a href="#readonlyerror">ReadOnlyError</a><span>, in §2.7.1</span>
   </li><li><a href="#idl-record">record</a><span>, in §2.12.25</span>
   </li><li><a href="#record-type">record type</a><span>, in §2.12.26</span>
   </li><li><a href="#exceptiondef-referenceerror">ReferenceError</a><span>, in §2.7</span>
   </li><li><a href="#dfn-regular-attribute">regular attribute</a><span>, in §2.4.2</span>
   </li><li><a href="#dfn-regular-operation">regular operation</a><span>, in §2.4.3</span>
   </li><li><a href="#Replaceable">Replaceable</a><span>, in §3.3.17</span>
   </li><li><a href="#required-dictionary-member">required dictionary member</a><span>, in §2.6</span>
   </li><li><a href="#dfn-reserved-identifier">reserved identifiers</a><span>, in §2.1</span>
   </li><li><a href="#dfn-return-type">return type</a><span>, in §2.4.3</span>
   </li><li><a href="#SameObject">SameObject</a><span>, in §3.3.18</span>
   </li><li><a href="#SecureContext">SecureContext</a><span>, in §3.3.19</span>
   </li><li><a href="#dom-domexception-security_err">SECURITY_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#securityerror">SecurityError</a><span>, in §2.7.1</span>
   </li><li><a href="#idl-sequence">sequence</a><span>, in §2.12.24</span>
   </li><li><a href="#sequence-type">sequence type</a><span>, in §2.12.25</span>
   </li><li><a href="#set-a-user-objects-attribute-value">set a user object’s attribute value</a><span>, in §3.9</span>
   </li><li><a href="#dfn-set-entries">set entries</a><span>, in §2.4.9</span>
   </li><li><a href="#dfn-setlike">setlike</a><span>, in §2.4.9</span>
   </li><li><a href="#dfn-setlike-declaration">setlike declaration</a><span>, in §2.4.9</span>
   </li><li><a href="#dfn-set-size-getter">set size getter</a><span>, in §3.6.12.1</span>
   </li><li><a href="#dfn-setter">setter</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-set-the-value-of-a-new-indexed-property">set the value of a new indexed property</a><span>, in §2.4.4.2</span>
   </li><li><a href="#dfn-set-the-value-of-a-new-named-property">set the value of a new named property</a><span>, in §2.4.4.3</span>
   </li><li><a href="#dfn-set-the-value-of-an-existing-indexed-property">set the value of an existing indexed property</a><span>, in §2.4.4.2</span>
   </li><li><a href="#dfn-set-the-value-of-an-existing-named-property">set the value of an existing named property</a><span>, in §2.4.4.3</span>
   </li><li><a href="#idl-short">short</a><span>, in §2.12.4</span>
   </li><li><a href="#dfn-simple-exception">simple exception</a><span>, in §2.7</span>
   </li><li><a href="#dfn-single-operation-callback-interface">single operation callback interface</a><span>, in §3.9</span>
   </li><li><a href="#dfn-special-keyword">special keyword</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-special-operation">special operation</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-specific-type">specific type</a><span>, in §2.12.1</span>
   </li><li><a href="#dfn-static-attribute">Static attributes</a><span>, in §2.4.5</span>
   </li><li><a href="#dfn-static-operation">static operations</a><span>, in §2.4.5</span>
   </li><li><a href="#dfn-stringification-behavior">stringification behavior</a><span>, in §2.4.4.1</span>
   </li><li><a href="#dfn-stringifier">stringifier</a><span>, in §2.4.4</span>
   </li><li><a href="#dfn-string-type">string types</a><span>, in §2.12</span>
   </li><li><a href="#dfn-supported-property-indices">supported property indices</a><span>, in §2.4.4.2</span>
   </li><li><a href="#dfn-supported-property-names">supported property names</a><span>, in §2.4.4.3</span>
   </li><li><a href="#dfn-support-indexed-properties">support indexed properties</a><span>, in §2.4.4.2</span>
   </li><li><a href="#dfn-support-named-properties">support named properties</a><span>, in §2.4.4.3</span>
   </li><li><a href="#idl-symbol">symbol</a><span>, in §2.12.18</span>
   </li><li><a href="#dom-domexception-syntax_err">SYNTAX_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#syntaxerror">SyntaxError</a><span>, in §2.7.1</span>
   </li><li><a href="#dfn-xattr-named-argument-list">takes a named argument list</a><span>, in §2.13</span>
   </li><li><a href="#dfn-xattr-argument-list">takes an argument list</a><span>, in §2.13</span>
   </li><li><a href="#dfn-xattr-identifier">takes an identifier</a><span>, in §2.13</span>
   </li><li><a href="#dfn-xattr-identifier-list">takes an identifier list</a><span>, in §2.13</span>
   </li><li><a href="#dfn-xattr-no-arguments">takes no arguments</a><span>, in §2.13</span>
   </li><li>
    throw
    <ul>
     <li><a href="#ecmascript-throw">dfn for ECMAScript</a><span>, in §3</span>
     </li><li><a href="#dfn-throw">dfn for exception</a><span>, in §2.7</span>
    </li></ul>
   </li><li><a href="#dom-domexception-timeout_err">TIMEOUT_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#timeouterror">TimeoutError</a><span>, in §2.7.1</span>
   </li><li><a href="#transactioninactiveerror">TransactionInactiveError</a><span>, in §2.7.1</span>
   </li><li><a href="#TreatNonObjectAsNull">TreatNonObjectAsNull</a><span>, in §3.3.20</span>
   </li><li><a href="#TreatNullAs">TreatNullAs</a><span>, in §3.3.21</span>
   </li><li><a href="#type-being-given-a-new-name">type being given a new name</a><span>, in §2.10</span>
   </li><li><a href="#dfn-typed-array-type">typed array types</a><span>, in §2.12</span>
   </li><li><a href="#dfn-typedef">typedef</a><span>, in §2.10</span>
   </li><li><a href="#exceptiondef-typeerror">TypeError</a><span>, in §2.7</span>
   </li><li><a href="#type-list">type list</a><span>, in §2.4.6</span>
   </li><li><a href="#dom-domexception-type_mismatch_err">TYPE_MISMATCH_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#typemismatcherror">TypeMismatchError</a><span>, in §2.7.1</span>
   </li><li><a href="#dfn-type-name">type name</a><span>, in §2.12</span>
   </li><li><a href="#idl-Uint16Array">Uint16Array</a><span>, in §2.12.31</span>
   </li><li><a href="#idl-Uint32Array">Uint32Array</a><span>, in §2.12.31</span>
   </li><li><a href="#idl-Uint8Array">Uint8Array</a><span>, in §2.12.31</span>
   </li><li><a href="#idl-Uint8ClampedArray">Uint8ClampedArray</a><span>, in §2.12.31</span>
   </li><li><a href="#Unforgeable">Unforgeable</a><span>, in §3.3.22</span>
   </li><li><a href="#dfn-unforgeable-on-an-interface">unforgeable</a><span>, in §3.3.23</span>
   </li><li><a href="#dfn-unforgeable-property-name">unforgeable property name</a><span>, in §3.8</span>
   </li><li><a href="#dfn-union-type">union type</a><span>, in §2.12.28</span>
   </li><li><a href="#unknownerror">UnknownError</a><span>, in §2.7.1</span>
   </li><li><a href="#idl-unrestricted-double">unrestricted double</a><span>, in §2.12.13</span>
   </li><li><a href="#idl-unrestricted-float">unrestricted float</a><span>, in §2.12.11</span>
   </li><li><a href="#Unscopable">Unscopable</a><span>, in §3.3.23</span>
   </li><li><a href="#idl-unsigned-long">unsigned long</a><span>, in §2.12.7</span>
   </li><li><a href="#idl-unsigned-long-long">unsigned long long</a><span>, in §2.12.9</span>
   </li><li><a href="#idl-unsigned-short">unsigned short</a><span>, in §2.12.5</span>
   </li><li><a href="#dfn-perform-steps-once-promise-is-settled">upon settling</a><span>, in §3.2.21</span>
   </li><li><a href="#exceptiondef-urierror">URIError</a><span>, in §2.7</span>
   </li><li><a href="#dom-domexception-url_mismatch_err">URL_MISMATCH_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#urlmismatcherror">URLMismatchError</a><span>, in §2.7.1</span>
   </li><li><a href="#dfn-user-object">user object</a><span>, in §2.11</span>
   </li><li><a href="#idl-USVString">USVString</a><span>, in §2.12.16</span>
   </li><li><a href="#dom-domexception-validation_err">VALIDATION_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#validationerror">ValidationError</a><span>, in §2.7.1</span>
   </li><li><a href="#dfn-value-iterator">value iterator</a><span>, in §2.4.7</span>
   </li><li><a href="#dfn-value-pairs-to-iterate-over">value pairs to iterate over</a><span>, in §2.4.7</span>
   </li><li><a href="#dfn-variadic">variadic</a><span>, in §2.4.3</span>
   </li><li><a href="#versionerror">VersionError</a><span>, in §2.7.1</span>
   </li><li><a href="#idl-void">void</a><span>, in §2.4.3</span>
   </li><li><a href="#VoidFunction">VoidFunction</a><span>, in §4.5</span>
   </li><li><a href="#web-idl-arguments-list">Web IDL arguments list</a><span>, in §3.9</span>
   </li><li><a href="#dom-domexception-wrong_document_err">WRONG_DOCUMENT_ERR</a><span>, in §2.7.1</span>
   </li><li><a href="#wrongdocumenterror">WrongDocumentError</a><span>, in §2.7.1</span>
  </li></ul>
  <aside class="dfn-panel" data-for="term-for-angle_instanced_arrays">
   <a href="https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/#angle_instanced_arrays">https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/#angle_instanced_arrays</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-angle_instanced_arrays">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dom-css-supports">
   <a href="https://drafts.csswg.org/css-conditional-3/#dom-css-supports">https://drafts.csswg.org/css-conditional-3/#dom-css-supports</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-css-supports">2.4.6.1. Overloading vs. union types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-namespacedef-css">
   <a href="https://drafts.csswg.org/cssom-1/#namespacedef-css">https://drafts.csswg.org/cssom-1/#namespacedef-css</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-namespacedef-css">2.4.6.1. Overloading vs. union types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-document">
   <a href="https://dom.spec.whatwg.org/#document">https://dom.spec.whatwg.org/#document</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-document">3.3.11. [LenientSetter]</a>
    </li><li><a href="#ref-for-document①">3.3.12. [LenientThis]</a>
    </li><li><a href="#ref-for-document②">3.3.14. [NewObject]</a>
    </li><li><a href="#ref-for-document③">3.3.16. [OverrideBuiltins]</a>
    </li><li><a href="#ref-for-document④">3.3.19. [SameObject]</a> <a href="#ref-for-document⑤">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-documentorshadowroot">
   <a href="https://dom.spec.whatwg.org/#documentorshadowroot">https://dom.spec.whatwg.org/#documentorshadowroot</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-documentorshadowroot">3.3.11. [LenientSetter]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-htmlcollection">
   <a href="https://dom.spec.whatwg.org/#htmlcollection">https://dom.spec.whatwg.org/#htmlcollection</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-htmlcollection">3.3.9. [LegacyUnenumerableNamedProperties]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-namednodemap">
   <a href="https://dom.spec.whatwg.org/#namednodemap">https://dom.spec.whatwg.org/#namednodemap</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-namednodemap">3.3.9. [LegacyUnenumerableNamedProperties]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dom-document-createelement">
   <a href="https://dom.spec.whatwg.org/#dom-document-createelement">https://dom.spec.whatwg.org/#dom-document-createelement</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-document-createelement">3.3.14. [NewObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-concept-document">
   <a href="https://dom.spec.whatwg.org/#concept-document">https://dom.spec.whatwg.org/#concept-document</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-concept-document">2.7.1. Error names</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dom-document-implementation">
   <a href="https://dom.spec.whatwg.org/#dom-document-implementation">https://dom.spec.whatwg.org/#dom-document-implementation</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-document-implementation">3.3.19. [SameObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-concept-node-tree">
   <a href="https://dom.spec.whatwg.org/#concept-node-tree">https://dom.spec.whatwg.org/#concept-node-tree</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-concept-node-tree">2.7.1. Error names</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-returnifabrupt-shorthands">
   <a href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands">https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-returnifabrupt-shorthands">3.2.4.1. byte</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①">3.2.4.2. octet</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands②">3.2.4.3. short</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③">3.2.4.4. unsigned short</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands④">3.2.4.5. long</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑤">3.2.4.6. unsigned long</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑥">3.2.4.7. long long</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦">3.2.4.8. unsigned long long</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧">3.2.4.9. Abstract operations</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands①⓪">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①①">3.2.5. float</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①②">3.2.6. unrestricted float</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①③">3.2.7. double</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①④">3.2.8. unrestricted double</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①⑤">3.2.15. Dictionary types</a> <a href="#ref-for-sec-returnifabrupt-shorthands①⑥">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands①⑦">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①⑧">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①⑨">3.2.19.1. Creating a sequence from an iterable</a> <a href="#ref-for-sec-returnifabrupt-shorthands②⓪">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands②①">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands②②">3.2.20. Records — record&lt;K, V&gt;</a> <a href="#ref-for-sec-returnifabrupt-shorthands②③">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands②④">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands②⑤">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands②⑥">(5)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands②⑦">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-sec-returnifabrupt-shorthands②⑧">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands②⑨">3.2.22. Union types</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⓪">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③②">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③③">3.6.1. Interface object</a> <a href="#ref-for-sec-returnifabrupt-shorthands③④">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⑤">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⑥">(4)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③⑦">3.6.2. Named constructors</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⑧">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⑨">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④⓪">(4)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands④①">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-returnifabrupt-shorthands④②">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④③">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④④">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④⑤">(5)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands④⑥">3.6.4. Legacy callback interface object</a> <a href="#ref-for-sec-returnifabrupt-shorthands④⑦">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④⑧">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands④⑨">3.6.5.4. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑤⓪">3.6.6. Constants</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑤①">3.6.7. Attributes</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤②">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤③">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤④">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑤">(5)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑥">(6)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑦">(7)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑧">(8)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑨">(9)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⓪">(10)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥①">(11)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥②">(12)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑥③">3.6.8. Operations</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥④">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⑤">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⑥">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⑦">(5)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑥⑧">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⑨">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦⓪">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦①">3.6.11. Maplike declarations</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦②">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦③">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦④">3.6.11.7. set</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑦⑤">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦⑥">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦⑦">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦⑧">3.6.12.5. add and delete</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑦⑨">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧⓪">3.7.1. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧①">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧②">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧③">3.8.7. Abstract operations</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧④">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑧⑤">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑧⑥">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑧⑦">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑧⑧">(5)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧⑨">3.10. Invoking callback functions</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨⓪">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨①">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑨②">3.11.1. Namespace object</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨③">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑨④">3.12.3. Creating and throwing exceptions</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑨⑤">Document conventions</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨⑥">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-array.prototype.entries">
   <a href="https://tc39.github.io/ecma262/#sec-array.prototype.entries">https://tc39.github.io/ecma262/#sec-array.prototype.entries</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-array.prototype.entries">3.6.10.1. entries</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-array.prototype.foreach">
   <a href="https://tc39.github.io/ecma262/#sec-array.prototype.foreach">https://tc39.github.io/ecma262/#sec-array.prototype.foreach</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-array.prototype.foreach">3.6.9.2. forEach</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-array.prototype.keys">
   <a href="https://tc39.github.io/ecma262/#sec-array.prototype.keys">https://tc39.github.io/ecma262/#sec-array.prototype.keys</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-array.prototype.keys">3.6.10.2. keys</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-array.prototype.values">
   <a href="https://tc39.github.io/ecma262/#sec-array.prototype.values">https://tc39.github.io/ecma262/#sec-array.prototype.values</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-array.prototype.values">3.6.9.1. @@iterator</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-properties-of-the-error-prototype-object">
   <a href="https://tc39.github.io/ecma262/#sec-properties-of-the-error-prototype-object">https://tc39.github.io/ecma262/#sec-properties-of-the-error-prototype-object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-properties-of-the-error-prototype-object">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-sec-properties-of-the-error-prototype-object①">3.12.1. DOMException custom bindings</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-properties-of-the-function-prototype-object">
   <a href="https://tc39.github.io/ecma262/#sec-properties-of-the-function-prototype-object">https://tc39.github.io/ecma262/#sec-properties-of-the-function-prototype-object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-properties-of-the-function-prototype-object">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-sec-properties-of-the-function-prototype-object①">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-sec-properties-of-the-function-prototype-object②">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-sec-properties-of-the-function-prototype-object③">3.6.7. Attributes</a> <a href="#ref-for-sec-properties-of-the-function-prototype-object④">(2)</a>
    </li><li><a href="#ref-for-sec-properties-of-the-function-prototype-object⑤">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-%iteratorprototype%-object">
   <a href="https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object">https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-%25iteratorprototype%25-object">3.6.10.5. Iterator prototype object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-properties-of-the-object-prototype-object">
   <a href="https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object">https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-properties-of-the-object-prototype-object">2.5. Namespaces</a>
    </li><li><a href="#ref-for-sec-properties-of-the-object-prototype-object①">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-properties-of-the-object-prototype-object②">3.2.15. Dictionary types</a>
    </li><li><a href="#ref-for-sec-properties-of-the-object-prototype-object③">3.2.20. Records — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-sec-properties-of-the-object-prototype-object④">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-sec-properties-of-the-object-prototype-object⑤">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-sec-properties-of-the-object-prototype-object⑥">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-sec-properties-of-the-object-prototype-object⑦">3.11.1. Namespace object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-promise-constructor">
   <a href="https://tc39.github.io/ecma262/#sec-promise-constructor">https://tc39.github.io/ecma262/#sec-promise-constructor</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-promise-constructor">3.2.21. Promise types — Promise&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-promise-constructor①">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-sec-promise-constructor②">3.6.8. Operations</a>
    </li><li><a href="#ref-for-sec-promise-constructor③">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-promise-constructor④">(2)</a>
    </li><li><a href="#ref-for-sec-promise-constructor⑤">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-promise.reject">
   <a href="https://tc39.github.io/ecma262/#sec-promise.reject">https://tc39.github.io/ecma262/#sec-promise.reject</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-promise.reject">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-sec-promise.reject①">3.6.8. Operations</a>
    </li><li><a href="#ref-for-sec-promise.reject②">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-promise.reject③">(2)</a>
    </li><li><a href="#ref-for-sec-promise.reject④">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-promise.resolve">
   <a href="https://tc39.github.io/ecma262/#sec-promise.resolve">https://tc39.github.io/ecma262/#sec-promise.resolve</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-promise.resolve">3.2.21. Promise types — Promise&lt;T&gt;</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-returnifabrupt-shorthands">
   <a href="https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands">https://tc39.github.io/ecma262/#sec-returnifabrupt-shorthands</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-returnifabrupt-shorthands">3.2.4.1. byte</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①">3.2.4.2. octet</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands②">3.2.4.3. short</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③">3.2.4.4. unsigned short</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands④">3.2.4.5. long</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑤">3.2.4.6. unsigned long</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑥">3.2.4.7. long long</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦">3.2.4.8. unsigned long long</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧">3.2.4.9. Abstract operations</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands①⓪">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①①">3.2.5. float</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①②">3.2.6. unrestricted float</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①③">3.2.7. double</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①④">3.2.8. unrestricted double</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①⑤">3.2.15. Dictionary types</a> <a href="#ref-for-sec-returnifabrupt-shorthands①⑥">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands①⑦">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①⑧">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands①⑨">3.2.19.1. Creating a sequence from an iterable</a> <a href="#ref-for-sec-returnifabrupt-shorthands②⓪">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands②①">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands②②">3.2.20. Records — record&lt;K, V&gt;</a> <a href="#ref-for-sec-returnifabrupt-shorthands②③">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands②④">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands②⑤">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands②⑥">(5)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands②⑦">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-sec-returnifabrupt-shorthands②⑧">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands②⑨">3.2.22. Union types</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⓪">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③②">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③③">3.6.1. Interface object</a> <a href="#ref-for-sec-returnifabrupt-shorthands③④">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⑤">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⑥">(4)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands③⑦">3.6.2. Named constructors</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⑧">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands③⑨">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④⓪">(4)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands④①">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-returnifabrupt-shorthands④②">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④③">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④④">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④⑤">(5)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands④⑥">3.6.4. Legacy callback interface object</a> <a href="#ref-for-sec-returnifabrupt-shorthands④⑦">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands④⑧">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands④⑨">3.6.5.4. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑤⓪">3.6.6. Constants</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑤①">3.6.7. Attributes</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤②">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤③">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤④">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑤">(5)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑥">(6)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑦">(7)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑧">(8)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑤⑨">(9)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⓪">(10)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥①">(11)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥②">(12)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑥③">3.6.8. Operations</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥④">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⑤">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⑥">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⑦">(5)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑥⑧">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑥⑨">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦⓪">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦①">3.6.11. Maplike declarations</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦②">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦③">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦④">3.6.11.7. set</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑦⑤">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦⑥">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦⑦">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑦⑧">3.6.12.5. add and delete</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑦⑨">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧⓪">3.7.1. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧①">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧②">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧③">3.8.7. Abstract operations</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧④">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑧⑤">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑧⑥">(3)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑧⑦">(4)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑧⑧">(5)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑧⑨">3.10. Invoking callback functions</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨⓪">(2)</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨①">(3)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑨②">3.11.1. Namespace object</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨③">(2)</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑨④">3.12.3. Creating and throwing exceptions</a>
    </li><li><a href="#ref-for-sec-returnifabrupt-shorthands⑨⑤">Document conventions</a> <a href="#ref-for-sec-returnifabrupt-shorthands⑨⑥">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-well-known-symbols">
   <a href="https://tc39.github.io/ecma262/#sec-well-known-symbols">https://tc39.github.io/ecma262/#sec-well-known-symbols</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-well-known-symbols">2.4.7. Iterable declarations</a> <a href="#ref-for-sec-well-known-symbols①">(2)</a> <a href="#ref-for-sec-well-known-symbols②">(3)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols③">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-sec-well-known-symbols④">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑤">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑥">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑦">3.2.22. Union types</a> <a href="#ref-for-sec-well-known-symbols⑧">(2)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑨">3.3.24. [Unscopable]</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⓪">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①①">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-well-known-symbols①②">(2)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①③">3.6.9.1. @@iterator</a> <a href="#ref-for-sec-well-known-symbols①④">(2)</a> <a href="#ref-for-sec-well-known-symbols①⑤">(3)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑥">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑦">3.6.10.3. values</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑧">3.6.11.2. entries</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑨">3.6.12.2. values</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-well-known-symbols">
   <a href="https://tc39.github.io/ecma262/#sec-well-known-symbols">https://tc39.github.io/ecma262/#sec-well-known-symbols</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-well-known-symbols">2.4.7. Iterable declarations</a> <a href="#ref-for-sec-well-known-symbols①">(2)</a> <a href="#ref-for-sec-well-known-symbols②">(3)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols③">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-sec-well-known-symbols④">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑤">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑥">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑦">3.2.22. Union types</a> <a href="#ref-for-sec-well-known-symbols⑧">(2)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑨">3.3.24. [Unscopable]</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⓪">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①①">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-well-known-symbols①②">(2)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①③">3.6.9.1. @@iterator</a> <a href="#ref-for-sec-well-known-symbols①④">(2)</a> <a href="#ref-for-sec-well-known-symbols①⑤">(3)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑥">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑦">3.6.10.3. values</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑧">3.6.11.2. entries</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑨">3.6.12.2. values</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-well-known-symbols">
   <a href="https://tc39.github.io/ecma262/#sec-well-known-symbols">https://tc39.github.io/ecma262/#sec-well-known-symbols</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-well-known-symbols">2.4.7. Iterable declarations</a> <a href="#ref-for-sec-well-known-symbols①">(2)</a> <a href="#ref-for-sec-well-known-symbols②">(3)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols③">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-sec-well-known-symbols④">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑤">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑥">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑦">3.2.22. Union types</a> <a href="#ref-for-sec-well-known-symbols⑧">(2)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols⑨">3.3.24. [Unscopable]</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⓪">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①①">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-well-known-symbols①②">(2)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①③">3.6.9.1. @@iterator</a> <a href="#ref-for-sec-well-known-symbols①④">(2)</a> <a href="#ref-for-sec-well-known-symbols①⑤">(3)</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑥">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑦">3.6.10.3. values</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑧">3.6.11.2. entries</a>
    </li><li><a href="#ref-for-sec-well-known-symbols①⑨">3.6.12.2. values</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-arraybuffer-objects">
   <a href="https://tc39.github.io/ecma262/#sec-arraybuffer-objects">https://tc39.github.io/ecma262/#sec-arraybuffer-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-arraybuffer-objects">3.2.25. Buffer source types</a> <a href="#ref-for-sec-arraybuffer-objects①">(2)</a>
    </li><li><a href="#ref-for-sec-arraybuffer-objects②">3.3.1. [AllowShared]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-arraycreate">
   <a href="https://tc39.github.io/ecma262/#sec-arraycreate">https://tc39.github.io/ecma262/#sec-arraycreate</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-arraycreate">3.6.10.5. Iterator prototype object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-call">
   <a href="https://tc39.github.io/ecma262/#sec-call">https://tc39.github.io/ecma262/#sec-call</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-call">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-sec-call①">(2)</a>
    </li><li><a href="#ref-for-sec-call②">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-sec-call③">3.6.8. Operations</a>
    </li><li><a href="#ref-for-sec-call④">3.6.9.2. forEach</a> <a href="#ref-for-sec-call⑤">(2)</a>
    </li><li><a href="#ref-for-sec-call⑥">3.6.11. Maplike declarations</a>
    </li><li><a href="#ref-for-sec-call⑦">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-call⑧">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-call⑨">3.6.11.7. set</a>
    </li><li><a href="#ref-for-sec-call①⓪">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-call①①">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-call①②">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-sec-call①③">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-call①④">(2)</a> <a href="#ref-for-sec-call①⑤">(3)</a>
    </li><li><a href="#ref-for-sec-call①⑥">3.10. Invoking callback functions</a> <a href="#ref-for-sec-call①⑦">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-canonicalnumericindexstring">
   <a href="https://tc39.github.io/ecma262/#sec-canonicalnumericindexstring">https://tc39.github.io/ecma262/#sec-canonicalnumericindexstring</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-canonicalnumericindexstring">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-completion">
   <a href="https://tc39.github.io/ecma262/#sec-completion">https://tc39.github.io/ecma262/#sec-completion</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-completion">3.9. User objects implementing callback interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-construct">
   <a href="https://tc39.github.io/ecma262/#sec-construct">https://tc39.github.io/ecma262/#sec-construct</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-construct">3.10. Invoking callback functions</a>
    </li><li><a href="#ref-for-sec-construct①">3.12.3. Creating and throwing exceptions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-createbuiltinfunction">
   <a href="https://tc39.github.io/ecma262/#sec-createbuiltinfunction">https://tc39.github.io/ecma262/#sec-createbuiltinfunction</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-createbuiltinfunction">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-sec-createbuiltinfunction①">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-sec-createbuiltinfunction②">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-sec-createbuiltinfunction③">3.6.7. Attributes</a> <a href="#ref-for-sec-createbuiltinfunction④">(2)</a>
    </li><li><a href="#ref-for-sec-createbuiltinfunction⑤">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-createdataproperty">
   <a href="https://tc39.github.io/ecma262/#sec-createdataproperty">https://tc39.github.io/ecma262/#sec-createdataproperty</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-createdataproperty">3.2.15. Dictionary types</a>
    </li><li><a href="#ref-for-sec-createdataproperty①">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-createdataproperty②">3.2.20. Records — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-sec-createdataproperty③">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-sec-createdataproperty④">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-sec-createdataproperty⑤">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-sec-createdataproperty⑥">3.6.10.5. Iterator prototype object</a> <a href="#ref-for-sec-createdataproperty⑦">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-createiterresultobject">
   <a href="https://tc39.github.io/ecma262/#sec-createiterresultobject">https://tc39.github.io/ecma262/#sec-createiterresultobject</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-createiterresultobject">3.6.10.5. Iterator prototype object</a> <a href="#ref-for-sec-createiterresultobject①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-createmapiterator">
   <a href="https://tc39.github.io/ecma262/#sec-createmapiterator">https://tc39.github.io/ecma262/#sec-createmapiterator</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-createmapiterator">3.6.9.1. @@iterator</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-createsetiterator">
   <a href="https://tc39.github.io/ecma262/#sec-createsetiterator">https://tc39.github.io/ecma262/#sec-createsetiterator</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-createsetiterator">3.6.9.1. @@iterator</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-dataview-objects">
   <a href="https://tc39.github.io/ecma262/#sec-dataview-objects">https://tc39.github.io/ecma262/#sec-dataview-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-dataview-objects">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-sec-dataview-objects①">3.3.1. [AllowShared]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-definepropertyorthrow">
   <a href="https://tc39.github.io/ecma262/#sec-definepropertyorthrow">https://tc39.github.io/ecma262/#sec-definepropertyorthrow</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-definepropertyorthrow">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-sec-definepropertyorthrow①">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-sec-definepropertyorthrow②">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-definepropertyorthrow③">(2)</a>
    </li><li><a href="#ref-for-sec-definepropertyorthrow④">3.6.6. Constants</a>
    </li><li><a href="#ref-for-sec-definepropertyorthrow⑤">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-sec-definepropertyorthrow⑥">3.6.8. Operations</a>
    </li><li><a href="#ref-for-sec-definepropertyorthrow⑦">3.11.1. Namespace object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-detacharraybuffer">
   <a href="https://tc39.github.io/ecma262/#sec-detacharraybuffer">https://tc39.github.io/ecma262/#sec-detacharraybuffer</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-detacharraybuffer">3.2.25. Buffer source types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-error-objects">
   <a href="https://tc39.github.io/ecma262/#sec-error-objects">https://tc39.github.io/ecma262/#sec-error-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-error-objects">2.7. Exceptions</a> <a href="#ref-for-sec-error-objects①">(2)</a>
    </li><li><a href="#ref-for-sec-error-objects②">3.2.23. Error</a> <a href="#ref-for-sec-error-objects③">(2)</a>
    </li><li><a href="#ref-for-sec-error-objects④">3.12.1. DOMException custom bindings</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-get-o-p">
   <a href="https://tc39.github.io/ecma262/#sec-get-o-p">https://tc39.github.io/ecma262/#sec-get-o-p</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-get-o-p">3.2.15. Dictionary types</a>
    </li><li><a href="#ref-for-sec-get-o-p①">3.2.20. Records — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-sec-get-o-p②">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-sec-get-o-p③">3.6.11.1. size</a>
    </li><li><a href="#ref-for-sec-get-o-p④">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-get-o-p⑤">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-get-o-p⑥">3.6.11.7. set</a>
    </li><li><a href="#ref-for-sec-get-o-p⑦">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-get-o-p⑧">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-sec-get-o-p⑨">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-get-o-p①⓪">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-getiterator">
   <a href="https://tc39.github.io/ecma262/#sec-getiterator">https://tc39.github.io/ecma262/#sec-getiterator</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-getiterator">3.2.19.1. Creating a sequence from an iterable</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-getmethod">
   <a href="https://tc39.github.io/ecma262/#sec-getmethod">https://tc39.github.io/ecma262/#sec-getmethod</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-getmethod">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-getmethod①">3.2.21. Promise types — Promise&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-getmethod②">3.2.22. Union types</a> <a href="#ref-for-sec-getmethod③">(2)</a>
    </li><li><a href="#ref-for-sec-getmethod④">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-sec-getmethod⑤">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-getmethod⑥">3.6.11. Maplike declarations</a>
    </li><li><a href="#ref-for-sec-getmethod⑦">3.6.12. Setlike declarations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-iscallable">
   <a href="https://tc39.github.io/ecma262/#sec-iscallable">https://tc39.github.io/ecma262/#sec-iscallable</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-iscallable">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-sec-iscallable①">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-sec-iscallable②">3.2.22. Union types</a>
    </li><li><a href="#ref-for-sec-iscallable③">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-sec-iscallable④">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-iscallable⑤">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-iscallable⑥">(2)</a> <a href="#ref-for-sec-iscallable⑦">(3)</a> <a href="#ref-for-sec-iscallable⑧">(4)</a> <a href="#ref-for-sec-iscallable⑨">(5)</a>
    </li><li><a href="#ref-for-sec-iscallable①⓪">3.10. Invoking callback functions</a> <a href="#ref-for-sec-iscallable①①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-isconstructor">
   <a href="https://tc39.github.io/ecma262/#sec-isconstructor">https://tc39.github.io/ecma262/#sec-isconstructor</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-isconstructor">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-isdatadescriptor">
   <a href="https://tc39.github.io/ecma262/#sec-isdatadescriptor">https://tc39.github.io/ecma262/#sec-isdatadescriptor</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-isdatadescriptor">3.8.3. [[DefineOwnProperty]]</a> <a href="#ref-for-sec-isdatadescriptor①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-isdetachedbuffer">
   <a href="https://tc39.github.io/ecma262/#sec-isdetachedbuffer">https://tc39.github.io/ecma262/#sec-isdetachedbuffer</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-isdetachedbuffer">3.2.25. Buffer source types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-isinteger">
   <a href="https://tc39.github.io/ecma262/#sec-isinteger">https://tc39.github.io/ecma262/#sec-isinteger</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-isinteger">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-issharedarraybuffer">
   <a href="https://tc39.github.io/ecma262/#sec-issharedarraybuffer">https://tc39.github.io/ecma262/#sec-issharedarraybuffer</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-issharedarraybuffer">3.2.25. Buffer source types</a> <a href="#ref-for-sec-issharedarraybuffer①">(2)</a> <a href="#ref-for-sec-issharedarraybuffer②">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-iteratorstep">
   <a href="https://tc39.github.io/ecma262/#sec-iteratorstep">https://tc39.github.io/ecma262/#sec-iteratorstep</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-iteratorstep">3.2.19.1. Creating a sequence from an iterable</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-iteratorvalue">
   <a href="https://tc39.github.io/ecma262/#sec-iteratorvalue">https://tc39.github.io/ecma262/#sec-iteratorvalue</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-iteratorvalue">3.2.19.1. Creating a sequence from an iterable</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-json.stringify">
   <a href="https://tc39.github.io/ecma262/#sec-json.stringify">https://tc39.github.io/ecma262/#sec-json.stringify</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-json.stringify">2.4.3.1. toJSON</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-map-objects">
   <a href="https://tc39.github.io/ecma262/#sec-map-objects">https://tc39.github.io/ecma262/#sec-map-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-map-objects">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-sec-map-objects①">3.6.11. Maplike declarations</a> <a href="#ref-for-sec-map-objects②">(2)</a> <a href="#ref-for-sec-map-objects③">(3)</a>
    </li><li><a href="#ref-for-sec-map-objects④">3.6.11.1. size</a>
    </li><li><a href="#ref-for-sec-map-objects⑤">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-map-objects⑥">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-map-objects⑦">3.6.11.7. set</a>
    </li><li><a href="#ref-for-sec-map-objects⑧">Document conventions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-built-in-function-objects">
   <a href="https://tc39.github.io/ecma262/#sec-built-in-function-objects">https://tc39.github.io/ecma262/#sec-built-in-function-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-built-in-function-objects">2. Interface definition language</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①">2.3. Interface mixins</a> <a href="#ref-for-sec-built-in-function-objects②">(2)</a> <a href="#ref-for-sec-built-in-function-objects③">(3)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects④">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑤">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-sec-built-in-function-objects⑥">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑦">3.6.1. Interface object</a> <a href="#ref-for-sec-built-in-function-objects⑧">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑨">3.6.2. Named constructors</a> <a href="#ref-for-sec-built-in-function-objects①⓪">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①①">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①②">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①③">3.6.9.1. @@iterator</a> <a href="#ref-for-sec-built-in-function-objects①④">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑤">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑥">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑦">3.6.11.1. size</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑧">3.6.11.3. keys and values</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑨">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⓪">3.6.11.5. clear</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②①">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②②">3.6.11.7. set</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②③">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②④">3.6.12.1. size</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑤">3.6.12.3. entries and keys</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑥">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑦">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑧">3.6.12.6. clear</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-normalcompletion">
   <a href="https://tc39.github.io/ecma262/#sec-normalcompletion">https://tc39.github.io/ecma262/#sec-normalcompletion</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-normalcompletion">3.9. User objects implementing callback interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-objectcreate">
   <a href="https://tc39.github.io/ecma262/#sec-objectcreate">https://tc39.github.io/ecma262/#sec-objectcreate</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-objectcreate">3.2.15. Dictionary types</a>
    </li><li><a href="#ref-for-sec-objectcreate①">3.2.20. Records — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-sec-objectcreate②">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-objectcreate③">(2)</a>
    </li><li><a href="#ref-for-sec-objectcreate④">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-sec-objectcreate⑤">3.11.1. Namespace object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ordinarydefineownproperty">
   <a href="https://tc39.github.io/ecma262/#sec-ordinarydefineownproperty">https://tc39.github.io/ecma262/#sec-ordinarydefineownproperty</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ordinarydefineownproperty">3.8.3. [[DefineOwnProperty]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ordinarygetownproperty">
   <a href="https://tc39.github.io/ecma262/#sec-ordinarygetownproperty">https://tc39.github.io/ecma262/#sec-ordinarygetownproperty</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ordinarygetownproperty">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-sec-ordinarygetownproperty①">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ordinarysetwithowndescriptor">
   <a href="https://tc39.github.io/ecma262/#sec-ordinarysetwithowndescriptor">https://tc39.github.io/ecma262/#sec-ordinarysetwithowndescriptor</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ordinarysetwithowndescriptor">3.8.2. [[Set]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-promise-objects">
   <a href="https://tc39.github.io/ecma262/#sec-promise-objects">https://tc39.github.io/ecma262/#sec-promise-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#termref-for-">2.12.27. Promise types — Promise&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-promise-objects">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-sec-promise-objects①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-set-objects">
   <a href="https://tc39.github.io/ecma262/#sec-set-objects">https://tc39.github.io/ecma262/#sec-set-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-set-objects">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-set-objects①">3.6.12. Setlike declarations</a> <a href="#ref-for-sec-set-objects②">(2)</a> <a href="#ref-for-sec-set-objects③">(3)</a>
    </li><li><a href="#ref-for-sec-set-objects④">3.6.12.1. size</a>
    </li><li><a href="#ref-for-sec-set-objects⑤">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-set-objects⑥">3.6.12.5. add and delete</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-setfunctionlength">
   <a href="https://tc39.github.io/ecma262/#sec-setfunctionlength">https://tc39.github.io/ecma262/#sec-setfunctionlength</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-setfunctionlength">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-sec-setfunctionlength①">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-sec-setfunctionlength②">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-sec-setfunctionlength③">3.6.7. Attributes</a> <a href="#ref-for-sec-setfunctionlength④">(2)</a>
    </li><li><a href="#ref-for-sec-setfunctionlength⑤">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-setfunctionname">
   <a href="https://tc39.github.io/ecma262/#sec-setfunctionname">https://tc39.github.io/ecma262/#sec-setfunctionname</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-setfunctionname">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-sec-setfunctionname①">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-sec-setfunctionname②">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-sec-setfunctionname③">3.6.7. Attributes</a> <a href="#ref-for-sec-setfunctionname④">(2)</a>
    </li><li><a href="#ref-for-sec-setfunctionname⑤">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-set-immutable-prototype">
   <a href="https://tc39.github.io/ecma262/#sec-set-immutable-prototype">https://tc39.github.io/ecma262/#sec-set-immutable-prototype</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-set-immutable-prototype">3.6.5.4. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-sec-set-immutable-prototype①">3.7.1. [[SetPrototypeOf]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-setintegritylevel">
   <a href="https://tc39.github.io/ecma262/#sec-setintegritylevel">https://tc39.github.io/ecma262/#sec-setintegritylevel</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-setintegritylevel">3.2.26. Frozen arrays — FrozenArray&lt;T&gt;</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-sharedarraybuffer-objects">
   <a href="https://tc39.github.io/ecma262/#sec-sharedarraybuffer-objects">https://tc39.github.io/ecma262/#sec-sharedarraybuffer-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-sharedarraybuffer-objects">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-sec-sharedarraybuffer-objects①">3.3.1. [AllowShared]</a> <a href="#ref-for-sec-sharedarraybuffer-objects②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-native-error-types-used-in-this-standard-syntaxerror">
   <a href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-syntaxerror">https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-syntaxerror</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-native-error-types-used-in-this-standard-syntaxerror">2.7. Exceptions</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-syntaxerror①">2.7.1. Error names</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-syntaxerror②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-toboolean">
   <a href="https://tc39.github.io/ecma262/#sec-toboolean">https://tc39.github.io/ecma262/#sec-toboolean</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-toboolean">3.2.3. boolean</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-toint32">
   <a href="https://tc39.github.io/ecma262/#sec-toint32">https://tc39.github.io/ecma262/#sec-toint32</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-toint32">3.3.2. [Clamp]</a>
    </li><li><a href="#ref-for-sec-toint32①">3.3.5. [EnforceRange]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-tonumber">
   <a href="https://tc39.github.io/ecma262/#sec-tonumber">https://tc39.github.io/ecma262/#sec-tonumber</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-tonumber">3.2.4.9. Abstract operations</a>
    </li><li><a href="#ref-for-sec-tonumber①">3.2.5. float</a>
    </li><li><a href="#ref-for-sec-tonumber②">3.2.6. unrestricted float</a>
    </li><li><a href="#ref-for-sec-tonumber③">3.2.7. double</a>
    </li><li><a href="#ref-for-sec-tonumber④">3.2.8. unrestricted double</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-toobject">
   <a href="https://tc39.github.io/ecma262/#sec-toobject">https://tc39.github.io/ecma262/#sec-toobject</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-toobject">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-sec-toobject①">3.6.9.1. @@iterator</a> <a href="#ref-for-sec-toobject②">(2)</a>
    </li><li><a href="#ref-for-sec-toobject③">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-toobject④">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-sec-toobject⑤">3.6.10.3. values</a>
    </li><li><a href="#ref-for-sec-toobject⑥">3.6.10.5. Iterator prototype object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-tostring">
   <a href="https://tc39.github.io/ecma262/#sec-tostring">https://tc39.github.io/ecma262/#sec-tostring</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-tostring">3. ECMAScript binding</a> <a href="#ref-for-sec-tostring①">(2)</a>
    </li><li><a href="#ref-for-sec-tostring②">3.2.9. DOMString</a>
    </li><li><a href="#ref-for-sec-tostring③">3.2.10. ByteString</a>
    </li><li><a href="#ref-for-sec-tostring④">3.2.16. Enumeration types</a>
    </li><li><a href="#ref-for-sec-tostring⑤">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-tostring⑥">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-sec-tostring⑦">3.8.6. [[OwnPropertyKeys]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-touint32">
   <a href="https://tc39.github.io/ecma262/#sec-touint32">https://tc39.github.io/ecma262/#sec-touint32</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-touint32">3.3.2. [Clamp]</a>
    </li><li><a href="#ref-for-sec-touint32①">3.3.5. [EnforceRange]</a>
    </li><li><a href="#ref-for-sec-touint32②">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-sec-touint32③">3.8.7. Abstract operations</a> <a href="#ref-for-sec-touint32④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ecmascript-data-types-and-values">
   <a href="https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values">https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ecmascript-data-types-and-values">3.2.1. any</a> <a href="#ref-for-sec-ecmascript-data-types-and-values①">(2)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values②">(3)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values③">(4)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values④">(5)</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values⑤">3.2.12. object</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values⑥">3.2.13. symbol</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values⑦">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values⑧">3.2.15. Dictionary types</a> <a href="#ref-for-sec-ecmascript-data-types-and-values⑨">(2)</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values①⓪">3.2.18. Nullable types — T?</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values①①">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values①②">3.2.20. Records — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values①③">3.2.22. Union types</a> <a href="#ref-for-sec-ecmascript-data-types-and-values①④">(2)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values①⑤">(3)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values①⑥">(4)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values①⑦">(5)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values①⑧">(6)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values①⑨">(7)</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values②⓪">3.2.23. Error</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values②①">3.2.24. DOMException</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values②②">3.2.25. Buffer source types</a> <a href="#ref-for-sec-ecmascript-data-types-and-values②③">(2)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values②④">(3)</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values②⑤">3.5. Overload resolution algorithm</a> <a href="#ref-for-sec-ecmascript-data-types-and-values②⑥">(2)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values②⑦">(3)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values②⑧">(4)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values②⑨">(5)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values③⓪">(6)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values③①">(7)</a> <a href="#ref-for-sec-ecmascript-data-types-and-values③②">(8)</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values③③">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values③④">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values③⑤">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values③⑥">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-sec-ecmascript-data-types-and-values③⑦">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-native-error-types-used-in-this-standard-typeerror">
   <a href="https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror">https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror">3.2.4.9. Abstract operations</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②">3.2.5. float</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④">3.2.7. double</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤">3.2.10. ByteString</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥">3.2.12. object</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑦">3.2.13. symbol</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑧">3.2.14. Interface types</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑨">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①⓪">3.2.15. Dictionary types</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①①">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①②">3.2.16. Enumeration types</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①③">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①④">3.2.19. Sequences — sequence&lt;T&gt;</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑤">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑥">3.2.20. Records — record&lt;K, V&gt;</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑦">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑧">3.2.21. Promise types — Promise&lt;T&gt;</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror①⑨">3.2.22. Union types</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②⓪">3.2.23. Error</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②①">3.2.24. DOMException</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②②">3.2.25. Buffer source types</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②③">(2)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②④">(3)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑤">(4)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑥">(5)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑦">(6)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑧">(7)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror②⑨">(8)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③⓪">3.3.1. [AllowShared]</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③①">3.5. Overload resolution algorithm</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③②">(2)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③③">(3)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③④">(4)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑤">3.6.1. Interface object</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑥">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑦">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑧">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror③⑨">3.6.7. Attributes</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④⓪">(2)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④①">(3)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④②">(4)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④③">(5)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④④">(6)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑤">(7)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑥">3.6.8. Operations</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑦">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑧">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror④⑨">3.6.9.1. @@iterator</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⓪">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤①">3.6.9.2. forEach</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤②">(2)</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤③">(3)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤④">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑤">3.6.10.3. values</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑥">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑦">3.6.11. Maplike declarations</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑧">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑤⑨">3.6.11.1. size</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⓪">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥①">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥②">3.6.11.7. set</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥③">3.6.12. Setlike declarations</a> <a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥④">(2)</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑤">3.6.12.1. size</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑥">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑦">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑧">3.9. User objects implementing callback interfaces</a>
    </li><li><a href="#ref-for-sec-native-error-types-used-in-this-standard-typeerror⑥⑨">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-completion-record-specification-type">
   <a href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type">https://tc39.github.io/ecma262/#sec-completion-record-specification-type</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-completion-record-specification-type">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-completion-record-specification-type①">(2)</a> <a href="#ref-for-sec-completion-record-specification-type②">(3)</a> <a href="#ref-for-sec-completion-record-specification-type③">(4)</a> <a href="#ref-for-sec-completion-record-specification-type④">(5)</a> <a href="#ref-for-sec-completion-record-specification-type⑤">(6)</a> <a href="#ref-for-sec-completion-record-specification-type⑥">(7)</a> <a href="#ref-for-sec-completion-record-specification-type⑦">(8)</a>
    </li><li><a href="#ref-for-sec-completion-record-specification-type⑧">3.10. Invoking callback functions</a> <a href="#ref-for-sec-completion-record-specification-type⑨">(2)</a> <a href="#ref-for-sec-completion-record-specification-type①⓪">(3)</a>
    </li><li><a href="#ref-for-sec-completion-record-specification-type①①">3.12.4. Handling exceptions</a>
    </li><li><a href="#ref-for-sec-completion-record-specification-type①②">Document conventions</a> <a href="#ref-for-sec-completion-record-specification-type①③">(2)</a> <a href="#ref-for-sec-completion-record-specification-type①④">(3)</a> <a href="#ref-for-sec-completion-record-specification-type①⑤">(4)</a> <a href="#ref-for-sec-completion-record-specification-type①⑥">(5)</a> <a href="#ref-for-sec-completion-record-specification-type①⑦">(6)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-eqn-abs">
   <a href="https://tc39.github.io/ecma262/#eqn-abs">https://tc39.github.io/ecma262/#eqn-abs</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eqn-abs">3.2.4.9. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-array-index">
   <a href="https://tc39.github.io/ecma262/#array-index">https://tc39.github.io/ecma262/#array-index</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-array-index">3.8. Legacy platform objects</a>
    </li><li><a href="#ref-for-array-index①">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-array-iterator-objects">
   <a href="https://tc39.github.io/ecma262/#sec-array-iterator-objects">https://tc39.github.io/ecma262/#sec-array-iterator-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-array-iterator-objects">2.4.7. Iterable declarations</a> <a href="#ref-for-sec-array-iterator-objects①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-built-in-function-objects">
   <a href="https://tc39.github.io/ecma262/#sec-built-in-function-objects">https://tc39.github.io/ecma262/#sec-built-in-function-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-built-in-function-objects">2. Interface definition language</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①">2.3. Interface mixins</a> <a href="#ref-for-sec-built-in-function-objects②">(2)</a> <a href="#ref-for-sec-built-in-function-objects③">(3)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects④">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑤">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-sec-built-in-function-objects⑥">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑦">3.6.1. Interface object</a> <a href="#ref-for-sec-built-in-function-objects⑧">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑨">3.6.2. Named constructors</a> <a href="#ref-for-sec-built-in-function-objects①⓪">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①①">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①②">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①③">3.6.9.1. @@iterator</a> <a href="#ref-for-sec-built-in-function-objects①④">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑤">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑥">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑦">3.6.11.1. size</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑧">3.6.11.3. keys and values</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑨">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⓪">3.6.11.5. clear</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②①">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②②">3.6.11.7. set</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②③">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②④">3.6.12.1. size</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑤">3.6.12.3. entries and keys</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑥">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑦">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑧">3.6.12.6. clear</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-iscallable">
   <a href="https://tc39.github.io/ecma262/#sec-iscallable">https://tc39.github.io/ecma262/#sec-iscallable</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-iscallable">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-sec-iscallable①">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-sec-iscallable②">3.2.22. Union types</a>
    </li><li><a href="#ref-for-sec-iscallable③">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-sec-iscallable④">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-iscallable⑤">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-iscallable⑥">(2)</a> <a href="#ref-for-sec-iscallable⑦">(3)</a> <a href="#ref-for-sec-iscallable⑧">(4)</a> <a href="#ref-for-sec-iscallable⑨">(5)</a>
    </li><li><a href="#ref-for-sec-iscallable①⓪">3.10. Invoking callback functions</a> <a href="#ref-for-sec-iscallable①①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-completion-record-specification-type">
   <a href="https://tc39.github.io/ecma262/#sec-completion-record-specification-type">https://tc39.github.io/ecma262/#sec-completion-record-specification-type</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-completion-record-specification-type">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-sec-completion-record-specification-type①">(2)</a> <a href="#ref-for-sec-completion-record-specification-type②">(3)</a> <a href="#ref-for-sec-completion-record-specification-type③">(4)</a> <a href="#ref-for-sec-completion-record-specification-type④">(5)</a> <a href="#ref-for-sec-completion-record-specification-type⑤">(6)</a> <a href="#ref-for-sec-completion-record-specification-type⑥">(7)</a> <a href="#ref-for-sec-completion-record-specification-type⑦">(8)</a>
    </li><li><a href="#ref-for-sec-completion-record-specification-type⑧">3.10. Invoking callback functions</a> <a href="#ref-for-sec-completion-record-specification-type⑨">(2)</a> <a href="#ref-for-sec-completion-record-specification-type①⓪">(3)</a>
    </li><li><a href="#ref-for-sec-completion-record-specification-type①①">3.12.4. Handling exceptions</a>
    </li><li><a href="#ref-for-sec-completion-record-specification-type①②">Document conventions</a> <a href="#ref-for-sec-completion-record-specification-type①③">(2)</a> <a href="#ref-for-sec-completion-record-specification-type①④">(3)</a> <a href="#ref-for-sec-completion-record-specification-type①⑤">(4)</a> <a href="#ref-for-sec-completion-record-specification-type①⑥">(5)</a> <a href="#ref-for-sec-completion-record-specification-type①⑦">(6)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-constructor">
   <a href="https://tc39.github.io/ecma262/#constructor">https://tc39.github.io/ecma262/#constructor</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-constructor">2. Interface definition language</a>
    </li><li><a href="#ref-for-constructor①">3.3.13. [NamedConstructor]</a> <a href="#ref-for-constructor②">(2)</a> <a href="#ref-for-constructor③">(3)</a>
    </li><li><a href="#ref-for-constructor④">3.6.1. Interface object</a> <a href="#ref-for-constructor⑤">(2)</a>
    </li><li><a href="#ref-for-constructor⑥">3.10. Invoking callback functions</a>
    </li><li><a href="#ref-for-constructor⑦">3.12.3. Creating and throwing exceptions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-algorithm-conventions">
   <a href="https://tc39.github.io/ecma262/#sec-algorithm-conventions">https://tc39.github.io/ecma262/#sec-algorithm-conventions</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-algorithm-conventions">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-algorithm-conventions①">3.2.4. Integer types</a>
    </li><li><a href="#ref-for-sec-algorithm-conventions②">Document conventions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-current-realm">
   <a href="https://tc39.github.io/ecma262/#current-realm">https://tc39.github.io/ecma262/#current-realm</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-current-realm">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-current-realm①">3.12.3. Creating and throwing exceptions</a> <a href="#ref-for-current-realm②">(2)</a> <a href="#ref-for-current-realm③">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-algorithm-conventions">
   <a href="https://tc39.github.io/ecma262/#sec-algorithm-conventions">https://tc39.github.io/ecma262/#sec-algorithm-conventions</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-algorithm-conventions">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-algorithm-conventions①">3.2.4. Integer types</a>
    </li><li><a href="#ref-for-sec-algorithm-conventions②">Document conventions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ordinary-object-internal-methods-and-internal-slots">
   <a href="https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots">https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots">3. ECMAScript binding</a> <a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots①">(2)</a> <a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots②">(3)</a>
    </li><li><a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots③">3.6.5. Named properties object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-built-in-function-objects">
   <a href="https://tc39.github.io/ecma262/#sec-built-in-function-objects">https://tc39.github.io/ecma262/#sec-built-in-function-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-built-in-function-objects">2. Interface definition language</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①">2.3. Interface mixins</a> <a href="#ref-for-sec-built-in-function-objects②">(2)</a> <a href="#ref-for-sec-built-in-function-objects③">(3)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects④">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑤">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-sec-built-in-function-objects⑥">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑦">3.6.1. Interface object</a> <a href="#ref-for-sec-built-in-function-objects⑧">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects⑨">3.6.2. Named constructors</a> <a href="#ref-for-sec-built-in-function-objects①⓪">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①①">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①②">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①③">3.6.9.1. @@iterator</a> <a href="#ref-for-sec-built-in-function-objects①④">(2)</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑤">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑥">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑦">3.6.11.1. size</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑧">3.6.11.3. keys and values</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects①⑨">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⓪">3.6.11.5. clear</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②①">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②②">3.6.11.7. set</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②③">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②④">3.6.12.1. size</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑤">3.6.12.3. entries and keys</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑥">3.6.12.4. has</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑦">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-sec-built-in-function-objects②⑧">3.6.12.6. clear</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-immutable-prototype-exotic-objects">
   <a href="https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects">https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-immutable-prototype-exotic-objects">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-immutable-prototype-exotic-objects①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ecmascript-language-types-string-type">
   <a href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-string-type">https://tc39.github.io/ecma262/#sec-ecmascript-language-types-string-type</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ecmascript-language-types-string-type">3.2.10. ByteString</a> <a href="#ref-for-sec-ecmascript-language-types-string-type①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-property-attributes">
   <a href="https://tc39.github.io/ecma262/#sec-property-attributes">https://tc39.github.io/ecma262/#sec-property-attributes</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-property-attributes">3.2.20. Records — record&lt;K, V&gt;</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ecmascript-language-types-number-type">
   <a href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type">https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ecmascript-language-types-number-type">3.2.4.7. long long</a>
    </li><li><a href="#ref-for-sec-ecmascript-language-types-number-type①">3.2.4.8. unsigned long long</a>
    </li><li><a href="#ref-for-sec-ecmascript-language-types-number-type②">3.2.4.9. Abstract operations</a>
    </li><li><a href="#ref-for-sec-ecmascript-language-types-number-type③">3.2.5. float</a>
    </li><li><a href="#ref-for-sec-ecmascript-language-types-number-type④">3.2.6. unrestricted float</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-error-objects">
   <a href="https://tc39.github.io/ecma262/#sec-error-objects">https://tc39.github.io/ecma262/#sec-error-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-error-objects">2.7. Exceptions</a> <a href="#ref-for-sec-error-objects①">(2)</a>
    </li><li><a href="#ref-for-sec-error-objects②">3.2.23. Error</a> <a href="#ref-for-sec-error-objects③">(2)</a>
    </li><li><a href="#ref-for-sec-error-objects④">3.12.1. DOMException custom bindings</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-eqn-floor">
   <a href="https://tc39.github.io/ecma262/#eqn-floor">https://tc39.github.io/ecma262/#eqn-floor</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eqn-floor">3.2.4.9. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-function-object">
   <a href="https://tc39.github.io/ecma262/#function-object">https://tc39.github.io/ecma262/#function-object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-function-object">2.2. Interfaces</a>
    </li><li><a href="#ref-for-function-object①">2.4.1. Constants</a> <a href="#ref-for-function-object②">(2)</a>
    </li><li><a href="#ref-for-function-object③">2.4.5. Static attributes and operations</a>
    </li><li><a href="#ref-for-function-object④">2.9. Callback functions</a>
    </li><li><a href="#ref-for-function-object⑤">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-function-object⑥">3.1. ECMAScript environment</a> <a href="#ref-for-function-object⑦">(2)</a>
    </li><li><a href="#ref-for-function-object⑧">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-function-object⑨">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-function-object①⓪">3.4. Security</a>
    </li><li><a href="#ref-for-function-object①①">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-function-object①②">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-function-object①③">3.6.8.2. Stringifiers</a> <a href="#ref-for-function-object①④">(2)</a>
    </li><li><a href="#ref-for-function-object①⑤">3.6.9.1. @@iterator</a> <a href="#ref-for-function-object①⑥">(2)</a> <a href="#ref-for-function-object①⑦">(3)</a> <a href="#ref-for-function-object①⑧">(4)</a> <a href="#ref-for-function-object①⑨">(5)</a> <a href="#ref-for-function-object②⓪">(6)</a>
    </li><li><a href="#ref-for-function-object②①">3.6.9.2. forEach</a> <a href="#ref-for-function-object②②">(2)</a> <a href="#ref-for-function-object②③">(3)</a> <a href="#ref-for-function-object②④">(4)</a>
    </li><li><a href="#ref-for-function-object②⑤">3.6.10.1. entries</a> <a href="#ref-for-function-object②⑥">(2)</a> <a href="#ref-for-function-object②⑦">(3)</a>
    </li><li><a href="#ref-for-function-object②⑧">3.6.10.2. keys</a> <a href="#ref-for-function-object②⑨">(2)</a> <a href="#ref-for-function-object③⓪">(3)</a> <a href="#ref-for-function-object③①">(4)</a>
    </li><li><a href="#ref-for-function-object③②">3.6.10.3. values</a> <a href="#ref-for-function-object③③">(2)</a> <a href="#ref-for-function-object③④">(3)</a> <a href="#ref-for-function-object③⑤">(4)</a>
    </li><li><a href="#ref-for-function-object③⑥">3.6.11. Maplike declarations</a>
    </li><li><a href="#ref-for-function-object③⑦">3.6.11.1. size</a> <a href="#ref-for-function-object③⑧">(2)</a>
    </li><li><a href="#ref-for-function-object③⑨">3.6.11.2. entries</a>
    </li><li><a href="#ref-for-function-object④⓪">3.6.11.3. keys and values</a> <a href="#ref-for-function-object④①">(2)</a>
    </li><li><a href="#ref-for-function-object④②">3.6.11.4. get and has</a> <a href="#ref-for-function-object④③">(2)</a>
    </li><li><a href="#ref-for-function-object④④">3.6.11.5. clear</a> <a href="#ref-for-function-object④⑤">(2)</a>
    </li><li><a href="#ref-for-function-object④⑥">3.6.11.6. delete</a> <a href="#ref-for-function-object④⑦">(2)</a>
    </li><li><a href="#ref-for-function-object④⑧">3.6.11.7. set</a> <a href="#ref-for-function-object④⑨">(2)</a>
    </li><li><a href="#ref-for-function-object⑤⓪">3.6.12.1. size</a> <a href="#ref-for-function-object⑤①">(2)</a>
    </li><li><a href="#ref-for-function-object⑤②">3.6.12.2. values</a>
    </li><li><a href="#ref-for-function-object⑤③">3.6.12.3. entries and keys</a> <a href="#ref-for-function-object⑤④">(2)</a>
    </li><li><a href="#ref-for-function-object⑤⑤">3.6.12.4. has</a> <a href="#ref-for-function-object⑤⑥">(2)</a>
    </li><li><a href="#ref-for-function-object⑤⑦">3.6.12.5. add and delete</a> <a href="#ref-for-function-object⑤⑧">(2)</a>
    </li><li><a href="#ref-for-function-object⑤⑨">3.6.12.6. clear</a> <a href="#ref-for-function-object⑥⓪">(2)</a>
    </li><li><a href="#ref-for-function-object⑥①">3.12.3. Creating and throwing exceptions</a> <a href="#ref-for-function-object⑥②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-immutable-prototype-exotic-objects">
   <a href="https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects">https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-immutable-prototype-exotic-objects">3.6.3. Interface prototype object</a> <a href="#ref-for-sec-immutable-prototype-exotic-objects①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ordinary-object-internal-methods-and-internal-slots">
   <a href="https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots">https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots">3. ECMAScript binding</a> <a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots①">(2)</a> <a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots②">(3)</a>
    </li><li><a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots③">3.6.5. Named properties object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ordinary-object-internal-methods-and-internal-slots">
   <a href="https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots">https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots">3. ECMAScript binding</a> <a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots①">(2)</a> <a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots②">(3)</a>
    </li><li><a href="#ref-for-sec-ordinary-object-internal-methods-and-internal-slots③">3.6.5. Named properties object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-eqn-max">
   <a href="https://tc39.github.io/ecma262/#eqn-max">https://tc39.github.io/ecma262/#eqn-max</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eqn-max">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-eqn-max①">3.2.4.9. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-eqn-min">
   <a href="https://tc39.github.io/ecma262/#eqn-min">https://tc39.github.io/ecma262/#eqn-min</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eqn-min">3.2.4.9. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-eqn-modulo">
   <a href="https://tc39.github.io/ecma262/#eqn-modulo">https://tc39.github.io/ecma262/#eqn-modulo</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eqn-modulo">3.2.4.9. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-ecmascript-language-types-number-type">
   <a href="https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type">https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-ecmascript-language-types-number-type">3.2.4.7. long long</a>
    </li><li><a href="#ref-for-sec-ecmascript-language-types-number-type①">3.2.4.8. unsigned long long</a>
    </li><li><a href="#ref-for-sec-ecmascript-language-types-number-type②">3.2.4.9. Abstract operations</a>
    </li><li><a href="#ref-for-sec-ecmascript-language-types-number-type③">3.2.5. float</a>
    </li><li><a href="#ref-for-sec-ecmascript-language-types-number-type④">3.2.6. unrestricted float</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-literals-numeric-literals">
   <a href="https://tc39.github.io/ecma262/#sec-literals-numeric-literals">https://tc39.github.io/ecma262/#sec-literals-numeric-literals</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-literals-numeric-literals">2.4.1. Constants</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-own-property">
   <a href="https://tc39.github.io/ecma262/#sec-own-property">https://tc39.github.io/ecma262/#sec-own-property</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-own-property">3.2.20. Records — record&lt;K, V&gt;</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-sec-property-descriptor-specification-type">
   <a href="https://tc39.github.io/ecma262/#sec-property-descriptor-specification-type">https://tc39.github.io/ecma262/#sec-property-descriptor-specification-type</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sec-property-descriptor-specification-type">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-sec-property-descriptor-specification-type①">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-sec-property-descriptor-specification-type②">3.8.7. Abstract operations</a> <a href="#ref-for-sec-property-descriptor-specification-type③">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-realm">
   <a href="https://tc39.github.io/ecma262/#realm">https://tc39.github.io/ecma262/#realm</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-realm">3.1. ECMAScript environment</a> <a href="#ref-for-realm①">(2)</a>
    </li><li><a href="#ref-for-realm②">3.3.6. [Exposed]</a>
    </li><li><a href="#ref-for-realm③">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-realm④">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-realm⑤">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-realm⑥">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-realm⑦">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-realm⑧">3.6.6. Constants</a>
    </li><li><a href="#ref-for-realm⑨">3.6.7. Attributes</a> <a href="#ref-for-realm①⓪">(2)</a> <a href="#ref-for-realm①①">(3)</a> <a href="#ref-for-realm①②">(4)</a> <a href="#ref-for-realm①③">(5)</a> <a href="#ref-for-realm①④">(6)</a>
    </li><li><a href="#ref-for-realm①⑤">3.6.8. Operations</a> <a href="#ref-for-realm①⑥">(2)</a> <a href="#ref-for-realm①⑦">(3)</a> <a href="#ref-for-realm①⑧">(4)</a> <a href="#ref-for-realm①⑨">(5)</a>
    </li><li><a href="#ref-for-realm②⓪">3.7. Platform objects implementing interfaces</a> <a href="#ref-for-realm②①">(2)</a>
    </li><li><a href="#ref-for-realm②②">3.11.1. Namespace object</a>
    </li><li><a href="#ref-for-realm②③">3.12.3. Creating and throwing exceptions</a> <a href="#ref-for-realm②④">(2)</a> <a href="#ref-for-realm②⑤">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-ext_blend_minmax">
   <a href="https://www.khronos.org/registry/webgl/extensions/EXT_blend_minmax/#ext_blend_minmax">https://www.khronos.org/registry/webgl/extensions/EXT_blend_minmax/#ext_blend_minmax</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-ext_blend_minmax">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-ext_color_buffer_float">
   <a href="https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/#ext_color_buffer_float">https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/#ext_color_buffer_float</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-ext_color_buffer_float">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-ext_disjoint_timer_query">
   <a href="https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/#ext_disjoint_timer_query">https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/#ext_disjoint_timer_query</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-ext_disjoint_timer_query">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dom-document-fullscreenelement">
   <a href="https://fullscreen.spec.whatwg.org/#dom-document-fullscreenelement">https://fullscreen.spec.whatwg.org/#dom-document-fullscreenelement</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-document-fullscreenelement">3.3.11. [LenientSetter]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dom-document-fullscreenenabled">
   <a href="https://fullscreen.spec.whatwg.org/#dom-document-fullscreenenabled">https://fullscreen.spec.whatwg.org/#dom-document-fullscreenenabled</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-document-fullscreenenabled">3.3.11. [LenientSetter]</a> <a href="#ref-for-dom-document-fullscreenenabled①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-coordinates">
   <a href="https://www.w3.org/TR/geolocation-API/#coordinates">https://www.w3.org/TR/geolocation-API/#coordinates</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-coordinates">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-geolocation">
   <a href="https://www.w3.org/TR/geolocation-API/#geolocation">https://www.w3.org/TR/geolocation-API/#geolocation</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-geolocation">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-position">
   <a href="https://www.w3.org/TR/geolocation-API/#position">https://www.w3.org/TR/geolocation-API/#position</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-position">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-position-error">
   <a href="https://www.w3.org/TR/geolocation-API/#position-error">https://www.w3.org/TR/geolocation-API/#position-error</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-position-error">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dommatrix">
   <a href="https://drafts.fxtf.org/geometry-1/#dommatrix">https://drafts.fxtf.org/geometry-1/#dommatrix</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dommatrix">3.3.10. [LegacyWindowAlias]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dompoint">
   <a href="https://drafts.fxtf.org/geometry-1/#dompoint">https://drafts.fxtf.org/geometry-1/#dompoint</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dompoint">3.3.10. [LegacyWindowAlias]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-domrect">
   <a href="https://drafts.fxtf.org/geometry-1/#domrect">https://drafts.fxtf.org/geometry-1/#domrect</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-domrect">3.3.10. [LegacyWindowAlias]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-canvasdrawpath">
   <a href="https://html.spec.whatwg.org/multipage/canvas.html#canvasdrawpath">https://html.spec.whatwg.org/multipage/canvas.html#canvasdrawpath</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-canvasdrawpath">2.4.6.1. Overloading vs. union types</a> <a href="#ref-for-canvasdrawpath①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-domstringmap">
   <a href="https://html.spec.whatwg.org/multipage/dom.html#domstringmap">https://html.spec.whatwg.org/multipage/dom.html#domstringmap</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-domstringmap">3.3.16. [OverrideBuiltins]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-eventhandlernonnull">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#eventhandlernonnull">https://html.spec.whatwg.org/multipage/webappapis.html#eventhandlernonnull</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-eventhandlernonnull">3.3.21. [TreatNonObjectAsNull]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-htmlallcollection">
   <a href="https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmlallcollection">https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmlallcollection</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-htmlallcollection">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-htmlallcollection①">3.3.9. [LegacyUnenumerableNamedProperties]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-htmlaudioelement">
   <a href="https://html.spec.whatwg.org/multipage/media.html#htmlaudioelement">https://html.spec.whatwg.org/multipage/media.html#htmlaudioelement</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-htmlaudioelement">3.3.13. [NamedConstructor]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-htmlformelement">
   <a href="https://html.spec.whatwg.org/multipage/forms.html#htmlformelement">https://html.spec.whatwg.org/multipage/forms.html#htmlformelement</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-htmlformelement">3.3.9. [LegacyUnenumerableNamedProperties]</a>
    </li><li><a href="#ref-for-htmlformelement①">3.3.16. [OverrideBuiltins]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-htmlimageelement">
   <a href="https://html.spec.whatwg.org/multipage/embedded-content.html#htmlimageelement">https://html.spec.whatwg.org/multipage/embedded-content.html#htmlimageelement</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-htmlimageelement">3.3.13. [NamedConstructor]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-htmloptionelement">
   <a href="https://html.spec.whatwg.org/multipage/form-elements.html#htmloptionelement">https://html.spec.whatwg.org/multipage/form-elements.html#htmloptionelement</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-htmloptionelement">3.3.13. [NamedConstructor]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-location">
   <a href="https://html.spec.whatwg.org/multipage/history.html#location">https://html.spec.whatwg.org/multipage/history.html#location</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-location">3. ECMAScript binding</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-mimetypearray">
   <a href="https://html.spec.whatwg.org/multipage/system-state.html#mimetypearray">https://html.spec.whatwg.org/multipage/system-state.html#mimetypearray</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-mimetypearray">3.3.9. [LegacyUnenumerableNamedProperties]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-onbeforeunloadeventhandlernonnull">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#onbeforeunloadeventhandlernonnull">https://html.spec.whatwg.org/multipage/webappapis.html#onbeforeunloadeventhandlernonnull</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-onbeforeunloadeventhandlernonnull">3.3.21. [TreatNonObjectAsNull]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-onerroreventhandlernonnull">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#onerroreventhandlernonnull">https://html.spec.whatwg.org/multipage/webappapis.html#onerroreventhandlernonnull</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-onerroreventhandlernonnull">3.3.21. [TreatNonObjectAsNull]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-path2d">
   <a href="https://html.spec.whatwg.org/multipage/canvas.html#path2d">https://html.spec.whatwg.org/multipage/canvas.html#path2d</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-path2d">2.4.6.1. Overloading vs. union types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dom-plugin">
   <a href="https://html.spec.whatwg.org/multipage/system-state.html#dom-plugin">https://html.spec.whatwg.org/multipage/system-state.html#dom-plugin</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-plugin">3.3.9. [LegacyUnenumerableNamedProperties]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-pluginarray">
   <a href="https://html.spec.whatwg.org/multipage/system-state.html#pluginarray">https://html.spec.whatwg.org/multipage/system-state.html#pluginarray</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-pluginarray">3.3.9. [LegacyUnenumerableNamedProperties]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-window">
   <a href="https://html.spec.whatwg.org/multipage/window-object.html#window">https://html.spec.whatwg.org/multipage/window-object.html#window</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-window">3.3.6. [Exposed]</a>
    </li><li><a href="#ref-for-window①">3.3.9. [LegacyUnenumerableNamedProperties]</a>
    </li><li><a href="#ref-for-window②">3.3.10. [LegacyWindowAlias]</a> <a href="#ref-for-window③">(2)</a> <a href="#ref-for-window④">(3)</a>
    </li><li><a href="#ref-for-window⑤">3.6. Interfaces</a>
    </li><li><a href="#ref-for-window⑥">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-window⑦">3.7.1. [[SetPrototypeOf]]</a> <a href="#ref-for-window⑧">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-windoworworkerglobalscope">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope">https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-windoworworkerglobalscope">2.3.1. Using mixins and partials</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-windowproxy">
   <a href="https://html.spec.whatwg.org/multipage/window-object.html#windowproxy">https://html.spec.whatwg.org/multipage/window-object.html#windowproxy</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-windowproxy">3.7.1. [[SetPrototypeOf]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-clean-up-after-running-a-callback">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback">https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-clean-up-after-running-a-callback">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-clean-up-after-running-a-callback①">(2)</a> <a href="#ref-for-clean-up-after-running-a-callback②">(3)</a>
    </li><li><a href="#ref-for-clean-up-after-running-a-callback③">3.10. Invoking callback functions</a> <a href="#ref-for-clean-up-after-running-a-callback④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-clean-up-after-running-script">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script">https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-clean-up-after-running-script">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-clean-up-after-running-script①">(2)</a> <a href="#ref-for-clean-up-after-running-script②">(3)</a>
    </li><li><a href="#ref-for-clean-up-after-running-script③">3.10. Invoking callback functions</a> <a href="#ref-for-clean-up-after-running-script④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-event-handler-idl-attributes">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-idl-attributes">https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-idl-attributes</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-event-handler-idl-attributes">3.3.21. [TreatNonObjectAsNull]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-concept-realm-global">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-global">https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-global</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-concept-realm-global">3.6.7. Attributes</a> <a href="#ref-for-concept-realm-global①">(2)</a>
    </li><li><a href="#ref-for-concept-realm-global②">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-incumbent-settings-object">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#incumbent-settings-object">https://html.spec.whatwg.org/multipage/webappapis.html#incumbent-settings-object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-incumbent-settings-object">2.12.20. Interface types</a>
    </li><li><a href="#ref-for-incumbent-settings-object①">2.12.23. Callback function types</a>
    </li><li><a href="#ref-for-incumbent-settings-object②">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-incumbent-settings-object③">3.2.17. Callback function types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-handler-onmouseenter">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#handler-onmouseenter">https://html.spec.whatwg.org/multipage/webappapis.html#handler-onmouseenter</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-handler-onmouseenter">3.3.12. [LenientThis]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-handler-onmouseleave">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#handler-onmouseleave">https://html.spec.whatwg.org/multipage/webappapis.html#handler-onmouseleave</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-handler-onmouseleave">3.3.12. [LenientThis]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-handler-onreadystatechange">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#handler-onreadystatechange">https://html.spec.whatwg.org/multipage/webappapis.html#handler-onreadystatechange</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-handler-onreadystatechange">3.3.12. [LenientThis]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-prepare-to-run-a-callback">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-a-callback">https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-a-callback</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-prepare-to-run-a-callback">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-prepare-to-run-a-callback①">(2)</a> <a href="#ref-for-prepare-to-run-a-callback②">(3)</a>
    </li><li><a href="#ref-for-prepare-to-run-a-callback③">3.10. Invoking callback functions</a> <a href="#ref-for-prepare-to-run-a-callback④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-prepare-to-run-script">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-script">https://html.spec.whatwg.org/multipage/webappapis.html#prepare-to-run-script</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-prepare-to-run-script">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-prepare-to-run-script①">(2)</a> <a href="#ref-for-prepare-to-run-script②">(3)</a>
    </li><li><a href="#ref-for-prepare-to-run-script③">3.10. Invoking callback functions</a> <a href="#ref-for-prepare-to-run-script④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-concept-relevant-realm">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-realm">https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-realm</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-concept-relevant-realm">3.1. ECMAScript environment</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-relevant-settings-object">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#relevant-settings-object">https://html.spec.whatwg.org/multipage/webappapis.html#relevant-settings-object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-relevant-settings-object">3.3.6. [Exposed]</a> <a href="#ref-for-relevant-settings-object①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-concept-realm-settings-object">
   <a href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-settings-object">https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-settings-object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-concept-realm-settings-object">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-concept-realm-settings-object①">(2)</a> <a href="#ref-for-concept-realm-settings-object②">(3)</a>
    </li><li><a href="#ref-for-concept-realm-settings-object③">3.10. Invoking callback functions</a> <a href="#ref-for-concept-realm-settings-object④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dom-context-2d-stroke">
   <a href="https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-stroke">https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-stroke</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-context-2d-stroke">2.4.6.1. Overloading vs. union types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-set-append">
   <a href="https://infra.spec.whatwg.org/#set-append">https://infra.spec.whatwg.org/#set-append</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-set-append">2.4.6. Overloading</a> <a href="#ref-for-set-append①">(2)</a> <a href="#ref-for-set-append②">(3)</a>
    </li><li><a href="#ref-for-set-append③">2.12.29. Annotated types</a> <a href="#ref-for-set-append④">(2)</a> <a href="#ref-for-set-append⑤">(3)</a> <a href="#ref-for-set-append⑥">(4)</a> <a href="#ref-for-set-append⑦">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-iteration-break">
   <a href="https://infra.spec.whatwg.org/#iteration-break">https://infra.spec.whatwg.org/#iteration-break</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-iteration-break">2.4.6. Overloading</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-iteration-continue">
   <a href="https://infra.spec.whatwg.org/#iteration-continue">https://infra.spec.whatwg.org/#iteration-continue</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-iteration-continue">3.6.6. Constants</a>
    </li><li><a href="#ref-for-iteration-continue①">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-iteration-continue②">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-map-entry">
   <a href="https://infra.spec.whatwg.org/#map-entry">https://infra.spec.whatwg.org/#map-entry</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-map-entry">2.6. Dictionaries</a> <a href="#ref-for-map-entry①">(2)</a> <a href="#ref-for-map-entry②">(3)</a>
    </li><li><a href="#ref-for-map-entry③">2.12.26. Record types — record&lt;K, V&gt;</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-map-iterate">
   <a href="https://infra.spec.whatwg.org/#map-iterate">https://infra.spec.whatwg.org/#map-iterate</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-map-iterate">3.2.20. Records — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-map-iterate①">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-set-intersection">
   <a href="https://infra.spec.whatwg.org/#set-intersection">https://infra.spec.whatwg.org/#set-intersection</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-set-intersection">3.3.6. [Exposed]</a> <a href="#ref-for-set-intersection①">(2)</a> <a href="#ref-for-set-intersection②">(3)</a> <a href="#ref-for-set-intersection③">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-list-is-empty">
   <a href="https://infra.spec.whatwg.org/#list-is-empty">https://infra.spec.whatwg.org/#list-is-empty</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-list-is-empty">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-list-is-empty①">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-list-is-empty">
   <a href="https://infra.spec.whatwg.org/#list-is-empty">https://infra.spec.whatwg.org/#list-is-empty</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-list-is-empty">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-list-is-empty①">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-struct-item">
   <a href="https://infra.spec.whatwg.org/#struct-item">https://infra.spec.whatwg.org/#struct-item</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-struct-item">2.4.6. Overloading</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-javascript-string">
   <a href="https://infra.spec.whatwg.org/#javascript-string">https://infra.spec.whatwg.org/#javascript-string</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-javascript-string">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-map-key">
   <a href="https://infra.spec.whatwg.org/#map-key">https://infra.spec.whatwg.org/#map-key</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-map-key">2.6. Dictionaries</a> <a href="#ref-for-map-key①">(2)</a>
    </li><li><a href="#ref-for-map-key②">2.12.26. Record types — record&lt;K, V&gt;</a> <a href="#ref-for-map-key③">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-list">
   <a href="https://infra.spec.whatwg.org/#list">https://infra.spec.whatwg.org/#list</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-list">2.4.6. Overloading</a> <a href="#ref-for-list①">(2)</a> <a href="#ref-for-list②">(3)</a>
    </li><li><a href="#ref-for-list③">2.12.25. Sequence types — sequence&lt;T&gt;</a> <a href="#ref-for-list④">(2)</a> <a href="#ref-for-list⑤">(3)</a>
    </li><li><a href="#ref-for-list⑥">3.6.7. Attributes</a> <a href="#ref-for-list⑦">(2)</a> <a href="#ref-for-list⑧">(3)</a>
    </li><li><a href="#ref-for-list⑨">3.6.8. Operations</a> <a href="#ref-for-list①⓪">(2)</a> <a href="#ref-for-list①①">(3)</a>
    </li><li><a href="#ref-for-list①②">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-list①③">3.8.6. [[OwnPropertyKeys]]</a> <a href="#ref-for-list①④">(2)</a> <a href="#ref-for-list①⑤">(3)</a> <a href="#ref-for-list①⑥">(4)</a> <a href="#ref-for-list①⑦">(5)</a> <a href="#ref-for-list①⑧">(6)</a> <a href="#ref-for-list①⑨">(7)</a> <a href="#ref-for-list②⓪">(8)</a> <a href="#ref-for-list②①">(9)</a>
    </li><li><a href="#ref-for-list②②">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-list②③">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-ordered-map">
   <a href="https://infra.spec.whatwg.org/#ordered-map">https://infra.spec.whatwg.org/#ordered-map</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-ordered-map">2.6. Dictionaries</a> <a href="#ref-for-ordered-map①">(2)</a>
    </li><li><a href="#ref-for-ordered-map②">2.12.21. Dictionary types</a>
    </li><li><a href="#ref-for-ordered-map③">2.12.26. Record types — record&lt;K, V&gt;</a> <a href="#ref-for-ordered-map④">(2)</a> <a href="#ref-for-ordered-map⑤">(3)</a>
    </li><li><a href="#ref-for-ordered-map⑥">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-ordered-map⑦">(2)</a> <a href="#ref-for-ordered-map⑧">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-ordered-set">
   <a href="https://infra.spec.whatwg.org/#ordered-set">https://infra.spec.whatwg.org/#ordered-set</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-ordered-set">2.4.6. Overloading</a> <a href="#ref-for-ordered-set①">(2)</a>
    </li><li><a href="#ref-for-ordered-set②">2.12.29. Annotated types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-stack-pop">
   <a href="https://infra.spec.whatwg.org/#stack-pop">https://infra.spec.whatwg.org/#stack-pop</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-stack-pop">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-stack-push">
   <a href="https://infra.spec.whatwg.org/#stack-push">https://infra.spec.whatwg.org/#stack-push</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-stack-push">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-stack-push①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-list-remove">
   <a href="https://infra.spec.whatwg.org/#list-remove">https://infra.spec.whatwg.org/#list-remove</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-list-remove">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-list-remove①">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-map-set">
   <a href="https://infra.spec.whatwg.org/#map-set">https://infra.spec.whatwg.org/#map-set</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-map-set">3.2.20. Records — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-map-set①">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-list-size">
   <a href="https://infra.spec.whatwg.org/#list-size">https://infra.spec.whatwg.org/#list-size</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-list-size">2.4.6. Overloading</a> <a href="#ref-for-list-size①">(2)</a>
    </li><li><a href="#ref-for-list-size②">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-list-size③">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-list-size④">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-list-size⑤">3.6.8. Operations</a>
    </li><li><a href="#ref-for-list-size⑥">3.9. User objects implementing callback interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-stack">
   <a href="https://infra.spec.whatwg.org/#stack">https://infra.spec.whatwg.org/#stack</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-stack">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-stack①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-the-range">
   <a href="https://infra.spec.whatwg.org/#the-range">https://infra.spec.whatwg.org/#the-range</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-the-range">2.4.6. Overloading</a> <a href="#ref-for-the-range①">(2)</a> <a href="#ref-for-the-range②">(3)</a> <a href="#ref-for-the-range③">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-tuple">
   <a href="https://infra.spec.whatwg.org/#tuple">https://infra.spec.whatwg.org/#tuple</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-tuple">2.4.6. Overloading</a> <a href="#ref-for-tuple①">(2)</a> <a href="#ref-for-tuple②">(3)</a> <a href="#ref-for-tuple③">(4)</a> <a href="#ref-for-tuple④">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-map-value">
   <a href="https://infra.spec.whatwg.org/#map-value">https://infra.spec.whatwg.org/#map-value</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-map-value">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-map-value①">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-map-value②">2.12.26. Record types — record&lt;K, V&gt;</a> <a href="#ref-for-map-value③">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-iteration-while">
   <a href="https://infra.spec.whatwg.org/#iteration-while">https://infra.spec.whatwg.org/#iteration-while</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-iteration-while">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-iteration-while①">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-dom-constrainablepattern">
   <a href="https://w3c.github.io/mediacapture-main/#dom-constrainablepattern">https://w3c.github.io/mediacapture-main/#dom-constrainablepattern</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-constrainablepattern">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-oes_standard_derivatives">
   <a href="https://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/#oes_standard_derivatives">https://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/#oes_standard_derivatives</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-oes_standard_derivatives">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-oes_vertex_array_object">
   <a href="https://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/#oes_vertex_array_object">https://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/#oes_vertex_array_object</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-oes_vertex_array_object">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-device_acceleration">
   <a href="https://w3c.github.io/deviceorientation/spec-source-orientation.html#device_acceleration">https://w3c.github.io/deviceorientation/spec-source-orientation.html#device_acceleration</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-device_acceleration">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-device_rotation_rate">
   <a href="https://w3c.github.io/deviceorientation/spec-source-orientation.html#device_rotation_rate">https://w3c.github.io/deviceorientation/spec-source-orientation.html#device_rotation_rate</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-device_rotation_rate">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-secure-contexts">
   <a href="https://w3c.github.io/webappsec-secure-contexts/#secure-contexts">https://w3c.github.io/webappsec-secure-contexts/#secure-contexts</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-secure-contexts">3.3.6. [Exposed]</a> <a href="#ref-for-secure-contexts①">(2)</a>
    </li><li><a href="#ref-for-secure-contexts②">3.3.20. [SecureContext]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-unicode_scalar_value">
   <a href="http://www.unicode.org/glossary/#unicode_scalar_value">http://www.unicode.org/glossary/#unicode_scalar_value</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-unicode_scalar_value">2.4.3. Operations</a>
    </li><li><a href="#ref-for-unicode_scalar_value①">2.12.15. DOMString</a>
    </li><li><a href="#ref-for-unicode_scalar_value②">2.12.17. USVString</a>
    </li><li><a href="#ref-for-unicode_scalar_value③">3.2.11. USVString</a> <a href="#ref-for-unicode_scalar_value④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-url">
   <a href="https://url.spec.whatwg.org/#url">https://url.spec.whatwg.org/#url</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-url">3.3.10. [LegacyWindowAlias]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-webgl_compressed_texture_astc">
   <a href="https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/#webgl_compressed_texture_astc">https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/#webgl_compressed_texture_astc</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-webgl_compressed_texture_astc">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-webgl_compressed_texture_s3tc_srgb">
   <a href="https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/#webgl_compressed_texture_s3tc_srgb">https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/#webgl_compressed_texture_s3tc_srgb</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-webgl_compressed_texture_s3tc_srgb">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-webgl_draw_buffers">
   <a href="https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/#webgl_draw_buffers">https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/#webgl_draw_buffers</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-webgl_draw_buffers">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-webgl_lose_context">
   <a href="https://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/#webgl_lose_context">https://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/#webgl_lose_context</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-webgl_lose_context">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="term-for-worklet">
   <a href="https://drafts.css-houdini.org/worklets/#worklet">https://drafts.css-houdini.org/worklets/#worklet</a><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-worklet">3.3.6. [Exposed]</a>
   </li></ul>
  </aside>
  <h3 class="no-num no-ref heading settled" id="index-defined-elsewhere"><span class="content">Terms defined by reference</span><a class="self-link" href="#index-defined-elsewhere"></a></h3>
  <ul class="index">
   <li>
    <a data-link-type="biblio">[angle_instanced_arrays]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-angle_instanced_arrays" style="color:initial">ANGLE_instanced_arrays</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[CSS3-CONDITIONAL]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-dom-css-supports" style="color:initial">supports(conditionText)</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[CSSOM]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-namespacedef-css" style="color:initial">CSS</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[DOM]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-document" style="color:initial">Document</span>
     </li><li><span class="dfn-paneled" id="term-for-documentorshadowroot" style="color:initial">DocumentOrShadowRoot</span>
     </li><li><span class="dfn-paneled" id="term-for-htmlcollection" style="color:initial">HTMLCollection</span>
     </li><li><span class="dfn-paneled" id="term-for-namednodemap" style="color:initial">NamedNodeMap</span>
     </li><li><span class="dfn-paneled" id="term-for-dom-document-createelement" style="color:initial">createElement(localName)</span>
     </li><li><span class="dfn-paneled" id="term-for-concept-document" style="color:initial">document</span>
     </li><li><span class="dfn-paneled" id="term-for-dom-document-implementation" style="color:initial">implementation</span>
     </li><li><span class="dfn-paneled" id="term-for-concept-node-tree" style="color:initial">node tree</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[ECMA-262]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-sec-returnifabrupt-shorthands" style="color:initial">!</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-array.prototype.entries" style="color:initial">%ArrayProto_entries%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-array.prototype.foreach" style="color:initial">%ArrayProto_forEach%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-array.prototype.keys" style="color:initial">%ArrayProto_keys%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-array.prototype.values" style="color:initial">%ArrayProto_values%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-properties-of-the-error-prototype-object" style="color:initial">%ErrorPrototype%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-properties-of-the-function-prototype-object" style="color:initial">%FunctionPrototype%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-%iteratorprototype%-object" style="color:initial">%IteratorPrototype%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-properties-of-the-object-prototype-object" style="color:initial">%ObjectPrototype%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-promise-constructor" style="color:initial">%Promise%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-promise.reject" style="color:initial">%Promise_reject%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-promise.resolve" style="color:initial">%Promise_resolve%</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-returnifabrupt-shorthands①" style="color:initial">?</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-well-known-symbols" style="color:initial">@@iterator</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-well-known-symbols①" style="color:initial">@@toStringTag</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-well-known-symbols②" style="color:initial">@@unscopables</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-arraybuffer-objects" style="color:initial">ArrayBuffer</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-arraycreate" style="color:initial">ArrayCreate</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-call" style="color:initial">Call</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-canonicalnumericindexstring" style="color:initial">CanonicalNumericIndexString</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-completion" style="color:initial">Completion</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-construct" style="color:initial">Construct</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-createbuiltinfunction" style="color:initial">CreateBuiltinFunction</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-createdataproperty" style="color:initial">CreateDataProperty</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-createiterresultobject" style="color:initial">CreateIterResultObject</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-createmapiterator" style="color:initial">CreateMapIterator</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-createsetiterator" style="color:initial">CreateSetIterator</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-dataview-objects" style="color:initial">DataView</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-definepropertyorthrow" style="color:initial">DefinePropertyOrThrow</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-detacharraybuffer" style="color:initial">DetachArrayBuffer</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-error-objects" style="color:initial">Error</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-get-o-p" style="color:initial">Get</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-getiterator" style="color:initial">GetIterator</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-getmethod" style="color:initial">GetMethod</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-iscallable" style="color:initial">IsCallable</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-isconstructor" style="color:initial">IsConstructor</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-isdatadescriptor" style="color:initial">IsDataDescriptor</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-isdetachedbuffer" style="color:initial">IsDetachedBuffer</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-isinteger" style="color:initial">IsInteger</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-issharedarraybuffer" style="color:initial">IsSharedArrayBuffer</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-iteratorstep" style="color:initial">IteratorStep</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-iteratorvalue" style="color:initial">IteratorValue</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-json.stringify" style="color:initial">JSON.stringify()</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-map-objects" style="color:initial">Map</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-built-in-function-objects" style="color:initial">NewTarget</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-normalcompletion" style="color:initial">NormalCompletion</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-objectcreate" style="color:initial">ObjectCreate</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ordinarydefineownproperty" style="color:initial">OrdinaryDefineOwnProperty</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ordinarygetownproperty" style="color:initial">OrdinaryGetOwnProperty</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ordinarysetwithowndescriptor" style="color:initial">OrdinarySetWithOwnDescriptor</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-promise-objects" style="color:initial">Promise</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-set-objects" style="color:initial">Set <small>(for ECMAScript)</small></span>
     </li><li><span class="dfn-paneled" id="term-for-sec-setfunctionlength" style="color:initial">SetFunctionLength</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-setfunctionname" style="color:initial">SetFunctionName</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-set-immutable-prototype" style="color:initial">SetImmutablePrototype</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-setintegritylevel" style="color:initial">SetIntegrityLevel</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-sharedarraybuffer-objects" style="color:initial">SharedArrayBuffer</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-native-error-types-used-in-this-standard-syntaxerror" style="color:initial">SyntaxError</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-toboolean" style="color:initial">ToBoolean</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-toint32" style="color:initial">ToInt32</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-tonumber" style="color:initial">ToNumber</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-toobject" style="color:initial">ToObject</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-tostring" style="color:initial">ToString</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-touint32" style="color:initial">ToUint32</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ecmascript-data-types-and-values" style="color:initial">Type</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-native-error-types-used-in-this-standard-typeerror" style="color:initial">TypeError</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-completion-record-specification-type" style="color:initial">abrupt completion</span>
     </li><li><span class="dfn-paneled" id="term-for-eqn-abs" style="color:initial">abs</span>
     </li><li><span class="dfn-paneled" id="term-for-array-index" style="color:initial">array index</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-array-iterator-objects" style="color:initial">array iterator object</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-built-in-function-objects①" style="color:initial">built-in function object</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-iscallable①" style="color:initial">callable</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-completion-record-specification-type①" style="color:initial">completion record</span>
     </li><li><span class="dfn-paneled" id="term-for-constructor" style="color:initial">constructor</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-algorithm-conventions" style="color:initial">conventions</span>
     </li><li><span class="dfn-paneled" id="term-for-current-realm" style="color:initial">current realm</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-algorithm-conventions①" style="color:initial">ecma-262 §5.2</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ordinary-object-internal-methods-and-internal-slots" style="color:initial">ecma-262 §9.1</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-built-in-function-objects②" style="color:initial">ecma-262 §9.3</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-immutable-prototype-exotic-objects" style="color:initial">ecma-262 §9.4.7</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ecmascript-language-types-string-type" style="color:initial">element</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-property-attributes" style="color:initial">enumerable</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ecmascript-language-types-number-type" style="color:initial">equally close values</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-error-objects①" style="color:initial">error objects</span>
     </li><li><span class="dfn-paneled" id="term-for-eqn-floor" style="color:initial">floor</span>
     </li><li><span class="dfn-paneled" id="term-for-function-object" style="color:initial">function object</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-immutable-prototype-exotic-objects①" style="color:initial">immutable prototype exotic object</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ordinary-object-internal-methods-and-internal-slots①" style="color:initial">internal method <small>(for ordinary object)</small></span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ordinary-object-internal-methods-and-internal-slots②" style="color:initial">internal slot <small>(for ordinary object)</small></span>
     </li><li><span class="dfn-paneled" id="term-for-eqn-max" style="color:initial">max</span>
     </li><li><span class="dfn-paneled" id="term-for-eqn-min" style="color:initial">min</span>
     </li><li><span class="dfn-paneled" id="term-for-eqn-modulo" style="color:initial">modulo</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-ecmascript-language-types-number-type①" style="color:initial">number type</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-literals-numeric-literals" style="color:initial">numericliteral</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-own-property" style="color:initial">own property</span>
     </li><li><span class="dfn-paneled" id="term-for-sec-property-descriptor-specification-type" style="color:initial">property descriptor</span>
     </li><li><span class="dfn-paneled" id="term-for-realm" style="color:initial">realm</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[ext_blend_minmax]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-ext_blend_minmax" style="color:initial">EXT_blend_minmax</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[ext_color_buffer_float]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-ext_color_buffer_float" style="color:initial">EXT_color_buffer_float</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[ext_disjoint_timer_query]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-ext_disjoint_timer_query" style="color:initial">EXT_disjoint_timer_query</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[FULLSCREEN]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-dom-document-fullscreenelement" style="color:initial">fullscreenElement</span>
     </li><li><span class="dfn-paneled" id="term-for-dom-document-fullscreenenabled" style="color:initial">fullscreenEnabled</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[GEOLOCATION-API]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-coordinates" style="color:initial">Coordinates</span>
     </li><li><span class="dfn-paneled" id="term-for-geolocation" style="color:initial">Geolocation</span>
     </li><li><span class="dfn-paneled" id="term-for-position" style="color:initial">Position</span>
     </li><li><span class="dfn-paneled" id="term-for-position-error" style="color:initial">PositionError</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[GEOMETRY]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-dommatrix" style="color:initial">DOMMatrix</span>
     </li><li><span class="dfn-paneled" id="term-for-dompoint" style="color:initial">DOMPoint</span>
     </li><li><span class="dfn-paneled" id="term-for-domrect" style="color:initial">DOMRect</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[HTML]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-canvasdrawpath" style="color:initial">CanvasDrawPath</span>
     </li><li><span class="dfn-paneled" id="term-for-domstringmap" style="color:initial">DOMStringMap</span>
     </li><li><span class="dfn-paneled" id="term-for-eventhandlernonnull" style="color:initial">EventHandlerNonNull</span>
     </li><li><span class="dfn-paneled" id="term-for-htmlallcollection" style="color:initial">HTMLAllCollection</span>
     </li><li><span class="dfn-paneled" id="term-for-htmlaudioelement" style="color:initial">HTMLAudioElement</span>
     </li><li><span class="dfn-paneled" id="term-for-htmlformelement" style="color:initial">HTMLFormElement</span>
     </li><li><span class="dfn-paneled" id="term-for-htmlimageelement" style="color:initial">HTMLImageElement</span>
     </li><li><span class="dfn-paneled" id="term-for-htmloptionelement" style="color:initial">HTMLOptionElement</span>
     </li><li><span class="dfn-paneled" id="term-for-location" style="color:initial">Location</span>
     </li><li><span class="dfn-paneled" id="term-for-mimetypearray" style="color:initial">MimeTypeArray</span>
     </li><li><span class="dfn-paneled" id="term-for-onbeforeunloadeventhandlernonnull" style="color:initial">OnBeforeUnloadEventHandlerNonNull</span>
     </li><li><span class="dfn-paneled" id="term-for-onerroreventhandlernonnull" style="color:initial">OnErrorEventHandlerNonNull</span>
     </li><li><span class="dfn-paneled" id="term-for-path2d" style="color:initial">Path2D</span>
     </li><li><span class="dfn-paneled" id="term-for-dom-plugin" style="color:initial">Plugin</span>
     </li><li><span class="dfn-paneled" id="term-for-pluginarray" style="color:initial">PluginArray</span>
     </li><li><span class="dfn-paneled" id="term-for-window" style="color:initial">Window</span>
     </li><li><span class="dfn-paneled" id="term-for-windoworworkerglobalscope" style="color:initial">WindowOrWorkerGlobalScope</span>
     </li><li><span class="dfn-paneled" id="term-for-windowproxy" style="color:initial">WindowProxy</span>
     </li><li><span class="dfn-paneled" id="term-for-clean-up-after-running-a-callback" style="color:initial">clean up after running a callback</span>
     </li><li><span class="dfn-paneled" id="term-for-clean-up-after-running-script" style="color:initial">clean up after running script</span>
     </li><li><span class="dfn-paneled" id="term-for-event-handler-idl-attributes" style="color:initial">event handler idl attribute</span>
     </li><li><span class="dfn-paneled" id="term-for-concept-realm-global" style="color:initial">global object</span>
     </li><li><span class="dfn-paneled" id="term-for-incumbent-settings-object" style="color:initial">incumbent settings object</span>
     </li><li><span class="dfn-paneled" id="term-for-handler-onmouseenter" style="color:initial">onmouseenter</span>
     </li><li><span class="dfn-paneled" id="term-for-handler-onmouseleave" style="color:initial">onmouseleave</span>
     </li><li><span class="dfn-paneled" id="term-for-handler-onreadystatechange" style="color:initial">onreadystatechange</span>
     </li><li><span class="dfn-paneled" id="term-for-prepare-to-run-a-callback" style="color:initial">prepare to run a callback</span>
     </li><li><span class="dfn-paneled" id="term-for-prepare-to-run-script" style="color:initial">prepare to run script</span>
     </li><li><span class="dfn-paneled" id="term-for-concept-relevant-realm" style="color:initial">relevant realm</span>
     </li><li><span class="dfn-paneled" id="term-for-relevant-settings-object" style="color:initial">relevant settings object</span>
     </li><li><span class="dfn-paneled" id="term-for-concept-realm-settings-object" style="color:initial">settings object</span>
     </li><li><span class="dfn-paneled" id="term-for-dom-context-2d-stroke" style="color:initial">stroke()</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[INFRA]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-set-append" style="color:initial">append <small>(for set)</small></span>
     </li><li><span class="dfn-paneled" id="term-for-iteration-break" style="color:initial">break</span>
     </li><li><span class="dfn-paneled" id="term-for-iteration-continue" style="color:initial">continue</span>
     </li><li><span class="dfn-paneled" id="term-for-map-entry" style="color:initial">entry</span>
     </li><li><span class="dfn-paneled" id="term-for-map-iterate" style="color:initial">for each <small>(for map)</small></span>
     </li><li><span class="dfn-paneled" id="term-for-set-intersection" style="color:initial">intersection</span>
     </li><li><span class="dfn-paneled" id="term-for-list-is-empty" style="color:initial">is empty</span>
     </li><li><span class="dfn-paneled" id="term-for-list-is-empty①" style="color:initial">is not empty</span>
     </li><li><span class="dfn-paneled" id="term-for-struct-item" style="color:initial">item <small>(for struct)</small></span>
     </li><li><span class="dfn-paneled" id="term-for-javascript-string" style="color:initial">javascript string</span>
     </li><li><span class="dfn-paneled" id="term-for-map-key" style="color:initial">key</span>
     </li><li><span class="dfn-paneled" id="term-for-list" style="color:initial">list</span>
     </li><li><span class="dfn-paneled" id="term-for-ordered-map" style="color:initial">ordered map</span>
     </li><li><span class="dfn-paneled" id="term-for-ordered-set" style="color:initial">ordered set</span>
     </li><li><span class="dfn-paneled" id="term-for-stack-pop" style="color:initial">pop</span>
     </li><li><span class="dfn-paneled" id="term-for-stack-push" style="color:initial">push</span>
     </li><li><span class="dfn-paneled" id="term-for-list-remove" style="color:initial">remove</span>
     </li><li><span class="dfn-paneled" id="term-for-map-set" style="color:initial">set</span>
     </li><li><span class="dfn-paneled" id="term-for-list-size" style="color:initial">size</span>
     </li><li><span class="dfn-paneled" id="term-for-stack" style="color:initial">stack</span>
     </li><li><span class="dfn-paneled" id="term-for-the-range" style="color:initial">the range</span>
     </li><li><span class="dfn-paneled" id="term-for-tuple" style="color:initial">tuple</span>
     </li><li><span class="dfn-paneled" id="term-for-map-value" style="color:initial">value</span>
     </li><li><span class="dfn-paneled" id="term-for-iteration-while" style="color:initial">while</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[MEDIACAPTURE-STREAMS]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-dom-constrainablepattern" style="color:initial">ConstrainablePattern</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[oes_standard_derivatives]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-oes_standard_derivatives" style="color:initial">OES_standard_derivatives</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[oes_vertex_array_object]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-oes_vertex_array_object" style="color:initial">OES_vertex_array_object</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[ORIENTATION-EVENT]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-device_acceleration" style="color:initial">DeviceAcceleration</span>
     </li><li><span class="dfn-paneled" id="term-for-device_rotation_rate" style="color:initial">DeviceRotationRate</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[secure-contexts]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-secure-contexts" style="color:initial">secure contexts</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[UNICODE]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-unicode_scalar_value" style="color:initial">unicode scalar value</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[URL]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-url" style="color:initial">URL</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[webgl_compressed_texture_astc]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-webgl_compressed_texture_astc" style="color:initial">WEBGL_compressed_texture_astc</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[webgl_compressed_texture_s3tc_srgb]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-webgl_compressed_texture_s3tc_srgb" style="color:initial">WEBGL_compressed_texture_s3tc_srgb</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[webgl_draw_buffers]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-webgl_draw_buffers" style="color:initial">WEBGL_draw_buffers</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[webgl_lose_context]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-webgl_lose_context" style="color:initial">WEBGL_lose_context</span>
    </li></ul>
   </li><li>
    <a data-link-type="biblio">[worklets-1]</a> defines the following terms:
    <ul>
     <li><span class="dfn-paneled" id="term-for-worklet" style="color:initial">Worklet</span>
    </li></ul>
  </li></ul>
  <h2 class="no-num no-ref heading settled" id="references"><span class="content">References</span><a class="self-link" href="#references"></a></h2>
  <h3 class="no-num no-ref heading settled" id="normative"><span class="content">Normative References</span><a class="self-link" href="#normative"></a></h3>
  <dl>
   <dt id="biblio-dom">[DOM]
   </dt><dd>Anne van Kesteren. <a href="https://dom.spec.whatwg.org/">DOM Standard</a>. Living Standard. URL: <a href="https://dom.spec.whatwg.org/">https://dom.spec.whatwg.org/</a>
   </dd><dt id="biblio-ecma-262">[ECMA-262]
   </dt><dd><a href="https://tc39.github.io/ecma262/">ECMAScript Language Specification</a>. URL: <a href="https://tc39.github.io/ecma262/">https://tc39.github.io/ecma262/</a>
   </dd><dt id="biblio-html">[HTML]
   </dt><dd>Anne van Kesteren; et al. <a href="https://html.spec.whatwg.org/multipage/">HTML Standard</a>. Living Standard. URL: <a href="https://html.spec.whatwg.org/multipage/">https://html.spec.whatwg.org/multipage/</a>
   </dd><dt id="biblio-ieee-754">[IEEE-754]
   </dt><dd><a href="http://ieeexplore.ieee.org/servlet/opac?punumber=4610933">IEEE Standard for Floating-Point Arithmetic</a>. 29 August 2008. URL: <a href="http://ieeexplore.ieee.org/servlet/opac?punumber=4610933">http://ieeexplore.ieee.org/servlet/opac?punumber=4610933</a>
   </dd><dt id="biblio-infra">[INFRA]
   </dt><dd>Anne van Kesteren; Domenic Denicola. <a href="https://infra.spec.whatwg.org/">Infra Standard</a>. Living Standard. URL: <a href="https://infra.spec.whatwg.org/">https://infra.spec.whatwg.org/</a>
   </dd><dt id="biblio-perlre">[PERLRE]
   </dt><dd><a href="http://search.cpan.org/dist/perl/pod/perlre.pod">Perl regular expressions (Perl 5.8.8)</a>. February 2006. URL: <a href="http://search.cpan.org/dist/perl/pod/perlre.pod">http://search.cpan.org/dist/perl/pod/perlre.pod</a>
   </dd><dt id="biblio-rfc2119">[RFC2119]
   </dt><dd>S. Bradner. <a href="https://tools.ietf.org/html/rfc2119">Key words for use in RFCs to Indicate Requirement Levels</a>. March 1997. Best Current Practice. URL: <a href="https://tools.ietf.org/html/rfc2119">https://tools.ietf.org/html/rfc2119</a>
   </dd><dt id="biblio-rfc2781">[RFC2781]
   </dt><dd>P. Hoffman; F. Yergeau. <a href="https://tools.ietf.org/html/rfc2781">UTF-16, an encoding of ISO 10646</a>. February 2000. Informational. URL: <a href="https://tools.ietf.org/html/rfc2781">https://tools.ietf.org/html/rfc2781</a>
   </dd><dt id="biblio-rfc3629">[RFC3629]
   </dt><dd>F. Yergeau. <a href="https://tools.ietf.org/html/rfc3629">UTF-8, a transformation format of ISO 10646</a>. November 2003. Internet Standard. URL: <a href="https://tools.ietf.org/html/rfc3629">https://tools.ietf.org/html/rfc3629</a>
   </dd><dt id="biblio-secure-contexts">[SECURE-CONTEXTS]
   </dt><dd>Mike West. <a href="https://w3c.github.io/webappsec-secure-contexts/">Secure Contexts</a>. URL: <a href="https://w3c.github.io/webappsec-secure-contexts/">https://w3c.github.io/webappsec-secure-contexts/</a>
   </dd><dt id="biblio-unicode">[UNICODE]
   </dt><dd><a href="https://www.unicode.org/versions/latest/">The Unicode Standard</a>. URL: <a href="https://www.unicode.org/versions/latest/">https://www.unicode.org/versions/latest/</a>
  </dd></dl>
  <h3 class="no-num no-ref heading settled" id="informative"><span class="content">Informative References</span><a class="self-link" href="#informative"></a></h3>
  <dl>
   <dt id="biblio-css3-conditional">[CSS3-CONDITIONAL]
   </dt><dd>David Baron. <a href="https://drafts.csswg.org/css-conditional-3/">CSS Conditional Rules Module Level 3</a>. URL: <a href="https://drafts.csswg.org/css-conditional-3/">https://drafts.csswg.org/css-conditional-3/</a>
   </dd><dt id="biblio-cssom">[CSSOM]
   </dt><dd>Simon Pieters; Glenn Adams. <a href="https://drafts.csswg.org/cssom/">CSS Object Model (CSSOM)</a>. URL: <a href="https://drafts.csswg.org/cssom/">https://drafts.csswg.org/cssom/</a>
   </dd><dt id="biblio-fullscreen">[FULLSCREEN]
   </dt><dd>Philip Jägenstedt. <a href="https://fullscreen.spec.whatwg.org/">Fullscreen API Standard</a>. Living Standard. URL: <a href="https://fullscreen.spec.whatwg.org/">https://fullscreen.spec.whatwg.org/</a>
   </dd><dt id="biblio-geolocation-api">[GEOLOCATION-API]
   </dt><dd>Andrei Popescu. <a href="http://dev.w3.org/geo/api/spec-source.html">Geolocation API Specification 2nd Edition</a>. URL: <a href="http://dev.w3.org/geo/api/spec-source.html">http://dev.w3.org/geo/api/spec-source.html</a>
   </dd><dt id="biblio-geometry">[GEOMETRY]
   </dt><dd>Simon Pieters; Dirk Schulze; Rik Cabanier. <a href="https://drafts.fxtf.org/geometry/">Geometry Interfaces Module Level 1</a>. URL: <a href="https://drafts.fxtf.org/geometry/">https://drafts.fxtf.org/geometry/</a>
   </dd><dt id="biblio-mediacapture-streams">[MEDIACAPTURE-STREAMS]
   </dt><dd>Daniel Burnett; et al. <a href="https://w3c.github.io/mediacapture-main/">Media Capture and Streams</a>. URL: <a href="https://w3c.github.io/mediacapture-main/">https://w3c.github.io/mediacapture-main/</a>
   </dd><dt id="biblio-omgidl">[OMGIDL]
   </dt><dd><a href="http://www.omg.org/cgi-bin/doc?formal/08-01-04.pdf">CORBA 3.1 – OMG IDL Syntax and Semantics chapter</a>. January 2008. URL: <a href="http://www.omg.org/cgi-bin/doc?formal/08-01-04.pdf">http://www.omg.org/cgi-bin/doc?formal/08-01-04.pdf</a>
   </dd><dt id="biblio-orientation-event">[ORIENTATION-EVENT]
   </dt><dd>Rich Tibbett; et al. <a href="https://w3c.github.io/deviceorientation/spec-source-orientation.html">DeviceOrientation Event Specification</a>. URL: <a href="https://w3c.github.io/deviceorientation/spec-source-orientation.html">https://w3c.github.io/deviceorientation/spec-source-orientation.html</a>
   </dd><dt id="biblio-url">[URL]
   </dt><dd>Anne van Kesteren. <a href="https://url.spec.whatwg.org/">URL Standard</a>. Living Standard. URL: <a href="https://url.spec.whatwg.org/">https://url.spec.whatwg.org/</a>
   </dd><dt id="biblio-webgl">[WEBGL]
   </dt><dd>Dean Jackson; Jeff Gilbert. <a href="https://www.khronos.org/registry/webgl/specs/latest/2.0/">WebGL 2.0 Specification</a>. 12 August 2017. URL: <a href="https://www.khronos.org/registry/webgl/specs/latest/2.0/">https://www.khronos.org/registry/webgl/specs/latest/2.0/</a>
   </dd><dt id="biblio-worklets-1">[WORKLETS-1]
   </dt><dd>Ian Kilpatrick. <a href="https://drafts.css-houdini.org/worklets/">Worklets Level 1</a>. URL: <a href="https://drafts.css-houdini.org/worklets/">https://drafts.css-houdini.org/worklets/</a>
   </dd><dt id="biblio-xml-names">[XML-NAMES]
   </dt><dd>Tim Bray; et al. <a href="https://www.w3.org/TR/xml-names/">Namespaces in XML 1.0 (Third Edition)</a>. 8 December 2009. REC. URL: <a href="https://www.w3.org/TR/xml-names/">https://www.w3.org/TR/xml-names/</a>
  </dd></dl>
  <h2 class="no-num no-ref heading settled" id="idl-index"><span class="content">IDL Index</span><a class="self-link" href="#idl-index"></a></h2>
<pre class="idl highlight def"><c- b="">typedef</c-> (<a class="idl-code" data-link-type="interface" href="#idl-Int8Array" id="ref-for-idl-Int8Array③①"><c- b="">Int8Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Int16Array" id="ref-for-idl-Int16Array②①"><c- b="">Int16Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Int32Array" id="ref-for-idl-Int32Array②①"><c- b="">Int32Array</c-></a> <c- b="">or</c->
         <a class="idl-code" data-link-type="interface" href="#idl-Uint8Array" id="ref-for-idl-Uint8Array④①"><c- b="">Uint8Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Uint16Array" id="ref-for-idl-Uint16Array②①"><c- b="">Uint16Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Uint32Array" id="ref-for-idl-Uint32Array②①"><c- b="">Uint32Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Uint8ClampedArray" id="ref-for-idl-Uint8ClampedArray②①"><c- b="">Uint8ClampedArray</c-></a> <c- b="">or</c->
         <a class="idl-code" data-link-type="interface" href="#idl-Float32Array" id="ref-for-idl-Float32Array②①"><c- b="">Float32Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-Float64Array" id="ref-for-idl-Float64Array②①"><c- b="">Float64Array</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-DataView" id="ref-for-idl-DataView⑥①"><c- b="">DataView</c-></a>) <a class="idl-code" data-link-type="typedef" href="#ArrayBufferView" id="ref-for-ArrayBufferView③"><c- g="">ArrayBufferView</c-></a>;

<c- b="">typedef</c-> (<a class="n" data-link-type="idl-name" href="#ArrayBufferView" id="ref-for-ArrayBufferView②①"><c- n="">ArrayBufferView</c-></a> <c- b="">or</c-> <a class="idl-code" data-link-type="interface" href="#idl-ArrayBuffer" id="ref-for-idl-ArrayBuffer①⑦①"><c- b="">ArrayBuffer</c-></a>) <a class="idl-code" data-link-type="typedef" href="#BufferSource" id="ref-for-BufferSource①①"><c- g="">BufferSource</c-></a>;
[
 <a class="idl-code" data-link-type="extended-attribute" href="#Exposed" id="ref-for-Exposed②⑧①"><c- g="">Exposed</c-></a>=(<c- n="">Window</c->,<c- n="">Worker</c->),
 <a class="idl-code" data-link-type="constructor" href="#dom-domexception-domexception" id="ref-for-dom-domexception-domexception①"><c- g="">Constructor</c-></a>(<c- b="">optional</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMString" id="ref-for-idl-DOMString④⑥①"><c- b="">DOMString</c-></a> <a href="#dom-domexception-domexception-message-name-message"><code><c- g="">message</c-></code></a> = "", <c- b="">optional</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMString" id="ref-for-idl-DOMString④⑦①"><c- b="">DOMString</c-></a> <a href="#dom-domexception-domexception-message-name-name"><code><c- g="">name</c-></code></a> = "Error")
]
<c- b="">interface</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMException" id="ref-for-idl-DOMException④⑦①"><c- g="">DOMException</c-></a> { // but see below note about ECMAScript binding
  <c- b="">readonly</c-> <c- b="">attribute</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMString" id="ref-for-idl-DOMString④⑧①"><c- b="">DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly="" data-type="DOMString" href="#dom-domexception-name" id="ref-for-dom-domexception-name①"><c- g="">name</c-></a>;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <a class="idl-code" data-link-type="interface" href="#idl-DOMString" id="ref-for-idl-DOMString④⑨①"><c- b="">DOMString</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly="" data-type="DOMString" href="#dom-domexception-message" id="ref-for-dom-domexception-message①"><c- g="">message</c-></a>;
  <c- b="">readonly</c-> <c- b="">attribute</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short⑧①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="attribute" data-readonly="" data-type="unsigned short" href="#dom-domexception-code" id="ref-for-dom-domexception-code①"><c- g="">code</c-></a>;

  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short⑨①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-index_size_err" id="ref-for-dom-domexception-index_size_err①"><c- g="">INDEX_SIZE_ERR</c-></a> = 1;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⓪①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-domstring_size_err" id="ref-for-dom-domexception-domstring_size_err①"><c- g="">DOMSTRING_SIZE_ERR</c-></a> = 2;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①①①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-hierarchy_request_err" id="ref-for-dom-domexception-hierarchy_request_err①"><c- g="">HIERARCHY_REQUEST_ERR</c-></a> = 3;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①②①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-wrong_document_err" id="ref-for-dom-domexception-wrong_document_err①"><c- g="">WRONG_DOCUMENT_ERR</c-></a> = 4;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①③①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_character_err" id="ref-for-dom-domexception-invalid_character_err①"><c- g="">INVALID_CHARACTER_ERR</c-></a> = 5;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①④①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-no_data_allowed_err" id="ref-for-dom-domexception-no_data_allowed_err①"><c- g="">NO_DATA_ALLOWED_ERR</c-></a> = 6;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑤①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-no_modification_allowed_err" id="ref-for-dom-domexception-no_modification_allowed_err①"><c- g="">NO_MODIFICATION_ALLOWED_ERR</c-></a> = 7;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑥①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-not_found_err" id="ref-for-dom-domexception-not_found_err①"><c- g="">NOT_FOUND_ERR</c-></a> = 8;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑦①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-not_supported_err" id="ref-for-dom-domexception-not_supported_err①"><c- g="">NOT_SUPPORTED_ERR</c-></a> = 9;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑧①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-inuse_attribute_err" id="ref-for-dom-domexception-inuse_attribute_err①"><c- g="">INUSE_ATTRIBUTE_ERR</c-></a> = 10;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short①⑨①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_state_err" id="ref-for-dom-domexception-invalid_state_err①"><c- g="">INVALID_STATE_ERR</c-></a> = 11;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⓪①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-syntax_err" id="ref-for-dom-domexception-syntax_err①"><c- g="">SYNTAX_ERR</c-></a> = 12;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②①①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_modification_err" id="ref-for-dom-domexception-invalid_modification_err①"><c- g="">INVALID_MODIFICATION_ERR</c-></a> = 13;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②②①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-namespace_err" id="ref-for-dom-domexception-namespace_err①"><c- g="">NAMESPACE_ERR</c-></a> = 14;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②③①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_access_err" id="ref-for-dom-domexception-invalid_access_err①"><c- g="">INVALID_ACCESS_ERR</c-></a> = 15;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②④①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-validation_err" id="ref-for-dom-domexception-validation_err①"><c- g="">VALIDATION_ERR</c-></a> = 16;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑤①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-type_mismatch_err" id="ref-for-dom-domexception-type_mismatch_err①"><c- g="">TYPE_MISMATCH_ERR</c-></a> = 17;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑥①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-security_err" id="ref-for-dom-domexception-security_err①"><c- g="">SECURITY_ERR</c-></a> = 18;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑦①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-network_err" id="ref-for-dom-domexception-network_err①"><c- g="">NETWORK_ERR</c-></a> = 19;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑧①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-abort_err" id="ref-for-dom-domexception-abort_err①"><c- g="">ABORT_ERR</c-></a> = 20;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short②⑨①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-url_mismatch_err" id="ref-for-dom-domexception-url_mismatch_err①"><c- g="">URL_MISMATCH_ERR</c-></a> = 21;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③⓪①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-quota_exceeded_err" id="ref-for-dom-domexception-quota_exceeded_err①"><c- g="">QUOTA_EXCEEDED_ERR</c-></a> = 22;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③①①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-timeout_err" id="ref-for-dom-domexception-timeout_err①"><c- g="">TIMEOUT_ERR</c-></a> = 23;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③②①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-invalid_node_type_err" id="ref-for-dom-domexception-invalid_node_type_err①"><c- g="">INVALID_NODE_TYPE_ERR</c-></a> = 24;
  <c- b="">const</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-short" id="ref-for-idl-unsigned-short③③①"><c- b="">unsigned</c-> <c- b="">short</c-></a> <a class="idl-code" data-link-type="const" href="#dom-domexception-data_clone_err" id="ref-for-dom-domexception-data_clone_err①"><c- g="">DATA_CLONE_ERR</c-></a> = 25;
};

<c- b="">typedef</c-> <a class="idl-code" data-link-type="interface" href="#idl-unsigned-long-long" id="ref-for-idl-unsigned-long-long⑨①"><c- b="">unsigned</c-> <c- b="">long</c-> <c- b="">long</c-></a> <a class="idl-code" data-link-type="typedef" href="#DOMTimeStamp" id="ref-for-DOMTimeStamp②"><c- g="">DOMTimeStamp</c-></a>;
<c- b="">callback</c-> <a class="idl-code" data-link-type="callback" href="#Function" id="ref-for-Function②"><c- g="">Function</c-></a> = <c- b="">any</c-> (<c- b="">any</c->... <a href="#dom-function-arguments"><code><c- g="">arguments</c-></code></a>);
<c- b="">callback</c-> <a class="idl-code" data-link-type="callback" href="#VoidFunction" id="ref-for-VoidFunction②"><c- g="">VoidFunction</c-></a> = <c- b="">void</c-> ();
</pre>
  <aside class="dfn-panel" data-for="dfn-idl-fragment">
   <b><a href="#dfn-idl-fragment">#dfn-idl-fragment</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-idl-fragment">2. Interface definition language</a> <a href="#ref-for-dfn-idl-fragment①">(2)</a> <a href="#ref-for-dfn-idl-fragment②">(3)</a> <a href="#ref-for-dfn-idl-fragment③">(4)</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④">2.1. Names</a> <a href="#ref-for-dfn-idl-fragment⑤">(2)</a> <a href="#ref-for-dfn-idl-fragment⑥">(3)</a> <a href="#ref-for-dfn-idl-fragment⑦">(4)</a> <a href="#ref-for-dfn-idl-fragment⑧">(5)</a>
    </li><li><a href="#ref-for-dfn-idl-fragment⑨">2.2. Interfaces</a> <a href="#ref-for-dfn-idl-fragment①⓪">(2)</a> <a href="#ref-for-dfn-idl-fragment①①">(3)</a>
    </li><li><a href="#ref-for-dfn-idl-fragment①②">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-idl-fragment①③">2.4.1. Constants</a>
    </li><li><a href="#ref-for-dfn-idl-fragment①④">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-idl-fragment①⑤">2.4.3. Operations</a> <a href="#ref-for-dfn-idl-fragment①⑥">(2)</a> <a href="#ref-for-dfn-idl-fragment①⑦">(3)</a>
    </li><li><a href="#ref-for-dfn-idl-fragment①⑧">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-idl-fragment①⑨">2.4.4.1. Stringifiers</a> <a href="#ref-for-dfn-idl-fragment②⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②①">2.4.4.2. Indexed properties</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②②">2.4.5. Static attributes and operations</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②③">2.5. Namespaces</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②④">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②⑤">2.8. Enumerations</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②⑥">2.9. Callback functions</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②⑦">2.10. Typedefs</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②⑧">2.11. Objects implementing interfaces</a>
    </li><li><a href="#ref-for-dfn-idl-fragment②⑨">2.13. Extended attributes</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③⓪">3.1. ECMAScript environment</a> <a href="#ref-for-dfn-idl-fragment③①">(2)</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③②">3.3.1. [AllowShared]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③③">3.3.2. [Clamp]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③④">3.3.5. [EnforceRange]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③⑤">3.3.8. [LegacyNamespace]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③⑥">3.3.15. [NoInterfaceObject]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③⑦">3.3.16. [OverrideBuiltins]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③⑧">3.3.17. [PutForwards]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment③⑨">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④⓪">3.3.20. [SecureContext]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④①">3.3.21. [TreatNonObjectAsNull]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④②">3.3.22. [TreatNullAs]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④③">3.3.23. [Unforgeable]</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④④">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④⑤">3.12.4. Handling exceptions</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④⑥">5. Extensibility</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④⑦">7. Referencing this specification</a>
    </li><li><a href="#ref-for-dfn-idl-fragment④⑧">IDL grammar</a> <a href="#ref-for-dfn-idl-fragment④⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-idl-fragment⑤⓪">Conformance</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-definition">
   <b><a href="#dfn-definition">#dfn-definition</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-definition">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-definition①">2.1. Names</a>
    </li><li><a href="#ref-for-dfn-definition②">2.3. Interface mixins</a> <a href="#ref-for-dfn-definition③">(2)</a> <a href="#ref-for-dfn-definition④">(3)</a>
    </li><li><a href="#ref-for-dfn-definition⑤">2.13. Extended attributes</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-named-definition">
   <b><a href="#dfn-named-definition">#dfn-named-definition</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-named-definition">2.1. Names</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-identifier">
   <b><a href="#dfn-identifier">#dfn-identifier</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-identifier">2.1. Names</a> <a href="#ref-for-dfn-identifier①">(2)</a> <a href="#ref-for-dfn-identifier②">(3)</a> <a href="#ref-for-dfn-identifier③">(4)</a> <a href="#ref-for-dfn-identifier④">(5)</a> <a href="#ref-for-dfn-identifier⑤">(6)</a> <a href="#ref-for-dfn-identifier⑥">(7)</a> <a href="#ref-for-dfn-identifier⑦">(8)</a>
    </li><li><a href="#ref-for-dfn-identifier⑧">2.2. Interfaces</a> <a href="#ref-for-dfn-identifier⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier①⓪">2.3. Interface mixins</a> <a href="#ref-for-dfn-identifier①①">(2)</a> <a href="#ref-for-dfn-identifier①②">(3)</a> <a href="#ref-for-dfn-identifier①③">(4)</a>
    </li><li><a href="#ref-for-dfn-identifier①④">2.4.1. Constants</a> <a href="#ref-for-dfn-identifier①⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier①⑥">2.4.2. Attributes</a> <a href="#ref-for-dfn-identifier①⑦">(2)</a> <a href="#ref-for-dfn-identifier①⑧">(3)</a> <a href="#ref-for-dfn-identifier①⑨">(4)</a>
    </li><li><a href="#ref-for-dfn-identifier②⓪">2.4.3. Operations</a> <a href="#ref-for-dfn-identifier②①">(2)</a> <a href="#ref-for-dfn-identifier②②">(3)</a> <a href="#ref-for-dfn-identifier②③">(4)</a> <a href="#ref-for-dfn-identifier②④">(5)</a> <a href="#ref-for-dfn-identifier②⑤">(6)</a>
    </li><li><a href="#ref-for-dfn-identifier②⑥">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-identifier②⑦">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-dfn-identifier②⑧">2.4.4.1. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-identifier②⑨">2.4.4.2. Indexed properties</a> <a href="#ref-for-dfn-identifier③⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier③①">2.4.4.3. Named properties</a> <a href="#ref-for-dfn-identifier③②">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier③③">2.4.6. Overloading</a> <a href="#ref-for-dfn-identifier③④">(2)</a> <a href="#ref-for-dfn-identifier③⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-identifier③⑥">2.5. Namespaces</a>
    </li><li><a href="#ref-for-dfn-identifier③⑦">2.6. Dictionaries</a> <a href="#ref-for-dfn-identifier③⑧">(2)</a> <a href="#ref-for-dfn-identifier③⑨">(3)</a> <a href="#ref-for-dfn-identifier④⓪">(4)</a>
    </li><li><a href="#ref-for-dfn-identifier④①">2.9. Callback functions</a>
    </li><li><a href="#ref-for-dfn-identifier④②">2.10. Typedefs</a>
    </li><li><a href="#ref-for-dfn-identifier④③">2.12.20. Interface types</a> <a href="#ref-for-dfn-identifier④④">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier④⑤">2.12.21. Dictionary types</a> <a href="#ref-for-dfn-identifier④⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier④⑦">2.12.22. Enumeration types</a> <a href="#ref-for-dfn-identifier④⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier④⑨">2.12.23. Callback function types</a> <a href="#ref-for-dfn-identifier⑤⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier⑤①">2.12.29. Annotated types</a>
    </li><li><a href="#ref-for-dfn-identifier⑤②">3.2.15. Dictionary types</a> <a href="#ref-for-dfn-identifier⑤③">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier⑤④">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-identifier⑤⑤">3.3.10. [LegacyWindowAlias]</a> <a href="#ref-for-dfn-identifier⑤⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier⑤⑦">3.3.13. [NamedConstructor]</a>
    </li><li><a href="#ref-for-dfn-identifier⑤⑧">3.3.17. [PutForwards]</a> <a href="#ref-for-dfn-identifier⑤⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier⑥⓪">3.3.23. [Unforgeable]</a> <a href="#ref-for-dfn-identifier⑥①">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier⑥②">3.4. Security</a>
    </li><li><a href="#ref-for-dfn-identifier⑥③">3.6. Interfaces</a>
    </li><li><a href="#ref-for-dfn-identifier⑥④">3.6.1. Interface object</a> <a href="#ref-for-dfn-identifier⑥⑤">(2)</a> <a href="#ref-for-dfn-identifier⑥⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-identifier⑥⑦">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-dfn-identifier⑥⑧">3.6.3. Interface prototype object</a> <a href="#ref-for-dfn-identifier⑥⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier⑦⓪">3.6.4. Legacy callback interface object</a> <a href="#ref-for-dfn-identifier⑦①">(2)</a>
    </li><li><a href="#ref-for-dfn-identifier⑦②">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-dfn-identifier⑦③">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-identifier⑦④">3.6.6. Constants</a>
    </li><li><a href="#ref-for-dfn-identifier⑦⑤">3.6.7. Attributes</a> <a href="#ref-for-dfn-identifier⑦⑥">(2)</a> <a href="#ref-for-dfn-identifier⑦⑦">(3)</a> <a href="#ref-for-dfn-identifier⑦⑧">(4)</a>
    </li><li><a href="#ref-for-dfn-identifier⑦⑨">3.6.8. Operations</a> <a href="#ref-for-dfn-identifier⑧⓪">(2)</a> <a href="#ref-for-dfn-identifier⑧①">(3)</a> <a href="#ref-for-dfn-identifier⑧②">(4)</a> <a href="#ref-for-dfn-identifier⑧③">(5)</a>
    </li><li><a href="#ref-for-dfn-identifier⑧④">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-dfn-identifier⑧⑤">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-identifier⑧⑥">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-dfn-identifier⑧⑦">3.7. Platform objects implementing interfaces</a>
    </li><li><a href="#ref-for-dfn-identifier⑧⑧">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-identifier⑧⑨">3.8.7. Abstract operations</a> <a href="#ref-for-dfn-identifier⑨⓪">(2)</a> <a href="#ref-for-dfn-identifier⑨①">(3)</a> <a href="#ref-for-dfn-identifier⑨②">(4)</a>
    </li><li><a href="#ref-for-dfn-identifier⑨③">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-dfn-identifier⑨④">(2)</a> <a href="#ref-for-dfn-identifier⑨⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-identifier⑨⑥">3.11. Namespaces</a>
    </li><li><a href="#ref-for-dfn-identifier⑨⑦">3.11.1. Namespace object</a>
    </li><li><a href="#ref-for-dfn-identifier⑨⑧">IDL grammar</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-reserved-identifier">
   <b><a href="#dfn-reserved-identifier">#dfn-reserved-identifier</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-reserved-identifier">2.1. Names</a>
    </li><li><a href="#ref-for-dfn-reserved-identifier①">3.3.10. [LegacyWindowAlias]</a>
    </li><li><a href="#ref-for-dfn-reserved-identifier②">3.3.13. [NamedConstructor]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-interface">
   <b><a href="#dfn-interface">#dfn-interface</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-interface">2. Interface definition language</a> <a href="#ref-for-dfn-interface①">(2)</a>
    </li><li><a href="#ref-for-dfn-interface②">2.1. Names</a> <a href="#ref-for-dfn-interface③">(2)</a> <a href="#ref-for-dfn-interface④">(3)</a> <a href="#ref-for-dfn-interface⑤">(4)</a>
    </li><li><a href="#ref-for-dfn-interface⑥">2.2. Interfaces</a> <a href="#ref-for-dfn-interface⑦">(2)</a> <a href="#ref-for-dfn-interface⑧">(3)</a> <a href="#ref-for-dfn-interface⑨">(4)</a> <a href="#ref-for-dfn-interface①⓪">(5)</a> <a href="#ref-for-dfn-interface①①">(6)</a> <a href="#ref-for-dfn-interface①②">(7)</a> <a href="#ref-for-dfn-interface①③">(8)</a> <a href="#ref-for-dfn-interface①④">(9)</a>
    </li><li><a href="#ref-for-dfn-interface①⑤">2.3. Interface mixins</a> <a href="#ref-for-dfn-interface①⑥">(2)</a> <a href="#ref-for-dfn-interface①⑦">(3)</a> <a href="#ref-for-dfn-interface①⑧">(4)</a> <a href="#ref-for-dfn-interface①⑨">(5)</a> <a href="#ref-for-dfn-interface②⓪">(6)</a> <a href="#ref-for-dfn-interface②①">(7)</a> <a href="#ref-for-dfn-interface②②">(8)</a> <a href="#ref-for-dfn-interface②③">(9)</a> <a href="#ref-for-dfn-interface②④">(10)</a> <a href="#ref-for-dfn-interface②⑤">(11)</a>
    </li><li><a href="#ref-for-dfn-interface②⑥">2.3.1. Using mixins and partials</a>
    </li><li><a href="#ref-for-dfn-interface②⑦">2.4. Members</a> <a href="#ref-for-dfn-interface②⑧">(2)</a> <a href="#ref-for-dfn-interface②⑨">(3)</a> <a href="#ref-for-dfn-interface③⓪">(4)</a>
    </li><li><a href="#ref-for-dfn-interface③①">2.4.1. Constants</a> <a href="#ref-for-dfn-interface③②">(2)</a> <a href="#ref-for-dfn-interface③③">(3)</a>
    </li><li><a href="#ref-for-dfn-interface③④">2.4.2. Attributes</a> <a href="#ref-for-dfn-interface③⑤">(2)</a> <a href="#ref-for-dfn-interface③⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-interface③⑦">2.4.3. Operations</a> <a href="#ref-for-dfn-interface③⑧">(2)</a> <a href="#ref-for-dfn-interface③⑨">(3)</a> <a href="#ref-for-dfn-interface④⓪">(4)</a> <a href="#ref-for-dfn-interface④①">(5)</a> <a href="#ref-for-dfn-interface④②">(6)</a>
    </li><li><a href="#ref-for-dfn-interface④③">2.4.3.1. toJSON</a> <a href="#ref-for-dfn-interface④④">(2)</a>
    </li><li><a href="#ref-for-dfn-interface④⑤">2.4.4. Special operations</a> <a href="#ref-for-dfn-interface④⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-interface④⑦">2.4.4.1. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-interface④⑧">2.4.4.2. Indexed properties</a> <a href="#ref-for-dfn-interface④⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-interface⑤⓪">2.4.4.3. Named properties</a> <a href="#ref-for-dfn-interface⑤①">(2)</a>
    </li><li><a href="#ref-for-dfn-interface⑤②">2.4.5. Static attributes and operations</a>
    </li><li><a href="#ref-for-dfn-interface⑤③">2.4.6. Overloading</a> <a href="#ref-for-dfn-interface⑤④">(2)</a> <a href="#ref-for-dfn-interface⑤⑤">(3)</a> <a href="#ref-for-dfn-interface⑤⑥">(4)</a> <a href="#ref-for-dfn-interface⑤⑦">(5)</a>
    </li><li><a href="#ref-for-dfn-interface⑤⑧">2.4.7. Iterable declarations</a> <a href="#ref-for-dfn-interface⑤⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-interface⑥⓪">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-interface⑥①">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-interface⑥②">2.11. Objects implementing interfaces</a> <a href="#ref-for-dfn-interface⑥③">(2)</a>
    </li><li><a href="#ref-for-dfn-interface⑥④">2.12.20. Interface types</a>
    </li><li><a href="#ref-for-dfn-interface⑥⑤">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-interface⑥⑥">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-dfn-interface⑥⑦">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-interface⑥⑧">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-dfn-interface⑥⑨">3.2.19.1. Creating a sequence from an iterable</a>
    </li><li><a href="#ref-for-dfn-interface⑦⓪">3.3.3. [Constructor]</a>
    </li><li><a href="#ref-for-dfn-interface⑦①">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-interface⑦②">(2)</a> <a href="#ref-for-dfn-interface⑦③">(3)</a> <a href="#ref-for-dfn-interface⑦④">(4)</a> <a href="#ref-for-dfn-interface⑦⑤">(5)</a> <a href="#ref-for-dfn-interface⑦⑥">(6)</a> <a href="#ref-for-dfn-interface⑦⑦">(7)</a> <a href="#ref-for-dfn-interface⑦⑧">(8)</a> <a href="#ref-for-dfn-interface⑦⑨">(9)</a> <a href="#ref-for-dfn-interface⑧⓪">(10)</a> <a href="#ref-for-dfn-interface⑧①">(11)</a> <a href="#ref-for-dfn-interface⑧②">(12)</a>
    </li><li><a href="#ref-for-dfn-interface⑧③">3.3.7. [Global]</a> <a href="#ref-for-dfn-interface⑧④">(2)</a> <a href="#ref-for-dfn-interface⑧⑤">(3)</a> <a href="#ref-for-dfn-interface⑧⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-interface⑧⑦">3.3.8. [LegacyNamespace]</a> <a href="#ref-for-dfn-interface⑧⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-interface⑧⑨">3.3.9. [LegacyUnenumerableNamedProperties]</a> <a href="#ref-for-dfn-interface⑨⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-interface⑨①">3.3.10. [LegacyWindowAlias]</a> <a href="#ref-for-dfn-interface⑨②">(2)</a> <a href="#ref-for-dfn-interface⑨③">(3)</a> <a href="#ref-for-dfn-interface⑨④">(4)</a>
    </li><li><a href="#ref-for-dfn-interface⑨⑤">3.3.12. [LenientThis]</a>
    </li><li><a href="#ref-for-dfn-interface⑨⑥">3.3.13. [NamedConstructor]</a> <a href="#ref-for-dfn-interface⑨⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-interface⑨⑧">3.3.15. [NoInterfaceObject]</a> <a href="#ref-for-dfn-interface⑨⑨">(2)</a> <a href="#ref-for-dfn-interface①⓪⓪">(3)</a> <a href="#ref-for-dfn-interface①⓪①">(4)</a>
    </li><li><a href="#ref-for-dfn-interface①⓪②">3.3.16. [OverrideBuiltins]</a> <a href="#ref-for-dfn-interface①⓪③">(2)</a> <a href="#ref-for-dfn-interface①⓪④">(3)</a>
    </li><li><a href="#ref-for-dfn-interface①⓪⑤">3.3.17. [PutForwards]</a> <a href="#ref-for-dfn-interface①⓪⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①⓪⑦">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-interface①⓪⑧">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-interface①⓪⑨">(2)</a> <a href="#ref-for-dfn-interface①①⓪">(3)</a> <a href="#ref-for-dfn-interface①①①">(4)</a> <a href="#ref-for-dfn-interface①①②">(5)</a> <a href="#ref-for-dfn-interface①①③">(6)</a> <a href="#ref-for-dfn-interface①①④">(7)</a>
    </li><li><a href="#ref-for-dfn-interface①①⑤">3.6. Interfaces</a> <a href="#ref-for-dfn-interface①①⑥">(2)</a> <a href="#ref-for-dfn-interface①①⑦">(3)</a>
    </li><li><a href="#ref-for-dfn-interface①①⑧">3.6.1. Interface object</a> <a href="#ref-for-dfn-interface①①⑨">(2)</a> <a href="#ref-for-dfn-interface①②⓪">(3)</a> <a href="#ref-for-dfn-interface①②①">(4)</a> <a href="#ref-for-dfn-interface①②②">(5)</a> <a href="#ref-for-dfn-interface①②③">(6)</a> <a href="#ref-for-dfn-interface①②④">(7)</a> <a href="#ref-for-dfn-interface①②⑤">(8)</a> <a href="#ref-for-dfn-interface①②⑥">(9)</a> <a href="#ref-for-dfn-interface①②⑦">(10)</a>
    </li><li><a href="#ref-for-dfn-interface①②⑧">3.6.2. Named constructors</a> <a href="#ref-for-dfn-interface①②⑨">(2)</a> <a href="#ref-for-dfn-interface①③⓪">(3)</a> <a href="#ref-for-dfn-interface①③①">(4)</a>
    </li><li><a href="#ref-for-dfn-interface①③②">3.6.3. Interface prototype object</a> <a href="#ref-for-dfn-interface①③③">(2)</a> <a href="#ref-for-dfn-interface①③④">(3)</a> <a href="#ref-for-dfn-interface①③⑤">(4)</a> <a href="#ref-for-dfn-interface①③⑥">(5)</a>
    </li><li><a href="#ref-for-dfn-interface①③⑦">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-dfn-interface①③⑧">3.6.5. Named properties object</a> <a href="#ref-for-dfn-interface①③⑨">(2)</a> <a href="#ref-for-dfn-interface①④⓪">(3)</a>
    </li><li><a href="#ref-for-dfn-interface①④①">3.6.5.1. [[GetOwnProperty]]</a> <a href="#ref-for-dfn-interface①④②">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①④③">3.6.6. Constants</a>
    </li><li><a href="#ref-for-dfn-interface①④④">3.6.7. Attributes</a> <a href="#ref-for-dfn-interface①④⑤">(2)</a> <a href="#ref-for-dfn-interface①④⑥">(3)</a> <a href="#ref-for-dfn-interface①④⑦">(4)</a> <a href="#ref-for-dfn-interface①④⑧">(5)</a> <a href="#ref-for-dfn-interface①④⑨">(6)</a> <a href="#ref-for-dfn-interface①⑤⓪">(7)</a>
    </li><li><a href="#ref-for-dfn-interface①⑤①">3.6.8. Operations</a> <a href="#ref-for-dfn-interface①⑤②">(2)</a> <a href="#ref-for-dfn-interface①⑤③">(3)</a> <a href="#ref-for-dfn-interface①⑤④">(4)</a> <a href="#ref-for-dfn-interface①⑤⑤">(5)</a> <a href="#ref-for-dfn-interface①⑤⑥">(6)</a> <a href="#ref-for-dfn-interface①⑤⑦">(7)</a>
    </li><li><a href="#ref-for-dfn-interface①⑤⑧">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-dfn-interface①⑤⑨">(2)</a> <a href="#ref-for-dfn-interface①⑥⓪">(3)</a> <a href="#ref-for-dfn-interface①⑥①">(4)</a> <a href="#ref-for-dfn-interface①⑥②">(5)</a> <a href="#ref-for-dfn-interface①⑥③">(6)</a> <a href="#ref-for-dfn-interface①⑥④">(7)</a> <a href="#ref-for-dfn-interface①⑥⑤">(8)</a>
    </li><li><a href="#ref-for-dfn-interface①⑥⑥">3.6.8.2. Stringifiers</a> <a href="#ref-for-dfn-interface①⑥⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①⑥⑧">3.6.9.1. @@iterator</a> <a href="#ref-for-dfn-interface①⑥⑨">(2)</a> <a href="#ref-for-dfn-interface①⑦⓪">(3)</a>
    </li><li><a href="#ref-for-dfn-interface①⑦①">3.6.9.2. forEach</a> <a href="#ref-for-dfn-interface①⑦②">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①⑦③">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-dfn-interface①⑦④">3.6.10.2. keys</a> <a href="#ref-for-dfn-interface①⑦⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①⑦⑥">3.6.10.3. values</a> <a href="#ref-for-dfn-interface①⑦⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①⑦⑧">3.6.10.4. Default iterator objects</a> <a href="#ref-for-dfn-interface①⑦⑨">(2)</a> <a href="#ref-for-dfn-interface①⑧⓪">(3)</a> <a href="#ref-for-dfn-interface①⑧①">(4)</a>
    </li><li><a href="#ref-for-dfn-interface①⑧②">3.6.10.5. Iterator prototype object</a> <a href="#ref-for-dfn-interface①⑧③">(2)</a> <a href="#ref-for-dfn-interface①⑧④">(3)</a> <a href="#ref-for-dfn-interface①⑧⑤">(4)</a>
    </li><li><a href="#ref-for-dfn-interface①⑧⑥">3.6.11. Maplike declarations</a> <a href="#ref-for-dfn-interface①⑧⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①⑧⑧">3.6.12. Setlike declarations</a> <a href="#ref-for-dfn-interface①⑧⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①⑨⓪">3.7. Platform objects implementing interfaces</a> <a href="#ref-for-dfn-interface①⑨①">(2)</a> <a href="#ref-for-dfn-interface①⑨②">(3)</a> <a href="#ref-for-dfn-interface①⑨③">(4)</a>
    </li><li><a href="#ref-for-dfn-interface①⑨④">3.7.1. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-dfn-interface①⑨⑤">3.8. Legacy platform objects</a>
    </li><li><a href="#ref-for-dfn-interface①⑨⑥">3.8.3. [[DefineOwnProperty]]</a> <a href="#ref-for-dfn-interface①⑨⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-interface①⑨⑧">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-interface①⑨⑨">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-dfn-interface②⓪⓪">3.9. User objects implementing callback interfaces</a>
    </li><li><a href="#ref-for-dfn-interface②⓪①">3.11.1. Namespace object</a>
    </li><li><a href="#ref-for-dfn-interface②⓪②">3.12.4. Handling exceptions</a>
    </li><li><a href="#ref-for-dfn-interface②⓪③">IDL grammar</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-interface-member">
   <b><a href="#dfn-interface-member">#dfn-interface-member</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-interface-member">2.1. Names</a>
    </li><li><a href="#ref-for-dfn-interface-member①">2.4.1. Constants</a>
    </li><li><a href="#ref-for-dfn-interface-member②">2.4.2. Attributes</a> <a href="#ref-for-dfn-interface-member③">(2)</a> <a href="#ref-for-dfn-interface-member④">(3)</a>
    </li><li><a href="#ref-for-dfn-interface-member⑤">2.4.3. Operations</a> <a href="#ref-for-dfn-interface-member⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-interface-member⑦">2.4.7. Iterable declarations</a>
    </li><li><a href="#ref-for-dfn-interface-member⑧">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-interface-member⑨">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-interface-member①⓪">2.13. Extended attributes</a>
    </li><li><a href="#ref-for-dfn-interface-member①①">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-interface-member①②">(2)</a> <a href="#ref-for-dfn-interface-member①③">(3)</a> <a href="#ref-for-dfn-interface-member①④">(4)</a> <a href="#ref-for-dfn-interface-member①⑤">(5)</a> <a href="#ref-for-dfn-interface-member①⑥">(6)</a>
    </li><li><a href="#ref-for-dfn-interface-member①⑦">3.3.7. [Global]</a> <a href="#ref-for-dfn-interface-member①⑧">(2)</a> <a href="#ref-for-dfn-interface-member①⑨">(3)</a>
    </li><li><a href="#ref-for-dfn-interface-member②⓪">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-interface-member②①">(2)</a> <a href="#ref-for-dfn-interface-member②②">(3)</a> <a href="#ref-for-dfn-interface-member②③">(4)</a> <a href="#ref-for-dfn-interface-member②④">(5)</a> <a href="#ref-for-dfn-interface-member②⑤">(6)</a>
    </li><li><a href="#ref-for-dfn-interface-member②⑥">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-dfn-interface-member②⑦">3.8. Legacy platform objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-inherit">
   <b><a href="#dfn-inherit">#dfn-inherit</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-inherit">2.2. Interfaces</a> <a href="#ref-for-dfn-inherit①">(2)</a> <a href="#ref-for-dfn-inherit②">(3)</a> <a href="#ref-for-dfn-inherit③">(4)</a>
    </li><li><a href="#ref-for-dfn-inherit④">2.6. Dictionaries</a> <a href="#ref-for-dfn-inherit⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-inherit⑥">3.3.6. [Exposed]</a>
    </li><li><a href="#ref-for-dfn-inherit⑦">3.3.7. [Global]</a> <a href="#ref-for-dfn-inherit⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-inherit⑨">3.3.20. [SecureContext]</a>
    </li><li><a href="#ref-for-dfn-inherit①⓪">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-dfn-inherit①①">3.9. User objects implementing callback interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-inherited-interfaces">
   <b><a href="#dfn-inherited-interfaces">#dfn-inherited-interfaces</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-inherited-interfaces">2.2. Interfaces</a> <a href="#ref-for-dfn-inherited-interfaces①">(2)</a>
    </li><li><a href="#ref-for-dfn-inherited-interfaces②">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-inherited-interfaces③">2.4.7. Iterable declarations</a> <a href="#ref-for-dfn-inherited-interfaces④">(2)</a> <a href="#ref-for-dfn-inherited-interfaces⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-inherited-interfaces⑥">2.4.8. Maplike declarations</a> <a href="#ref-for-dfn-inherited-interfaces⑦">(2)</a> <a href="#ref-for-dfn-inherited-interfaces⑧">(3)</a> <a href="#ref-for-dfn-inherited-interfaces⑨">(4)</a>
    </li><li><a href="#ref-for-dfn-inherited-interfaces①⓪">2.4.9. Setlike declarations</a> <a href="#ref-for-dfn-inherited-interfaces①①">(2)</a> <a href="#ref-for-dfn-inherited-interfaces①②">(3)</a> <a href="#ref-for-dfn-inherited-interfaces①③">(4)</a>
    </li><li><a href="#ref-for-dfn-inherited-interfaces①④">3.3.23. [Unforgeable]</a>
    </li><li><a href="#ref-for-dfn-inherited-interfaces①⑤">3.6.3. Interface prototype object</a> <a href="#ref-for-dfn-inherited-interfaces①⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-inherited-interfaces①⑦">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-dfn-inherited-interfaces①⑧">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-dfn-inherited-interfaces①⑨">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-callback-interface">
   <b><a href="#dfn-callback-interface">#dfn-callback-interface</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-callback-interface">2.2. Interfaces</a> <a href="#ref-for-dfn-callback-interface①">(2)</a> <a href="#ref-for-dfn-callback-interface②">(3)</a> <a href="#ref-for-dfn-callback-interface③">(4)</a> <a href="#ref-for-dfn-callback-interface④">(5)</a> <a href="#ref-for-dfn-callback-interface⑤">(6)</a> <a href="#ref-for-dfn-callback-interface⑥">(7)</a>
    </li><li><a href="#ref-for-dfn-callback-interface⑦">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-callback-interface⑧">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-callback-interface⑨">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-dfn-callback-interface①⓪">2.4.5. Static attributes and operations</a>
    </li><li><a href="#ref-for-dfn-callback-interface①①">2.4.6. Overloading</a> <a href="#ref-for-dfn-callback-interface①②">(2)</a>
    </li><li><a href="#ref-for-dfn-callback-interface①③">2.9. Callback functions</a>
    </li><li><a href="#ref-for-dfn-callback-interface①④">2.11. Objects implementing interfaces</a> <a href="#ref-for-dfn-callback-interface①⑤">(2)</a> <a href="#ref-for-dfn-callback-interface①⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-callback-interface①⑦">2.12.20. Interface types</a>
    </li><li><a href="#ref-for-dfn-callback-interface①⑧">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-callback-interface①⑨">3.3.3. [Constructor]</a>
    </li><li><a href="#ref-for-dfn-callback-interface②⓪">3.3.8. [LegacyNamespace]</a>
    </li><li><a href="#ref-for-dfn-callback-interface②①">3.3.10. [LegacyWindowAlias]</a>
    </li><li><a href="#ref-for-dfn-callback-interface②②">3.3.13. [NamedConstructor]</a>
    </li><li><a href="#ref-for-dfn-callback-interface②③">3.3.15. [NoInterfaceObject]</a>
    </li><li><a href="#ref-for-dfn-callback-interface②④">3.3.17. [PutForwards]</a>
    </li><li><a href="#ref-for-dfn-callback-interface②⑤">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-callback-interface②⑥">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-dfn-callback-interface②⑦">3.6.4. Legacy callback interface object</a> <a href="#ref-for-dfn-callback-interface②⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-callback-interface②⑨">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-dfn-callback-interface③⓪">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-partial-interface">
   <b><a href="#dfn-partial-interface">#dfn-partial-interface</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-partial-interface">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-partial-interface①">2.1. Names</a>
    </li><li><a href="#ref-for-dfn-partial-interface②">2.2. Interfaces</a> <a href="#ref-for-dfn-partial-interface③">(2)</a> <a href="#ref-for-dfn-partial-interface④">(3)</a>
    </li><li><a href="#ref-for-dfn-partial-interface⑤">2.3. Interface mixins</a> <a href="#ref-for-dfn-partial-interface⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-partial-interface⑦">2.3.1. Using mixins and partials</a>
    </li><li><a href="#ref-for-dfn-partial-interface⑧">2.4.6. Overloading</a> <a href="#ref-for-dfn-partial-interface⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-partial-interface①⓪">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-partial-interface①①">(2)</a> <a href="#ref-for-dfn-partial-interface①②">(3)</a> <a href="#ref-for-dfn-partial-interface①③">(4)</a> <a href="#ref-for-dfn-partial-interface①④">(5)</a> <a href="#ref-for-dfn-partial-interface①⑤">(6)</a>
    </li><li><a href="#ref-for-dfn-partial-interface①⑥">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-partial-interface①⑦">3.3.16. [OverrideBuiltins]</a>
    </li><li><a href="#ref-for-dfn-partial-interface①⑧">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-partial-interface①⑨">(2)</a> <a href="#ref-for-dfn-partial-interface②⓪">(3)</a> <a href="#ref-for-dfn-partial-interface②①">(4)</a> <a href="#ref-for-dfn-partial-interface②②">(5)</a> <a href="#ref-for-dfn-partial-interface②③">(6)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="interface-mixin">
   <b><a href="#interface-mixin">#interface-mixin</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-interface-mixin">2. Interface definition language</a>
    </li><li><a href="#ref-for-interface-mixin①">2.2. Interfaces</a> <a href="#ref-for-interface-mixin②">(2)</a>
    </li><li><a href="#ref-for-interface-mixin③">2.3. Interface mixins</a> <a href="#ref-for-interface-mixin④">(2)</a> <a href="#ref-for-interface-mixin⑤">(3)</a> <a href="#ref-for-interface-mixin⑥">(4)</a> <a href="#ref-for-interface-mixin⑦">(5)</a> <a href="#ref-for-interface-mixin⑧">(6)</a> <a href="#ref-for-interface-mixin⑨">(7)</a> <a href="#ref-for-interface-mixin①⓪">(8)</a> <a href="#ref-for-interface-mixin①①">(9)</a> <a href="#ref-for-interface-mixin①②">(10)</a> <a href="#ref-for-interface-mixin①③">(11)</a> <a href="#ref-for-interface-mixin①④">(12)</a> <a href="#ref-for-interface-mixin①⑤">(13)</a> <a href="#ref-for-interface-mixin①⑥">(14)</a> <a href="#ref-for-interface-mixin①⑦">(15)</a> <a href="#ref-for-interface-mixin①⑧">(16)</a> <a href="#ref-for-interface-mixin①⑨">(17)</a> <a href="#ref-for-interface-mixin②⓪">(18)</a> <a href="#ref-for-interface-mixin②①">(19)</a>
    </li><li><a href="#ref-for-interface-mixin②②">2.3.1. Using mixins and partials</a> <a href="#ref-for-interface-mixin②③">(2)</a> <a href="#ref-for-interface-mixin②④">(3)</a>
    </li><li><a href="#ref-for-interface-mixin②⑤">2.4. Members</a> <a href="#ref-for-interface-mixin②⑥">(2)</a> <a href="#ref-for-interface-mixin②⑦">(3)</a> <a href="#ref-for-interface-mixin②⑧">(4)</a>
    </li><li><a href="#ref-for-interface-mixin②⑨">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-interface-mixin③⓪">3.3.6. [Exposed]</a> <a href="#ref-for-interface-mixin③①">(2)</a> <a href="#ref-for-interface-mixin③②">(3)</a> <a href="#ref-for-interface-mixin③③">(4)</a> <a href="#ref-for-interface-mixin③④">(5)</a> <a href="#ref-for-interface-mixin③⑤">(6)</a> <a href="#ref-for-interface-mixin③⑥">(7)</a> <a href="#ref-for-interface-mixin③⑦">(8)</a> <a href="#ref-for-interface-mixin③⑧">(9)</a> <a href="#ref-for-interface-mixin③⑨">(10)</a>
    </li><li><a href="#ref-for-interface-mixin④⓪">3.3.11. [LenientSetter]</a>
    </li><li><a href="#ref-for-interface-mixin④①">3.3.15. [NoInterfaceObject]</a> <a href="#ref-for-interface-mixin④②">(2)</a>
    </li><li><a href="#ref-for-interface-mixin④③">3.3.20. [SecureContext]</a> <a href="#ref-for-interface-mixin④④">(2)</a> <a href="#ref-for-interface-mixin④⑤">(3)</a> <a href="#ref-for-interface-mixin④⑥">(4)</a>
    </li><li><a href="#ref-for-interface-mixin④⑦">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-interface-mixin④⑧">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="interface-mixin-member">
   <b><a href="#interface-mixin-member">#interface-mixin-member</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-interface-mixin-member">2.2. Interfaces</a>
    </li><li><a href="#ref-for-interface-mixin-member①">2.3. Interface mixins</a> <a href="#ref-for-interface-mixin-member②">(2)</a> <a href="#ref-for-interface-mixin-member③">(3)</a> <a href="#ref-for-interface-mixin-member④">(4)</a> <a href="#ref-for-interface-mixin-member⑤">(5)</a> <a href="#ref-for-interface-mixin-member⑥">(6)</a> <a href="#ref-for-interface-mixin-member⑦">(7)</a>
    </li><li><a href="#ref-for-interface-mixin-member⑧">2.13. Extended attributes</a>
    </li><li><a href="#ref-for-interface-mixin-member⑨">3.3.6. [Exposed]</a> <a href="#ref-for-interface-mixin-member①⓪">(2)</a> <a href="#ref-for-interface-mixin-member①①">(3)</a> <a href="#ref-for-interface-mixin-member①②">(4)</a> <a href="#ref-for-interface-mixin-member①③">(5)</a> <a href="#ref-for-interface-mixin-member①④">(6)</a> <a href="#ref-for-interface-mixin-member①⑤">(7)</a> <a href="#ref-for-interface-mixin-member①⑥">(8)</a> <a href="#ref-for-interface-mixin-member①⑦">(9)</a> <a href="#ref-for-interface-mixin-member①⑧">(10)</a> <a href="#ref-for-interface-mixin-member①⑨">(11)</a>
    </li><li><a href="#ref-for-interface-mixin-member②⓪">3.3.20. [SecureContext]</a> <a href="#ref-for-interface-mixin-member②①">(2)</a> <a href="#ref-for-interface-mixin-member②②">(3)</a> <a href="#ref-for-interface-mixin-member②③">(4)</a> <a href="#ref-for-interface-mixin-member②④">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="partial-interface-mixin">
   <b><a href="#partial-interface-mixin">#partial-interface-mixin</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-partial-interface-mixin">2. Interface definition language</a>
    </li><li><a href="#ref-for-partial-interface-mixin①">2.3. Interface mixins</a> <a href="#ref-for-partial-interface-mixin②">(2)</a> <a href="#ref-for-partial-interface-mixin③">(3)</a>
    </li><li><a href="#ref-for-partial-interface-mixin④">2.3.1. Using mixins and partials</a>
    </li><li><a href="#ref-for-partial-interface-mixin⑤">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-partial-interface-mixin⑥">3.3.6. [Exposed]</a> <a href="#ref-for-partial-interface-mixin⑦">(2)</a> <a href="#ref-for-partial-interface-mixin⑧">(3)</a> <a href="#ref-for-partial-interface-mixin⑨">(4)</a> <a href="#ref-for-partial-interface-mixin①⓪">(5)</a> <a href="#ref-for-partial-interface-mixin①①">(6)</a> <a href="#ref-for-partial-interface-mixin①②">(7)</a> <a href="#ref-for-partial-interface-mixin①③">(8)</a>
    </li><li><a href="#ref-for-partial-interface-mixin①④">3.3.20. [SecureContext]</a> <a href="#ref-for-partial-interface-mixin①⑤">(2)</a> <a href="#ref-for-partial-interface-mixin①⑥">(3)</a> <a href="#ref-for-partial-interface-mixin①⑦">(4)</a> <a href="#ref-for-partial-interface-mixin①⑧">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="includes-statement">
   <b><a href="#includes-statement">#includes-statement</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-includes-statement">2. Interface definition language</a>
    </li><li><a href="#ref-for-includes-statement①">2.2. Interfaces</a>
    </li><li><a href="#ref-for-includes-statement②">2.3. Interface mixins</a> <a href="#ref-for-includes-statement③">(2)</a> <a href="#ref-for-includes-statement④">(3)</a>
    </li><li><a href="#ref-for-includes-statement⑤">3.3.15. [NoInterfaceObject]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="include">
   <b><a href="#include">#include</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-include">2.2. Interfaces</a> <a href="#ref-for-include①">(2)</a>
    </li><li><a href="#ref-for-include②">2.3. Interface mixins</a> <a href="#ref-for-include③">(2)</a> <a href="#ref-for-include④">(3)</a> <a href="#ref-for-include⑤">(4)</a> <a href="#ref-for-include⑥">(5)</a> <a href="#ref-for-include⑦">(6)</a> <a href="#ref-for-include⑧">(7)</a>
    </li><li><a href="#ref-for-include⑨">3.3.6. [Exposed]</a> <a href="#ref-for-include①⓪">(2)</a>
    </li><li><a href="#ref-for-include①①">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="host-interfaces">
   <b><a href="#host-interfaces">#host-interfaces</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-host-interfaces">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-host-interfaces①">3.3.6. [Exposed]</a> <a href="#ref-for-host-interfaces②">(2)</a> <a href="#ref-for-host-interfaces③">(3)</a>
    </li><li><a href="#ref-for-host-interfaces④">3.3.20. [SecureContext]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-member">
   <b><a href="#dfn-member">#dfn-member</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-member">2.2. Interfaces</a>
    </li><li><a href="#ref-for-dfn-member①">2.3. Interface mixins</a> <a href="#ref-for-dfn-member②">(2)</a> <a href="#ref-for-dfn-member③">(3)</a> <a href="#ref-for-dfn-member④">(4)</a> <a href="#ref-for-dfn-member⑤">(5)</a>
    </li><li><a href="#ref-for-dfn-member⑥">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-member⑦">2.4.7. Iterable declarations</a>
    </li><li><a href="#ref-for-dfn-member⑧">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-member⑨">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-member①⓪">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-member①①">(2)</a> <a href="#ref-for-dfn-member①②">(3)</a> <a href="#ref-for-dfn-member①③">(4)</a>
    </li><li><a href="#ref-for-dfn-member①④">3.3.7. [Global]</a> <a href="#ref-for-dfn-member①⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-member①⑥">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-member①⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-member①⑧">3.6.3. Interface prototype object</a> <a href="#ref-for-dfn-member①⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-member②⓪">3.6.6. Constants</a>
    </li><li><a href="#ref-for-dfn-member②①">3.6.7. Attributes</a> <a href="#ref-for-dfn-member②②">(2)</a> <a href="#ref-for-dfn-member②③">(3)</a>
    </li><li><a href="#ref-for-dfn-member②④">3.6.8. Operations</a> <a href="#ref-for-dfn-member②⑤">(2)</a> <a href="#ref-for-dfn-member②⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-member②⑦">3.6.11.5. clear</a>
    </li><li><a href="#ref-for-dfn-member②⑧">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-dfn-member②⑨">3.6.11.7. set</a>
    </li><li><a href="#ref-for-dfn-member③⓪">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-dfn-member③①">3.6.12.6. clear</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-constant">
   <b><a href="#dfn-constant">#dfn-constant</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-constant">2.1. Names</a> <a href="#ref-for-dfn-constant①">(2)</a>
    </li><li><a href="#ref-for-dfn-constant②">2.2. Interfaces</a>
    </li><li><a href="#ref-for-dfn-constant③">2.3. Interface mixins</a> <a href="#ref-for-dfn-constant④">(2)</a>
    </li><li><a href="#ref-for-dfn-constant⑤">2.3.1. Using mixins and partials</a> <a href="#ref-for-dfn-constant⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-constant⑦">2.4. Members</a> <a href="#ref-for-dfn-constant⑧">(2)</a> <a href="#ref-for-dfn-constant⑨">(3)</a>
    </li><li><a href="#ref-for-dfn-constant①⓪">2.4.1. Constants</a> <a href="#ref-for-dfn-constant①①">(2)</a> <a href="#ref-for-dfn-constant①②">(3)</a> <a href="#ref-for-dfn-constant①③">(4)</a> <a href="#ref-for-dfn-constant①④">(5)</a> <a href="#ref-for-dfn-constant①⑤">(6)</a> <a href="#ref-for-dfn-constant①⑥">(7)</a>
    </li><li><a href="#ref-for-dfn-constant①⑦">2.4.3. Operations</a> <a href="#ref-for-dfn-constant①⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-constant①⑨">2.4.8. Maplike declarations</a> <a href="#ref-for-dfn-constant②⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-constant②①">2.4.9. Setlike declarations</a> <a href="#ref-for-dfn-constant②②">(2)</a>
    </li><li><a href="#ref-for-dfn-constant②③">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-constant②④">2.9. Callback functions</a>
    </li><li><a href="#ref-for-dfn-constant②⑤">2.12. Types</a>
    </li><li><a href="#ref-for-dfn-constant②⑥">2.12.25. Sequence types — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-constant②⑦">2.12.26. Record types — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-dfn-constant②⑧">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-dfn-constant②⑨">3.6.4. Legacy callback interface object</a> <a href="#ref-for-dfn-constant③⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-constant③①">3.6.6. Constants</a> <a href="#ref-for-dfn-constant③②">(2)</a>
    </li><li><a href="#ref-for-dfn-constant③③">3.9. User objects implementing callback interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-attribute">
   <b><a href="#dfn-attribute">#dfn-attribute</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-attribute">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-attribute①">2.1. Names</a> <a href="#ref-for-dfn-attribute②">(2)</a> <a href="#ref-for-dfn-attribute③">(3)</a>
    </li><li><a href="#ref-for-dfn-attribute④">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-attribute⑤">2.3.1. Using mixins and partials</a> <a href="#ref-for-dfn-attribute⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-attribute⑦">2.4. Members</a> <a href="#ref-for-dfn-attribute⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-attribute⑨">2.4.2. Attributes</a> <a href="#ref-for-dfn-attribute①⓪">(2)</a> <a href="#ref-for-dfn-attribute①①">(3)</a>
    </li><li><a href="#ref-for-dfn-attribute①②">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-attribute①③">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-attribute①④">2.4.4.1. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-attribute①⑤">2.4.4.2. Indexed properties</a>
    </li><li><a href="#ref-for-dfn-attribute①⑥">2.4.8. Maplike declarations</a> <a href="#ref-for-dfn-attribute①⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-attribute①⑧">2.4.9. Setlike declarations</a> <a href="#ref-for-dfn-attribute①⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-attribute②⓪">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-attribute②①">2.7. Exceptions</a>
    </li><li><a href="#ref-for-dfn-attribute②②">2.8. Enumerations</a> <a href="#ref-for-dfn-attribute②③">(2)</a> <a href="#ref-for-dfn-attribute②④">(3)</a> <a href="#ref-for-dfn-attribute②⑤">(4)</a>
    </li><li><a href="#ref-for-dfn-attribute②⑥">2.12. Types</a>
    </li><li><a href="#ref-for-dfn-attribute②⑦">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-attribute②⑧">2.12.25. Sequence types — sequence&lt;T&gt;</a> <a href="#ref-for-dfn-attribute②⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-attribute③⓪">2.12.26. Record types — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-dfn-attribute③①">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-dfn-attribute③②">3.2.18. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-attribute③③">3.2.19.1. Creating a sequence from an iterable</a>
    </li><li><a href="#ref-for-dfn-attribute③④">3.3.11. [LenientSetter]</a> <a href="#ref-for-dfn-attribute③⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-attribute③⑥">3.3.12. [LenientThis]</a>
    </li><li><a href="#ref-for-dfn-attribute③⑦">3.3.17. [PutForwards]</a> <a href="#ref-for-dfn-attribute③⑧">(2)</a> <a href="#ref-for-dfn-attribute③⑨">(3)</a> <a href="#ref-for-dfn-attribute④⓪">(4)</a>
    </li><li><a href="#ref-for-dfn-attribute④①">3.3.18. [Replaceable]</a> <a href="#ref-for-dfn-attribute④②">(2)</a> <a href="#ref-for-dfn-attribute④③">(3)</a>
    </li><li><a href="#ref-for-dfn-attribute④④">3.3.19. [SameObject]</a> <a href="#ref-for-dfn-attribute④⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-attribute④⑥">3.3.21. [TreatNonObjectAsNull]</a>
    </li><li><a href="#ref-for-dfn-attribute④⑦">3.3.23. [Unforgeable]</a>
    </li><li><a href="#ref-for-dfn-attribute④⑧">3.4. Security</a>
    </li><li><a href="#ref-for-dfn-attribute④⑨">3.6.7. Attributes</a> <a href="#ref-for-dfn-attribute⑤⓪">(2)</a> <a href="#ref-for-dfn-attribute⑤①">(3)</a> <a href="#ref-for-dfn-attribute⑤②">(4)</a> <a href="#ref-for-dfn-attribute⑤③">(5)</a>
    </li><li><a href="#ref-for-dfn-attribute⑤④">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-attribute⑤⑤">3.6.9.1. @@iterator</a>
    </li><li><a href="#ref-for-dfn-attribute⑤⑥">3.9. User objects implementing callback interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-regular-attribute">
   <b><a href="#dfn-regular-attribute">#dfn-regular-attribute</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-regular-attribute">2.3. Interface mixins</a> <a href="#ref-for-dfn-regular-attribute①">(2)</a>
    </li><li><a href="#ref-for-dfn-regular-attribute②">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-regular-attribute③">2.4.2. Attributes</a> <a href="#ref-for-dfn-regular-attribute④">(2)</a> <a href="#ref-for-dfn-regular-attribute⑤">(3)</a> <a href="#ref-for-dfn-regular-attribute⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-regular-attribute⑦">2.5. Namespaces</a>
    </li><li><a href="#ref-for-dfn-regular-attribute⑧">3.3.11. [LenientSetter]</a> <a href="#ref-for-dfn-regular-attribute⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-regular-attribute①⓪">3.3.12. [LenientThis]</a>
    </li><li><a href="#ref-for-dfn-regular-attribute①①">3.3.17. [PutForwards]</a>
    </li><li><a href="#ref-for-dfn-regular-attribute①②">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-regular-attribute①③">3.3.23. [Unforgeable]</a> <a href="#ref-for-dfn-regular-attribute①④">(2)</a> <a href="#ref-for-dfn-regular-attribute①⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-regular-attribute①⑥">3.3.24. [Unscopable]</a> <a href="#ref-for-dfn-regular-attribute①⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-regular-attribute①⑧">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-dfn-regular-attribute①⑨">3.6.7. Attributes</a> <a href="#ref-for-dfn-regular-attribute②⓪">(2)</a> <a href="#ref-for-dfn-regular-attribute②①">(3)</a> <a href="#ref-for-dfn-regular-attribute②②">(4)</a> <a href="#ref-for-dfn-regular-attribute②③">(5)</a>
    </li><li><a href="#ref-for-dfn-regular-attribute②④">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="get-the-underlying-value">
   <b><a href="#get-the-underlying-value">#get-the-underlying-value</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-get-the-underlying-value">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-get-the-underlying-value①">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-get-the-underlying-value②">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-read-only">
   <b><a href="#dfn-read-only">#dfn-read-only</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-read-only">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-read-only①">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-read-only②">2.4.2. Attributes</a> <a href="#ref-for-dfn-read-only③">(2)</a> <a href="#ref-for-dfn-read-only④">(3)</a> <a href="#ref-for-dfn-read-only⑤">(4)</a>
    </li><li><a href="#ref-for-dfn-read-only⑥">2.5. Namespaces</a>
    </li><li><a href="#ref-for-dfn-read-only⑦">3.3.2. [Clamp]</a>
    </li><li><a href="#ref-for-dfn-read-only⑧">3.3.5. [EnforceRange]</a>
    </li><li><a href="#ref-for-dfn-read-only⑨">3.3.11. [LenientSetter]</a> <a href="#ref-for-dfn-read-only①⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-read-only①①">3.3.17. [PutForwards]</a> <a href="#ref-for-dfn-read-only①②">(2)</a>
    </li><li><a href="#ref-for-dfn-read-only①③">3.3.18. [Replaceable]</a> <a href="#ref-for-dfn-read-only①④">(2)</a>
    </li><li><a href="#ref-for-dfn-read-only①⑤">3.3.19. [SameObject]</a> <a href="#ref-for-dfn-read-only①⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-read-only①⑦">3.6.7. Attributes</a> <a href="#ref-for-dfn-read-only①⑧">(2)</a> <a href="#ref-for-dfn-read-only①⑨">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-inherit-getter">
   <b><a href="#dfn-inherit-getter">#dfn-inherit-getter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-inherit-getter">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-inherit-getter①">3.6.8.2. Stringifiers</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-operation">
   <b><a href="#dfn-operation">#dfn-operation</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-operation">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-operation①">2.1. Names</a> <a href="#ref-for-dfn-operation②">(2)</a>
    </li><li><a href="#ref-for-dfn-operation③">2.2. Interfaces</a>
    </li><li><a href="#ref-for-dfn-operation④">2.3.1. Using mixins and partials</a> <a href="#ref-for-dfn-operation⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-operation⑥">2.4. Members</a> <a href="#ref-for-dfn-operation⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-operation⑧">2.4.3. Operations</a> <a href="#ref-for-dfn-operation⑨">(2)</a> <a href="#ref-for-dfn-operation①⓪">(3)</a>
    </li><li><a href="#ref-for-dfn-operation①①">2.4.4.1. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-operation①②">2.4.4.2. Indexed properties</a> <a href="#ref-for-dfn-operation①③">(2)</a> <a href="#ref-for-dfn-operation①④">(3)</a>
    </li><li><a href="#ref-for-dfn-operation①⑤">2.4.4.3. Named properties</a> <a href="#ref-for-dfn-operation①⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-operation①⑦">2.4.6. Overloading</a> <a href="#ref-for-dfn-operation①⑧">(2)</a> <a href="#ref-for-dfn-operation①⑨">(3)</a> <a href="#ref-for-dfn-operation②⓪">(4)</a>
    </li><li><a href="#ref-for-dfn-operation②①">2.4.6.1. Overloading vs. union types</a>
    </li><li><a href="#ref-for-dfn-operation②②">2.6. Dictionaries</a> <a href="#ref-for-dfn-operation②③">(2)</a>
    </li><li><a href="#ref-for-dfn-operation②④">2.7. Exceptions</a>
    </li><li><a href="#ref-for-dfn-operation②⑤">2.8. Enumerations</a> <a href="#ref-for-dfn-operation②⑥">(2)</a> <a href="#ref-for-dfn-operation②⑦">(3)</a> <a href="#ref-for-dfn-operation②⑧">(4)</a>
    </li><li><a href="#ref-for-dfn-operation②⑨">2.12. Types</a>
    </li><li><a href="#ref-for-dfn-operation③⓪">2.12.25. Sequence types — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-operation③①">2.13. Extended attributes</a>
    </li><li><a href="#ref-for-dfn-operation③②">3.2.2. void</a>
    </li><li><a href="#ref-for-dfn-operation③③">3.2.19.1. Creating a sequence from an iterable</a>
    </li><li><a href="#ref-for-dfn-operation③④">3.3.2. [Clamp]</a>
    </li><li><a href="#ref-for-dfn-operation③⑤">3.3.5. [EnforceRange]</a>
    </li><li><a href="#ref-for-dfn-operation③⑥">3.3.6. [Exposed]</a>
    </li><li><a href="#ref-for-dfn-operation③⑦">3.3.14. [NewObject]</a> <a href="#ref-for-dfn-operation③⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-operation③⑨">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-operation④⓪">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-operation④①">(2)</a>
    </li><li><a href="#ref-for-dfn-operation④②">3.3.23. [Unforgeable]</a> <a href="#ref-for-dfn-operation④③">(2)</a> <a href="#ref-for-dfn-operation④④">(3)</a> <a href="#ref-for-dfn-operation④⑤">(4)</a>
    </li><li><a href="#ref-for-dfn-operation④⑥">3.4. Security</a>
    </li><li><a href="#ref-for-dfn-operation④⑦">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-operation④⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-operation④⑨">3.6.8. Operations</a> <a href="#ref-for-dfn-operation⑤⓪">(2)</a> <a href="#ref-for-dfn-operation⑤①">(3)</a> <a href="#ref-for-dfn-operation⑤②">(4)</a>
    </li><li><a href="#ref-for-dfn-operation⑤③">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-dfn-operation⑤④">3.6.8.2. Stringifiers</a> <a href="#ref-for-dfn-operation⑤⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-operation⑤⑥">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-dfn-operation⑤⑦">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-regular-operation">
   <b><a href="#dfn-regular-operation">#dfn-regular-operation</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-regular-operation">2.1. Names</a>
    </li><li><a href="#ref-for-dfn-regular-operation①">2.3. Interface mixins</a> <a href="#ref-for-dfn-regular-operation②">(2)</a> <a href="#ref-for-dfn-regular-operation③">(3)</a>
    </li><li><a href="#ref-for-dfn-regular-operation④">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-regular-operation⑤">2.4.3. Operations</a> <a href="#ref-for-dfn-regular-operation⑥">(2)</a> <a href="#ref-for-dfn-regular-operation⑦">(3)</a> <a href="#ref-for-dfn-regular-operation⑧">(4)</a>
    </li><li><a href="#ref-for-dfn-regular-operation⑨">2.4.3.1. toJSON</a> <a href="#ref-for-dfn-regular-operation①⓪">(2)</a> <a href="#ref-for-dfn-regular-operation①①">(3)</a> <a href="#ref-for-dfn-regular-operation①②">(4)</a>
    </li><li><a href="#ref-for-dfn-regular-operation①③">2.4.6. Overloading</a> <a href="#ref-for-dfn-regular-operation①④">(2)</a> <a href="#ref-for-dfn-regular-operation①⑤">(3)</a> <a href="#ref-for-dfn-regular-operation①⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-regular-operation①⑦">2.5. Namespaces</a>
    </li><li><a href="#ref-for-dfn-regular-operation①⑧">3.3.4. [Default]</a> <a href="#ref-for-dfn-regular-operation①⑨">(2)</a> <a href="#ref-for-dfn-regular-operation②⓪">(3)</a>
    </li><li><a href="#ref-for-dfn-regular-operation②①">3.3.14. [NewObject]</a> <a href="#ref-for-dfn-regular-operation②②">(2)</a>
    </li><li><a href="#ref-for-dfn-regular-operation②③">3.3.24. [Unscopable]</a> <a href="#ref-for-dfn-regular-operation②④">(2)</a>
    </li><li><a href="#ref-for-dfn-regular-operation②⑤">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-dfn-regular-operation②⑥">3.6.8. Operations</a> <a href="#ref-for-dfn-regular-operation②⑦">(2)</a> <a href="#ref-for-dfn-regular-operation②⑧">(3)</a> <a href="#ref-for-dfn-regular-operation②⑨">(4)</a> <a href="#ref-for-dfn-regular-operation③⓪">(5)</a>
    </li><li><a href="#ref-for-dfn-regular-operation③①">3.6.8.1. Default operations</a>
    </li><li><a href="#ref-for-dfn-regular-operation③②">3.9. User objects implementing callback interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-return-type">
   <b><a href="#dfn-return-type">#dfn-return-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-return-type">2.4.4.1. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-return-type①">2.7. Exceptions</a>
    </li><li><a href="#ref-for-dfn-return-type②">3.2.2. void</a>
    </li><li><a href="#ref-for-dfn-return-type③">3.3.14. [NewObject]</a>
    </li><li><a href="#ref-for-dfn-return-type④">3.6.8. Operations</a>
    </li><li><a href="#ref-for-dfn-return-type⑤">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-dfn-return-type⑥">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-return-type⑦">3.9. User objects implementing callback interfaces</a>
    </li><li><a href="#ref-for-dfn-return-type⑧">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-void">
   <b><a href="#idl-void">#idl-void</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-void">2.4.6.1. Overloading vs. union types</a> <a href="#ref-for-idl-void①">(2)</a>
    </li><li><a href="#ref-for-idl-void②">3.2.2. void</a> <a href="#ref-for-idl-void③">(2)</a> <a href="#ref-for-idl-void④">(3)</a>
    </li><li><a href="#ref-for-idl-void⑤">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-idl-void⑥">(2)</a>
    </li><li><a href="#ref-for-idl-void⑦">3.9. User objects implementing callback interfaces</a>
    </li><li><a href="#ref-for-idl-void⑧">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-variadic">
   <b><a href="#dfn-variadic">#dfn-variadic</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-variadic">2.4.3. Operations</a> <a href="#ref-for-dfn-variadic①">(2)</a> <a href="#ref-for-dfn-variadic②">(3)</a> <a href="#ref-for-dfn-variadic③">(4)</a>
    </li><li><a href="#ref-for-dfn-variadic④">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-dfn-variadic⑤">2.4.6. Overloading</a> <a href="#ref-for-dfn-variadic⑥">(2)</a> <a href="#ref-for-dfn-variadic⑦">(3)</a> <a href="#ref-for-dfn-variadic⑧">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-optional-argument">
   <b><a href="#dfn-optional-argument">#dfn-optional-argument</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-optional-argument">2.4.3. Operations</a> <a href="#ref-for-dfn-optional-argument①">(2)</a>
    </li><li><a href="#ref-for-dfn-optional-argument②">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-dfn-optional-argument③">2.4.6. Overloading</a> <a href="#ref-for-dfn-optional-argument④">(2)</a> <a href="#ref-for-dfn-optional-argument⑤">(3)</a> <a href="#ref-for-dfn-optional-argument⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-optional-argument⑦">2.4.6.1. Overloading vs. union types</a> <a href="#ref-for-dfn-optional-argument⑧">(2)</a> <a href="#ref-for-dfn-optional-argument⑨">(3)</a> <a href="#ref-for-dfn-optional-argument①⓪">(4)</a> <a href="#ref-for-dfn-optional-argument①①">(5)</a> <a href="#ref-for-dfn-optional-argument①②">(6)</a> <a href="#ref-for-dfn-optional-argument①③">(7)</a> <a href="#ref-for-dfn-optional-argument①④">(8)</a> <a href="#ref-for-dfn-optional-argument①⑤">(9)</a> <a href="#ref-for-dfn-optional-argument①⑥">(10)</a>
    </li><li><a href="#ref-for-dfn-optional-argument①⑦">2.12.15. DOMString</a>
    </li><li><a href="#ref-for-dfn-optional-argument①⑧">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-dfn-optional-argument①⑨">2.12.17. USVString</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-optional-argument-default-value">
   <b><a href="#dfn-optional-argument-default-value">#dfn-optional-argument-default-value</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-optional-argument-default-value">2.4.1. Constants</a>
    </li><li><a href="#ref-for-dfn-optional-argument-default-value①">2.4.3. Operations</a> <a href="#ref-for-dfn-optional-argument-default-value②">(2)</a> <a href="#ref-for-dfn-optional-argument-default-value③">(3)</a> <a href="#ref-for-dfn-optional-argument-default-value④">(4)</a> <a href="#ref-for-dfn-optional-argument-default-value⑤">(5)</a>
    </li><li><a href="#ref-for-dfn-optional-argument-default-value⑥">2.6. Dictionaries</a> <a href="#ref-for-dfn-optional-argument-default-value⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-optional-argument-default-value⑧">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-optional-argument-default-value⑨">(2)</a> <a href="#ref-for-dfn-optional-argument-default-value①⓪">(3)</a> <a href="#ref-for-dfn-optional-argument-default-value①①">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-code-unit">
   <b><a href="#dfn-code-unit">#dfn-code-unit</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-code-unit">2.12.15. DOMString</a> <a href="#ref-for-dfn-code-unit①">(2)</a> <a href="#ref-for-dfn-code-unit②">(3)</a>
    </li><li><a href="#ref-for-dfn-code-unit③">2.12.17. USVString</a>
    </li><li><a href="#ref-for-dfn-code-unit④">2.12.22. Enumeration types</a>
    </li><li><a href="#ref-for-dfn-code-unit⑤">3.2.9. DOMString</a>
    </li><li><a href="#ref-for-dfn-code-unit⑥">3.2.11. USVString</a> <a href="#ref-for-dfn-code-unit⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-code-unit⑧">3.2.16. Enumeration types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-json-types">
   <b><a href="#dfn-json-types">#dfn-json-types</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-json-types">2.1. Names</a>
    </li><li><a href="#ref-for-dfn-json-types①">2.4.3.1. toJSON</a> <a href="#ref-for-dfn-json-types②">(2)</a> <a href="#ref-for-dfn-json-types③">(3)</a> <a href="#ref-for-dfn-json-types④">(4)</a> <a href="#ref-for-dfn-json-types⑤">(5)</a> <a href="#ref-for-dfn-json-types⑥">(6)</a> <a href="#ref-for-dfn-json-types⑦">(7)</a> <a href="#ref-for-dfn-json-types⑧">(8)</a> <a href="#ref-for-dfn-json-types⑨">(9)</a> <a href="#ref-for-dfn-json-types①⓪">(10)</a> <a href="#ref-for-dfn-json-types①①">(11)</a> <a href="#ref-for-dfn-json-types①②">(12)</a>
    </li><li><a href="#ref-for-dfn-json-types①③">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-special-operation">
   <b><a href="#dfn-special-operation">#dfn-special-operation</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-special-operation">2.1. Names</a>
    </li><li><a href="#ref-for-dfn-special-operation①">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-special-operation②">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-special-operation③">2.4.3. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-special-keyword">
   <b><a href="#dfn-special-keyword">#dfn-special-keyword</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-special-keyword">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-special-keyword①">2.4.4. Special operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-getter">
   <b><a href="#dfn-getter">#dfn-getter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-getter">3.8. Legacy platform objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-setter">
   <b><a href="#dfn-setter">#dfn-setter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-setter">3.8. Legacy platform objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-stringifier">
   <b><a href="#dfn-stringifier">#dfn-stringifier</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-stringifier">2.3. Interface mixins</a> <a href="#ref-for-dfn-stringifier①">(2)</a> <a href="#ref-for-dfn-stringifier②">(3)</a>
    </li><li><a href="#ref-for-dfn-stringifier③">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-stringifier④">2.4.4.1. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-stringifier⑤">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-stringifier⑥">3.6.8.2. Stringifiers</a> <a href="#ref-for-dfn-stringifier⑦">(2)</a> <a href="#ref-for-dfn-stringifier⑧">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-named-property-getter">
   <b><a href="#dfn-named-property-getter">#dfn-named-property-getter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-named-property-getter">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-dfn-named-property-getter①">2.4.4.3. Named properties</a> <a href="#ref-for-dfn-named-property-getter②">(2)</a> <a href="#ref-for-dfn-named-property-getter③">(3)</a>
    </li><li><a href="#ref-for-dfn-named-property-getter④">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-named-property-getter⑤">3.3.9. [LegacyUnenumerableNamedProperties]</a>
    </li><li><a href="#ref-for-dfn-named-property-getter⑥">3.3.16. [OverrideBuiltins]</a> <a href="#ref-for-dfn-named-property-getter⑦">(2)</a> <a href="#ref-for-dfn-named-property-getter⑧">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-named-property-setter">
   <b><a href="#dfn-named-property-setter">#dfn-named-property-setter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-named-property-setter">2.4.4.3. Named properties</a> <a href="#ref-for-dfn-named-property-setter①">(2)</a>
    </li><li><a href="#ref-for-dfn-named-property-setter②">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-named-property-setter③">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-dfn-named-property-setter④">3.8.3. [[DefineOwnProperty]]</a> <a href="#ref-for-dfn-named-property-setter⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-named-property-setter⑥">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-indexed-property-getter">
   <b><a href="#dfn-indexed-property-getter">#dfn-indexed-property-getter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-indexed-property-getter">2.4.4.2. Indexed properties</a> <a href="#ref-for-dfn-indexed-property-getter①">(2)</a> <a href="#ref-for-dfn-indexed-property-getter②">(3)</a>
    </li><li><a href="#ref-for-dfn-indexed-property-getter③">2.4.7. Iterable declarations</a>
    </li><li><a href="#ref-for-dfn-indexed-property-getter④">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-indexed-property-getter⑤">3.6.9.1. @@iterator</a> <a href="#ref-for-dfn-indexed-property-getter⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-indexed-property-getter⑦">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-dfn-indexed-property-getter⑧">3.8. Legacy platform objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-indexed-property-setter">
   <b><a href="#dfn-indexed-property-setter">#dfn-indexed-property-setter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-indexed-property-setter">2.4.4.2. Indexed properties</a> <a href="#ref-for-dfn-indexed-property-setter①">(2)</a>
    </li><li><a href="#ref-for-dfn-indexed-property-setter②">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-indexed-property-setter③">3.8. Legacy platform objects</a>
    </li><li><a href="#ref-for-dfn-indexed-property-setter④">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-dfn-indexed-property-setter⑤">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-indexed-property-setter⑥">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-named-property-deleter">
   <b><a href="#dfn-named-property-deleter">#dfn-named-property-deleter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-named-property-deleter">2.4.4. Special operations</a> <a href="#ref-for-dfn-named-property-deleter①">(2)</a>
    </li><li><a href="#ref-for-dfn-named-property-deleter②">2.4.4.3. Named properties</a> <a href="#ref-for-dfn-named-property-deleter③">(2)</a>
    </li><li><a href="#ref-for-dfn-named-property-deleter④">3.8.4. [[Delete]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-stringification-behavior">
   <b><a href="#dfn-stringification-behavior">#dfn-stringification-behavior</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-stringification-behavior">3.6.8.2. Stringifiers</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-indexed-properties">
   <b><a href="#idl-indexed-properties">#idl-indexed-properties</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-indexed-properties">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-idl-indexed-properties">2.4.4.3. Named properties</a>
    </li><li><a href="#ref-for-idl-indexed-properties①">3.8. Legacy platform objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-support-indexed-properties">
   <b><a href="#dfn-support-indexed-properties">#dfn-support-indexed-properties</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-support-indexed-properties">2.4.4.2. Indexed properties</a> <a href="#ref-for-dfn-support-indexed-properties①">(2)</a> <a href="#ref-for-dfn-support-indexed-properties②">(3)</a>
    </li><li><a href="#ref-for-dfn-support-indexed-properties③">2.4.7. Iterable declarations</a> <a href="#ref-for-dfn-support-indexed-properties④">(2)</a> <a href="#ref-for-dfn-support-indexed-properties⑤">(3)</a> <a href="#ref-for-dfn-support-indexed-properties⑥">(4)</a> <a href="#ref-for-dfn-support-indexed-properties⑦">(5)</a>
    </li><li><a href="#ref-for-dfn-support-indexed-properties⑧">2.11. Objects implementing interfaces</a>
    </li><li><a href="#ref-for-dfn-support-indexed-properties⑨">3.6.10.4. Default iterator objects</a>
    </li><li><a href="#ref-for-dfn-support-indexed-properties①⓪">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-dfn-support-indexed-properties①①">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-support-indexed-properties①②">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-support-indexed-properties①③">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-dfn-support-indexed-properties①④">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-supported-property-indices">
   <b><a href="#dfn-supported-property-indices">#dfn-supported-property-indices</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-supported-property-indices">2.4.4.2. Indexed properties</a> <a href="#ref-for-dfn-supported-property-indices①">(2)</a> <a href="#ref-for-dfn-supported-property-indices②">(3)</a>
    </li><li><a href="#ref-for-dfn-supported-property-indices③">3.8. Legacy platform objects</a>
    </li><li><a href="#ref-for-dfn-supported-property-indices④">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-supported-property-indices⑤">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-dfn-supported-property-indices⑥">3.8.7. Abstract operations</a> <a href="#ref-for-dfn-supported-property-indices⑦">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-determine-the-value-of-an-indexed-property">
   <b><a href="#dfn-determine-the-value-of-an-indexed-property">#dfn-determine-the-value-of-an-indexed-property</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-determine-the-value-of-an-indexed-property">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-set-the-value-of-an-existing-indexed-property">
   <b><a href="#dfn-set-the-value-of-an-existing-indexed-property">#dfn-set-the-value-of-an-existing-indexed-property</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-set-the-value-of-an-existing-indexed-property">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-set-the-value-of-a-new-indexed-property">
   <b><a href="#dfn-set-the-value-of-a-new-indexed-property">#dfn-set-the-value-of-a-new-indexed-property</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-set-the-value-of-a-new-indexed-property">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-named-properties">
   <b><a href="#idl-named-properties">#idl-named-properties</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-named-properties">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-idl-named-properties">3.3.7. [Global]</a> <a href="#ref-for-idl-named-properties①">(2)</a>
    </li><li><a href="#ref-for-idl-named-properties②">3.8. Legacy platform objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-support-named-properties">
   <b><a href="#dfn-support-named-properties">#dfn-support-named-properties</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-support-named-properties">2.4.4.3. Named properties</a> <a href="#ref-for-dfn-support-named-properties①">(2)</a>
    </li><li><a href="#ref-for-dfn-support-named-properties②">2.11. Objects implementing interfaces</a>
    </li><li><a href="#ref-for-dfn-support-named-properties③">3.3.9. [LegacyUnenumerableNamedProperties]</a>
    </li><li><a href="#ref-for-dfn-support-named-properties④">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-dfn-support-named-properties⑤">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-dfn-support-named-properties⑥">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-dfn-support-named-properties⑦">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-support-named-properties⑧">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-support-named-properties⑨">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-dfn-support-named-properties①⓪">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-supported-property-names">
   <b><a href="#dfn-supported-property-names">#dfn-supported-property-names</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-supported-property-names">2.4.4.3. Named properties</a> <a href="#ref-for-dfn-supported-property-names①">(2)</a>
    </li><li><a href="#ref-for-dfn-supported-property-names②">3.3.16. [OverrideBuiltins]</a>
    </li><li><a href="#ref-for-dfn-supported-property-names③">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-supported-property-names④">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-dfn-supported-property-names⑤">3.8.7. Abstract operations</a> <a href="#ref-for-dfn-supported-property-names⑥">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-determine-the-value-of-a-named-property">
   <b><a href="#dfn-determine-the-value-of-a-named-property">#dfn-determine-the-value-of-a-named-property</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-determine-the-value-of-a-named-property">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-determine-the-value-of-a-named-property①">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-set-the-value-of-an-existing-named-property">
   <b><a href="#dfn-set-the-value-of-an-existing-named-property">#dfn-set-the-value-of-an-existing-named-property</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-set-the-value-of-an-existing-named-property">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-set-the-value-of-a-new-named-property">
   <b><a href="#dfn-set-the-value-of-a-new-named-property">#dfn-set-the-value-of-a-new-named-property</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-set-the-value-of-a-new-named-property">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-delete-an-existing-named-property">
   <b><a href="#dfn-delete-an-existing-named-property">#dfn-delete-an-existing-named-property</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-delete-an-existing-named-property">3.8.4. [[Delete]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-static-attribute">
   <b><a href="#dfn-static-attribute">#dfn-static-attribute</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-static-attribute">2.2. Interfaces</a>
    </li><li><a href="#ref-for-dfn-static-attribute①">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-static-attribute②">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-static-attribute③">2.4.2. Attributes</a> <a href="#ref-for-dfn-static-attribute④">(2)</a> <a href="#ref-for-dfn-static-attribute⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-static-attribute⑥">2.4.4.1. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-static-attribute⑦">3.3.12. [LenientThis]</a>
    </li><li><a href="#ref-for-dfn-static-attribute⑧">3.3.17. [PutForwards]</a>
    </li><li><a href="#ref-for-dfn-static-attribute⑨">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-static-attribute①⓪">3.6.7. Attributes</a> <a href="#ref-for-dfn-static-attribute①①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-static-operation">
   <b><a href="#dfn-static-operation">#dfn-static-operation</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-static-operation">2.2. Interfaces</a>
    </li><li><a href="#ref-for-dfn-static-operation①">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-static-operation②">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-static-operation③">2.4.3. Operations</a> <a href="#ref-for-dfn-static-operation④">(2)</a> <a href="#ref-for-dfn-static-operation⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-static-operation⑥">2.4.6. Overloading</a> <a href="#ref-for-dfn-static-operation⑦">(2)</a> <a href="#ref-for-dfn-static-operation⑧">(3)</a>
    </li><li><a href="#ref-for-dfn-static-operation⑨">3.3.14. [NewObject]</a> <a href="#ref-for-dfn-static-operation①⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-static-operation①①">3.3.15. [NoInterfaceObject]</a>
    </li><li><a href="#ref-for-dfn-static-operation①②">3.3.23. [Unforgeable]</a> <a href="#ref-for-dfn-static-operation①③">(2)</a> <a href="#ref-for-dfn-static-operation①④">(3)</a>
    </li><li><a href="#ref-for-dfn-static-operation①⑤">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-dfn-static-operation①⑥">3.6.8. Operations</a> <a href="#ref-for-dfn-static-operation①⑦">(2)</a> <a href="#ref-for-dfn-static-operation①⑧">(3)</a> <a href="#ref-for-dfn-static-operation①⑨">(4)</a> <a href="#ref-for-dfn-static-operation②⓪">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-overloaded">
   <b><a href="#dfn-overloaded">#dfn-overloaded</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-overloaded">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-overloaded①">2.4.6.1. Overloading vs. union types</a> <a href="#ref-for-dfn-overloaded②">(2)</a> <a href="#ref-for-dfn-overloaded③">(3)</a> <a href="#ref-for-dfn-overloaded④">(4)</a> <a href="#ref-for-dfn-overloaded⑤">(5)</a> <a href="#ref-for-dfn-overloaded⑥">(6)</a> <a href="#ref-for-dfn-overloaded⑦">(7)</a> <a href="#ref-for-dfn-overloaded⑧">(8)</a> <a href="#ref-for-dfn-overloaded⑨">(9)</a> <a href="#ref-for-dfn-overloaded①⓪">(10)</a>
    </li><li><a href="#ref-for-dfn-overloaded①①">3.3.6. [Exposed]</a>
    </li><li><a href="#ref-for-dfn-overloaded①②">3.3.20. [SecureContext]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-effective-overload-set">
   <b><a href="#dfn-effective-overload-set">#dfn-effective-overload-set</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-effective-overload-set">2.4.6. Overloading</a> <a href="#ref-for-dfn-effective-overload-set①">(2)</a> <a href="#ref-for-dfn-effective-overload-set②">(3)</a> <a href="#ref-for-dfn-effective-overload-set③">(4)</a> <a href="#ref-for-dfn-effective-overload-set④">(5)</a> <a href="#ref-for-dfn-effective-overload-set⑤">(6)</a> <a href="#ref-for-dfn-effective-overload-set⑥">(7)</a>
    </li><li><a href="#ref-for-dfn-effective-overload-set⑦">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-dfn-effective-overload-set⑧">3.6.1. Interface object</a> <a href="#ref-for-dfn-effective-overload-set⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-effective-overload-set①⓪">3.6.2. Named constructors</a> <a href="#ref-for-dfn-effective-overload-set①①">(2)</a>
    </li><li><a href="#ref-for-dfn-effective-overload-set①②">3.6.8. Operations</a> <a href="#ref-for-dfn-effective-overload-set①③">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="effective-overload-set-tuple-callable">
   <b><a href="#effective-overload-set-tuple-callable">#effective-overload-set-tuple-callable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-effective-overload-set-tuple-callable">2.4.6. Overloading</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="type-list">
   <b><a href="#type-list">#type-list</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-type-list">2.4.6. Overloading</a> <a href="#ref-for-type-list①">(2)</a> <a href="#ref-for-type-list②">(3)</a> <a href="#ref-for-type-list③">(4)</a> <a href="#ref-for-type-list④">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="optionality-list">
   <b><a href="#optionality-list">#optionality-list</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-optionality-list">2.4.6. Overloading</a> <a href="#ref-for-optionality-list①">(2)</a> <a href="#ref-for-optionality-list②">(3)</a> <a href="#ref-for-optionality-list③">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-optionality-value">
   <b><a href="#dfn-optionality-value">#dfn-optionality-value</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-optionality-value">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-optionality-value①">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-optionality-value②">(2)</a> <a href="#ref-for-dfn-optionality-value③">(3)</a> <a href="#ref-for-dfn-optionality-value④">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-distinguishable">
   <b><a href="#dfn-distinguishable">#dfn-distinguishable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-distinguishable">2.4.6. Overloading</a> <a href="#ref-for-dfn-distinguishable①">(2)</a> <a href="#ref-for-dfn-distinguishable②">(3)</a>
    </li><li><a href="#ref-for-dfn-distinguishable③">2.12.28. Union types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-distinguishing-argument-index">
   <b><a href="#dfn-distinguishing-argument-index">#dfn-distinguishing-argument-index</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-distinguishing-argument-index">2.4.6. Overloading</a> <a href="#ref-for-dfn-distinguishing-argument-index①">(2)</a> <a href="#ref-for-dfn-distinguishing-argument-index②">(3)</a>
    </li><li><a href="#ref-for-dfn-distinguishing-argument-index③">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-distinguishing-argument-index④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-iterable-declaration">
   <b><a href="#dfn-iterable-declaration">#dfn-iterable-declaration</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-iterable-declaration">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration①">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration②">2.4.7. Iterable declarations</a> <a href="#ref-for-dfn-iterable-declaration③">(2)</a> <a href="#ref-for-dfn-iterable-declaration④">(3)</a> <a href="#ref-for-dfn-iterable-declaration⑤">(4)</a> <a href="#ref-for-dfn-iterable-declaration⑥">(5)</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration⑦">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration⑧">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration⑨">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration①⓪">3.6.9.1. @@iterator</a> <a href="#ref-for-dfn-iterable-declaration①①">(2)</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration①②">3.6.9.2. forEach</a> <a href="#ref-for-dfn-iterable-declaration①③">(2)</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration①④">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration①⑤">3.6.10.2. keys</a> <a href="#ref-for-dfn-iterable-declaration①⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-iterable-declaration①⑦">3.6.10.3. values</a> <a href="#ref-for-dfn-iterable-declaration①⑧">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-value-iterator">
   <b><a href="#dfn-value-iterator">#dfn-value-iterator</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-value-iterator">2.4.7. Iterable declarations</a> <a href="#ref-for-dfn-value-iterator①">(2)</a> <a href="#ref-for-dfn-value-iterator②">(3)</a> <a href="#ref-for-dfn-value-iterator③">(4)</a> <a href="#ref-for-dfn-value-iterator④">(5)</a> <a href="#ref-for-dfn-value-iterator⑤">(6)</a>
    </li><li><a href="#ref-for-dfn-value-iterator⑥">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-dfn-value-iterator⑦">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-dfn-value-iterator⑧">3.6.10.3. values</a>
    </li><li><a href="#ref-for-dfn-value-iterator⑨">3.6.10.4. Default iterator objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-pair-iterator">
   <b><a href="#dfn-pair-iterator">#dfn-pair-iterator</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-pair-iterator">2.4.7. Iterable declarations</a> <a href="#ref-for-dfn-pair-iterator①">(2)</a> <a href="#ref-for-dfn-pair-iterator②">(3)</a>
    </li><li><a href="#ref-for-dfn-pair-iterator③">3.6.9.1. @@iterator</a> <a href="#ref-for-dfn-pair-iterator④">(2)</a>
    </li><li><a href="#ref-for-dfn-pair-iterator⑤">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-dfn-pair-iterator⑥">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-dfn-pair-iterator⑦">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-dfn-pair-iterator⑧">3.6.10.3. values</a>
    </li><li><a href="#ref-for-dfn-pair-iterator⑨">3.6.10.4. Default iterator objects</a>
    </li><li><a href="#ref-for-dfn-pair-iterator①⓪">3.6.10.5. Iterator prototype object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-value-pairs-to-iterate-over">
   <b><a href="#dfn-value-pairs-to-iterate-over">#dfn-value-pairs-to-iterate-over</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-value-pairs-to-iterate-over">2.4.7. Iterable declarations</a>
    </li><li><a href="#ref-for-dfn-value-pairs-to-iterate-over①">3.6.9.2. forEach</a> <a href="#ref-for-dfn-value-pairs-to-iterate-over②">(2)</a>
    </li><li><a href="#ref-for-dfn-value-pairs-to-iterate-over③">3.6.10.5. Iterator prototype object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-maplike">
   <b><a href="#dfn-maplike">#dfn-maplike</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-maplike">2.4.8. Maplike declarations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-maplike-declaration">
   <b><a href="#dfn-maplike-declaration">#dfn-maplike-declaration</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-maplike-declaration">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration①">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration②">2.4.7. Iterable declarations</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration③">2.4.8. Maplike declarations</a> <a href="#ref-for-dfn-maplike-declaration④">(2)</a> <a href="#ref-for-dfn-maplike-declaration⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration⑥">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration⑦">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration⑧">3.6.9.1. @@iterator</a> <a href="#ref-for-dfn-maplike-declaration⑨">(2)</a> <a href="#ref-for-dfn-maplike-declaration①⓪">(3)</a> <a href="#ref-for-dfn-maplike-declaration①①">(4)</a> <a href="#ref-for-dfn-maplike-declaration①②">(5)</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration①③">3.6.9.2. forEach</a> <a href="#ref-for-dfn-maplike-declaration①④">(2)</a> <a href="#ref-for-dfn-maplike-declaration①⑤">(3)</a> <a href="#ref-for-dfn-maplike-declaration①⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration①⑦">3.6.11. Maplike declarations</a> <a href="#ref-for-dfn-maplike-declaration①⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration①⑨">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration②⓪">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-dfn-maplike-declaration②①">3.6.11.7. set</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-map-entries">
   <b><a href="#dfn-map-entries">#dfn-map-entries</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-map-entries">2.4.8. Maplike declarations</a> <a href="#ref-for-dfn-map-entries①">(2)</a>
    </li><li><a href="#ref-for-dfn-map-entries②">3.6.11. Maplike declarations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-setlike">
   <b><a href="#dfn-setlike">#dfn-setlike</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-setlike">2.4.9. Setlike declarations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-setlike-declaration">
   <b><a href="#dfn-setlike-declaration">#dfn-setlike-declaration</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-setlike-declaration">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration①">2.4. Members</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration②">2.4.7. Iterable declarations</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration③">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration④">2.4.9. Setlike declarations</a> <a href="#ref-for-dfn-setlike-declaration⑤">(2)</a> <a href="#ref-for-dfn-setlike-declaration⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration⑦">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration⑧">3.6.9.1. @@iterator</a> <a href="#ref-for-dfn-setlike-declaration⑨">(2)</a> <a href="#ref-for-dfn-setlike-declaration①⓪">(3)</a> <a href="#ref-for-dfn-setlike-declaration①①">(4)</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration①②">3.6.9.2. forEach</a> <a href="#ref-for-dfn-setlike-declaration①③">(2)</a> <a href="#ref-for-dfn-setlike-declaration①④">(3)</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration①⑤">3.6.12. Setlike declarations</a> <a href="#ref-for-dfn-setlike-declaration①⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration①⑦">3.6.12.4. has</a>
    </li><li><a href="#ref-for-dfn-setlike-declaration①⑧">3.6.12.5. add and delete</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-set-entries">
   <b><a href="#dfn-set-entries">#dfn-set-entries</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-set-entries">2.4.9. Setlike declarations</a> <a href="#ref-for-dfn-set-entries①">(2)</a>
    </li><li><a href="#ref-for-dfn-set-entries②">3.6.12. Setlike declarations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-namespace">
   <b><a href="#dfn-namespace">#dfn-namespace</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-namespace">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-namespace①">2.1. Names</a> <a href="#ref-for-dfn-namespace②">(2)</a> <a href="#ref-for-dfn-namespace③">(3)</a>
    </li><li><a href="#ref-for-dfn-namespace④">2.4. Members</a> <a href="#ref-for-dfn-namespace⑤">(2)</a> <a href="#ref-for-dfn-namespace⑥">(3)</a> <a href="#ref-for-dfn-namespace⑦">(4)</a>
    </li><li><a href="#ref-for-dfn-namespace⑧">2.5. Namespaces</a> <a href="#ref-for-dfn-namespace⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-namespace①⓪">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-namespace①①">(2)</a> <a href="#ref-for-dfn-namespace①②">(3)</a> <a href="#ref-for-dfn-namespace①③">(4)</a> <a href="#ref-for-dfn-namespace①④">(5)</a> <a href="#ref-for-dfn-namespace①⑤">(6)</a> <a href="#ref-for-dfn-namespace①⑥">(7)</a> <a href="#ref-for-dfn-namespace①⑦">(8)</a> <a href="#ref-for-dfn-namespace①⑧">(9)</a>
    </li><li><a href="#ref-for-dfn-namespace①⑨">3.3.8. [LegacyNamespace]</a> <a href="#ref-for-dfn-namespace②⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-namespace②①">3.3.11. [LenientSetter]</a>
    </li><li><a href="#ref-for-dfn-namespace②②">3.3.12. [LenientThis]</a>
    </li><li><a href="#ref-for-dfn-namespace②③">3.3.17. [PutForwards]</a>
    </li><li><a href="#ref-for-dfn-namespace②④">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-namespace②⑤">(2)</a> <a href="#ref-for-dfn-namespace②⑥">(3)</a> <a href="#ref-for-dfn-namespace②⑦">(4)</a> <a href="#ref-for-dfn-namespace②⑧">(5)</a> <a href="#ref-for-dfn-namespace②⑨">(6)</a>
    </li><li><a href="#ref-for-dfn-namespace③⓪">3.3.23. [Unforgeable]</a>
    </li><li><a href="#ref-for-dfn-namespace③①">3.3.24. [Unscopable]</a>
    </li><li><a href="#ref-for-dfn-namespace③②">3.6.7. Attributes</a> <a href="#ref-for-dfn-namespace③③">(2)</a> <a href="#ref-for-dfn-namespace③④">(3)</a> <a href="#ref-for-dfn-namespace③⑤">(4)</a> <a href="#ref-for-dfn-namespace③⑥">(5)</a>
    </li><li><a href="#ref-for-dfn-namespace③⑦">3.6.8. Operations</a> <a href="#ref-for-dfn-namespace③⑧">(2)</a> <a href="#ref-for-dfn-namespace③⑨">(3)</a> <a href="#ref-for-dfn-namespace④⓪">(4)</a> <a href="#ref-for-dfn-namespace④①">(5)</a>
    </li><li><a href="#ref-for-dfn-namespace④②">3.11. Namespaces</a>
    </li><li><a href="#ref-for-dfn-namespace④③">3.11.1. Namespace object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-namespace-member">
   <b><a href="#dfn-namespace-member">#dfn-namespace-member</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-namespace-member">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-namespace-member①">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-namespace-member②">2.13. Extended attributes</a>
    </li><li><a href="#ref-for-dfn-namespace-member③">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-namespace-member④">(2)</a> <a href="#ref-for-dfn-namespace-member⑤">(3)</a> <a href="#ref-for-dfn-namespace-member⑥">(4)</a> <a href="#ref-for-dfn-namespace-member⑦">(5)</a> <a href="#ref-for-dfn-namespace-member⑧">(6)</a>
    </li><li><a href="#ref-for-dfn-namespace-member⑨">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-namespace-member①⓪">(2)</a> <a href="#ref-for-dfn-namespace-member①①">(3)</a> <a href="#ref-for-dfn-namespace-member①②">(4)</a> <a href="#ref-for-dfn-namespace-member①③">(5)</a> <a href="#ref-for-dfn-namespace-member①④">(6)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-partial-namespace">
   <b><a href="#dfn-partial-namespace">#dfn-partial-namespace</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-partial-namespace">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-partial-namespace①">2.1. Names</a>
    </li><li><a href="#ref-for-dfn-partial-namespace②">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-partial-namespace③">(2)</a> <a href="#ref-for-dfn-partial-namespace④">(3)</a> <a href="#ref-for-dfn-partial-namespace⑤">(4)</a> <a href="#ref-for-dfn-partial-namespace⑥">(5)</a> <a href="#ref-for-dfn-partial-namespace⑦">(6)</a>
    </li><li><a href="#ref-for-dfn-partial-namespace⑧">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-partial-namespace⑨">(2)</a> <a href="#ref-for-dfn-partial-namespace①⓪">(3)</a> <a href="#ref-for-dfn-partial-namespace①①">(4)</a> <a href="#ref-for-dfn-partial-namespace①②">(5)</a> <a href="#ref-for-dfn-partial-namespace①③">(6)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-dictionary">
   <b><a href="#dfn-dictionary">#dfn-dictionary</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-dictionary">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-dictionary①">2.1. Names</a> <a href="#ref-for-dfn-dictionary②">(2)</a> <a href="#ref-for-dfn-dictionary③">(3)</a>
    </li><li><a href="#ref-for-dfn-dictionary④">2.2. Interfaces</a>
    </li><li><a href="#ref-for-dfn-dictionary⑤">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-dictionary⑥">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-dictionary⑦">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-dfn-dictionary⑧">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-dictionary⑨">2.12.21. Dictionary types</a>
    </li><li><a href="#ref-for-dfn-dictionary①⓪">3.2.15. Dictionary types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-dictionary-member">
   <b><a href="#dfn-dictionary-member">#dfn-dictionary-member</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-dictionary-member">2.1. Names</a> <a href="#ref-for-dfn-dictionary-member①">(2)</a>
    </li><li><a href="#ref-for-dfn-dictionary-member②">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-dictionary-member③">2.6. Dictionaries</a> <a href="#ref-for-dfn-dictionary-member④">(2)</a> <a href="#ref-for-dfn-dictionary-member⑤">(3)</a> <a href="#ref-for-dfn-dictionary-member⑥">(4)</a> <a href="#ref-for-dfn-dictionary-member⑦">(5)</a> <a href="#ref-for-dfn-dictionary-member⑧">(6)</a> <a href="#ref-for-dfn-dictionary-member⑨">(7)</a>
    </li><li><a href="#ref-for-dfn-dictionary-member①⓪">2.12.15. DOMString</a>
    </li><li><a href="#ref-for-dfn-dictionary-member①①">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-dfn-dictionary-member①②">2.12.17. USVString</a>
    </li><li><a href="#ref-for-dfn-dictionary-member①③">2.12.22. Enumeration types</a>
    </li><li><a href="#ref-for-dfn-dictionary-member①④">2.13. Extended attributes</a>
    </li><li><a href="#ref-for-dfn-dictionary-member①⑤">3.2.15. Dictionary types</a> <a href="#ref-for-dfn-dictionary-member①⑥">(2)</a> <a href="#ref-for-dfn-dictionary-member①⑦">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-inherit-dictionary">
   <b><a href="#dfn-inherit-dictionary">#dfn-inherit-dictionary</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-inherit-dictionary">2.6. Dictionaries</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-inherited-dictionaries">
   <b><a href="#dfn-inherited-dictionaries">#dfn-inherited-dictionaries</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-inherited-dictionaries">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-inherited-dictionaries①">2.6. Dictionaries</a> <a href="#ref-for-dfn-inherited-dictionaries②">(2)</a> <a href="#ref-for-dfn-inherited-dictionaries③">(3)</a>
    </li><li><a href="#ref-for-dfn-inherited-dictionaries④">3.2.15. Dictionary types</a> <a href="#ref-for-dfn-inherited-dictionaries⑤">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-present">
   <b><a href="#dfn-present">#dfn-present</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-present">2.4.6.1. Overloading vs. union types</a> <a href="#ref-for-dfn-present①">(2)</a>
    </li><li><a href="#ref-for-dfn-present②">2.6. Dictionaries</a> <a href="#ref-for-dfn-present③">(2)</a>
    </li><li><a href="#ref-for-dfn-present④">3.2.15. Dictionary types</a> <a href="#ref-for-dfn-present⑤">(2)</a> <a href="#ref-for-dfn-present⑥">(3)</a> <a href="#ref-for-dfn-present⑦">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-dictionary-member-default-value">
   <b><a href="#dfn-dictionary-member-default-value">#dfn-dictionary-member-default-value</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-dictionary-member-default-value">2.4.1. Constants</a>
    </li><li><a href="#ref-for-dfn-dictionary-member-default-value①">2.6. Dictionaries</a> <a href="#ref-for-dfn-dictionary-member-default-value②">(2)</a> <a href="#ref-for-dfn-dictionary-member-default-value③">(3)</a> <a href="#ref-for-dfn-dictionary-member-default-value④">(4)</a> <a href="#ref-for-dfn-dictionary-member-default-value⑤">(5)</a> <a href="#ref-for-dfn-dictionary-member-default-value⑥">(6)</a>
    </li><li><a href="#ref-for-dfn-dictionary-member-default-value⑦">2.12.22. Enumeration types</a>
    </li><li><a href="#ref-for-dfn-dictionary-member-default-value⑧">3.2.15. Dictionary types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="required-dictionary-member">
   <b><a href="#required-dictionary-member">#required-dictionary-member</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-required-dictionary-member">2.4.3. Operations</a>
    </li><li><a href="#ref-for-required-dictionary-member①">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-required-dictionary-member②">3.2.15. Dictionary types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-partial-dictionary">
   <b><a href="#dfn-partial-dictionary">#dfn-partial-dictionary</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-partial-dictionary">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-partial-dictionary①">2.1. Names</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-exception">
   <b><a href="#dfn-exception">#dfn-exception</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-exception">3.12.4. Handling exceptions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-exception-error-name">
   <b><a href="#dfn-exception-error-name">#dfn-exception-error-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-exception-error-name">2.7. Exceptions</a> <a href="#ref-for-dfn-exception-error-name①">(2)</a> <a href="#ref-for-dfn-exception-error-name②">(3)</a> <a href="#ref-for-dfn-exception-error-name③">(4)</a> <a href="#ref-for-dfn-exception-error-name④">(5)</a> <a href="#ref-for-dfn-exception-error-name⑤">(6)</a>
    </li><li><a href="#ref-for-dfn-exception-error-name⑥">3.12.3. Creating and throwing exceptions</a> <a href="#ref-for-dfn-exception-error-name⑦">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-simple-exception">
   <b><a href="#dfn-simple-exception">#dfn-simple-exception</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-simple-exception">2.7. Exceptions</a> <a href="#ref-for-dfn-simple-exception①">(2)</a> <a href="#ref-for-dfn-simple-exception②">(3)</a> <a href="#ref-for-dfn-simple-exception③">(4)</a> <a href="#ref-for-dfn-simple-exception④">(5)</a>
    </li><li><a href="#ref-for-dfn-simple-exception⑤">2.12.30. Error</a>
    </li><li><a href="#ref-for-dfn-simple-exception⑥">3.12.2. Exception objects</a>
    </li><li><a href="#ref-for-dfn-simple-exception⑦">3.12.3. Creating and throwing exceptions</a> <a href="#ref-for-dfn-simple-exception⑧">(2)</a> <a href="#ref-for-dfn-simple-exception⑨">(3)</a> <a href="#ref-for-dfn-simple-exception①⓪">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="exceptiondef-rangeerror">
   <b><a href="#exceptiondef-rangeerror">#exceptiondef-rangeerror</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-exceptiondef-rangeerror">2.7.1. Error names</a> <a href="#ref-for-exceptiondef-rangeerror①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="exceptiondef-typeerror">
   <b><a href="#exceptiondef-typeerror">#exceptiondef-typeerror</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-exceptiondef-typeerror">2.4.6.1. Overloading vs. union types</a>
    </li><li><a href="#ref-for-exceptiondef-typeerror①">2.7. Exceptions</a> <a href="#ref-for-exceptiondef-typeerror②">(2)</a>
    </li><li><a href="#ref-for-exceptiondef-typeerror③">2.7.1. Error names</a> <a href="#ref-for-exceptiondef-typeerror④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-create-exception">
   <b><a href="#dfn-create-exception">#dfn-create-exception</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-create-exception">2.7. Exceptions</a> <a href="#ref-for-dfn-create-exception①">(2)</a> <a href="#ref-for-dfn-create-exception②">(3)</a>
    </li><li><a href="#ref-for-dfn-create-exception③">3.12.3. Creating and throwing exceptions</a> <a href="#ref-for-dfn-create-exception④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-throw">
   <b><a href="#dfn-throw">#dfn-throw</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-throw">2.7. Exceptions</a> <a href="#ref-for-dfn-throw①">(2)</a>
    </li><li><a href="#ref-for-dfn-throw②">3.12.3. Creating and throwing exceptions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-error-names-table">
   <b><a href="#dfn-error-names-table">#dfn-error-names-table</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-error-names-table">2.7. Exceptions</a>
    </li><li><a href="#ref-for-dfn-error-names-table①">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-index_size_err">
   <b><a href="#dom-domexception-index_size_err">#dom-domexception-index_size_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-index_size_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-domstring_size_err">
   <b><a href="#dom-domexception-domstring_size_err">#dom-domexception-domstring_size_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-domstring_size_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-hierarchy_request_err">
   <b><a href="#dom-domexception-hierarchy_request_err">#dom-domexception-hierarchy_request_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-hierarchy_request_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-wrong_document_err">
   <b><a href="#dom-domexception-wrong_document_err">#dom-domexception-wrong_document_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-wrong_document_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-invalid_character_err">
   <b><a href="#dom-domexception-invalid_character_err">#dom-domexception-invalid_character_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-invalid_character_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-no_data_allowed_err">
   <b><a href="#dom-domexception-no_data_allowed_err">#dom-domexception-no_data_allowed_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-no_data_allowed_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-no_modification_allowed_err">
   <b><a href="#dom-domexception-no_modification_allowed_err">#dom-domexception-no_modification_allowed_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-no_modification_allowed_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-not_found_err">
   <b><a href="#dom-domexception-not_found_err">#dom-domexception-not_found_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-not_found_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="notsupportederror">
   <b><a href="#notsupportederror">#notsupportederror</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-notsupportederror">2.7.1. Error names</a>
    </li><li><a href="#ref-for-notsupportederror">3.12.3. Creating and throwing exceptions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-not_supported_err">
   <b><a href="#dom-domexception-not_supported_err">#dom-domexception-not_supported_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-not_supported_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-inuse_attribute_err">
   <b><a href="#dom-domexception-inuse_attribute_err">#dom-domexception-inuse_attribute_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-inuse_attribute_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-invalid_state_err">
   <b><a href="#dom-domexception-invalid_state_err">#dom-domexception-invalid_state_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-invalid_state_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="syntaxerror">
   <b><a href="#syntaxerror">#syntaxerror</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-syntaxerror">2.7. Exceptions</a> <a href="#ref-for-syntaxerror①">(2)</a>
    </li><li><a href="#ref-for-syntaxerror②">2.7.1. Error names</a> <a href="#ref-for-syntaxerror③">(2)</a> <a href="#ref-for-syntaxerror④">(3)</a> <a href="#ref-for-syntaxerror⑤">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-syntax_err">
   <b><a href="#dom-domexception-syntax_err">#dom-domexception-syntax_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-syntax_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-invalid_modification_err">
   <b><a href="#dom-domexception-invalid_modification_err">#dom-domexception-invalid_modification_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-invalid_modification_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-namespace_err">
   <b><a href="#dom-domexception-namespace_err">#dom-domexception-namespace_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-namespace_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-invalid_access_err">
   <b><a href="#dom-domexception-invalid_access_err">#dom-domexception-invalid_access_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-invalid_access_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-validation_err">
   <b><a href="#dom-domexception-validation_err">#dom-domexception-validation_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-validation_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-type_mismatch_err">
   <b><a href="#dom-domexception-type_mismatch_err">#dom-domexception-type_mismatch_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-type_mismatch_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-security_err">
   <b><a href="#dom-domexception-security_err">#dom-domexception-security_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-security_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-network_err">
   <b><a href="#dom-domexception-network_err">#dom-domexception-network_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-network_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-abort_err">
   <b><a href="#dom-domexception-abort_err">#dom-domexception-abort_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-abort_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-url_mismatch_err">
   <b><a href="#dom-domexception-url_mismatch_err">#dom-domexception-url_mismatch_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-url_mismatch_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-quota_exceeded_err">
   <b><a href="#dom-domexception-quota_exceeded_err">#dom-domexception-quota_exceeded_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-quota_exceeded_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-timeout_err">
   <b><a href="#dom-domexception-timeout_err">#dom-domexception-timeout_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-timeout_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-invalid_node_type_err">
   <b><a href="#dom-domexception-invalid_node_type_err">#dom-domexception-invalid_node_type_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-invalid_node_type_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-data_clone_err">
   <b><a href="#dom-domexception-data_clone_err">#dom-domexception-data_clone_err</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-data_clone_err">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="notallowederror">
   <b><a href="#notallowederror">#notallowederror</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-notallowederror">2.7. Exceptions</a> <a href="#ref-for-notallowederror①">(2)</a>
    </li><li><a href="#ref-for-notallowederror②">2.7.1. Error names</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-enumeration">
   <b><a href="#dfn-enumeration">#dfn-enumeration</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-enumeration">2.1. Names</a> <a href="#ref-for-dfn-enumeration①">(2)</a> <a href="#ref-for-dfn-enumeration②">(3)</a>
    </li><li><a href="#ref-for-dfn-enumeration③">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-enumeration④">2.4.3. Operations</a> <a href="#ref-for-dfn-enumeration⑤">(2)</a> <a href="#ref-for-dfn-enumeration⑥">(3)</a> <a href="#ref-for-dfn-enumeration⑦">(4)</a>
    </li><li><a href="#ref-for-dfn-enumeration⑧">2.6. Dictionaries</a> <a href="#ref-for-dfn-enumeration⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-enumeration①⓪">2.8. Enumerations</a> <a href="#ref-for-dfn-enumeration①①">(2)</a> <a href="#ref-for-dfn-enumeration①②">(3)</a>
    </li><li><a href="#ref-for-dfn-enumeration①③">2.12.22. Enumeration types</a> <a href="#ref-for-dfn-enumeration①④">(2)</a>
    </li><li><a href="#ref-for-dfn-enumeration①⑤">3.2.16. Enumeration types</a> <a href="#ref-for-dfn-enumeration①⑥">(2)</a> <a href="#ref-for-dfn-enumeration①⑦">(3)</a>
    </li><li><a href="#ref-for-dfn-enumeration①⑧">3.6.7. Attributes</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-enumeration-value">
   <b><a href="#dfn-enumeration-value">#dfn-enumeration-value</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-enumeration-value">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-enumeration-value①">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-enumeration-value②">2.8. Enumerations</a>
    </li><li><a href="#ref-for-dfn-enumeration-value③">2.12.22. Enumeration types</a>
    </li><li><a href="#ref-for-dfn-enumeration-value④">3.2.16. Enumeration types</a> <a href="#ref-for-dfn-enumeration-value⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-enumeration-value⑥">3.6.7. Attributes</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-callback-function">
   <b><a href="#dfn-callback-function">#dfn-callback-function</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-callback-function">2.1. Names</a> <a href="#ref-for-dfn-callback-function①">(2)</a> <a href="#ref-for-dfn-callback-function②">(3)</a>
    </li><li><a href="#ref-for-dfn-callback-function③">2.2. Interfaces</a> <a href="#ref-for-dfn-callback-function④">(2)</a> <a href="#ref-for-dfn-callback-function⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-callback-function⑥">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-callback-function⑦">2.4.3. Operations</a> <a href="#ref-for-dfn-callback-function⑧">(2)</a> <a href="#ref-for-dfn-callback-function⑨">(3)</a>
    </li><li><a href="#ref-for-dfn-callback-function①⓪">2.4.6. Overloading</a> <a href="#ref-for-dfn-callback-function①①">(2)</a> <a href="#ref-for-dfn-callback-function①②">(3)</a> <a href="#ref-for-dfn-callback-function①③">(4)</a>
    </li><li><a href="#ref-for-dfn-callback-function①④">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-callback-function①⑤">2.9. Callback functions</a> <a href="#ref-for-dfn-callback-function①⑥">(2)</a> <a href="#ref-for-dfn-callback-function①⑦">(3)</a>
    </li><li><a href="#ref-for-dfn-callback-function①⑧">2.12.23. Callback function types</a> <a href="#ref-for-dfn-callback-function①⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-callback-function②⓪">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-dfn-callback-function②①">3.2.18. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-callback-function②②">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-callback-function②③">3.3.21. [TreatNonObjectAsNull]</a> <a href="#ref-for-dfn-callback-function②④">(2)</a> <a href="#ref-for-dfn-callback-function②⑤">(3)</a> <a href="#ref-for-dfn-callback-function②⑥">(4)</a> <a href="#ref-for-dfn-callback-function②⑦">(5)</a>
    </li><li><a href="#ref-for-dfn-callback-function②⑧">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-dfn-callback-function②⑨">3.10. Invoking callback functions</a>
    </li><li><a href="#ref-for-dfn-callback-function③⓪">4.5. Function</a>
    </li><li><a href="#ref-for-dfn-callback-function③①">4.6. VoidFunction</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-typedef">
   <b><a href="#dfn-typedef">#dfn-typedef</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-typedef">2. Interface definition language</a>
    </li><li><a href="#ref-for-dfn-typedef①">2.1. Names</a> <a href="#ref-for-dfn-typedef②">(2)</a> <a href="#ref-for-dfn-typedef③">(3)</a> <a href="#ref-for-dfn-typedef④">(4)</a>
    </li><li><a href="#ref-for-dfn-typedef⑤">2.4.1. Constants</a>
    </li><li><a href="#ref-for-dfn-typedef⑥">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-typedef⑦">2.4.3. Operations</a> <a href="#ref-for-dfn-typedef⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-typedef⑨">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-typedef①⓪">2.4.6.1. Overloading vs. union types</a>
    </li><li><a href="#ref-for-dfn-typedef①①">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-typedef①②">2.10. Typedefs</a> <a href="#ref-for-dfn-typedef①③">(2)</a> <a href="#ref-for-dfn-typedef①④">(3)</a>
    </li><li><a href="#ref-for-dfn-typedef①⑤">2.12.29. Annotated types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="type-being-given-a-new-name">
   <b><a href="#type-being-given-a-new-name">#type-being-given-a-new-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-type-being-given-a-new-name">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-type-being-given-a-new-name①">2.12.29. Annotated types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-platform-object">
   <b><a href="#dfn-platform-object">#dfn-platform-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-platform-object">2.2. Interfaces</a>
    </li><li><a href="#ref-for-dfn-platform-object①">2.4.4.2. Indexed properties</a>
    </li><li><a href="#ref-for-dfn-platform-object②">2.4.4.3. Named properties</a>
    </li><li><a href="#ref-for-dfn-platform-object③">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-platform-object④">2.6. Dictionaries</a> <a href="#ref-for-dfn-platform-object⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-platform-object⑥">2.11. Objects implementing interfaces</a> <a href="#ref-for-dfn-platform-object⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-platform-object⑧">2.12.25. Sequence types — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-platform-object⑨">2.12.26. Record types — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-dfn-platform-object①⓪">3. ECMAScript binding</a>
    </li><li><a href="#ref-for-dfn-platform-object①①">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-platform-object①②">3.2. ECMAScript type mapping</a>
    </li><li><a href="#ref-for-dfn-platform-object①③">3.2.2. void</a>
    </li><li><a href="#ref-for-dfn-platform-object①④">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-dfn-platform-object①⑤">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-platform-object①⑥">3.3.18. [Replaceable]</a> <a href="#ref-for-dfn-platform-object①⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-platform-object①⑧">3.4. Security</a>
    </li><li><a href="#ref-for-dfn-platform-object①⑨">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-dfn-platform-object②⓪">3.6.7. Attributes</a> <a href="#ref-for-dfn-platform-object②①">(2)</a> <a href="#ref-for-dfn-platform-object②②">(3)</a> <a href="#ref-for-dfn-platform-object②③">(4)</a>
    </li><li><a href="#ref-for-dfn-platform-object②④">3.6.8. Operations</a> <a href="#ref-for-dfn-platform-object②⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-platform-object②⑥">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-platform-object②⑦">3.6.9.1. @@iterator</a> <a href="#ref-for-dfn-platform-object②⑧">(2)</a> <a href="#ref-for-dfn-platform-object②⑨">(3)</a> <a href="#ref-for-dfn-platform-object③⓪">(4)</a>
    </li><li><a href="#ref-for-dfn-platform-object③①">3.6.9.2. forEach</a> <a href="#ref-for-dfn-platform-object③②">(2)</a>
    </li><li><a href="#ref-for-dfn-platform-object③③">3.6.10.2. keys</a> <a href="#ref-for-dfn-platform-object③④">(2)</a>
    </li><li><a href="#ref-for-dfn-platform-object③⑤">3.6.10.3. values</a> <a href="#ref-for-dfn-platform-object③⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-platform-object③⑦">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-dfn-platform-object③⑧">3.6.11. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-platform-object③⑨">3.6.11.1. size</a>
    </li><li><a href="#ref-for-dfn-platform-object④⓪">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-dfn-platform-object④①">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-dfn-platform-object④②">3.6.11.7. set</a>
    </li><li><a href="#ref-for-dfn-platform-object④③">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-platform-object④④">3.6.12.1. size</a>
    </li><li><a href="#ref-for-dfn-platform-object④⑤">3.6.12.4. has</a>
    </li><li><a href="#ref-for-dfn-platform-object④⑥">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-dfn-platform-object④⑦">3.7. Platform objects implementing interfaces</a> <a href="#ref-for-dfn-platform-object④⑧">(2)</a> <a href="#ref-for-dfn-platform-object④⑨">(3)</a> <a href="#ref-for-dfn-platform-object⑤⓪">(4)</a> <a href="#ref-for-dfn-platform-object⑤①">(5)</a> <a href="#ref-for-dfn-platform-object⑤②">(6)</a> <a href="#ref-for-dfn-platform-object⑤③">(7)</a> <a href="#ref-for-dfn-platform-object⑤④">(8)</a>
    </li><li><a href="#ref-for-dfn-platform-object⑤⑤">3.7.1. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-dfn-platform-object⑤⑥">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-dfn-platform-object⑤⑦">3.12.2. Exception objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-legacy-platform-object">
   <b><a href="#dfn-legacy-platform-object">#dfn-legacy-platform-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-legacy-platform-object">2.4.4.2. Indexed properties</a>
    </li><li><a href="#ref-for-dfn-legacy-platform-object①">3.3.16. [OverrideBuiltins]</a>
    </li><li><a href="#ref-for-dfn-legacy-platform-object②">3.8. Legacy platform objects</a> <a href="#ref-for-dfn-legacy-platform-object③">(2)</a>
    </li><li><a href="#ref-for-dfn-legacy-platform-object④">3.8.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-legacy-platform-object⑤">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-dfn-legacy-platform-object⑥">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-legacy-platform-object⑦">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-legacy-platform-object⑧">3.8.5. [[PreventExtensions]]</a> <a href="#ref-for-dfn-legacy-platform-object⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-legacy-platform-object①⓪">3.8.6. [[OwnPropertyKeys]]</a> <a href="#ref-for-dfn-legacy-platform-object①①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-user-object">
   <b><a href="#dfn-user-object">#dfn-user-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-user-object">2.2. Interfaces</a> <a href="#ref-for-dfn-user-object①">(2)</a> <a href="#ref-for-dfn-user-object②">(3)</a>
    </li><li><a href="#ref-for-dfn-user-object③">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-user-object④">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-user-object⑤">2.11. Objects implementing interfaces</a>
    </li><li><a href="#ref-for-dfn-user-object⑥">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-dfn-user-object⑦">3.9. User objects implementing callback interfaces</a>
    </li><li><a href="#ref-for-dfn-user-object⑧">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-integer-type">
   <b><a href="#dfn-integer-type">#dfn-integer-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-integer-type">2.4.4.2. Indexed properties</a>
    </li><li><a href="#ref-for-dfn-integer-type①">2.12. Types</a>
    </li><li><a href="#ref-for-dfn-integer-type②">3.3.2. [Clamp]</a> <a href="#ref-for-dfn-integer-type③">(2)</a>
    </li><li><a href="#ref-for-dfn-integer-type④">3.3.5. [EnforceRange]</a> <a href="#ref-for-dfn-integer-type⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-integer-type⑥">3.6.9.1. @@iterator</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-numeric-type">
   <b><a href="#dfn-numeric-type">#dfn-numeric-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-numeric-type">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-numeric-type①">2.4.6. Overloading</a> <a href="#ref-for-dfn-numeric-type②">(2)</a> <a href="#ref-for-dfn-numeric-type③">(3)</a> <a href="#ref-for-dfn-numeric-type④">(4)</a>
    </li><li><a href="#ref-for-dfn-numeric-type⑤">2.12. Types</a>
    </li><li><a href="#ref-for-dfn-numeric-type⑥">3.2.22. Union types</a> <a href="#ref-for-dfn-numeric-type⑦">(2)</a> <a href="#ref-for-dfn-numeric-type⑧">(3)</a> <a href="#ref-for-dfn-numeric-type⑨">(4)</a>
    </li><li><a href="#ref-for-dfn-numeric-type①⓪">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-numeric-type①①">(2)</a> <a href="#ref-for-dfn-numeric-type①②">(3)</a> <a href="#ref-for-dfn-numeric-type①③">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-primitive-type">
   <b><a href="#dfn-primitive-type">#dfn-primitive-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-primitive-type">2.4.1. Constants</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-string-type">
   <b><a href="#dfn-string-type">#dfn-string-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-string-type">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-string-type①">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-string-type②">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-string-type③">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-string-type④">3.5. Overload resolution algorithm</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-exception-type">
   <b><a href="#dfn-exception-type">#dfn-exception-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-exception-type">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-exception-type①">2.12. Types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-typed-array-type">
   <b><a href="#dfn-typed-array-type">#dfn-typed-array-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-typed-array-type">2.12. Types</a>
    </li><li><a href="#ref-for-dfn-typed-array-type①">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-typed-array-type②">3.5. Overload resolution algorithm</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-buffer-source-type">
   <b><a href="#dfn-buffer-source-type">#dfn-buffer-source-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-buffer-source-type">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-buffer-source-type①">2.12.31. Buffer source types</a>
    </li><li><a href="#ref-for-dfn-buffer-source-type②">3.2.25. Buffer source types</a> <a href="#ref-for-dfn-buffer-source-type③">(2)</a>
    </li><li><a href="#ref-for-dfn-buffer-source-type④">3.3.1. [AllowShared]</a> <a href="#ref-for-dfn-buffer-source-type⑤">(2)</a> <a href="#ref-for-dfn-buffer-source-type⑥">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-type-name">
   <b><a href="#dfn-type-name">#dfn-type-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-type-name">2.12.1. any</a>
    </li><li><a href="#ref-for-dfn-type-name①">2.12.2. boolean</a>
    </li><li><a href="#ref-for-dfn-type-name②">2.12.3. byte</a>
    </li><li><a href="#ref-for-dfn-type-name③">2.12.4. octet</a>
    </li><li><a href="#ref-for-dfn-type-name④">2.12.5. short</a>
    </li><li><a href="#ref-for-dfn-type-name⑤">2.12.6. unsigned short</a>
    </li><li><a href="#ref-for-dfn-type-name⑥">2.12.7. long</a>
    </li><li><a href="#ref-for-dfn-type-name⑦">2.12.8. unsigned long</a>
    </li><li><a href="#ref-for-dfn-type-name⑧">2.12.9. long long</a>
    </li><li><a href="#ref-for-dfn-type-name⑨">2.12.10. unsigned long long</a>
    </li><li><a href="#ref-for-dfn-type-name①⓪">2.12.11. float</a>
    </li><li><a href="#ref-for-dfn-type-name①①">2.12.12. unrestricted float</a>
    </li><li><a href="#ref-for-dfn-type-name①②">2.12.13. double</a>
    </li><li><a href="#ref-for-dfn-type-name①③">2.12.14. unrestricted double</a>
    </li><li><a href="#ref-for-dfn-type-name①④">2.12.15. DOMString</a>
    </li><li><a href="#ref-for-dfn-type-name①⑤">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-dfn-type-name①⑥">2.12.17. USVString</a>
    </li><li><a href="#ref-for-dfn-type-name①⑦">2.12.18. object</a>
    </li><li><a href="#ref-for-dfn-type-name①⑧">2.12.19. symbol</a>
    </li><li><a href="#ref-for-dfn-type-name①⑨">2.12.20. Interface types</a>
    </li><li><a href="#ref-for-dfn-type-name②⓪">2.12.21. Dictionary types</a>
    </li><li><a href="#ref-for-dfn-type-name②①">2.12.22. Enumeration types</a>
    </li><li><a href="#ref-for-dfn-type-name②②">2.12.23. Callback function types</a>
    </li><li><a href="#ref-for-dfn-type-name②③">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-type-name②④">2.12.25. Sequence types — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-type-name②⑤">2.12.26. Record types — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-dfn-type-name②⑥">2.12.27. Promise types — Promise&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-type-name②⑦">2.12.28. Union types</a>
    </li><li><a href="#ref-for-dfn-type-name②⑧">2.12.29. Annotated types</a> <a href="#ref-for-dfn-type-name②⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-type-name③⓪">2.12.30. Error</a>
    </li><li><a href="#ref-for-dfn-type-name③①">2.12.31. Buffer source types</a>
    </li><li><a href="#ref-for-dfn-type-name③②">2.12.32. Frozen array types — FrozenArray&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-type-name③③">3.2.25. Buffer source types</a> <a href="#ref-for-dfn-type-name③④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-any">
   <b><a href="#idl-any">#idl-any</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-any">2.4.6.1. Overloading vs. union types</a>
    </li><li><a href="#ref-for-idl-any①">2.12.1. any</a> <a href="#ref-for-idl-any②">(2)</a> <a href="#ref-for-idl-any③">(3)</a> <a href="#ref-for-idl-any④">(4)</a> <a href="#ref-for-idl-any⑤">(5)</a>
    </li><li><a href="#ref-for-idl-any⑥">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-idl-any⑦">2.12.28. Union types</a> <a href="#ref-for-idl-any⑧">(2)</a>
    </li><li><a href="#ref-for-idl-any⑨">3.2.1. any</a> <a href="#ref-for-idl-any①⓪">(2)</a> <a href="#ref-for-idl-any①①">(3)</a> <a href="#ref-for-idl-any①②">(4)</a>
    </li><li><a href="#ref-for-idl-any①③">3.2.21. Promise types — Promise&lt;T&gt;</a>
    </li><li><a href="#ref-for-idl-any①④">3.5. Overload resolution algorithm</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-specific-type">
   <b><a href="#dfn-specific-type">#dfn-specific-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-specific-type">2.12.1. any</a>
    </li><li><a href="#ref-for-dfn-specific-type①">2.12.28. Union types</a>
    </li><li><a href="#ref-for-dfn-specific-type②">3.2.1. any</a>
    </li><li><a href="#ref-for-dfn-specific-type③">3.2.22. Union types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-boolean">
   <b><a href="#idl-boolean">#idl-boolean</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-boolean">2.4.1. Constants</a>
    </li><li><a href="#ref-for-idl-boolean①">2.4.3. Operations</a>
    </li><li><a href="#ref-for-idl-boolean②">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-idl-boolean③">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-idl-boolean④">2.12. Types</a>
    </li><li><a href="#ref-for-idl-boolean⑤">2.12.2. boolean</a> <a href="#ref-for-idl-boolean⑥">(2)</a> <a href="#ref-for-idl-boolean⑦">(3)</a>
    </li><li><a href="#ref-for-idl-boolean⑧">3.2.1. any</a>
    </li><li><a href="#ref-for-idl-boolean⑨">3.2.3. boolean</a> <a href="#ref-for-idl-boolean①⓪">(2)</a> <a href="#ref-for-idl-boolean①①">(3)</a> <a href="#ref-for-idl-boolean①②">(4)</a>
    </li><li><a href="#ref-for-idl-boolean①③">3.2.22. Union types</a> <a href="#ref-for-idl-boolean①④">(2)</a> <a href="#ref-for-idl-boolean①⑤">(3)</a> <a href="#ref-for-idl-boolean①⑥">(4)</a>
    </li><li><a href="#ref-for-idl-boolean①⑦">3.5. Overload resolution algorithm</a> <a href="#ref-for-idl-boolean①⑧">(2)</a> <a href="#ref-for-idl-boolean①⑨">(3)</a> <a href="#ref-for-idl-boolean②⓪">(4)</a>
    </li><li><a href="#ref-for-idl-boolean②①">3.8.4. [[Delete]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-byte">
   <b><a href="#idl-byte">#idl-byte</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-byte">2.12. Types</a>
    </li><li><a href="#ref-for-idl-byte①">2.12.3. byte</a> <a href="#ref-for-idl-byte②">(2)</a> <a href="#ref-for-idl-byte③">(3)</a>
    </li><li><a href="#ref-for-idl-byte④">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-idl-byte⑤">3.2.4.1. byte</a> <a href="#ref-for-idl-byte⑥">(2)</a> <a href="#ref-for-idl-byte⑦">(3)</a> <a href="#ref-for-idl-byte⑧">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-octet">
   <b><a href="#idl-octet">#idl-octet</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-octet">2.12. Types</a>
    </li><li><a href="#ref-for-idl-octet①">2.12.4. octet</a> <a href="#ref-for-idl-octet②">(2)</a> <a href="#ref-for-idl-octet③">(3)</a>
    </li><li><a href="#ref-for-idl-octet④">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-idl-octet⑤">3.2.4.2. octet</a> <a href="#ref-for-idl-octet⑥">(2)</a> <a href="#ref-for-idl-octet⑦">(3)</a> <a href="#ref-for-idl-octet⑧">(4)</a>
    </li><li><a href="#ref-for-idl-octet⑨">3.3.2. [Clamp]</a> <a href="#ref-for-idl-octet①⓪">(2)</a>
    </li><li><a href="#ref-for-idl-octet①①">3.3.5. [EnforceRange]</a> <a href="#ref-for-idl-octet①②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-short">
   <b><a href="#idl-short">#idl-short</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-short">2.12. Types</a>
    </li><li><a href="#ref-for-idl-short①">2.12.5. short</a> <a href="#ref-for-idl-short②">(2)</a> <a href="#ref-for-idl-short③">(3)</a>
    </li><li><a href="#ref-for-idl-short④">3.2.4.3. short</a> <a href="#ref-for-idl-short⑤">(2)</a> <a href="#ref-for-idl-short⑥">(3)</a> <a href="#ref-for-idl-short⑦">(4)</a>
    </li><li><a href="#ref-for-idl-short⑧">3.2.4.4. unsigned short</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-unsigned-short">
   <b><a href="#idl-unsigned-short">#idl-unsigned-short</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-unsigned-short">2.12. Types</a>
    </li><li><a href="#ref-for-idl-unsigned-short①">2.12.6. unsigned short</a> <a href="#ref-for-idl-unsigned-short②">(2)</a> <a href="#ref-for-idl-unsigned-short③">(3)</a>
    </li><li><a href="#ref-for-idl-unsigned-short④">2.12.15. DOMString</a>
    </li><li><a href="#ref-for-idl-unsigned-short⑤">3.2.4.4. unsigned short</a> <a href="#ref-for-idl-unsigned-short⑥">(2)</a> <a href="#ref-for-idl-unsigned-short⑦">(3)</a>
    </li><li><a href="#ref-for-idl-unsigned-short⑧">4.3. DOMException</a> <a href="#ref-for-idl-unsigned-short⑨">(2)</a> <a href="#ref-for-idl-unsigned-short①⓪">(3)</a> <a href="#ref-for-idl-unsigned-short①①">(4)</a> <a href="#ref-for-idl-unsigned-short①②">(5)</a> <a href="#ref-for-idl-unsigned-short①③">(6)</a> <a href="#ref-for-idl-unsigned-short①④">(7)</a> <a href="#ref-for-idl-unsigned-short①⑤">(8)</a> <a href="#ref-for-idl-unsigned-short①⑥">(9)</a> <a href="#ref-for-idl-unsigned-short①⑦">(10)</a> <a href="#ref-for-idl-unsigned-short①⑧">(11)</a> <a href="#ref-for-idl-unsigned-short①⑨">(12)</a> <a href="#ref-for-idl-unsigned-short②⓪">(13)</a> <a href="#ref-for-idl-unsigned-short②①">(14)</a> <a href="#ref-for-idl-unsigned-short②②">(15)</a> <a href="#ref-for-idl-unsigned-short②③">(16)</a> <a href="#ref-for-idl-unsigned-short②④">(17)</a> <a href="#ref-for-idl-unsigned-short②⑤">(18)</a> <a href="#ref-for-idl-unsigned-short②⑥">(19)</a> <a href="#ref-for-idl-unsigned-short②⑦">(20)</a> <a href="#ref-for-idl-unsigned-short②⑧">(21)</a> <a href="#ref-for-idl-unsigned-short②⑨">(22)</a> <a href="#ref-for-idl-unsigned-short③⓪">(23)</a> <a href="#ref-for-idl-unsigned-short③①">(24)</a> <a href="#ref-for-idl-unsigned-short③②">(25)</a> <a href="#ref-for-idl-unsigned-short③③">(26)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-long">
   <b><a href="#idl-long">#idl-long</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-long">2.4.6. Overloading</a> <a href="#ref-for-idl-long①">(2)</a> <a href="#ref-for-idl-long②">(3)</a> <a href="#ref-for-idl-long③">(4)</a> <a href="#ref-for-idl-long④">(5)</a> <a href="#ref-for-idl-long⑤">(6)</a>
    </li><li><a href="#ref-for-idl-long⑥">2.4.6.1. Overloading vs. union types</a>
    </li><li><a href="#ref-for-idl-long⑦">2.12. Types</a>
    </li><li><a href="#ref-for-idl-long⑧">2.12.1. any</a>
    </li><li><a href="#ref-for-idl-long⑨">2.12.7. long</a> <a href="#ref-for-idl-long①⓪">(2)</a> <a href="#ref-for-idl-long①①">(3)</a>
    </li><li><a href="#ref-for-idl-long①②">2.12.29. Annotated types</a>
    </li><li><a href="#ref-for-idl-long①③">3.2.4.5. long</a> <a href="#ref-for-idl-long①④">(2)</a> <a href="#ref-for-idl-long①⑤">(3)</a> <a href="#ref-for-idl-long①⑥">(4)</a>
    </li><li><a href="#ref-for-idl-long①⑦">3.2.4.6. unsigned long</a>
    </li><li><a href="#ref-for-idl-long①⑧">3.2.4.7. long long</a>
    </li><li><a href="#ref-for-idl-long①⑨">3.2.4.8. unsigned long long</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-unsigned-long">
   <b><a href="#idl-unsigned-long">#idl-unsigned-long</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-unsigned-long">1. Introduction</a>
    </li><li><a href="#ref-for-idl-unsigned-long①">2.4.4. Special operations</a>
    </li><li><a href="#ref-for-idl-unsigned-long②">2.4.4.2. Indexed properties</a> <a href="#ref-for-idl-unsigned-long③">(2)</a>
    </li><li><a href="#ref-for-idl-unsigned-long④">2.12. Types</a>
    </li><li><a href="#ref-for-idl-unsigned-long⑤">2.12.1. any</a>
    </li><li><a href="#ref-for-idl-unsigned-long⑥">2.12.8. unsigned long</a> <a href="#ref-for-idl-unsigned-long⑦">(2)</a> <a href="#ref-for-idl-unsigned-long⑧">(3)</a>
    </li><li><a href="#ref-for-idl-unsigned-long⑨">3.2.4.6. unsigned long</a> <a href="#ref-for-idl-unsigned-long①⓪">(2)</a> <a href="#ref-for-idl-unsigned-long①①">(3)</a>
    </li><li><a href="#ref-for-idl-unsigned-long①②">Document conventions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-long-long">
   <b><a href="#idl-long-long">#idl-long-long</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-long-long">2.12. Types</a>
    </li><li><a href="#ref-for-idl-long-long①">2.12.9. long long</a> <a href="#ref-for-idl-long-long②">(2)</a> <a href="#ref-for-idl-long-long③">(3)</a>
    </li><li><a href="#ref-for-idl-long-long④">3.2.4.7. long long</a> <a href="#ref-for-idl-long-long⑤">(2)</a> <a href="#ref-for-idl-long-long⑥">(3)</a> <a href="#ref-for-idl-long-long⑦">(4)</a> <a href="#ref-for-idl-long-long⑧">(5)</a>
    </li><li><a href="#ref-for-idl-long-long⑨">3.2.4.9. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-unsigned-long-long">
   <b><a href="#idl-unsigned-long-long">#idl-unsigned-long-long</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-unsigned-long-long">2.12. Types</a>
    </li><li><a href="#ref-for-idl-unsigned-long-long①">2.12.10. unsigned long long</a> <a href="#ref-for-idl-unsigned-long-long②">(2)</a> <a href="#ref-for-idl-unsigned-long-long③">(3)</a>
    </li><li><a href="#ref-for-idl-unsigned-long-long④">3.2.4.8. unsigned long long</a> <a href="#ref-for-idl-unsigned-long-long⑤">(2)</a> <a href="#ref-for-idl-unsigned-long-long⑥">(3)</a> <a href="#ref-for-idl-unsigned-long-long⑦">(4)</a> <a href="#ref-for-idl-unsigned-long-long⑧">(5)</a>
    </li><li><a href="#ref-for-idl-unsigned-long-long⑨">4.4. DOMTimeStamp</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-float">
   <b><a href="#idl-float">#idl-float</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-float">2.4.1. Constants</a> <a href="#ref-for-idl-float①">(2)</a>
    </li><li><a href="#ref-for-idl-float②">2.12. Types</a>
    </li><li><a href="#ref-for-idl-float③">2.12.11. float</a> <a href="#ref-for-idl-float④">(2)</a> <a href="#ref-for-idl-float⑤">(3)</a> <a href="#ref-for-idl-float⑥">(4)</a>
    </li><li><a href="#ref-for-idl-float⑦">3.2.5. float</a> <a href="#ref-for-idl-float⑧">(2)</a> <a href="#ref-for-idl-float⑨">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-unrestricted-float">
   <b><a href="#idl-unrestricted-float">#idl-unrestricted-float</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-unrestricted-float">2.4.1. Constants</a> <a href="#ref-for-idl-unrestricted-float①">(2)</a> <a href="#ref-for-idl-unrestricted-float②">(3)</a> <a href="#ref-for-idl-unrestricted-float③">(4)</a>
    </li><li><a href="#ref-for-idl-unrestricted-float④">2.12. Types</a>
    </li><li><a href="#ref-for-idl-unrestricted-float⑤">2.12.12. unrestricted float</a> <a href="#ref-for-idl-unrestricted-float⑥">(2)</a> <a href="#ref-for-idl-unrestricted-float⑦">(3)</a>
    </li><li><a href="#ref-for-idl-unrestricted-float⑧">3.2.6. unrestricted float</a> <a href="#ref-for-idl-unrestricted-float⑨">(2)</a> <a href="#ref-for-idl-unrestricted-float①⓪">(3)</a> <a href="#ref-for-idl-unrestricted-float①①">(4)</a> <a href="#ref-for-idl-unrestricted-float①②">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-double">
   <b><a href="#idl-double">#idl-double</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-double">2.4.1. Constants</a> <a href="#ref-for-idl-double①">(2)</a>
    </li><li><a href="#ref-for-idl-double②">2.4.6. Overloading</a> <a href="#ref-for-idl-double③">(2)</a> <a href="#ref-for-idl-double④">(3)</a>
    </li><li><a href="#ref-for-idl-double⑤">2.12. Types</a>
    </li><li><a href="#ref-for-idl-double⑥">2.12.11. float</a> <a href="#ref-for-idl-double⑦">(2)</a>
    </li><li><a href="#ref-for-idl-double⑧">2.12.13. double</a> <a href="#ref-for-idl-double⑨">(2)</a> <a href="#ref-for-idl-double①⓪">(3)</a>
    </li><li><a href="#ref-for-idl-double①①">3.2.7. double</a> <a href="#ref-for-idl-double①②">(2)</a> <a href="#ref-for-idl-double①③">(3)</a> <a href="#ref-for-idl-double①④">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-unrestricted-double">
   <b><a href="#idl-unrestricted-double">#idl-unrestricted-double</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-unrestricted-double">2.4.1. Constants</a> <a href="#ref-for-idl-unrestricted-double①">(2)</a> <a href="#ref-for-idl-unrestricted-double②">(3)</a> <a href="#ref-for-idl-unrestricted-double③">(4)</a>
    </li><li><a href="#ref-for-idl-unrestricted-double④">2.12. Types</a>
    </li><li><a href="#ref-for-idl-unrestricted-double⑤">2.12.14. unrestricted double</a> <a href="#ref-for-idl-unrestricted-double⑥">(2)</a> <a href="#ref-for-idl-unrestricted-double⑦">(3)</a>
    </li><li><a href="#ref-for-idl-unrestricted-double⑧">3.2.1. any</a>
    </li><li><a href="#ref-for-idl-unrestricted-double⑨">3.2.8. unrestricted double</a> <a href="#ref-for-idl-unrestricted-double①⓪">(2)</a> <a href="#ref-for-idl-unrestricted-double①①">(3)</a> <a href="#ref-for-idl-unrestricted-double①②">(4)</a> <a href="#ref-for-idl-unrestricted-double①③">(5)</a> <a href="#ref-for-idl-unrestricted-double①④">(6)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-DOMString">
   <b><a href="#idl-DOMString">#idl-DOMString</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-DOMString">2.4.3. Operations</a>
    </li><li><a href="#ref-for-idl-DOMString①">2.4.4. Special operations</a> <a href="#ref-for-idl-DOMString②">(2)</a>
    </li><li><a href="#ref-for-idl-DOMString③">2.4.4.1. Stringifiers</a> <a href="#ref-for-idl-DOMString④">(2)</a>
    </li><li><a href="#ref-for-idl-DOMString⑤">2.4.4.3. Named properties</a> <a href="#ref-for-idl-DOMString⑥">(2)</a>
    </li><li><a href="#ref-for-idl-DOMString⑦">2.4.6. Overloading</a> <a href="#ref-for-idl-DOMString⑧">(2)</a> <a href="#ref-for-idl-DOMString⑨">(3)</a> <a href="#ref-for-idl-DOMString①⓪">(4)</a> <a href="#ref-for-idl-DOMString①①">(5)</a> <a href="#ref-for-idl-DOMString①②">(6)</a> <a href="#ref-for-idl-DOMString①③">(7)</a> <a href="#ref-for-idl-DOMString①④">(8)</a>
    </li><li><a href="#ref-for-idl-DOMString①⑤">2.4.6.1. Overloading vs. union types</a>
    </li><li><a href="#ref-for-idl-DOMString①⑥">2.7. Exceptions</a>
    </li><li><a href="#ref-for-idl-DOMString①⑦">2.8. Enumerations</a>
    </li><li><a href="#ref-for-idl-DOMString①⑧">2.12. Types</a>
    </li><li><a href="#ref-for-idl-DOMString①⑨">2.12.15. DOMString</a> <a href="#ref-for-idl-DOMString②⓪">(2)</a> <a href="#ref-for-idl-DOMString②①">(3)</a> <a href="#ref-for-idl-DOMString②②">(4)</a> <a href="#ref-for-idl-DOMString②③">(5)</a> <a href="#ref-for-idl-DOMString②④">(6)</a> <a href="#ref-for-idl-DOMString②⑤">(7)</a> <a href="#ref-for-idl-DOMString②⑥">(8)</a> <a href="#ref-for-idl-DOMString②⑦">(9)</a> <a href="#ref-for-idl-DOMString②⑧">(10)</a> <a href="#ref-for-idl-DOMString②⑨">(11)</a>
    </li><li><a href="#ref-for-idl-DOMString③⓪">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-idl-DOMString③①">2.12.17. USVString</a> <a href="#ref-for-idl-DOMString③②">(2)</a>
    </li><li><a href="#ref-for-idl-DOMString③③">2.12.22. Enumeration types</a> <a href="#ref-for-idl-DOMString③④">(2)</a>
    </li><li><a href="#ref-for-idl-DOMString③⑤">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-idl-DOMString③⑥">2.12.26. Record types — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-idl-DOMString③⑦">3.2.1. any</a>
    </li><li><a href="#ref-for-idl-DOMString③⑧">3.2.9. DOMString</a> <a href="#ref-for-idl-DOMString③⑨">(2)</a> <a href="#ref-for-idl-DOMString④⓪">(3)</a> <a href="#ref-for-idl-DOMString④①">(4)</a> <a href="#ref-for-idl-DOMString④②">(5)</a>
    </li><li><a href="#ref-for-idl-DOMString④③">3.2.11. USVString</a>
    </li><li><a href="#ref-for-idl-DOMString④④">3.3.22. [TreatNullAs]</a> <a href="#ref-for-idl-DOMString④⑤">(2)</a>
    </li><li><a href="#ref-for-idl-DOMString④⑥">4.3. DOMException</a> <a href="#ref-for-idl-DOMString④⑦">(2)</a> <a href="#ref-for-idl-DOMString④⑧">(3)</a> <a href="#ref-for-idl-DOMString④⑨">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-obtain-unicode">
   <b><a href="#dfn-obtain-unicode">#dfn-obtain-unicode</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-obtain-unicode">3.2.11. USVString</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-ByteString">
   <b><a href="#idl-ByteString">#idl-ByteString</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-ByteString">2.4.3. Operations</a>
    </li><li><a href="#ref-for-idl-ByteString①">2.12. Types</a>
    </li><li><a href="#ref-for-idl-ByteString②">2.12.16. ByteString</a> <a href="#ref-for-idl-ByteString③">(2)</a> <a href="#ref-for-idl-ByteString④">(3)</a> <a href="#ref-for-idl-ByteString⑤">(4)</a> <a href="#ref-for-idl-ByteString⑥">(5)</a> <a href="#ref-for-idl-ByteString⑦">(6)</a>
    </li><li><a href="#ref-for-idl-ByteString⑧">2.12.26. Record types — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-idl-ByteString⑨">3.2.10. ByteString</a> <a href="#ref-for-idl-ByteString①⓪">(2)</a> <a href="#ref-for-idl-ByteString①①">(3)</a> <a href="#ref-for-idl-ByteString①②">(4)</a> <a href="#ref-for-idl-ByteString①③">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-USVString">
   <b><a href="#idl-USVString">#idl-USVString</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-USVString">2.4.3. Operations</a>
    </li><li><a href="#ref-for-idl-USVString①">2.4.4.1. Stringifiers</a>
    </li><li><a href="#ref-for-idl-USVString②">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-idl-USVString③">2.12. Types</a>
    </li><li><a href="#ref-for-idl-USVString④">2.12.17. USVString</a> <a href="#ref-for-idl-USVString⑤">(2)</a> <a href="#ref-for-idl-USVString⑥">(3)</a> <a href="#ref-for-idl-USVString⑦">(4)</a> <a href="#ref-for-idl-USVString⑧">(5)</a>
    </li><li><a href="#ref-for-idl-USVString⑨">2.12.26. Record types — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-idl-USVString①⓪">3.2.11. USVString</a> <a href="#ref-for-idl-USVString①①">(2)</a> <a href="#ref-for-idl-USVString①②">(3)</a> <a href="#ref-for-idl-USVString①③">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-object">
   <b><a href="#idl-object">#idl-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-object">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-idl-object①">2.12. Types</a>
    </li><li><a href="#ref-for-idl-object②">2.12.18. object</a> <a href="#ref-for-idl-object③">(2)</a> <a href="#ref-for-idl-object④">(3)</a>
    </li><li><a href="#ref-for-idl-object⑤">2.12.19. symbol</a>
    </li><li><a href="#ref-for-idl-object⑥">3.2.1. any</a> <a href="#ref-for-idl-object⑦">(2)</a> <a href="#ref-for-idl-object⑧">(3)</a> <a href="#ref-for-idl-object⑨">(4)</a>
    </li><li><a href="#ref-for-idl-object①⓪">3.2.12. object</a> <a href="#ref-for-idl-object①①">(2)</a> <a href="#ref-for-idl-object①②">(3)</a> <a href="#ref-for-idl-object①③">(4)</a> <a href="#ref-for-idl-object①④">(5)</a>
    </li><li><a href="#ref-for-idl-object①⑤">3.2.22. Union types</a> <a href="#ref-for-idl-object①⑥">(2)</a> <a href="#ref-for-idl-object①⑦">(3)</a> <a href="#ref-for-idl-object①⑧">(4)</a> <a href="#ref-for-idl-object①⑨">(5)</a> <a href="#ref-for-idl-object②⓪">(6)</a> <a href="#ref-for-idl-object②①">(7)</a> <a href="#ref-for-idl-object②②">(8)</a> <a href="#ref-for-idl-object②③">(9)</a>
    </li><li><a href="#ref-for-idl-object②④">3.3.19. [SameObject]</a>
    </li><li><a href="#ref-for-idl-object②⑤">3.5. Overload resolution algorithm</a> <a href="#ref-for-idl-object②⑥">(2)</a> <a href="#ref-for-idl-object②⑦">(3)</a> <a href="#ref-for-idl-object②⑧">(4)</a> <a href="#ref-for-idl-object②⑨">(5)</a> <a href="#ref-for-idl-object③⓪">(6)</a> <a href="#ref-for-idl-object③①">(7)</a> <a href="#ref-for-idl-object③②">(8)</a>
    </li><li><a href="#ref-for-idl-object③③">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-symbol">
   <b><a href="#idl-symbol">#idl-symbol</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-symbol">2.12.19. symbol</a> <a href="#ref-for-idl-symbol①">(2)</a> <a href="#ref-for-idl-symbol②">(3)</a>
    </li><li><a href="#ref-for-idl-symbol③">3.2.1. any</a>
    </li><li><a href="#ref-for-idl-symbol④">3.2.13. symbol</a> <a href="#ref-for-idl-symbol⑤">(2)</a> <a href="#ref-for-idl-symbol⑥">(3)</a> <a href="#ref-for-idl-symbol⑦">(4)</a> <a href="#ref-for-idl-symbol⑧">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-interface">
   <b><a href="#idl-interface">#idl-interface</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-interface">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-idl-interface①">2.4.6. Overloading</a> <a href="#ref-for-idl-interface②">(2)</a>
    </li><li><a href="#ref-for-idl-interface③">2.4.6.1. Overloading vs. union types</a>
    </li><li><a href="#ref-for-idl-interface④">2.12. Types</a>
    </li><li><a href="#ref-for-idl-interface⑤">2.12.23. Callback function types</a>
    </li><li><a href="#ref-for-idl-interface⑥">3.2.14. Interface types</a> <a href="#ref-for-idl-interface⑦">(2)</a> <a href="#ref-for-idl-interface⑧">(3)</a> <a href="#ref-for-idl-interface⑨">(4)</a> <a href="#ref-for-idl-interface①⓪">(5)</a> <a href="#ref-for-idl-interface①①">(6)</a>
    </li><li><a href="#ref-for-idl-interface①②">3.2.22. Union types</a>
    </li><li><a href="#ref-for-idl-interface①③">3.3.14. [NewObject]</a>
    </li><li><a href="#ref-for-idl-interface①④">3.3.17. [PutForwards]</a> <a href="#ref-for-idl-interface①⑤">(2)</a>
    </li><li><a href="#ref-for-idl-interface①⑥">3.3.19. [SameObject]</a>
    </li><li><a href="#ref-for-idl-interface①⑦">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-idl-interface①⑧">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-idl-interface①⑨">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-idl-interface②⓪">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-idl-interface②①">(2)</a> <a href="#ref-for-idl-interface②②">(3)</a>
    </li><li><a href="#ref-for-idl-interface②③">4.3. DOMException</a> <a href="#ref-for-idl-interface②④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-callback-context">
   <b><a href="#dfn-callback-context">#dfn-callback-context</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-callback-context">2.12.20. Interface types</a> <a href="#ref-for-dfn-callback-context①">(2)</a>
    </li><li><a href="#ref-for-dfn-callback-context②">2.12.23. Callback function types</a> <a href="#ref-for-dfn-callback-context③">(2)</a>
    </li><li><a href="#ref-for-dfn-callback-context④">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-dfn-callback-context⑤">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-dfn-callback-context⑥">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-dfn-callback-context⑦">(2)</a> <a href="#ref-for-dfn-callback-context⑧">(3)</a>
    </li><li><a href="#ref-for-dfn-callback-context⑨">3.10. Invoking callback functions</a> <a href="#ref-for-dfn-callback-context①⓪">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-dictionary">
   <b><a href="#idl-dictionary">#idl-dictionary</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-dictionary">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-idl-dictionary①">2.4.3. Operations</a> <a href="#ref-for-idl-dictionary②">(2)</a>
    </li><li><a href="#ref-for-idl-dictionary③">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-idl-dictionary④">2.4.6. Overloading</a> <a href="#ref-for-idl-dictionary⑤">(2)</a> <a href="#ref-for-idl-dictionary⑥">(3)</a>
    </li><li><a href="#ref-for-idl-dictionary⑦">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-idl-dictionary⑧">2.12.28. Union types</a>
    </li><li><a href="#ref-for-idl-dictionary⑨">3.2.15. Dictionary types</a> <a href="#ref-for-idl-dictionary①⓪">(2)</a> <a href="#ref-for-idl-dictionary①①">(3)</a>
    </li><li><a href="#ref-for-idl-dictionary①②">3.2.22. Union types</a> <a href="#ref-for-idl-dictionary①③">(2)</a>
    </li><li><a href="#ref-for-idl-dictionary①④">3.5. Overload resolution algorithm</a> <a href="#ref-for-idl-dictionary①⑤">(2)</a> <a href="#ref-for-idl-dictionary①⑥">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-enumeration">
   <b><a href="#idl-enumeration">#idl-enumeration</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-enumeration">2.12. Types</a>
    </li><li><a href="#ref-for-idl-enumeration①">3.2.16. Enumeration types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-callback-function">
   <b><a href="#idl-callback-function">#idl-callback-function</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-callback-function">3.2.17. Callback function types</a> <a href="#ref-for-idl-callback-function①">(2)</a> <a href="#ref-for-idl-callback-function②">(3)</a> <a href="#ref-for-idl-callback-function③">(4)</a> <a href="#ref-for-idl-callback-function④">(5)</a>
    </li><li><a href="#ref-for-idl-callback-function⑤">3.10. Invoking callback functions</a> <a href="#ref-for-idl-callback-function⑥">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-nullable-type">
   <b><a href="#dfn-nullable-type">#dfn-nullable-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-nullable-type">2.4.1. Constants</a> <a href="#ref-for-dfn-nullable-type①">(2)</a> <a href="#ref-for-dfn-nullable-type②">(3)</a>
    </li><li><a href="#ref-for-dfn-nullable-type③">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-nullable-type④">2.4.3. Operations</a> <a href="#ref-for-dfn-nullable-type⑤">(2)</a> <a href="#ref-for-dfn-nullable-type⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-nullable-type⑦">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-nullable-type⑧">2.4.6. Overloading</a> <a href="#ref-for-dfn-nullable-type⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-nullable-type①⓪">2.6. Dictionaries</a> <a href="#ref-for-dfn-nullable-type①①">(2)</a>
    </li><li><a href="#ref-for-dfn-nullable-type①②">2.12.15. DOMString</a>
    </li><li><a href="#ref-for-dfn-nullable-type①③">2.12.18. object</a>
    </li><li><a href="#ref-for-dfn-nullable-type①④">2.12.20. Interface types</a>
    </li><li><a href="#ref-for-dfn-nullable-type①⑤">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-nullable-type①⑥">2.12.28. Union types</a> <a href="#ref-for-dfn-nullable-type①⑦">(2)</a> <a href="#ref-for-dfn-nullable-type①⑧">(3)</a>
    </li><li><a href="#ref-for-dfn-nullable-type①⑨">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-dfn-nullable-type②⓪">3.2.18. Nullable types — T?</a> <a href="#ref-for-dfn-nullable-type②①">(2)</a> <a href="#ref-for-dfn-nullable-type②②">(3)</a> <a href="#ref-for-dfn-nullable-type②③">(4)</a> <a href="#ref-for-dfn-nullable-type②④">(5)</a> <a href="#ref-for-dfn-nullable-type②⑤">(6)</a> <a href="#ref-for-dfn-nullable-type②⑥">(7)</a> <a href="#ref-for-dfn-nullable-type②⑦">(8)</a>
    </li><li><a href="#ref-for-dfn-nullable-type②⑧">3.3.21. [TreatNonObjectAsNull]</a>
    </li><li><a href="#ref-for-dfn-nullable-type②⑨">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-nullable-type③⓪">(2)</a> <a href="#ref-for-dfn-nullable-type③①">(3)</a> <a href="#ref-for-dfn-nullable-type③②">(4)</a> <a href="#ref-for-dfn-nullable-type③③">(5)</a> <a href="#ref-for-dfn-nullable-type③④">(6)</a> <a href="#ref-for-dfn-nullable-type③⑤">(7)</a> <a href="#ref-for-dfn-nullable-type③⑥">(8)</a> <a href="#ref-for-dfn-nullable-type③⑦">(9)</a> <a href="#ref-for-dfn-nullable-type③⑧">(10)</a> <a href="#ref-for-dfn-nullable-type③⑨">(11)</a> <a href="#ref-for-dfn-nullable-type④⓪">(12)</a> <a href="#ref-for-dfn-nullable-type④①">(13)</a> <a href="#ref-for-dfn-nullable-type④②">(14)</a> <a href="#ref-for-dfn-nullable-type④③">(15)</a> <a href="#ref-for-dfn-nullable-type④④">(16)</a> <a href="#ref-for-dfn-nullable-type④⑤">(17)</a> <a href="#ref-for-dfn-nullable-type④⑥">(18)</a> <a href="#ref-for-dfn-nullable-type④⑦">(19)</a> <a href="#ref-for-dfn-nullable-type④⑧">(20)</a> <a href="#ref-for-dfn-nullable-type④⑨">(21)</a> <a href="#ref-for-dfn-nullable-type⑤⓪">(22)</a> <a href="#ref-for-dfn-nullable-type⑤①">(23)</a> <a href="#ref-for-dfn-nullable-type⑤②">(24)</a> <a href="#ref-for-dfn-nullable-type⑤③">(25)</a> <a href="#ref-for-dfn-nullable-type⑤④">(26)</a> <a href="#ref-for-dfn-nullable-type⑤⑤">(27)</a> <a href="#ref-for-dfn-nullable-type⑤⑥">(28)</a> <a href="#ref-for-dfn-nullable-type⑤⑦">(29)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-inner-type">
   <b><a href="#dfn-inner-type">#dfn-inner-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-inner-type">2.4.1. Constants</a>
    </li><li><a href="#ref-for-dfn-inner-type①">2.4.3. Operations</a> <a href="#ref-for-dfn-inner-type②">(2)</a>
    </li><li><a href="#ref-for-dfn-inner-type③">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-inner-type④">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-inner-type⑤">2.6. Dictionaries</a> <a href="#ref-for-dfn-inner-type⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-inner-type⑦">2.12.24. Nullable types — T?</a> <a href="#ref-for-dfn-inner-type⑧">(2)</a> <a href="#ref-for-dfn-inner-type⑨">(3)</a>
    </li><li><a href="#ref-for-dfn-inner-type①⓪">2.12.28. Union types</a> <a href="#ref-for-dfn-inner-type①①">(2)</a>
    </li><li><a href="#ref-for-dfn-inner-type①②">3.2.18. Nullable types — T?</a> <a href="#ref-for-dfn-inner-type①③">(2)</a> <a href="#ref-for-dfn-inner-type①④">(3)</a> <a href="#ref-for-dfn-inner-type①⑤">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="sequence-type">
   <b><a href="#sequence-type">#sequence-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-sequence-type">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-sequence-type①">2.4.3. Operations</a> <a href="#ref-for-sequence-type②">(2)</a> <a href="#ref-for-sequence-type③">(3)</a>
    </li><li><a href="#ref-for-sequence-type④">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-sequence-type⑤">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-sequence-type⑥">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-sequence-type⑦">2.10. Typedefs</a>
    </li><li><a href="#ref-for-sequence-type⑧">2.12.15. DOMString</a>
    </li><li><a href="#ref-for-sequence-type⑨">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-sequence-type①⓪">2.12.25. Sequence types — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-sequence-type①①">2.12.32. Frozen array types — FrozenArray&lt;T&gt;</a>
    </li><li><a href="#ref-for-sequence-type①②">3.2.19. Sequences — sequence&lt;T&gt;</a> <a href="#ref-for-sequence-type①③">(2)</a> <a href="#ref-for-sequence-type①④">(3)</a>
    </li><li><a href="#ref-for-sequence-type①⑤">3.2.19.1. Creating a sequence from an iterable</a> <a href="#ref-for-sequence-type①⑥">(2)</a>
    </li><li><a href="#ref-for-sequence-type①⑦">3.2.22. Union types</a>
    </li><li><a href="#ref-for-sequence-type①⑧">3.2.26. Frozen arrays — FrozenArray&lt;T&gt;</a>
    </li><li><a href="#ref-for-sequence-type①⑨">3.2.26.1. Creating a frozen array from an iterable</a>
    </li><li><a href="#ref-for-sequence-type②⓪">3.5. Overload resolution algorithm</a> <a href="#ref-for-sequence-type②①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-record">
   <b><a href="#idl-record">#idl-record</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-record">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-idl-record①">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-idl-record②">3.2.20. Records — record&lt;K, V&gt;</a> <a href="#ref-for-idl-record③">(2)</a> <a href="#ref-for-idl-record④">(3)</a> <a href="#ref-for-idl-record⑤">(4)</a> <a href="#ref-for-idl-record⑥">(5)</a> <a href="#ref-for-idl-record⑦">(6)</a> <a href="#ref-for-idl-record⑧">(7)</a> <a href="#ref-for-idl-record⑨">(8)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="record-type">
   <b><a href="#record-type">#record-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-record-type">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-record-type①">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-record-type②">3.2.22. Union types</a>
    </li><li><a href="#ref-for-record-type③">3.5. Overload resolution algorithm</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-promise">
   <b><a href="#idl-promise">#idl-promise</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-promise">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-idl-promise①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-promise-type">
   <b><a href="#dfn-promise-type">#dfn-promise-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-promise-type">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-promise-type①">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-promise-type②">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-promise-type③">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-dfn-promise-type④">(2)</a> <a href="#ref-for-dfn-promise-type⑤">(3)</a> <a href="#ref-for-dfn-promise-type⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-promise-type⑦">3.3.14. [NewObject]</a>
    </li><li><a href="#ref-for-dfn-promise-type⑧">3.6.7. Attributes</a> <a href="#ref-for-dfn-promise-type⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-promise-type①⓪">3.6.8. Operations</a>
    </li><li><a href="#ref-for-dfn-promise-type①①">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-dfn-promise-type①②">(2)</a>
    </li><li><a href="#ref-for-dfn-promise-type①③">3.10. Invoking callback functions</a> <a href="#ref-for-dfn-promise-type①④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-union-type">
   <b><a href="#dfn-union-type">#dfn-union-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-union-type">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-union-type①">2.4.3. Operations</a> <a href="#ref-for-dfn-union-type②">(2)</a> <a href="#ref-for-dfn-union-type③">(3)</a>
    </li><li><a href="#ref-for-dfn-union-type④">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-union-type⑤">2.4.6. Overloading</a> <a href="#ref-for-dfn-union-type⑥">(2)</a> <a href="#ref-for-dfn-union-type⑦">(3)</a> <a href="#ref-for-dfn-union-type⑧">(4)</a>
    </li><li><a href="#ref-for-dfn-union-type⑨">2.4.6.1. Overloading vs. union types</a> <a href="#ref-for-dfn-union-type①⓪">(2)</a> <a href="#ref-for-dfn-union-type①①">(3)</a> <a href="#ref-for-dfn-union-type①②">(4)</a> <a href="#ref-for-dfn-union-type①③">(5)</a> <a href="#ref-for-dfn-union-type①④">(6)</a> <a href="#ref-for-dfn-union-type①⑤">(7)</a> <a href="#ref-for-dfn-union-type①⑥">(8)</a>
    </li><li><a href="#ref-for-dfn-union-type①⑦">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-union-type①⑧">2.12.1. any</a> <a href="#ref-for-dfn-union-type①⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-union-type②⓪">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-union-type②①">2.12.28. Union types</a> <a href="#ref-for-dfn-union-type②②">(2)</a> <a href="#ref-for-dfn-union-type②③">(3)</a> <a href="#ref-for-dfn-union-type②④">(4)</a> <a href="#ref-for-dfn-union-type②⑤">(5)</a> <a href="#ref-for-dfn-union-type②⑥">(6)</a> <a href="#ref-for-dfn-union-type②⑦">(7)</a> <a href="#ref-for-dfn-union-type②⑧">(8)</a> <a href="#ref-for-dfn-union-type②⑨">(9)</a> <a href="#ref-for-dfn-union-type③⓪">(10)</a> <a href="#ref-for-dfn-union-type③①">(11)</a> <a href="#ref-for-dfn-union-type③②">(12)</a> <a href="#ref-for-dfn-union-type③③">(13)</a>
    </li><li><a href="#ref-for-dfn-union-type③④">2.12.29. Annotated types</a>
    </li><li><a href="#ref-for-dfn-union-type③⑤">3.2.22. Union types</a> <a href="#ref-for-dfn-union-type③⑥">(2)</a> <a href="#ref-for-dfn-union-type③⑦">(3)</a> <a href="#ref-for-dfn-union-type③⑧">(4)</a>
    </li><li><a href="#ref-for-dfn-union-type③⑨">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-union-type④⓪">(2)</a> <a href="#ref-for-dfn-union-type④①">(3)</a> <a href="#ref-for-dfn-union-type④②">(4)</a> <a href="#ref-for-dfn-union-type④③">(5)</a> <a href="#ref-for-dfn-union-type④④">(6)</a> <a href="#ref-for-dfn-union-type④⑤">(7)</a> <a href="#ref-for-dfn-union-type④⑥">(8)</a> <a href="#ref-for-dfn-union-type④⑦">(9)</a> <a href="#ref-for-dfn-union-type④⑧">(10)</a> <a href="#ref-for-dfn-union-type④⑨">(11)</a> <a href="#ref-for-dfn-union-type⑤⓪">(12)</a> <a href="#ref-for-dfn-union-type⑤①">(13)</a> <a href="#ref-for-dfn-union-type⑤②">(14)</a> <a href="#ref-for-dfn-union-type⑤③">(15)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-union-member-type">
   <b><a href="#dfn-union-member-type">#dfn-union-member-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-union-member-type">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-union-member-type①">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-union-member-type②">2.4.6.1. Overloading vs. union types</a>
    </li><li><a href="#ref-for-dfn-union-member-type③">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-union-member-type④">2.12.28. Union types</a> <a href="#ref-for-dfn-union-member-type⑤">(2)</a> <a href="#ref-for-dfn-union-member-type⑥">(3)</a> <a href="#ref-for-dfn-union-member-type⑦">(4)</a> <a href="#ref-for-dfn-union-member-type⑧">(5)</a> <a href="#ref-for-dfn-union-member-type⑨">(6)</a>
    </li><li><a href="#ref-for-dfn-union-member-type①⓪">2.12.29. Annotated types</a>
    </li><li><a href="#ref-for-dfn-union-member-type①①">3.2.22. Union types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-flattened-union-member-types">
   <b><a href="#dfn-flattened-union-member-types">#dfn-flattened-union-member-types</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-flattened-union-member-types">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-dfn-flattened-union-member-types①">2.4.3. Operations</a> <a href="#ref-for-dfn-flattened-union-member-types②">(2)</a> <a href="#ref-for-dfn-flattened-union-member-types③">(3)</a>
    </li><li><a href="#ref-for-dfn-flattened-union-member-types④">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-flattened-union-member-types⑤">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-flattened-union-member-types⑥">2.12.28. Union types</a> <a href="#ref-for-dfn-flattened-union-member-types⑦">(2)</a> <a href="#ref-for-dfn-flattened-union-member-types⑧">(3)</a> <a href="#ref-for-dfn-flattened-union-member-types⑨">(4)</a>
    </li><li><a href="#ref-for-dfn-flattened-union-member-types①⓪">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-flattened-union-member-types①①">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-flattened-union-member-types①②">(2)</a> <a href="#ref-for-dfn-flattened-union-member-types①③">(3)</a> <a href="#ref-for-dfn-flattened-union-member-types①④">(4)</a> <a href="#ref-for-dfn-flattened-union-member-types①⑤">(5)</a> <a href="#ref-for-dfn-flattened-union-member-types①⑥">(6)</a> <a href="#ref-for-dfn-flattened-union-member-types①⑦">(7)</a> <a href="#ref-for-dfn-flattened-union-member-types①⑧">(8)</a> <a href="#ref-for-dfn-flattened-union-member-types①⑨">(9)</a> <a href="#ref-for-dfn-flattened-union-member-types②⓪">(10)</a> <a href="#ref-for-dfn-flattened-union-member-types②①">(11)</a> <a href="#ref-for-dfn-flattened-union-member-types②②">(12)</a> <a href="#ref-for-dfn-flattened-union-member-types②③">(13)</a> <a href="#ref-for-dfn-flattened-union-member-types②④">(14)</a> <a href="#ref-for-dfn-flattened-union-member-types②⑤">(15)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-number-of-nullable-member-types">
   <b><a href="#dfn-number-of-nullable-member-types">#dfn-number-of-nullable-member-types</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-number-of-nullable-member-types">2.12.28. Union types</a> <a href="#ref-for-dfn-number-of-nullable-member-types①">(2)</a> <a href="#ref-for-dfn-number-of-nullable-member-types②">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-includes-a-nullable-type">
   <b><a href="#dfn-includes-a-nullable-type">#dfn-includes-a-nullable-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-includes-a-nullable-type">2.4.6. Overloading</a> <a href="#ref-for-dfn-includes-a-nullable-type①">(2)</a>
    </li><li><a href="#ref-for-dfn-includes-a-nullable-type②">2.12.24. Nullable types — T?</a>
    </li><li><a href="#ref-for-dfn-includes-a-nullable-type③">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-includes-a-nullable-type④">3.5. Overload resolution algorithm</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="annotated-types">
   <b><a href="#annotated-types">#annotated-types</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-annotated-types">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-annotated-types①">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-annotated-types②">2.12.28. Union types</a> <a href="#ref-for-annotated-types③">(2)</a> <a href="#ref-for-annotated-types④">(3)</a>
    </li><li><a href="#ref-for-annotated-types⑤">2.12.29. Annotated types</a>
    </li><li><a href="#ref-for-annotated-types⑥">2.13. Extended attributes</a>
    </li><li><a href="#ref-for-annotated-types⑦">3.2. ECMAScript type mapping</a>
    </li><li><a href="#ref-for-annotated-types⑧">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-annotated-types⑨">3.5. Overload resolution algorithm</a> <a href="#ref-for-annotated-types①⓪">(2)</a> <a href="#ref-for-annotated-types①①">(3)</a> <a href="#ref-for-annotated-types①②">(4)</a> <a href="#ref-for-annotated-types①③">(5)</a> <a href="#ref-for-annotated-types①④">(6)</a> <a href="#ref-for-annotated-types①⑤">(7)</a> <a href="#ref-for-annotated-types①⑥">(8)</a> <a href="#ref-for-annotated-types①⑦">(9)</a> <a href="#ref-for-annotated-types①⑧">(10)</a> <a href="#ref-for-annotated-types①⑨">(11)</a> <a href="#ref-for-annotated-types②⓪">(12)</a> <a href="#ref-for-annotated-types②①">(13)</a> <a href="#ref-for-annotated-types②②">(14)</a> <a href="#ref-for-annotated-types②③">(15)</a> <a href="#ref-for-annotated-types②④">(16)</a> <a href="#ref-for-annotated-types②⑤">(17)</a> <a href="#ref-for-annotated-types②⑥">(18)</a> <a href="#ref-for-annotated-types②⑦">(19)</a> <a href="#ref-for-annotated-types②⑧">(20)</a> <a href="#ref-for-annotated-types②⑨">(21)</a> <a href="#ref-for-annotated-types③⓪">(22)</a> <a href="#ref-for-annotated-types③①">(23)</a> <a href="#ref-for-annotated-types③②">(24)</a> <a href="#ref-for-annotated-types③③">(25)</a> <a href="#ref-for-annotated-types③④">(26)</a> <a href="#ref-for-annotated-types③⑤">(27)</a> <a href="#ref-for-annotated-types③⑥">(28)</a> <a href="#ref-for-annotated-types③⑦">(29)</a> <a href="#ref-for-annotated-types③⑧">(30)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="annotated-types-inner-type">
   <b><a href="#annotated-types-inner-type">#annotated-types-inner-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-annotated-types-inner-type">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-annotated-types-inner-type①">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-annotated-types-inner-type②">2.12.28. Union types</a> <a href="#ref-for-annotated-types-inner-type③">(2)</a>
    </li><li><a href="#ref-for-annotated-types-inner-type④">2.12.29. Annotated types</a>
    </li><li><a href="#ref-for-annotated-types-inner-type⑤">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-annotated-types-inner-type⑥">3.5. Overload resolution algorithm</a> <a href="#ref-for-annotated-types-inner-type⑦">(2)</a> <a href="#ref-for-annotated-types-inner-type⑧">(3)</a> <a href="#ref-for-annotated-types-inner-type⑨">(4)</a> <a href="#ref-for-annotated-types-inner-type①⓪">(5)</a> <a href="#ref-for-annotated-types-inner-type①①">(6)</a> <a href="#ref-for-annotated-types-inner-type①②">(7)</a> <a href="#ref-for-annotated-types-inner-type①③">(8)</a> <a href="#ref-for-annotated-types-inner-type①④">(9)</a> <a href="#ref-for-annotated-types-inner-type①⑤">(10)</a> <a href="#ref-for-annotated-types-inner-type①⑥">(11)</a> <a href="#ref-for-annotated-types-inner-type①⑦">(12)</a> <a href="#ref-for-annotated-types-inner-type①⑧">(13)</a> <a href="#ref-for-annotated-types-inner-type①⑨">(14)</a> <a href="#ref-for-annotated-types-inner-type②⓪">(15)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="extended-attributes-applicable-to-types">
   <b><a href="#extended-attributes-applicable-to-types">#extended-attributes-applicable-to-types</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-extended-attributes-applicable-to-types">2.12.29. Annotated types</a> <a href="#ref-for-extended-attributes-applicable-to-types①">(2)</a> <a href="#ref-for-extended-attributes-applicable-to-types②">(3)</a> <a href="#ref-for-extended-attributes-applicable-to-types③">(4)</a> <a href="#ref-for-extended-attributes-applicable-to-types④">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-type-extended-attribute-associated-with">
   <b><a href="#idl-type-extended-attribute-associated-with">#idl-type-extended-attribute-associated-with</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-type-extended-attribute-associated-with">2.12.29. Annotated types</a> <a href="#ref-for-idl-type-extended-attribute-associated-with①">(2)</a> <a href="#ref-for-idl-type-extended-attribute-associated-with②">(3)</a> <a href="#ref-for-idl-type-extended-attribute-associated-with③">(4)</a>
    </li><li><a href="#ref-for-idl-type-extended-attribute-associated-with④">3.2.4.9. Abstract operations</a> <a href="#ref-for-idl-type-extended-attribute-associated-with⑤">(2)</a> <a href="#ref-for-idl-type-extended-attribute-associated-with⑥">(3)</a>
    </li><li><a href="#ref-for-idl-type-extended-attribute-associated-with⑦">3.2.9. DOMString</a>
    </li><li><a href="#ref-for-idl-type-extended-attribute-associated-with⑧">3.2.25. Buffer source types</a> <a href="#ref-for-idl-type-extended-attribute-associated-with⑨">(2)</a> <a href="#ref-for-idl-type-extended-attribute-associated-with①⓪">(3)</a> <a href="#ref-for-idl-type-extended-attribute-associated-with①①">(4)</a>
    </li><li><a href="#ref-for-idl-type-extended-attribute-associated-with①②">3.3.1. [AllowShared]</a>
    </li><li><a href="#ref-for-idl-type-extended-attribute-associated-with①③">3.3.2. [Clamp]</a> <a href="#ref-for-idl-type-extended-attribute-associated-with①④">(2)</a>
    </li><li><a href="#ref-for-idl-type-extended-attribute-associated-with①⑤">3.3.5. [EnforceRange]</a> <a href="#ref-for-idl-type-extended-attribute-associated-with①⑥">(2)</a>
    </li><li><a href="#ref-for-idl-type-extended-attribute-associated-with①⑦">3.3.22. [TreatNullAs]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Error">
   <b><a href="#idl-Error">#idl-Error</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Error">2.7. Exceptions</a> <a href="#ref-for-idl-Error①">(2)</a>
    </li><li><a href="#ref-for-idl-Error②">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Error③">2.12.30. Error</a> <a href="#ref-for-idl-Error④">(2)</a> <a href="#ref-for-idl-Error⑤">(3)</a>
    </li><li><a href="#ref-for-idl-Error⑥">3.2.22. Union types</a> <a href="#ref-for-idl-Error⑦">(2)</a> <a href="#ref-for-idl-Error⑧">(3)</a>
    </li><li><a href="#ref-for-idl-Error⑨">3.2.23. Error</a> <a href="#ref-for-idl-Error①⓪">(2)</a> <a href="#ref-for-idl-Error①①">(3)</a> <a href="#ref-for-idl-Error①②">(4)</a> <a href="#ref-for-idl-Error①③">(5)</a>
    </li><li><a href="#ref-for-idl-Error①④">3.5. Overload resolution algorithm</a> <a href="#ref-for-idl-Error①⑤">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-ArrayBuffer">
   <b><a href="#idl-ArrayBuffer">#idl-ArrayBuffer</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-ArrayBuffer">2.12. Types</a>
    </li><li><a href="#ref-for-idl-ArrayBuffer①">2.12.31. Buffer source types</a> <a href="#ref-for-idl-ArrayBuffer②">(2)</a> <a href="#ref-for-idl-ArrayBuffer③">(3)</a> <a href="#ref-for-idl-ArrayBuffer④">(4)</a> <a href="#ref-for-idl-ArrayBuffer⑤">(5)</a> <a href="#ref-for-idl-ArrayBuffer⑥">(6)</a> <a href="#ref-for-idl-ArrayBuffer⑦">(7)</a> <a href="#ref-for-idl-ArrayBuffer⑧">(8)</a>
    </li><li><a href="#ref-for-idl-ArrayBuffer⑨">3.2.22. Union types</a> <a href="#ref-for-idl-ArrayBuffer①⓪">(2)</a>
    </li><li><a href="#ref-for-idl-ArrayBuffer①①">3.2.25. Buffer source types</a> <a href="#ref-for-idl-ArrayBuffer①②">(2)</a> <a href="#ref-for-idl-ArrayBuffer①③">(3)</a> <a href="#ref-for-idl-ArrayBuffer①④">(4)</a>
    </li><li><a href="#ref-for-idl-ArrayBuffer①⑤">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-idl-ArrayBuffer①⑥">4.1. ArrayBufferView</a>
    </li><li><a href="#ref-for-idl-ArrayBuffer①⑦">4.2. BufferSource</a> <a href="#ref-for-idl-ArrayBuffer①⑧">(2)</a> <a href="#ref-for-idl-ArrayBuffer①⑨">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-DataView">
   <b><a href="#idl-DataView">#idl-DataView</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-DataView">2.12. Types</a>
    </li><li><a href="#ref-for-idl-DataView①">3.2.22. Union types</a> <a href="#ref-for-idl-DataView②">(2)</a>
    </li><li><a href="#ref-for-idl-DataView③">3.2.25. Buffer source types</a> <a href="#ref-for-idl-DataView④">(2)</a>
    </li><li><a href="#ref-for-idl-DataView⑤">3.5. Overload resolution algorithm</a>
    </li><li><a href="#ref-for-idl-DataView⑥">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Int8Array">
   <b><a href="#idl-Int8Array">#idl-Int8Array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Int8Array">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Int8Array①">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-idl-Int8Array②">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Int8Array③">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Int16Array">
   <b><a href="#idl-Int16Array">#idl-Int16Array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Int16Array">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Int16Array①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Int16Array②">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Int32Array">
   <b><a href="#idl-Int32Array">#idl-Int32Array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Int32Array">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Int32Array①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Int32Array②">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Uint8Array">
   <b><a href="#idl-Uint8Array">#idl-Uint8Array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Uint8Array">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Uint8Array①">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-idl-Uint8Array②">2.12.31. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Uint8Array③">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Uint8Array④">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Uint16Array">
   <b><a href="#idl-Uint16Array">#idl-Uint16Array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Uint16Array">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Uint16Array①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Uint16Array②">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Uint32Array">
   <b><a href="#idl-Uint32Array">#idl-Uint32Array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Uint32Array">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Uint32Array①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Uint32Array②">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Uint8ClampedArray">
   <b><a href="#idl-Uint8ClampedArray">#idl-Uint8ClampedArray</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Uint8ClampedArray">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Uint8ClampedArray①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Uint8ClampedArray②">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Float32Array">
   <b><a href="#idl-Float32Array">#idl-Float32Array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Float32Array">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Float32Array①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Float32Array②">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-Float64Array">
   <b><a href="#idl-Float64Array">#idl-Float64Array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-Float64Array">2.12. Types</a>
    </li><li><a href="#ref-for-idl-Float64Array①">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-idl-Float64Array②">4.1. ArrayBufferView</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-get-buffer-source-reference">
   <b><a href="#dfn-get-buffer-source-reference">#dfn-get-buffer-source-reference</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-get-buffer-source-reference">2.12.31. Buffer source types</a>
    </li><li><a href="#ref-for-dfn-get-buffer-source-reference①">3.2.25. Buffer source types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-get-buffer-source-copy">
   <b><a href="#dfn-get-buffer-source-copy">#dfn-get-buffer-source-copy</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-get-buffer-source-copy">2.12.31. Buffer source types</a>
    </li><li><a href="#ref-for-dfn-get-buffer-source-copy①">3.2.25. Buffer source types</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-frozen-array">
   <b><a href="#idl-frozen-array">#idl-frozen-array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-frozen-array">2.12.32. Frozen array types — FrozenArray&lt;T&gt;</a>
    </li><li><a href="#ref-for-idl-frozen-array①">3.2.26. Frozen arrays — FrozenArray&lt;T&gt;</a> <a href="#ref-for-idl-frozen-array②">(2)</a> <a href="#ref-for-idl-frozen-array③">(3)</a>
    </li><li><a href="#ref-for-idl-frozen-array④">3.2.26.1. Creating a frozen array from an iterable</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-frozen-array-type">
   <b><a href="#dfn-frozen-array-type">#dfn-frozen-array-type</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-frozen-array-type">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-frozen-array-type①">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-frozen-array-type②">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-frozen-array-type③">2.12.16. ByteString</a>
    </li><li><a href="#ref-for-dfn-frozen-array-type④">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-frozen-array-type⑤">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-frozen-array-type⑥">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-extended-attribute">
   <b><a href="#dfn-extended-attribute">#dfn-extended-attribute</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-extended-attribute">2. Interface definition language</a> <a href="#ref-for-dfn-extended-attribute①">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②">2.2. Interfaces</a> <a href="#ref-for-dfn-extended-attribute③">(2)</a> <a href="#ref-for-dfn-extended-attribute④">(3)</a> <a href="#ref-for-dfn-extended-attribute⑤">(4)</a> <a href="#ref-for-dfn-extended-attribute⑥">(5)</a> <a href="#ref-for-dfn-extended-attribute⑦">(6)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑧">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑨">2.4.2. Attributes</a> <a href="#ref-for-dfn-extended-attribute①⓪">(2)</a> <a href="#ref-for-dfn-extended-attribute①①">(3)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①②">2.4.3. Operations</a> <a href="#ref-for-dfn-extended-attribute①③">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⑤">2.4.6. Overloading</a> <a href="#ref-for-dfn-extended-attribute①⑥">(2)</a> <a href="#ref-for-dfn-extended-attribute①⑦">(3)</a> <a href="#ref-for-dfn-extended-attribute①⑧">(4)</a> <a href="#ref-for-dfn-extended-attribute①⑨">(5)</a> <a href="#ref-for-dfn-extended-attribute②⓪">(6)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②①">2.4.8. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②②">2.4.9. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②③">2.5. Namespaces</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②④">2.6. Dictionaries</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②⑤">2.8. Enumerations</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②⑥">2.10. Typedefs</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②⑦">2.11. Objects implementing interfaces</a>
    </li><li><a href="#ref-for-dfn-extended-attribute②⑧">2.12.29. Annotated types</a> <a href="#ref-for-dfn-extended-attribute②⑨">(2)</a> <a href="#ref-for-dfn-extended-attribute③⓪">(3)</a> <a href="#ref-for-dfn-extended-attribute③①">(4)</a> <a href="#ref-for-dfn-extended-attribute③②">(5)</a> <a href="#ref-for-dfn-extended-attribute③③">(6)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute③④">2.13. Extended attributes</a>
    </li><li><a href="#ref-for-dfn-extended-attribute③⑤">3.2.4.9. Abstract operations</a> <a href="#ref-for-dfn-extended-attribute③⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute③⑦">3.2.25. Buffer source types</a> <a href="#ref-for-dfn-extended-attribute③⑧">(2)</a> <a href="#ref-for-dfn-extended-attribute③⑨">(3)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute④⓪">3.3. ECMAScript-specific extended attributes</a>
    </li><li><a href="#ref-for-dfn-extended-attribute④①">3.3.1. [AllowShared]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute④②">3.3.2. [Clamp]</a> <a href="#ref-for-dfn-extended-attribute④③">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute④④">3.3.3. [Constructor]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute④⑤">3.3.4. [Default]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute④⑥">3.3.5. [EnforceRange]</a> <a href="#ref-for-dfn-extended-attribute④⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute④⑧">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-extended-attribute④⑨">(2)</a> <a href="#ref-for-dfn-extended-attribute⑤⓪">(3)</a> <a href="#ref-for-dfn-extended-attribute⑤①">(4)</a> <a href="#ref-for-dfn-extended-attribute⑤②">(5)</a> <a href="#ref-for-dfn-extended-attribute⑤③">(6)</a> <a href="#ref-for-dfn-extended-attribute⑤④">(7)</a> <a href="#ref-for-dfn-extended-attribute⑤⑤">(8)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑤⑥">3.3.7. [Global]</a> <a href="#ref-for-dfn-extended-attribute⑤⑦">(2)</a> <a href="#ref-for-dfn-extended-attribute⑤⑧">(3)</a> <a href="#ref-for-dfn-extended-attribute⑤⑨">(4)</a> <a href="#ref-for-dfn-extended-attribute⑥⓪">(5)</a> <a href="#ref-for-dfn-extended-attribute⑥①">(6)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑥②">3.3.8. [LegacyNamespace]</a> <a href="#ref-for-dfn-extended-attribute⑥③">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑥④">3.3.9. [LegacyUnenumerableNamedProperties]</a> <a href="#ref-for-dfn-extended-attribute⑥⑤">(2)</a> <a href="#ref-for-dfn-extended-attribute⑥⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑥⑦">3.3.10. [LegacyWindowAlias]</a> <a href="#ref-for-dfn-extended-attribute⑥⑧">(2)</a> <a href="#ref-for-dfn-extended-attribute⑥⑨">(3)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑦⓪">3.3.11. [LenientSetter]</a> <a href="#ref-for-dfn-extended-attribute⑦①">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑦②">3.3.12. [LenientThis]</a> <a href="#ref-for-dfn-extended-attribute⑦③">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑦④">3.3.13. [NamedConstructor]</a> <a href="#ref-for-dfn-extended-attribute⑦⑤">(2)</a> <a href="#ref-for-dfn-extended-attribute⑦⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑦⑦">3.3.14. [NewObject]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑦⑧">3.3.15. [NoInterfaceObject]</a> <a href="#ref-for-dfn-extended-attribute⑦⑨">(2)</a> <a href="#ref-for-dfn-extended-attribute⑧⓪">(3)</a> <a href="#ref-for-dfn-extended-attribute⑧①">(4)</a> <a href="#ref-for-dfn-extended-attribute⑧②">(5)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑧③">3.3.16. [OverrideBuiltins]</a> <a href="#ref-for-dfn-extended-attribute⑧④">(2)</a> <a href="#ref-for-dfn-extended-attribute⑧⑤">(3)</a> <a href="#ref-for-dfn-extended-attribute⑧⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑧⑦">3.3.17. [PutForwards]</a> <a href="#ref-for-dfn-extended-attribute⑧⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑧⑨">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑨⓪">3.3.19. [SameObject]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute⑨①">3.3.20. [SecureContext]</a> <a href="#ref-for-dfn-extended-attribute⑨②">(2)</a> <a href="#ref-for-dfn-extended-attribute⑨③">(3)</a> <a href="#ref-for-dfn-extended-attribute⑨④">(4)</a> <a href="#ref-for-dfn-extended-attribute⑨⑤">(5)</a> <a href="#ref-for-dfn-extended-attribute⑨⑥">(6)</a> <a href="#ref-for-dfn-extended-attribute⑨⑦">(7)</a> <a href="#ref-for-dfn-extended-attribute⑨⑧">(8)</a> <a href="#ref-for-dfn-extended-attribute⑨⑨">(9)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⓪⓪">3.3.21. [TreatNonObjectAsNull]</a> <a href="#ref-for-dfn-extended-attribute①⓪①">(2)</a> <a href="#ref-for-dfn-extended-attribute①⓪②">(3)</a> <a href="#ref-for-dfn-extended-attribute①⓪③">(4)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⓪④">3.3.22. [TreatNullAs]</a> <a href="#ref-for-dfn-extended-attribute①⓪⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⓪⑥">3.3.23. [Unforgeable]</a> <a href="#ref-for-dfn-extended-attribute①⓪⑦">(2)</a> <a href="#ref-for-dfn-extended-attribute①⓪⑧">(3)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⓪⑨">3.3.24. [Unscopable]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①①⓪">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-extended-attribute①①①">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①①②">3.6. Interfaces</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①①③">3.6.1. Interface object</a> <a href="#ref-for-dfn-extended-attribute①①④">(2)</a> <a href="#ref-for-dfn-extended-attribute①①⑤">(3)</a> <a href="#ref-for-dfn-extended-attribute①①⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①①⑦">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①①⑧">3.6.3. Interface prototype object</a> <a href="#ref-for-dfn-extended-attribute①①⑨">(2)</a> <a href="#ref-for-dfn-extended-attribute①②⓪">(3)</a> <a href="#ref-for-dfn-extended-attribute①②①">(4)</a> <a href="#ref-for-dfn-extended-attribute①②②">(5)</a> <a href="#ref-for-dfn-extended-attribute①②③">(6)</a> <a href="#ref-for-dfn-extended-attribute①②④">(7)</a> <a href="#ref-for-dfn-extended-attribute①②⑤">(8)</a> <a href="#ref-for-dfn-extended-attribute①②⑥">(9)</a> <a href="#ref-for-dfn-extended-attribute①②⑦">(10)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①②⑧">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①②⑨">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①③⓪">3.6.6. Constants</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①③①">3.6.7. Attributes</a> <a href="#ref-for-dfn-extended-attribute①③②">(2)</a> <a href="#ref-for-dfn-extended-attribute①③③">(3)</a> <a href="#ref-for-dfn-extended-attribute①③④">(4)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①③⑤">3.6.8. Operations</a> <a href="#ref-for-dfn-extended-attribute①③⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①③⑦">3.6.8.1. Default operations</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①③⑧">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-dfn-extended-attribute①③⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④⓪">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④①">3.6.9.1. @@iterator</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④②">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④③">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④④">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④⑤">3.6.10.3. values</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④⑥">3.7. Platform objects implementing interfaces</a> <a href="#ref-for-dfn-extended-attribute①④⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④⑧">3.7.1. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①④⑨">3.8.3. [[DefineOwnProperty]]</a> <a href="#ref-for-dfn-extended-attribute①⑤⓪">(2)</a> <a href="#ref-for-dfn-extended-attribute①⑤①">(3)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⑤②">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⑤③">3.8.7. Abstract operations</a> <a href="#ref-for-dfn-extended-attribute①⑤④">(2)</a> <a href="#ref-for-dfn-extended-attribute①⑤⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⑤⑥">5. Extensibility</a>
    </li><li><a href="#ref-for-dfn-extended-attribute①⑤⑦">IDL grammar</a> <a href="#ref-for-dfn-extended-attribute①⑤⑧">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-xattr-no-arguments">
   <b><a href="#dfn-xattr-no-arguments">#dfn-xattr-no-arguments</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-xattr-no-arguments">3.3.1. [AllowShared]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments①">3.3.2. [Clamp]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments②">3.3.3. [Constructor]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments③">3.3.4. [Default]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments④">3.3.5. [EnforceRange]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments⑤">3.3.9. [LegacyUnenumerableNamedProperties]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments⑥">3.3.11. [LenientSetter]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments⑦">3.3.12. [LenientThis]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments⑧">3.3.14. [NewObject]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments⑨">3.3.15. [NoInterfaceObject]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments①⓪">3.3.16. [OverrideBuiltins]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments①①">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments①②">3.3.19. [SameObject]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments①③">3.3.20. [SecureContext]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments①④">3.3.23. [Unforgeable]</a>
    </li><li><a href="#ref-for-dfn-xattr-no-arguments①⑤">3.3.24. [Unscopable]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-xattr-argument-list">
   <b><a href="#dfn-xattr-argument-list">#dfn-xattr-argument-list</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-xattr-argument-list">2.4.3. Operations</a>
    </li><li><a href="#ref-for-dfn-xattr-argument-list①">3.3.3. [Constructor]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-xattr-named-argument-list">
   <b><a href="#dfn-xattr-named-argument-list">#dfn-xattr-named-argument-list</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-xattr-named-argument-list">2.4.6. Overloading</a> <a href="#ref-for-dfn-xattr-named-argument-list①">(2)</a>
    </li><li><a href="#ref-for-dfn-xattr-named-argument-list②">3.3.13. [NamedConstructor]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-xattr-identifier">
   <b><a href="#dfn-xattr-identifier">#dfn-xattr-identifier</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-xattr-identifier">3.3.6. [Exposed]</a>
    </li><li><a href="#ref-for-dfn-xattr-identifier①">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-xattr-identifier②">3.3.8. [LegacyNamespace]</a>
    </li><li><a href="#ref-for-dfn-xattr-identifier③">3.3.10. [LegacyWindowAlias]</a>
    </li><li><a href="#ref-for-dfn-xattr-identifier④">3.3.13. [NamedConstructor]</a>
    </li><li><a href="#ref-for-dfn-xattr-identifier⑤">3.3.17. [PutForwards]</a>
    </li><li><a href="#ref-for-dfn-xattr-identifier⑥">3.3.22. [TreatNullAs]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-xattr-identifier-list">
   <b><a href="#dfn-xattr-identifier-list">#dfn-xattr-identifier-list</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-xattr-identifier-list">3.3.6. [Exposed]</a>
    </li><li><a href="#ref-for-dfn-xattr-identifier-list①">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-xattr-identifier-list②">3.3.10. [LegacyWindowAlias]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-class-string">
   <b><a href="#dfn-class-string">#dfn-class-string</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-class-string">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-dfn-class-string①">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-dfn-class-string②">3.6.10.4. Default iterator objects</a> <a href="#ref-for-dfn-class-string③">(2)</a>
    </li><li><a href="#ref-for-dfn-class-string④">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-dfn-class-string⑤">3.7. Platform objects implementing interfaces</a> <a href="#ref-for-dfn-class-string⑥">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="ecmascript-throw">
   <b><a href="#ecmascript-throw">#ecmascript-throw</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-ecmascript-throw">3.2.4.9. Abstract operations</a> <a href="#ref-for-ecmascript-throw①">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw②">3.2.5. float</a> <a href="#ref-for-ecmascript-throw③">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw④">3.2.7. double</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤">3.2.10. ByteString</a>
    </li><li><a href="#ref-for-ecmascript-throw⑥">3.2.12. object</a>
    </li><li><a href="#ref-for-ecmascript-throw⑦">3.2.13. symbol</a>
    </li><li><a href="#ref-for-ecmascript-throw⑧">3.2.14. Interface types</a> <a href="#ref-for-ecmascript-throw⑨">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw①⓪">3.2.15. Dictionary types</a>
    </li><li><a href="#ref-for-ecmascript-throw①①">3.2.16. Enumeration types</a>
    </li><li><a href="#ref-for-ecmascript-throw①②">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-ecmascript-throw①③">3.2.19. Sequences — sequence&lt;T&gt;</a> <a href="#ref-for-ecmascript-throw①④">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw①⑤">3.2.20. Records — record&lt;K, V&gt;</a>
    </li><li><a href="#ref-for-ecmascript-throw①⑥">3.2.21. Promise types — Promise&lt;T&gt;</a>
    </li><li><a href="#ref-for-ecmascript-throw①⑦">3.2.22. Union types</a>
    </li><li><a href="#ref-for-ecmascript-throw①⑧">3.2.23. Error</a>
    </li><li><a href="#ref-for-ecmascript-throw①⑨">3.2.24. DOMException</a>
    </li><li><a href="#ref-for-ecmascript-throw②⓪">3.2.25. Buffer source types</a> <a href="#ref-for-ecmascript-throw②①">(2)</a> <a href="#ref-for-ecmascript-throw②②">(3)</a> <a href="#ref-for-ecmascript-throw②③">(4)</a> <a href="#ref-for-ecmascript-throw②④">(5)</a> <a href="#ref-for-ecmascript-throw②⑤">(6)</a> <a href="#ref-for-ecmascript-throw②⑥">(7)</a> <a href="#ref-for-ecmascript-throw②⑦">(8)</a>
    </li><li><a href="#ref-for-ecmascript-throw②⑧">3.5. Overload resolution algorithm</a> <a href="#ref-for-ecmascript-throw②⑨">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw③⓪">3.6.1. Interface object</a> <a href="#ref-for-ecmascript-throw③①">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw③②">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-ecmascript-throw③③">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-ecmascript-throw③④">3.6.7. Attributes</a> <a href="#ref-for-ecmascript-throw③⑤">(2)</a> <a href="#ref-for-ecmascript-throw③⑥">(3)</a> <a href="#ref-for-ecmascript-throw③⑦">(4)</a>
    </li><li><a href="#ref-for-ecmascript-throw③⑧">3.6.8. Operations</a>
    </li><li><a href="#ref-for-ecmascript-throw③⑨">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-ecmascript-throw④⓪">3.6.9.1. @@iterator</a> <a href="#ref-for-ecmascript-throw④①">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw④②">3.6.9.2. forEach</a> <a href="#ref-for-ecmascript-throw④③">(2)</a> <a href="#ref-for-ecmascript-throw④④">(3)</a>
    </li><li><a href="#ref-for-ecmascript-throw④⑤">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-ecmascript-throw④⑥">3.6.10.3. values</a>
    </li><li><a href="#ref-for-ecmascript-throw④⑦">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-ecmascript-throw④⑧">3.6.11. Maplike declarations</a> <a href="#ref-for-ecmascript-throw④⑨">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤⓪">3.6.11.1. size</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤①">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤②">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤③">3.6.11.7. set</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤④">3.6.12. Setlike declarations</a> <a href="#ref-for-ecmascript-throw⑤⑤">(2)</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤⑥">3.6.12.1. size</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤⑦">3.6.12.4. has</a>
    </li><li><a href="#ref-for-ecmascript-throw⑤⑧">3.6.12.5. add and delete</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-initial-object">
   <b><a href="#dfn-initial-object">#dfn-initial-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-initial-object">3.1. ECMAScript environment</a> <a href="#ref-for-dfn-initial-object①">(2)</a>
    </li><li><a href="#ref-for-dfn-initial-object②">3.3.6. [Exposed]</a>
    </li><li><a href="#ref-for-dfn-initial-object③">3.7. Platform objects implementing interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-expose">
   <b><a href="#dfn-expose">#dfn-expose</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-expose">3.1. ECMAScript environment</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-associated-realm">
   <b><a href="#dfn-associated-realm">#dfn-associated-realm</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-associated-realm">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-dfn-associated-realm①">(2)</a> <a href="#ref-for-dfn-associated-realm②">(3)</a>
    </li><li><a href="#ref-for-dfn-associated-realm③">3.10. Invoking callback functions</a> <a href="#ref-for-dfn-associated-realm④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-convert-ecmascript-to-idl-value">
   <b><a href="#dfn-convert-ecmascript-to-idl-value">#dfn-convert-ecmascript-to-idl-value</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value">3.2.1. any</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①">3.2.3. boolean</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②">3.2.4.1. byte</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value③">3.2.4.2. octet</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value④">3.2.4.3. short</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤">3.2.4.4. unsigned short</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥">3.2.4.5. long</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑦">3.2.4.6. unsigned long</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑧">3.2.4.7. long long</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑨">3.2.4.8. unsigned long long</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①⓪">3.2.5. float</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①①">3.2.6. unrestricted float</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①②">3.2.7. double</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①③">3.2.8. unrestricted double</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①④">3.2.9. DOMString</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①⑤">3.2.10. ByteString</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①⑥">3.2.11. USVString</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value①⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①⑧">3.2.12. object</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value①⑨">3.2.13. symbol</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②⓪">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②①">3.2.15. Dictionary types</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value②②">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②③">3.2.16. Enumeration types</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②④">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②⑤">3.2.18. Nullable types — T?</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value②⑥">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②⑦">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②⑧">3.2.19.1. Creating a sequence from an iterable</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value②⑨">3.2.20. Records — record&lt;K, V&gt;</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value③⓪">(2)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value③①">(3)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value③②">3.2.21. Promise types — Promise&lt;T&gt;</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value③③">(2)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value③④">(3)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value③⑤">3.2.22. Union types</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value③⑥">(2)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value③⑦">(3)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value③⑧">(4)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value③⑨">(5)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④⓪">(6)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④①">(7)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④②">(8)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④③">(9)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④④">(10)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④⑤">(11)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④⑥">(12)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④⑦">(13)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④⑧">(14)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value④⑨">(15)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤⓪">(16)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤①">3.2.23. Error</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤②">3.2.24. DOMException</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤③">3.2.25. Buffer source types</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤④">(2)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤⑤">(3)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤⑥">3.2.26. Frozen arrays — FrozenArray&lt;T&gt;</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤⑧">3.5. Overload resolution algorithm</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑤⑨">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥⓪">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥①">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥②">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥③">3.6.11.7. set</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥④">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥⑤">3.6.12.4. has</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥⑥">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥⑦">3.8.7. Abstract operations</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑥⑨">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑦⓪">(2)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑦①">(3)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑦②">(4)</a>
    </li><li><a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑦③">3.10. Invoking callback functions</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑦④">(2)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑦⑤">(3)</a> <a href="#ref-for-dfn-convert-ecmascript-to-idl-value⑦⑥">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-convert-idl-to-ecmascript-value">
   <b><a href="#dfn-convert-idl-to-ecmascript-value">#dfn-convert-idl-to-ecmascript-value</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value">3.2.1. any</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①">3.2.3. boolean</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value②">3.2.4.1. byte</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③">3.2.4.2. octet</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value④">3.2.4.3. short</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤">3.2.4.4. unsigned short</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑥">3.2.4.5. long</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑦">3.2.4.6. unsigned long</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑧">3.2.4.7. long long</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑨">3.2.4.8. unsigned long long</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①⓪">3.2.5. float</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①①">3.2.6. unrestricted float</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①②">3.2.7. double</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①③">3.2.8. unrestricted double</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①④">3.2.9. DOMString</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①⑤">3.2.10. ByteString</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①⑥">3.2.11. USVString</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①⑦">3.2.12. object</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①⑧">3.2.13. symbol</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value①⑨">3.2.14. Interface types</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value②⓪">3.2.15. Dictionary types</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value②①">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value②②">3.2.16. Enumeration types</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value②③">3.2.17. Callback function types</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value②④">3.2.18. Nullable types — T?</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value②⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value②⑥">3.2.19. Sequences — sequence&lt;T&gt;</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value②⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value②⑧">3.2.20. Records — record&lt;K, V&gt;</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value②⑨">(2)</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value③⓪">(3)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③①">3.2.21. Promise types — Promise&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③②">3.2.22. Union types</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③③">3.2.23. Error</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③④">3.2.24. DOMException</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③⑤">3.2.25. Buffer source types</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③⑥">3.2.26. Frozen arrays — FrozenArray&lt;T&gt;</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value③⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③⑧">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value③⑨">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value④⓪">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value④①">3.6.6. Constants</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value④②">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value④③">3.6.8. Operations</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value④④">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value④⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value④⑥">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value④⑦">3.6.10.5. Iterator prototype object</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value④⑧">(2)</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value④⑨">(3)</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤⓪">(4)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤①">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤②">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤③">3.6.11.7. set</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤④">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤⑤">3.6.12.4. has</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤⑥">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤⑦">3.8.7. Abstract operations</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑤⑨">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-dfn-convert-idl-to-ecmascript-value⑥⓪">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="abstract-opdef-integerpart">
   <b><a href="#abstract-opdef-integerpart">#abstract-opdef-integerpart</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-abstract-opdef-integerpart">3.2.4.9. Abstract operations</a> <a href="#ref-for-abstract-opdef-integerpart①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="abstract-opdef-converttoint">
   <b><a href="#abstract-opdef-converttoint">#abstract-opdef-converttoint</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-abstract-opdef-converttoint">3.2.4.1. byte</a>
    </li><li><a href="#ref-for-abstract-opdef-converttoint①">3.2.4.2. octet</a>
    </li><li><a href="#ref-for-abstract-opdef-converttoint②">3.2.4.3. short</a>
    </li><li><a href="#ref-for-abstract-opdef-converttoint③">3.2.4.4. unsigned short</a>
    </li><li><a href="#ref-for-abstract-opdef-converttoint④">3.2.4.5. long</a>
    </li><li><a href="#ref-for-abstract-opdef-converttoint⑤">3.2.4.6. unsigned long</a>
    </li><li><a href="#ref-for-abstract-opdef-converttoint⑥">3.2.4.7. long long</a>
    </li><li><a href="#ref-for-abstract-opdef-converttoint⑦">3.2.4.8. unsigned long long</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="create-sequence-from-iterable">
   <b><a href="#create-sequence-from-iterable">#create-sequence-from-iterable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-create-sequence-from-iterable">3.2.19. Sequences — sequence&lt;T&gt;</a>
    </li><li><a href="#ref-for-create-sequence-from-iterable①">3.2.22. Union types</a>
    </li><li><a href="#ref-for-create-sequence-from-iterable②">3.2.26.1. Creating a frozen array from an iterable</a>
    </li><li><a href="#ref-for-create-sequence-from-iterable③">3.5. Overload resolution algorithm</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-create-frozen-array">
   <b><a href="#dfn-create-frozen-array">#dfn-create-frozen-array</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-create-frozen-array">3.2.26. Frozen arrays — FrozenArray&lt;T&gt;</a>
    </li><li><a href="#ref-for-dfn-create-frozen-array①">3.2.26.1. Creating a frozen array from an iterable</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="create-frozen-array-from-iterable">
   <b><a href="#create-frozen-array-from-iterable">#create-frozen-array-from-iterable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-create-frozen-array-from-iterable">3.2.22. Union types</a>
    </li><li><a href="#ref-for-create-frozen-array-from-iterable①">3.5. Overload resolution algorithm</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="AllowShared">
   <b><a href="#AllowShared">#AllowShared</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-AllowShared">3.2.25. Buffer source types</a> <a href="#ref-for-AllowShared①">(2)</a> <a href="#ref-for-AllowShared②">(3)</a> <a href="#ref-for-AllowShared③">(4)</a>
    </li><li><a href="#ref-for-AllowShared④">3.3.1. [AllowShared]</a> <a href="#ref-for-AllowShared⑤">(2)</a> <a href="#ref-for-AllowShared⑥">(3)</a> <a href="#ref-for-AllowShared⑦">(4)</a> <a href="#ref-for-AllowShared⑧">(5)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Clamp">
   <b><a href="#Clamp">#Clamp</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Clamp">2.12.29. Annotated types</a> <a href="#ref-for-Clamp①">(2)</a>
    </li><li><a href="#ref-for-Clamp②">3.2.4.9. Abstract operations</a> <a href="#ref-for-Clamp③">(2)</a>
    </li><li><a href="#ref-for-Clamp④">3.3.2. [Clamp]</a> <a href="#ref-for-Clamp⑤">(2)</a> <a href="#ref-for-Clamp⑥">(3)</a> <a href="#ref-for-Clamp⑦">(4)</a> <a href="#ref-for-Clamp⑧">(5)</a> <a href="#ref-for-Clamp⑨">(6)</a> <a href="#ref-for-Clamp①⓪">(7)</a>
    </li><li><a href="#ref-for-Clamp①①">3.3.5. [EnforceRange]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Constructor">
   <b><a href="#Constructor">#Constructor</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Constructor">2. Interface definition language</a>
    </li><li><a href="#ref-for-Constructor①">2.2. Interfaces</a> <a href="#ref-for-Constructor②">(2)</a>
    </li><li><a href="#ref-for-Constructor③">2.4.3. Operations</a>
    </li><li><a href="#ref-for-Constructor">2.4.6. Overloading</a> <a href="#ref-for-Constructor④">(2)</a> <a href="#ref-for-Constructor⑤">(3)</a> <a href="#ref-for-Constructor⑥">(4)</a> <a href="#ref-for-Constructor⑦">(5)</a>
    </li><li><a href="#ref-for-Constructor⑧">3.3.3. [Constructor]</a> <a href="#ref-for-Constructor⑨">(2)</a> <a href="#ref-for-Constructor①⓪">(3)</a> <a href="#ref-for-Constructor①①">(4)</a> <a href="#ref-for-Constructor①②">(5)</a> <a href="#ref-for-Constructor①③">(6)</a> <a href="#ref-for-Constructor①④">(7)</a> <a href="#ref-for-Constructor①⑤">(8)</a>
    </li><li><a href="#ref-for-Constructor①⑥">3.3.15. [NoInterfaceObject]</a>
    </li><li><a href="#ref-for-Constructor①⑦">3.6.1. Interface object</a> <a href="#ref-for-Constructor①⑧">(2)</a> <a href="#ref-for-Constructor①⑨">(3)</a> <a href="#ref-for-Constructor②⓪">(4)</a>
    </li><li><a href="#ref-for-Constructor②①">IDL grammar</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Default">
   <b><a href="#Default">#Default</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Default">2.4.3. Operations</a>
    </li><li><a href="#ref-for-Default①">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-Default②">3.3.4. [Default]</a> <a href="#ref-for-Default③">(2)</a> <a href="#ref-for-Default④">(3)</a> <a href="#ref-for-Default⑤">(4)</a>
    </li><li><a href="#ref-for-Default⑥">3.6.8. Operations</a>
    </li><li><a href="#ref-for-Default⑦">3.6.8.1. Default operations</a>
    </li><li><a href="#ref-for-Default⑧">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-Default⑨">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="EnforceRange">
   <b><a href="#EnforceRange">#EnforceRange</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-EnforceRange">2.12.29. Annotated types</a>
    </li><li><a href="#ref-for-EnforceRange①">3.2.4.9. Abstract operations</a> <a href="#ref-for-EnforceRange②">(2)</a>
    </li><li><a href="#ref-for-EnforceRange③">3.3.2. [Clamp]</a>
    </li><li><a href="#ref-for-EnforceRange④">3.3.5. [EnforceRange]</a> <a href="#ref-for-EnforceRange⑤">(2)</a> <a href="#ref-for-EnforceRange⑥">(3)</a> <a href="#ref-for-EnforceRange⑦">(4)</a> <a href="#ref-for-EnforceRange⑧">(5)</a> <a href="#ref-for-EnforceRange⑨">(6)</a> <a href="#ref-for-EnforceRange①⓪">(7)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Exposed">
   <b><a href="#Exposed">#Exposed</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Exposed">2.2. Interfaces</a> <a href="#ref-for-Exposed①">(2)</a> <a href="#ref-for-Exposed②">(3)</a>
    </li><li><a href="#ref-for-Exposed③">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-Exposed④">2.4.1. Constants</a>
    </li><li><a href="#ref-for-Exposed⑤">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-Exposed⑥">2.4.3. Operations</a>
    </li><li><a href="#ref-for-Exposed⑦">2.4.7. Iterable declarations</a>
    </li><li><a href="#ref-for-Exposed⑧">2.5. Namespaces</a> <a href="#ref-for-Exposed⑨">(2)</a>
    </li><li><a href="#ref-for-Exposed①⓪">3.3.6. [Exposed]</a> <a href="#ref-for-Exposed①①">(2)</a> <a href="#ref-for-Exposed①②">(3)</a> <a href="#ref-for-Exposed①③">(4)</a> <a href="#ref-for-Exposed①④">(5)</a> <a href="#ref-for-Exposed①⑤">(6)</a> <a href="#ref-for-Exposed①⑥">(7)</a> <a href="#ref-for-Exposed①⑦">(8)</a> <a href="#ref-for-Exposed①⑧">(9)</a> <a href="#ref-for-Exposed①⑨">(10)</a> <a href="#ref-for-Exposed②⓪">(11)</a> <a href="#ref-for-Exposed②①">(12)</a> <a href="#ref-for-Exposed②②">(13)</a> <a href="#ref-for-Exposed②③">(14)</a> <a href="#ref-for-Exposed②④">(15)</a> <a href="#ref-for-Exposed②⑤">(16)</a>
    </li><li><a href="#ref-for-Exposed②⑥">3.3.7. [Global]</a> <a href="#ref-for-Exposed②⑦">(2)</a>
    </li><li><a href="#ref-for-Exposed②⑧">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="own-exposure-set">
   <b><a href="#own-exposure-set">#own-exposure-set</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-own-exposure-set">3.3.6. [Exposed]</a> <a href="#ref-for-own-exposure-set①">(2)</a> <a href="#ref-for-own-exposure-set②">(3)</a> <a href="#ref-for-own-exposure-set③">(4)</a> <a href="#ref-for-own-exposure-set④">(5)</a> <a href="#ref-for-own-exposure-set⑤">(6)</a> <a href="#ref-for-own-exposure-set⑥">(7)</a> <a href="#ref-for-own-exposure-set⑦">(8)</a> <a href="#ref-for-own-exposure-set⑧">(9)</a> <a href="#ref-for-own-exposure-set⑨">(10)</a> <a href="#ref-for-own-exposure-set①⓪">(11)</a> <a href="#ref-for-own-exposure-set①①">(12)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-exposure-set">
   <b><a href="#dfn-exposure-set">#dfn-exposure-set</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-exposure-set">3.3.6. [Exposed]</a> <a href="#ref-for-dfn-exposure-set①">(2)</a> <a href="#ref-for-dfn-exposure-set②">(3)</a> <a href="#ref-for-dfn-exposure-set③">(4)</a> <a href="#ref-for-dfn-exposure-set④">(5)</a> <a href="#ref-for-dfn-exposure-set⑤">(6)</a> <a href="#ref-for-dfn-exposure-set⑥">(7)</a> <a href="#ref-for-dfn-exposure-set⑦">(8)</a> <a href="#ref-for-dfn-exposure-set⑧">(9)</a> <a href="#ref-for-dfn-exposure-set⑨">(10)</a> <a href="#ref-for-dfn-exposure-set①⓪">(11)</a> <a href="#ref-for-dfn-exposure-set①①">(12)</a> <a href="#ref-for-dfn-exposure-set①②">(13)</a>
    </li><li><a href="#ref-for-dfn-exposure-set①③">3.3.10. [LegacyWindowAlias]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-exposed">
   <b><a href="#dfn-exposed">#dfn-exposed</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-exposed">2.3.1. Using mixins and partials</a>
    </li><li><a href="#ref-for-dfn-exposed①">3.3.20. [SecureContext]</a>
    </li><li><a href="#ref-for-dfn-exposed②">3.6. Interfaces</a> <a href="#ref-for-dfn-exposed③">(2)</a> <a href="#ref-for-dfn-exposed④">(3)</a>
    </li><li><a href="#ref-for-dfn-exposed⑤">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-dfn-exposed⑥">3.6.4. Legacy callback interface object</a>
    </li><li><a href="#ref-for-dfn-exposed⑦">3.6.6. Constants</a>
    </li><li><a href="#ref-for-dfn-exposed⑧">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-dfn-exposed⑨">3.6.8. Operations</a> <a href="#ref-for-dfn-exposed①⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-exposed①①">3.6.8.1.1. Default toJSON operation</a>
    </li><li><a href="#ref-for-dfn-exposed①②">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-exposed①③">3.11. Namespaces</a>
    </li><li><a href="#ref-for-dfn-exposed①④">3.11.1. Namespace object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Global">
   <b><a href="#Global">#Global</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Global">2.2. Interfaces</a> <a href="#ref-for-Global①">(2)</a>
    </li><li><a href="#ref-for-Global②">2.11. Objects implementing interfaces</a>
    </li><li><a href="#ref-for-Global③">3.3.7. [Global]</a> <a href="#ref-for-Global④">(2)</a> <a href="#ref-for-Global⑤">(3)</a> <a href="#ref-for-Global⑥">(4)</a> <a href="#ref-for-Global⑦">(5)</a> <a href="#ref-for-Global⑧">(6)</a> <a href="#ref-for-Global⑨">(7)</a> <a href="#ref-for-Global①⓪">(8)</a> <a href="#ref-for-Global①①">(9)</a>
    </li><li><a href="#ref-for-Global①②">3.3.16. [OverrideBuiltins]</a>
    </li><li><a href="#ref-for-Global①③">3.6.3. Interface prototype object</a> <a href="#ref-for-Global①④">(2)</a> <a href="#ref-for-Global①⑤">(3)</a> <a href="#ref-for-Global①⑥">(4)</a> <a href="#ref-for-Global①⑦">(5)</a>
    </li><li><a href="#ref-for-Global①⑧">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-Global①⑨">3.6.6. Constants</a>
    </li><li><a href="#ref-for-Global②⓪">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-Global②①">3.6.8. Operations</a>
    </li><li><a href="#ref-for-Global②②">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-Global②③">3.6.9.1. @@iterator</a>
    </li><li><a href="#ref-for-Global②④">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-Global②⑤">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-Global②⑥">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-Global②⑦">3.6.10.3. values</a>
    </li><li><a href="#ref-for-Global②⑧">3.7. Platform objects implementing interfaces</a> <a href="#ref-for-Global②⑨">(2)</a>
    </li><li><a href="#ref-for-Global③⓪">3.7.1. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-Global③①">3.8.3. [[DefineOwnProperty]]</a> <a href="#ref-for-Global③②">(2)</a>
    </li><li><a href="#ref-for-Global③③">3.8.4. [[Delete]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-global-name">
   <b><a href="#dfn-global-name">#dfn-global-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-global-name">3.3.6. [Exposed]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="LegacyNamespace">
   <b><a href="#LegacyNamespace">#LegacyNamespace</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-LegacyNamespace">3.3.8. [LegacyNamespace]</a> <a href="#ref-for-LegacyNamespace①">(2)</a> <a href="#ref-for-LegacyNamespace②">(3)</a> <a href="#ref-for-LegacyNamespace③">(4)</a> <a href="#ref-for-LegacyNamespace④">(5)</a> <a href="#ref-for-LegacyNamespace⑤">(6)</a>
    </li><li><a href="#ref-for-LegacyNamespace⑥">3.6. Interfaces</a>
    </li><li><a href="#ref-for-LegacyNamespace⑦">3.7. Platform objects implementing interfaces</a>
    </li><li><a href="#ref-for-LegacyNamespace⑧">3.11.1. Namespace object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="LegacyUnenumerableNamedProperties">
   <b><a href="#LegacyUnenumerableNamedProperties">#LegacyUnenumerableNamedProperties</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-LegacyUnenumerableNamedProperties">3.3.9. [LegacyUnenumerableNamedProperties]</a> <a href="#ref-for-LegacyUnenumerableNamedProperties①">(2)</a> <a href="#ref-for-LegacyUnenumerableNamedProperties②">(3)</a> <a href="#ref-for-LegacyUnenumerableNamedProperties③">(4)</a> <a href="#ref-for-LegacyUnenumerableNamedProperties④">(5)</a> <a href="#ref-for-LegacyUnenumerableNamedProperties⑤">(6)</a>
    </li><li><a href="#ref-for-LegacyUnenumerableNamedProperties⑥">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-LegacyUnenumerableNamedProperties⑦">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="LegacyWindowAlias">
   <b><a href="#LegacyWindowAlias">#LegacyWindowAlias</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-LegacyWindowAlias">2.2. Interfaces</a> <a href="#ref-for-LegacyWindowAlias①">(2)</a>
    </li><li><a href="#ref-for-LegacyWindowAlias②">3.3.10. [LegacyWindowAlias]</a> <a href="#ref-for-LegacyWindowAlias③">(2)</a> <a href="#ref-for-LegacyWindowAlias④">(3)</a> <a href="#ref-for-LegacyWindowAlias⑤">(4)</a> <a href="#ref-for-LegacyWindowAlias⑥">(5)</a> <a href="#ref-for-LegacyWindowAlias⑦">(6)</a> <a href="#ref-for-LegacyWindowAlias⑧">(7)</a> <a href="#ref-for-LegacyWindowAlias⑨">(8)</a> <a href="#ref-for-LegacyWindowAlias①⓪">(9)</a> <a href="#ref-for-LegacyWindowAlias①①">(10)</a> <a href="#ref-for-LegacyWindowAlias①②">(11)</a> <a href="#ref-for-LegacyWindowAlias①③">(12)</a>
    </li><li><a href="#ref-for-LegacyWindowAlias①④">3.3.13. [NamedConstructor]</a>
    </li><li><a href="#ref-for-LegacyWindowAlias①⑤">3.6. Interfaces</a> <a href="#ref-for-LegacyWindowAlias①⑥">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="legacywindowalias-identifier">
   <b><a href="#legacywindowalias-identifier">#legacywindowalias-identifier</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-legacywindowalias-identifier">3.3.10. [LegacyWindowAlias]</a>
    </li><li><a href="#ref-for-legacywindowalias-identifier①">3.3.13. [NamedConstructor]</a>
    </li><li><a href="#ref-for-legacywindowalias-identifier②">3.6. Interfaces</a> <a href="#ref-for-legacywindowalias-identifier③">(2)</a> <a href="#ref-for-legacywindowalias-identifier④">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="LenientSetter">
   <b><a href="#LenientSetter">#LenientSetter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-LenientSetter">2.4.2. Attributes</a> <a href="#ref-for-LenientSetter①">(2)</a>
    </li><li><a href="#ref-for-LenientSetter②">3.3.11. [LenientSetter]</a> <a href="#ref-for-LenientSetter③">(2)</a> <a href="#ref-for-LenientSetter④">(3)</a> <a href="#ref-for-LenientSetter⑤">(4)</a> <a href="#ref-for-LenientSetter⑥">(5)</a> <a href="#ref-for-LenientSetter⑦">(6)</a> <a href="#ref-for-LenientSetter⑧">(7)</a> <a href="#ref-for-LenientSetter⑨">(8)</a> <a href="#ref-for-LenientSetter①⓪">(9)</a>
    </li><li><a href="#ref-for-LenientSetter①①">3.3.17. [PutForwards]</a>
    </li><li><a href="#ref-for-LenientSetter①②">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-LenientSetter①③">3.6.7. Attributes</a> <a href="#ref-for-LenientSetter①④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="LenientThis">
   <b><a href="#LenientThis">#LenientThis</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-LenientThis">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-LenientThis①">3.3.12. [LenientThis]</a> <a href="#ref-for-LenientThis②">(2)</a> <a href="#ref-for-LenientThis③">(3)</a> <a href="#ref-for-LenientThis④">(4)</a> <a href="#ref-for-LenientThis⑤">(5)</a> <a href="#ref-for-LenientThis⑥">(6)</a> <a href="#ref-for-LenientThis⑦">(7)</a>
    </li><li><a href="#ref-for-LenientThis⑧">3.6.7. Attributes</a> <a href="#ref-for-LenientThis⑨">(2)</a> <a href="#ref-for-LenientThis①⓪">(3)</a> <a href="#ref-for-LenientThis①①">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="NamedConstructor">
   <b><a href="#NamedConstructor">#NamedConstructor</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-NamedConstructor">2.2. Interfaces</a> <a href="#ref-for-NamedConstructor①">(2)</a>
    </li><li><a href="#ref-for-NamedConstructor②">2.4.3. Operations</a>
    </li><li><a href="#ref-for-NamedConstructor③">2.4.6. Overloading</a> <a href="#ref-for-NamedConstructor④">(2)</a> <a href="#ref-for-NamedConstructor⑤">(3)</a> <a href="#ref-for-NamedConstructor⑥">(4)</a>
    </li><li><a href="#ref-for-NamedConstructor⑦">3.3.10. [LegacyWindowAlias]</a>
    </li><li><a href="#ref-for-NamedConstructor⑧">3.3.13. [NamedConstructor]</a> <a href="#ref-for-NamedConstructor⑨">(2)</a> <a href="#ref-for-NamedConstructor①⓪">(3)</a> <a href="#ref-for-NamedConstructor①①">(4)</a> <a href="#ref-for-NamedConstructor①②">(5)</a> <a href="#ref-for-NamedConstructor①③">(6)</a> <a href="#ref-for-NamedConstructor①④">(7)</a> <a href="#ref-for-NamedConstructor①⑤">(8)</a> <a href="#ref-for-NamedConstructor①⑥">(9)</a> <a href="#ref-for-NamedConstructor①⑦">(10)</a>
    </li><li><a href="#ref-for-NamedConstructor①⑧">3.3.15. [NoInterfaceObject]</a>
    </li><li><a href="#ref-for-NamedConstructor①⑨">3.6. Interfaces</a> <a href="#ref-for-NamedConstructor②⓪">(2)</a>
    </li><li><a href="#ref-for-NamedConstructor②①">3.6.2. Named constructors</a> <a href="#ref-for-NamedConstructor②②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="namedconstructor-identifier">
   <b><a href="#namedconstructor-identifier">#namedconstructor-identifier</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-namedconstructor-identifier">3.3.10. [LegacyWindowAlias]</a>
    </li><li><a href="#ref-for-namedconstructor-identifier①">3.3.13. [NamedConstructor]</a>
    </li><li><a href="#ref-for-namedconstructor-identifier②">3.6. Interfaces</a>
    </li><li><a href="#ref-for-namedconstructor-identifier③">3.6.2. Named constructors</a> <a href="#ref-for-namedconstructor-identifier④">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="NewObject">
   <b><a href="#NewObject">#NewObject</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-NewObject">2.4.3. Operations</a>
    </li><li><a href="#ref-for-NewObject①">3.3.14. [NewObject]</a> <a href="#ref-for-NewObject②">(2)</a> <a href="#ref-for-NewObject③">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="NoInterfaceObject">
   <b><a href="#NoInterfaceObject">#NoInterfaceObject</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-NoInterfaceObject">2.2. Interfaces</a> <a href="#ref-for-NoInterfaceObject①">(2)</a> <a href="#ref-for-NoInterfaceObject②">(3)</a>
    </li><li><a href="#ref-for-NoInterfaceObject③">3.3.3. [Constructor]</a>
    </li><li><a href="#ref-for-NoInterfaceObject④">3.3.8. [LegacyNamespace]</a>
    </li><li><a href="#ref-for-NoInterfaceObject⑤">3.3.10. [LegacyWindowAlias]</a>
    </li><li><a href="#ref-for-NoInterfaceObject⑥">3.3.15. [NoInterfaceObject]</a> <a href="#ref-for-NoInterfaceObject⑦">(2)</a> <a href="#ref-for-NoInterfaceObject⑧">(3)</a> <a href="#ref-for-NoInterfaceObject⑨">(4)</a> <a href="#ref-for-NoInterfaceObject①⓪">(5)</a> <a href="#ref-for-NoInterfaceObject①①">(6)</a> <a href="#ref-for-NoInterfaceObject①②">(7)</a> <a href="#ref-for-NoInterfaceObject①③">(8)</a> <a href="#ref-for-NoInterfaceObject①④">(9)</a> <a href="#ref-for-NoInterfaceObject①⑤">(10)</a> <a href="#ref-for-NoInterfaceObject①⑥">(11)</a> <a href="#ref-for-NoInterfaceObject①⑦">(12)</a>
    </li><li><a href="#ref-for-NoInterfaceObject①⑧">3.6. Interfaces</a>
    </li><li><a href="#ref-for-NoInterfaceObject①⑨">3.6.3. Interface prototype object</a> <a href="#ref-for-NoInterfaceObject②⓪">(2)</a> <a href="#ref-for-NoInterfaceObject②①">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="OverrideBuiltins">
   <b><a href="#OverrideBuiltins">#OverrideBuiltins</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-OverrideBuiltins">2.2. Interfaces</a> <a href="#ref-for-OverrideBuiltins①">(2)</a>
    </li><li><a href="#ref-for-OverrideBuiltins②">3.3.7. [Global]</a> <a href="#ref-for-OverrideBuiltins③">(2)</a>
    </li><li><a href="#ref-for-OverrideBuiltins④">3.3.16. [OverrideBuiltins]</a> <a href="#ref-for-OverrideBuiltins⑤">(2)</a> <a href="#ref-for-OverrideBuiltins⑥">(3)</a> <a href="#ref-for-OverrideBuiltins⑦">(4)</a> <a href="#ref-for-OverrideBuiltins⑧">(5)</a>
    </li><li><a href="#ref-for-OverrideBuiltins⑨">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-OverrideBuiltins①⓪">3.8.7. Abstract operations</a> <a href="#ref-for-OverrideBuiltins①①">(2)</a> <a href="#ref-for-OverrideBuiltins①②">(3)</a> <a href="#ref-for-OverrideBuiltins①③">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="PutForwards">
   <b><a href="#PutForwards">#PutForwards</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-PutForwards">2.4.2. Attributes</a> <a href="#ref-for-PutForwards①">(2)</a>
    </li><li><a href="#ref-for-PutForwards②">3.3.11. [LenientSetter]</a>
    </li><li><a href="#ref-for-PutForwards③">3.3.17. [PutForwards]</a> <a href="#ref-for-PutForwards④">(2)</a> <a href="#ref-for-PutForwards⑤">(3)</a> <a href="#ref-for-PutForwards⑥">(4)</a> <a href="#ref-for-PutForwards⑦">(5)</a> <a href="#ref-for-PutForwards⑧">(6)</a> <a href="#ref-for-PutForwards⑨">(7)</a> <a href="#ref-for-PutForwards①⓪">(8)</a> <a href="#ref-for-PutForwards①①">(9)</a> <a href="#ref-for-PutForwards①②">(10)</a> <a href="#ref-for-PutForwards①③">(11)</a>
    </li><li><a href="#ref-for-PutForwards①④">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-PutForwards①⑤">3.6.7. Attributes</a> <a href="#ref-for-PutForwards①⑥">(2)</a> <a href="#ref-for-PutForwards①⑦">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Replaceable">
   <b><a href="#Replaceable">#Replaceable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Replaceable">2.4.2. Attributes</a> <a href="#ref-for-Replaceable①">(2)</a>
    </li><li><a href="#ref-for-Replaceable②">3.3.11. [LenientSetter]</a>
    </li><li><a href="#ref-for-Replaceable③">3.3.17. [PutForwards]</a>
    </li><li><a href="#ref-for-Replaceable④">3.3.18. [Replaceable]</a> <a href="#ref-for-Replaceable⑤">(2)</a> <a href="#ref-for-Replaceable⑥">(3)</a> <a href="#ref-for-Replaceable⑦">(4)</a> <a href="#ref-for-Replaceable⑧">(5)</a> <a href="#ref-for-Replaceable⑨">(6)</a> <a href="#ref-for-Replaceable①⓪">(7)</a>
    </li><li><a href="#ref-for-Replaceable①①">3.6.7. Attributes</a> <a href="#ref-for-Replaceable①②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="SameObject">
   <b><a href="#SameObject">#SameObject</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-SameObject">2.4.2. Attributes</a> <a href="#ref-for-SameObject①">(2)</a>
    </li><li><a href="#ref-for-SameObject②">3.3.19. [SameObject]</a> <a href="#ref-for-SameObject③">(2)</a> <a href="#ref-for-SameObject④">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="SecureContext">
   <b><a href="#SecureContext">#SecureContext</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-SecureContext">2.2. Interfaces</a> <a href="#ref-for-SecureContext①">(2)</a>
    </li><li><a href="#ref-for-SecureContext②">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-SecureContext③">2.4.1. Constants</a>
    </li><li><a href="#ref-for-SecureContext④">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-SecureContext⑤">2.4.3. Operations</a>
    </li><li><a href="#ref-for-SecureContext⑥">2.4.7. Iterable declarations</a>
    </li><li><a href="#ref-for-SecureContext⑦">2.5. Namespaces</a>
    </li><li><a href="#ref-for-SecureContext⑧">3.3.20. [SecureContext]</a> <a href="#ref-for-SecureContext⑨">(2)</a> <a href="#ref-for-SecureContext①⓪">(3)</a> <a href="#ref-for-SecureContext①①">(4)</a> <a href="#ref-for-SecureContext①②">(5)</a> <a href="#ref-for-SecureContext①③">(6)</a> <a href="#ref-for-SecureContext①④">(7)</a> <a href="#ref-for-SecureContext①⑤">(8)</a> <a href="#ref-for-SecureContext①⑥">(9)</a> <a href="#ref-for-SecureContext①⑦">(10)</a> <a href="#ref-for-SecureContext①⑧">(11)</a> <a href="#ref-for-SecureContext①⑨">(12)</a> <a href="#ref-for-SecureContext②⓪">(13)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="available-in-both-secure-and-non-secure-contexts">
   <b><a href="#available-in-both-secure-and-non-secure-contexts">#available-in-both-secure-and-non-secure-contexts</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-available-in-both-secure-and-non-secure-contexts">3.3.6. [Exposed]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-available-only-in-secure-contexts">
   <b><a href="#dfn-available-only-in-secure-contexts">#dfn-available-only-in-secure-contexts</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-available-only-in-secure-contexts">3.3.20. [SecureContext]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="TreatNonObjectAsNull">
   <b><a href="#TreatNonObjectAsNull">#TreatNonObjectAsNull</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-TreatNonObjectAsNull">2.9. Callback functions</a>
    </li><li><a href="#ref-for-TreatNonObjectAsNull①">3.2.17. Callback function types</a> <a href="#ref-for-TreatNonObjectAsNull②">(2)</a>
    </li><li><a href="#ref-for-TreatNonObjectAsNull③">3.2.18. Nullable types — T?</a>
    </li><li><a href="#ref-for-TreatNonObjectAsNull④">3.3.21. [TreatNonObjectAsNull]</a> <a href="#ref-for-TreatNonObjectAsNull⑤">(2)</a> <a href="#ref-for-TreatNonObjectAsNull⑥">(3)</a> <a href="#ref-for-TreatNonObjectAsNull⑦">(4)</a> <a href="#ref-for-TreatNonObjectAsNull⑧">(5)</a>
    </li><li><a href="#ref-for-TreatNonObjectAsNull⑨">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="TreatNullAs">
   <b><a href="#TreatNullAs">#TreatNullAs</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-TreatNullAs">2.12.29. Annotated types</a>
    </li><li><a href="#ref-for-TreatNullAs①">3.2.9. DOMString</a>
    </li><li><a href="#ref-for-TreatNullAs②">3.3.22. [TreatNullAs]</a> <a href="#ref-for-TreatNullAs③">(2)</a> <a href="#ref-for-TreatNullAs④">(3)</a> <a href="#ref-for-TreatNullAs⑤">(4)</a> <a href="#ref-for-TreatNullAs⑥">(5)</a> <a href="#ref-for-TreatNullAs⑦">(6)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Unforgeable">
   <b><a href="#Unforgeable">#Unforgeable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Unforgeable">2.4.2. Attributes</a>
    </li><li><a href="#ref-for-Unforgeable①">2.4.3. Operations</a>
    </li><li><a href="#ref-for-Unforgeable②">3.3.23. [Unforgeable]</a> <a href="#ref-for-Unforgeable③">(2)</a> <a href="#ref-for-Unforgeable④">(3)</a> <a href="#ref-for-Unforgeable⑤">(4)</a> <a href="#ref-for-Unforgeable⑥">(5)</a> <a href="#ref-for-Unforgeable⑦">(6)</a> <a href="#ref-for-Unforgeable⑧">(7)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-unforgeable-on-an-interface">
   <b><a href="#dfn-unforgeable-on-an-interface">#dfn-unforgeable-on-an-interface</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-unforgeable-on-an-interface">3.3.23. [Unforgeable]</a>
    </li><li><a href="#ref-for-dfn-unforgeable-on-an-interface①">3.6.7. Attributes</a> <a href="#ref-for-dfn-unforgeable-on-an-interface②">(2)</a> <a href="#ref-for-dfn-unforgeable-on-an-interface③">(3)</a> <a href="#ref-for-dfn-unforgeable-on-an-interface④">(4)</a>
    </li><li><a href="#ref-for-dfn-unforgeable-on-an-interface⑤">3.6.8. Operations</a> <a href="#ref-for-dfn-unforgeable-on-an-interface⑥">(2)</a> <a href="#ref-for-dfn-unforgeable-on-an-interface⑦">(3)</a> <a href="#ref-for-dfn-unforgeable-on-an-interface⑧">(4)</a>
    </li><li><a href="#ref-for-dfn-unforgeable-on-an-interface⑨">3.6.8.2. Stringifiers</a> <a href="#ref-for-dfn-unforgeable-on-an-interface①⓪">(2)</a>
    </li><li><a href="#ref-for-dfn-unforgeable-on-an-interface①①">3.8. Legacy platform objects</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Unscopable">
   <b><a href="#Unscopable">#Unscopable</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Unscopable">3.3.24. [Unscopable]</a> <a href="#ref-for-Unscopable①">(2)</a> <a href="#ref-for-Unscopable②">(3)</a> <a href="#ref-for-Unscopable③">(4)</a> <a href="#ref-for-Unscopable④">(5)</a>
    </li><li><a href="#ref-for-Unscopable⑤">3.6.3. Interface prototype object</a> <a href="#ref-for-Unscopable⑥">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-perform-a-security-check">
   <b><a href="#dfn-perform-a-security-check">#dfn-perform-a-security-check</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-perform-a-security-check">3.6.7. Attributes</a> <a href="#ref-for-dfn-perform-a-security-check①">(2)</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check②">3.6.8. Operations</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check③">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check④">3.6.9.1. @@iterator</a> <a href="#ref-for-dfn-perform-a-security-check⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check⑥">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check⑦">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check⑧">3.6.10.3. values</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check⑨">3.6.10.5. Iterator prototype object</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①⓪">3.6.11. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①①">3.6.11.1. size</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①②">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①③">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①④">3.6.11.7. set</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①⑤">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①⑥">3.6.12.1. size</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①⑦">3.6.12.4. has</a>
    </li><li><a href="#ref-for-dfn-perform-a-security-check①⑧">3.6.12.5. add and delete</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-overload-resolution-algorithm">
   <b><a href="#dfn-overload-resolution-algorithm">#dfn-overload-resolution-algorithm</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-overload-resolution-algorithm">2.4.6.1. Overloading vs. union types</a> <a href="#ref-for-dfn-overload-resolution-algorithm①">(2)</a> <a href="#ref-for-dfn-overload-resolution-algorithm②">(3)</a>
    </li><li><a href="#ref-for-dfn-overload-resolution-algorithm③">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-dfn-overload-resolution-algorithm④">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-dfn-overload-resolution-algorithm⑤">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-interface-object">
   <b><a href="#dfn-interface-object">#dfn-interface-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-interface-object">2.4.5. Static attributes and operations</a>
    </li><li><a href="#ref-for-dfn-interface-object①">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-interface-object②">3.3.3. [Constructor]</a>
    </li><li><a href="#ref-for-dfn-interface-object③">3.3.8. [LegacyNamespace]</a>
    </li><li><a href="#ref-for-dfn-interface-object④">3.3.10. [LegacyWindowAlias]</a> <a href="#ref-for-dfn-interface-object⑤">(2)</a> <a href="#ref-for-dfn-interface-object⑥">(3)</a>
    </li><li><a href="#ref-for-dfn-interface-object⑦">3.3.13. [NamedConstructor]</a>
    </li><li><a href="#ref-for-dfn-interface-object⑧">3.3.15. [NoInterfaceObject]</a>
    </li><li><a href="#ref-for-dfn-interface-object⑨">3.6. Interfaces</a>
    </li><li><a href="#ref-for-dfn-interface-object①⓪">3.6.1. Interface object</a> <a href="#ref-for-dfn-interface-object①①">(2)</a> <a href="#ref-for-dfn-interface-object①②">(3)</a> <a href="#ref-for-dfn-interface-object①③">(4)</a> <a href="#ref-for-dfn-interface-object①④">(5)</a> <a href="#ref-for-dfn-interface-object①⑤">(6)</a> <a href="#ref-for-dfn-interface-object①⑥">(7)</a>
    </li><li><a href="#ref-for-dfn-interface-object①⑦">3.6.3. Interface prototype object</a> <a href="#ref-for-dfn-interface-object①⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-interface-object①⑨">3.6.6. Constants</a>
    </li><li><a href="#ref-for-dfn-interface-object②⓪">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-dfn-interface-object②①">3.6.8. Operations</a>
    </li><li><a href="#ref-for-dfn-interface-object②②">3.11.1. Namespace object</a>
    </li><li><a href="#ref-for-dfn-interface-object②③">3.12.3. Creating and throwing exceptions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-named-constructor">
   <b><a href="#dfn-named-constructor">#dfn-named-constructor</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-named-constructor">2.4.6. Overloading</a>
    </li><li><a href="#ref-for-dfn-named-constructor①">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-named-constructor②">3.6.2. Named constructors</a> <a href="#ref-for-dfn-named-constructor③">(2)</a> <a href="#ref-for-dfn-named-constructor④">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-interface-prototype-object">
   <b><a href="#dfn-interface-prototype-object">#dfn-interface-prototype-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-interface-prototype-object">2.3. Interface mixins</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object①">2.4.7. Iterable declarations</a> <a href="#ref-for-dfn-interface-prototype-object②">(2)</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object④">3.3.7. [Global]</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object⑤">3.3.18. [Replaceable]</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object⑥">3.3.24. [Unscopable]</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object⑦">3.6.1. Interface object</a> <a href="#ref-for-dfn-interface-prototype-object⑧">(2)</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object⑨">3.6.2. Named constructors</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object①⓪">3.6.3. Interface prototype object</a> <a href="#ref-for-dfn-interface-prototype-object①①">(2)</a> <a href="#ref-for-dfn-interface-prototype-object①②">(3)</a> <a href="#ref-for-dfn-interface-prototype-object①③">(4)</a> <a href="#ref-for-dfn-interface-prototype-object①④">(5)</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object①⑤">3.6.5. Named properties object</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object①⑥">3.6.6. Constants</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object①⑦">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object①⑧">3.6.8. Operations</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object①⑨">3.6.8.2. Stringifiers</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②⓪">3.6.9.1. @@iterator</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②①">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②②">3.6.10.1. entries</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②③">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②④">3.6.10.3. values</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②⑤">3.6.11. Maplike declarations</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②⑥">3.6.11.1. size</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②⑦">3.6.11.2. entries</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②⑧">3.6.11.3. keys and values</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object②⑨">3.6.11.4. get and has</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③⓪">3.6.11.5. clear</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③①">3.6.11.6. delete</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③②">3.6.11.7. set</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③③">3.6.12. Setlike declarations</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③④">3.6.12.1. size</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③⑤">3.6.12.2. values</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③⑥">3.6.12.3. entries and keys</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③⑦">3.6.12.4. has</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③⑧">3.6.12.5. add and delete</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object③⑨">3.6.12.6. clear</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object④⓪">3.7. Platform objects implementing interfaces</a> <a href="#ref-for-dfn-interface-prototype-object④①">(2)</a>
    </li><li><a href="#ref-for-dfn-interface-prototype-object④②">3.12.1. DOMException custom bindings</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="create-an-interface-prototype-object">
   <b><a href="#create-an-interface-prototype-object">#create-an-interface-prototype-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-create-an-interface-prototype-object">3.12.1. DOMException custom bindings</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-legacy-callback-interface-object">
   <b><a href="#dfn-legacy-callback-interface-object">#dfn-legacy-callback-interface-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-legacy-callback-interface-object">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-legacy-callback-interface-object①">3.6.4. Legacy callback interface object</a> <a href="#ref-for-dfn-legacy-callback-interface-object②">(2)</a> <a href="#ref-for-dfn-legacy-callback-interface-object③">(3)</a>
    </li><li><a href="#ref-for-dfn-legacy-callback-interface-object④">3.6.6. Constants</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-named-properties-object">
   <b><a href="#dfn-named-properties-object">#dfn-named-properties-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-named-properties-object">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-named-properties-object①">3.3.7. [Global]</a> <a href="#ref-for-dfn-named-properties-object②">(2)</a>
    </li><li><a href="#ref-for-dfn-named-properties-object③">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-dfn-named-properties-object④">3.6.5. Named properties object</a> <a href="#ref-for-dfn-named-properties-object⑤">(2)</a>
    </li><li><a href="#ref-for-dfn-named-properties-object⑥">3.6.5.1. [[GetOwnProperty]]</a> <a href="#ref-for-dfn-named-properties-object⑦">(2)</a>
    </li><li><a href="#ref-for-dfn-named-properties-object⑧">3.6.5.2. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-named-properties-object⑨">3.6.5.3. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-named-properties-object①⓪">3.6.5.4. [[SetPrototypeOf]]</a>
    </li><li><a href="#ref-for-dfn-named-properties-object①①">3.6.5.5. [[PreventExtensions]]</a> <a href="#ref-for-dfn-named-properties-object①②">(2)</a>
    </li><li><a href="#ref-for-dfn-named-properties-object①③">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="define-the-constants">
   <b><a href="#define-the-constants">#define-the-constants</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-define-the-constants">3.6.1. Interface object</a>
    </li><li><a href="#ref-for-define-the-constants①">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-define-the-constants②">3.6.4. Legacy callback interface object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="define-the-regular-attributes">
   <b><a href="#define-the-regular-attributes">#define-the-regular-attributes</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-define-the-regular-attributes">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-define-the-regular-attributes①">3.7. Platform objects implementing interfaces</a>
    </li><li><a href="#ref-for-define-the-regular-attributes②">3.11.1. Namespace object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="define-the-static-attributes">
   <b><a href="#define-the-static-attributes">#define-the-static-attributes</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-define-the-static-attributes">3.6.1. Interface object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="define-the-unforgeable-regular-attributes">
   <b><a href="#define-the-unforgeable-regular-attributes">#define-the-unforgeable-regular-attributes</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-define-the-unforgeable-regular-attributes">3.7. Platform objects implementing interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="define-the-attributes">
   <b><a href="#define-the-attributes">#define-the-attributes</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-define-the-attributes">3.6.7. Attributes</a> <a href="#ref-for-define-the-attributes①">(2)</a> <a href="#ref-for-define-the-attributes②">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-attribute-getter">
   <b><a href="#dfn-attribute-getter">#dfn-attribute-getter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-attribute-getter">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-attribute-getter①">3.6.7. Attributes</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-attribute-setter">
   <b><a href="#dfn-attribute-setter">#dfn-attribute-setter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-attribute-setter">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-attribute-setter①">3.6.7. Attributes</a> <a href="#ref-for-dfn-attribute-setter②">(2)</a> <a href="#ref-for-dfn-attribute-setter③">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="define-the-regular-operations">
   <b><a href="#define-the-regular-operations">#define-the-regular-operations</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-define-the-regular-operations">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-define-the-regular-operations①">3.7. Platform objects implementing interfaces</a>
    </li><li><a href="#ref-for-define-the-regular-operations②">3.11.1. Namespace object</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="define-the-unforgeable-regular-operations">
   <b><a href="#define-the-unforgeable-regular-operations">#define-the-unforgeable-regular-operations</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-define-the-unforgeable-regular-operations">3.7. Platform objects implementing interfaces</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="define-the-operations">
   <b><a href="#define-the-operations">#define-the-operations</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-define-the-operations">3.6.8. Operations</a> <a href="#ref-for-define-the-operations①">(2)</a> <a href="#ref-for-define-the-operations②">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-create-operation-function">
   <b><a href="#dfn-create-operation-function">#dfn-create-operation-function</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-create-operation-function">3.6.8. Operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="corresponding-default-operation">
   <b><a href="#corresponding-default-operation">#corresponding-default-operation</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-corresponding-default-operation">3.3.4. [Default]</a> <a href="#ref-for-corresponding-default-operation①">(2)</a>
    </li><li><a href="#ref-for-corresponding-default-operation②">3.6.8. Operations</a>
    </li><li><a href="#ref-for-corresponding-default-operation③">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="default-tojson-operation">
   <b><a href="#default-tojson-operation">#default-tojson-operation</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-default-tojson-operation">2.4.3.1. toJSON</a>
    </li><li><a href="#ref-for-default-tojson-operation①">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-default-tojson-operation②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="collect-attribute-values-of-an-inheritance-stack">
   <b><a href="#collect-attribute-values-of-an-inheritance-stack">#collect-attribute-values-of-an-inheritance-stack</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-collect-attribute-values-of-an-inheritance-stack">3.6.8.1.1. Default toJSON operation</a> <a href="#ref-for-collect-attribute-values-of-an-inheritance-stack①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="collect-attribute-values">
   <b><a href="#collect-attribute-values">#collect-attribute-values</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-collect-attribute-values">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="create-an-inheritance-stack">
   <b><a href="#create-an-inheritance-stack">#create-an-inheritance-stack</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-create-an-inheritance-stack">3.6.8.1.1. Default toJSON operation</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-default-iterator-object">
   <b><a href="#dfn-default-iterator-object">#dfn-default-iterator-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-default-iterator-object">3.6.9.1. @@iterator</a>
    </li><li><a href="#ref-for-dfn-default-iterator-object①">3.6.10.2. keys</a>
    </li><li><a href="#ref-for-dfn-default-iterator-object②">3.6.10.3. values</a>
    </li><li><a href="#ref-for-dfn-default-iterator-object③">3.6.10.4. Default iterator objects</a> <a href="#ref-for-dfn-default-iterator-object④">(2)</a> <a href="#ref-for-dfn-default-iterator-object⑤">(3)</a> <a href="#ref-for-dfn-default-iterator-object⑥">(4)</a>
    </li><li><a href="#ref-for-dfn-default-iterator-object⑦">3.6.10.5. Iterator prototype object</a> <a href="#ref-for-dfn-default-iterator-object⑧">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-iterator-prototype-object">
   <b><a href="#dfn-iterator-prototype-object">#dfn-iterator-prototype-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-iterator-prototype-object">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-iterator-prototype-object①">3.6.10.4. Default iterator objects</a> <a href="#ref-for-dfn-iterator-prototype-object②">(2)</a>
    </li><li><a href="#ref-for-dfn-iterator-prototype-object③">3.6.10.5. Iterator prototype object</a> <a href="#ref-for-dfn-iterator-prototype-object④">(2)</a> <a href="#ref-for-dfn-iterator-prototype-object⑤">(3)</a> <a href="#ref-for-dfn-iterator-prototype-object⑥">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-forwards-to-the-internal-map-object">
   <b><a href="#dfn-forwards-to-the-internal-map-object">#dfn-forwards-to-the-internal-map-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-forwards-to-the-internal-map-object">3.6.11.3. keys and values</a>
    </li><li><a href="#ref-for-dfn-forwards-to-the-internal-map-object①">3.6.11.5. clear</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-map-size-getter">
   <b><a href="#dfn-map-size-getter">#dfn-map-size-getter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-map-size-getter">3.1. ECMAScript environment</a>
    </li><li><a href="#ref-for-dfn-map-size-getter①">3.6.11.1. size</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-forwards-to-the-internal-set-object">
   <b><a href="#dfn-forwards-to-the-internal-set-object">#dfn-forwards-to-the-internal-set-object</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-forwards-to-the-internal-set-object">3.6.12.3. entries and keys</a>
    </li><li><a href="#ref-for-dfn-forwards-to-the-internal-set-object①">3.6.12.6. clear</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-set-size-getter">
   <b><a href="#dfn-set-size-getter">#dfn-set-size-getter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-set-size-getter">3.6.12.1. size</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-primary-interface">
   <b><a href="#dfn-primary-interface">#dfn-primary-interface</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-primary-interface">3.7. Platform objects implementing interfaces</a> <a href="#ref-for-dfn-primary-interface①">(2)</a> <a href="#ref-for-dfn-primary-interface②">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-unforgeable-property-name">
   <b><a href="#dfn-unforgeable-property-name">#dfn-unforgeable-property-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-unforgeable-property-name">3.8.3. [[DefineOwnProperty]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="legacy-platform-object-getownproperty">
   <b><a href="#legacy-platform-object-getownproperty">#legacy-platform-object-getownproperty</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-legacy-platform-object-getownproperty">3.3.9. [LegacyUnenumerableNamedProperties]</a>
    </li><li><a href="#ref-for-legacy-platform-object-getownproperty">3.8. Legacy platform objects</a> <a href="#ref-for-legacy-platform-object-getownproperty">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="is-an-array-index">
   <b><a href="#is-an-array-index">#is-an-array-index</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-is-an-array-index">3.8.2. [[Set]]</a> <a href="#ref-for-is-an-array-index①">(2)</a>
    </li><li><a href="#ref-for-is-an-array-index②">3.8.3. [[DefineOwnProperty]]</a>
    </li><li><a href="#ref-for-is-an-array-index③">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-is-an-array-index④">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-named-property-visibility">
   <b><a href="#dfn-named-property-visibility">#dfn-named-property-visibility</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-named-property-visibility">3.6.5.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-dfn-named-property-visibility①">3.8.4. [[Delete]]</a>
    </li><li><a href="#ref-for-dfn-named-property-visibility②">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-dfn-named-property-visibility③">3.8.7. Abstract operations</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="invoke-indexed-setter">
   <b><a href="#invoke-indexed-setter">#invoke-indexed-setter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-invoke-indexed-setter">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-invoke-indexed-setter①">3.8.3. [[DefineOwnProperty]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="invoke-named-setter">
   <b><a href="#invoke-named-setter">#invoke-named-setter</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-invoke-named-setter">3.8.2. [[Set]]</a>
    </li><li><a href="#ref-for-invoke-named-setter①">3.8.3. [[DefineOwnProperty]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="LegacyPlatformObjectGetOwnProperty">
   <b><a href="#LegacyPlatformObjectGetOwnProperty">#LegacyPlatformObjectGetOwnProperty</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-LegacyPlatformObjectGetOwnProperty">3.8.1. [[GetOwnProperty]]</a>
    </li><li><a href="#ref-for-LegacyPlatformObjectGetOwnProperty①">3.8.2. [[Set]]</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-single-operation-callback-interface">
   <b><a href="#dfn-single-operation-callback-interface">#dfn-single-operation-callback-interface</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-single-operation-callback-interface">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-dfn-single-operation-callback-interface①">(2)</a> <a href="#ref-for-dfn-single-operation-callback-interface②">(3)</a> <a href="#ref-for-dfn-single-operation-callback-interface③">(4)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="web-idl-arguments-list">
   <b><a href="#web-idl-arguments-list">#web-idl-arguments-list</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-web-idl-arguments-list">3.9. User objects implementing callback interfaces</a> <a href="#ref-for-web-idl-arguments-list①">(2)</a>
    </li><li><a href="#ref-for-web-idl-arguments-list②">3.10. Invoking callback functions</a> <a href="#ref-for-web-idl-arguments-list③">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="web-idl-arguments-list-converting">
   <b><a href="#web-idl-arguments-list-converting">#web-idl-arguments-list-converting</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-web-idl-arguments-list-converting">3.9. User objects implementing callback interfaces</a>
    </li><li><a href="#ref-for-web-idl-arguments-list-converting①">3.10. Invoking callback functions</a> <a href="#ref-for-web-idl-arguments-list-converting②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-callback-this-value">
   <b><a href="#dfn-callback-this-value">#dfn-callback-this-value</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-callback-this-value">3.6.9.2. forEach</a>
    </li><li><a href="#ref-for-dfn-callback-this-value①">3.10. Invoking callback functions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="invoke-a-callback-function">
   <b><a href="#invoke-a-callback-function">#invoke-a-callback-function</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-invoke-a-callback-function">3.6.9.2. forEach</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="es-exception-objects">
   <b><a href="#es-exception-objects">#es-exception-objects</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-es-exception-objects">3.8.6. [[OwnPropertyKeys]]</a>
    </li><li><a href="#ref-for-es-exception-objects">3.12.3. Creating and throwing exceptions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="an-exception-was-thrown">
   <b><a href="#an-exception-was-thrown">#an-exception-was-thrown</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-an-exception-was-thrown">3.6.7. Attributes</a>
    </li><li><a href="#ref-for-an-exception-was-thrown①">3.6.8. Operations</a>
    </li><li><a href="#ref-for-an-exception-was-thrown②">Document conventions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="ArrayBufferView">
   <b><a href="#ArrayBufferView">#ArrayBufferView</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-ArrayBufferView">4.1. ArrayBufferView</a> <a href="#ref-for-ArrayBufferView①">(2)</a>
    </li><li><a href="#ref-for-ArrayBufferView②">4.2. BufferSource</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="BufferSource">
   <b><a href="#BufferSource">#BufferSource</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-BufferSource">2.12.31. Buffer source types</a>
    </li><li><a href="#ref-for-BufferSource①">4.2. BufferSource</a> <a href="#ref-for-BufferSource②">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="idl-DOMException">
   <b><a href="#idl-DOMException">#idl-DOMException</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-idl-DOMException">2.7. Exceptions</a> <a href="#ref-for-idl-DOMException①">(2)</a> <a href="#ref-for-idl-DOMException②">(3)</a> <a href="#ref-for-idl-DOMException③">(4)</a> <a href="#ref-for-idl-DOMException④">(5)</a> <a href="#ref-for-idl-DOMException⑤">(6)</a> <a href="#ref-for-idl-DOMException⑥">(7)</a> <a href="#ref-for-idl-DOMException⑦">(8)</a> <a href="#ref-for-idl-DOMException⑧">(9)</a> <a href="#ref-for-idl-DOMException⑨">(10)</a> <a href="#ref-for-idl-DOMException①⓪">(11)</a> <a href="#ref-for-idl-DOMException①①">(12)</a>
    </li><li><a href="#ref-for-idl-DOMException①②">2.7.1. Error names</a> <a href="#ref-for-idl-DOMException①③">(2)</a> <a href="#ref-for-idl-DOMException①④">(3)</a> <a href="#ref-for-idl-DOMException①⑤">(4)</a> <a href="#ref-for-idl-DOMException①⑥">(5)</a> <a href="#ref-for-idl-DOMException①⑦">(6)</a> <a href="#ref-for-idl-DOMException①⑧">(7)</a> <a href="#ref-for-idl-DOMException①⑨">(8)</a>
    </li><li><a href="#ref-for-idl-DOMException②⓪">2.12. Types</a>
    </li><li><a href="#ref-for-idl-DOMException②①">2.12.30. Error</a>
    </li><li><a href="#ref-for-idl-DOMException②②">3.2.22. Union types</a> <a href="#ref-for-idl-DOMException②③">(2)</a>
    </li><li><a href="#ref-for-idl-DOMException②④">3.2.23. Error</a>
    </li><li><a href="#ref-for-idl-DOMException②⑤">3.2.24. DOMException</a> <a href="#ref-for-idl-DOMException②⑥">(2)</a> <a href="#ref-for-idl-DOMException②⑦">(3)</a> <a href="#ref-for-idl-DOMException②⑧">(4)</a> <a href="#ref-for-idl-DOMException②⑨">(5)</a> <a href="#ref-for-idl-DOMException③⓪">(6)</a>
    </li><li><a href="#ref-for-idl-DOMException③①">3.5. Overload resolution algorithm</a> <a href="#ref-for-idl-DOMException③②">(2)</a>
    </li><li><a href="#ref-for-idl-DOMException③③">3.6.3. Interface prototype object</a>
    </li><li><a href="#ref-for-idl-DOMException③④">3.12.1. DOMException custom bindings</a> <a href="#ref-for-idl-DOMException③⑤">(2)</a> <a href="#ref-for-idl-DOMException③⑥">(3)</a>
    </li><li><a href="#ref-for-idl-DOMException③⑦">3.12.2. Exception objects</a> <a href="#ref-for-idl-DOMException③⑧">(2)</a>
    </li><li><a href="#ref-for-idl-DOMException③⑨">3.12.3. Creating and throwing exceptions</a> <a href="#ref-for-idl-DOMException④⓪">(2)</a> <a href="#ref-for-idl-DOMException④①">(3)</a> <a href="#ref-for-idl-DOMException④②">(4)</a> <a href="#ref-for-idl-DOMException④③">(5)</a> <a href="#ref-for-idl-DOMException④④">(6)</a> <a href="#ref-for-idl-DOMException④⑤">(7)</a>
    </li><li><a href="#ref-for-idl-DOMException④⑥">4.3. DOMException</a> <a href="#ref-for-idl-DOMException④⑦">(2)</a> <a href="#ref-for-idl-DOMException④⑧">(3)</a> <a href="#ref-for-idl-DOMException④⑨">(4)</a> <a href="#ref-for-idl-DOMException⑤⓪">(5)</a> <a href="#ref-for-idl-DOMException⑤①">(6)</a> <a href="#ref-for-idl-DOMException⑤②">(7)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="domexception-name">
   <b><a href="#domexception-name">#domexception-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-domexception-name">4.3. DOMException</a> <a href="#ref-for-domexception-name①">(2)</a> <a href="#ref-for-domexception-name②">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="domexception-message">
   <b><a href="#domexception-message">#domexception-message</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-domexception-message">4.3. DOMException</a> <a href="#ref-for-domexception-message①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-domexception">
   <b><a href="#dom-domexception-domexception">#dom-domexception-domexception</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-domexception">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-name">
   <b><a href="#dom-domexception-name">#dom-domexception-name</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-name">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-message">
   <b><a href="#dom-domexception-message">#dom-domexception-message</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-message">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dom-domexception-code">
   <b><a href="#dom-domexception-code">#dom-domexception-code</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dom-domexception-code">4.3. DOMException</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="DOMTimeStamp">
   <b><a href="#DOMTimeStamp">#DOMTimeStamp</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-DOMTimeStamp">4.4. DOMTimeStamp</a> <a href="#ref-for-DOMTimeStamp①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="Function">
   <b><a href="#Function">#Function</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-Function">4.5. Function</a> <a href="#ref-for-Function①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="VoidFunction">
   <b><a href="#VoidFunction">#VoidFunction</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-VoidFunction">4.6. VoidFunction</a> <a href="#ref-for-VoidFunction①">(2)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-example-term">
   <b><a href="#dfn-example-term">#dfn-example-term</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-example-term">Document conventions</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-conforming-set-of-idl-fragments">
   <b><a href="#dfn-conforming-set-of-idl-fragments">#dfn-conforming-set-of-idl-fragments</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-conforming-set-of-idl-fragments">Conformance</a> <a href="#ref-for-dfn-conforming-set-of-idl-fragments①">(2)</a> <a href="#ref-for-dfn-conforming-set-of-idl-fragments②">(3)</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-conforming-implementation">
   <b><a href="#dfn-conforming-implementation">#dfn-conforming-implementation</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-conforming-implementation">4. Common definitions</a>
    </li><li><a href="#ref-for-dfn-conforming-implementation①">7. Referencing this specification</a>
    </li><li><a href="#ref-for-dfn-conforming-implementation②">Conformance</a>
   </li></ul>
  </aside>
  <aside class="dfn-panel" data-for="dfn-conforming-ecmascript-implementation">
   <b><a href="#dfn-conforming-ecmascript-implementation">#dfn-conforming-ecmascript-implementation</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-dfn-conforming-ecmascript-implementation">Conformance</a>
   </li></ul>
  </aside>
<script>/* script-var-click-highlighting */

    document.addEventListener("click", e=>{
        if(e.target.nodeName == "VAR") {
            highlightSameAlgoVars(e.target);
        }
    });
    {
        const indexCounts = new Map();
        const indexNames = new Map();
        function highlightSameAlgoVars(v) {
            // Find the algorithm container.
            let algoContainer = null;
            let searchEl = v;
            while(algoContainer == null && searchEl != document.body) {
                searchEl = searchEl.parentNode;
                if(searchEl.hasAttribute("data-algorithm")) {
                    algoContainer = searchEl;
                }
            }

            // Not highlighting document-global vars,
            // too likely to be unrelated.
            if(algoContainer == null) return;

            const algoName = algoContainer.getAttribute("data-algorithm");
            const varName = getVarName(v);
            const addClass = !v.classList.contains("selected");
            let highlightClass = null;
            if(addClass) {
                const index = chooseHighlightIndex(algoName, varName);
                indexCounts.get(algoName)[index] += 1;
                indexNames.set(algoName+"///"+varName, index);
                highlightClass = nameFromIndex(index);
            } else {
                const index = previousHighlightIndex(algoName, varName);
                indexCounts.get(algoName)[index] -= 1;
                highlightClass = nameFromIndex(index);
            }

            // Find all same-name vars, and toggle their class appropriately.
            for(const el of algoContainer.querySelectorAll("var")) {
                if(getVarName(el) == varName) {
                    el.classList.toggle("selected", addClass);
                    el.classList.toggle(highlightClass, addClass);
                }
            }
        }
        function getVarName(el) {
            return el.textContent.replace(/(\s| )+/, " ").trim();
        }
        function chooseHighlightIndex(algoName, varName) {
            let indexes = null;
            if(indexCounts.has(algoName)) {
                indexes = indexCounts.get(algoName);
            } else {
                // 7 classes right now
                indexes = [0,0,0,0,0,0,0];
                indexCounts.set(algoName, indexes);
            }

            // If the element was recently unclicked,
            // *and* that color is still unclaimed,
            // give it back the same color.
            const lastIndex = previousHighlightIndex(algoName, varName);
            if(indexes[lastIndex] === 0) return lastIndex;

            // Find the earliest index with the lowest count.
            const minCount = Math.min.apply(null, indexes);
            let index = null;
            for(var i = 0; i < indexes.length; i++) {
                if(indexes[i] == minCount) {
                    return i;
                }
            }
        }
        function previousHighlightIndex(algoName, varName) {
            return indexNames.get(algoName+"///"+varName);
        }
        function nameFromIndex(index) {
            return "selected" + index;
        }
    }
    </script>
<script>/* script-dfn-panel */

document.body.addEventListener("click", function(e) {
    var queryAll = function(sel) { return [].slice.call(document.querySelectorAll(sel)); }
    // Find the dfn element or panel, if any, that was clicked on.
    var el = e.target;
    var target;
    var hitALink = false;
    while(el.parentElement) {
        if(el.tagName == "A") {
            // Clicking on a link in a <dfn> shouldn't summon the panel
            hitALink = true;
        }
        if(el.classList.contains("dfn-paneled")) {
            target = "dfn";
            break;
        }
        if(el.classList.contains("dfn-panel")) {
            target = "dfn-panel";
            break;
        }
        el = el.parentElement;
    }
    if(target != "dfn-panel") {
        // Turn off any currently "on" or "activated" panels.
        queryAll(".dfn-panel.on, .dfn-panel.activated").forEach(function(el){
            el.classList.remove("on");
            el.classList.remove("activated");
        });
    }
    if(target == "dfn" && !hitALink) {
        // open the panel
        var dfnPanel = document.querySelector(".dfn-panel[data-for='" + el.id + "']");
        if(dfnPanel) {
            dfnPanel.classList.add("on");
            var rect = el.getBoundingClientRect();
            dfnPanel.style.left = window.scrollX + rect.right + 5 + "px";
            dfnPanel.style.top = window.scrollY + rect.top + "px";
            var panelRect = dfnPanel.getBoundingClientRect();
            var panelWidth = panelRect.right - panelRect.left;
            if(panelRect.right > document.body.scrollWidth && (rect.left - (panelWidth + 5)) > 0) {
                // Reposition, because the panel is overflowing
                dfnPanel.style.left = window.scrollX + rect.left - (panelWidth + 5) + "px";
            }
        } else {
            console.log("Couldn't find .dfn-panel[data-for='" + el.id + "']");
        }
    } else if(target == "dfn-panel") {
        // Switch it to "activated" state, which pins it.
        el.classList.add("activated");
        el.style.left = null;
        el.style.top = null;
    }

});
</script></body></html>