Files

157 lines
23 KiB
HTML

<!DOCTYPE html><html lang="en-GB-oxendict"><head><meta name="viewport" content="width=device-width, initial-scale=1"><meta charset="utf-8"><meta property="og:image" content="https://tc39.es/ecmarkup/ecma-logo.png"><meta property="og:title" content="ECMAScript® 2026 Language&nbsp;Specification"><meta property="og:description" content="Introduction
This Ecma Standard defines the ECMAScript 2026 Language. It is the seventeenth edition of the ECMAScript Language Specification. ECMAScript is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript (Microsoft). The language was invent">
<link rel="icon" href="../img/favicon.ico">
<link rel="stylesheet" href="../assets/css/ecmarkup.css"><link rel="stylesheet" href="../assets/css/print.css" media="print">
<title>ECMAScript® 2026 Language&nbsp;Specification</title><script src="../assets/js/multipage.js?cache=Wu2V1pj2" defer=""></script><script src="../assets/js/ecmarkup.js?cache=BPFBckdu" defer=""></script><link rel="canonical" href="../#sec-reflection"></head>
<body><div id="spec-container"><emu-clause id="sec-reflection">
<h1><span class="secnum">28</span> Reflection</h1>
<emu-clause id="sec-reflect-object">
<h1><span class="secnum">28.1</span> The Reflect Object</h1>
<p>The Reflect object:</p>
<ul>
<li>is <dfn tabindex="-1">%Reflect%</dfn>.</li>
<li>is the initial value of the <emu-val>"Reflect"</emu-val> property of the <emu-xref href="#sec-global-object" id="_ref_16850"><a href="global-object.html#sec-global-object">global object</a></emu-xref>.</li>
<li>is an <emu-xref href="#ordinary-object" id="_ref_16851"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>.</li>
<li>has a <var class="field">[[Prototype]]</var> internal slot whose value is <emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_16852"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>.</li>
<li>is not a <emu-xref href="#function-object" id="_ref_16853"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>.</li>
<li>does not have a <var class="field">[[Construct]]</var> internal method; it cannot be used as a <emu-xref href="#constructor" id="_ref_16854"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> with the <code>new</code> operator.</li>
<li>does not have a <var class="field">[[Call]]</var> internal method; it cannot be invoked as a function.</li>
</ul>
<emu-clause id="sec-reflect.apply" type="built-in function">
<h1><span class="secnum">28.1.1</span> Reflect.apply ( <var>target</var>, <var>thisArgument</var>, <var>argumentsList</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <emu-xref aoid="IsCallable" id="_ref_16855"><a href="abstract-operations.html#sec-iscallable">IsCallable</a></emu-xref>(<var>target</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>args</var> be ?&nbsp;<emu-xref aoid="CreateListFromArrayLike" id="_ref_16856"><a href="abstract-operations.html#sec-createlistfromarraylike" class="e-user-code">CreateListFromArrayLike</a></emu-xref>(<var>argumentsList</var>).</li><li>Perform <emu-xref aoid="PrepareForTailCall" id="_ref_16857"><a href="ecmascript-language-functions-and-classes.html#sec-preparefortailcall">PrepareForTailCall</a></emu-xref>().</li><li>Return ?&nbsp;<emu-xref aoid="Call" id="_ref_16858"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>target</var>, <var>thisArgument</var>, <var>args</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.construct" type="built-in function">
<h1><span class="secnum">28.1.2</span> Reflect.construct ( <var>target</var>, <var>argumentsList</var> [ , <var>newTarget</var> ] )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <emu-xref aoid="IsConstructor" id="_ref_16859"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>target</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>newTarget</var> is not present, set <var>newTarget</var> to <var>target</var>.</li><li>Else if <emu-xref aoid="IsConstructor" id="_ref_16860"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>newTarget</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>args</var> be ?&nbsp;<emu-xref aoid="CreateListFromArrayLike" id="_ref_16861"><a href="abstract-operations.html#sec-createlistfromarraylike" class="e-user-code">CreateListFromArrayLike</a></emu-xref>(<var>argumentsList</var>).</li><li>Return ?&nbsp;<emu-xref aoid="Construct" id="_ref_16862"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>target</var>, <var>args</var>, <var>newTarget</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.defineproperty" type="built-in function">
<h1><span class="secnum">28.1.3</span> Reflect.defineProperty ( <var>target</var>, <var>propertyKey</var>, <var>attributes</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16863"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>key</var> be ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_16864"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>propertyKey</var>).</li><li>Let <var>desc</var> be ?&nbsp;<emu-xref aoid="ToPropertyDescriptor" id="_ref_16865"><a href="ecmascript-data-types-and-values.html#sec-topropertydescriptor" class="e-user-code">ToPropertyDescriptor</a></emu-xref>(<var>attributes</var>).</li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[DefineOwnProperty]]</var>(<var>key</var>, <var>desc</var>)</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.deleteproperty" type="built-in function">
<h1><span class="secnum">28.1.4</span> Reflect.deleteProperty ( <var>target</var>, <var>propertyKey</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16866"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>key</var> be ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_16867"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>propertyKey</var>).</li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[Delete]]</var>(<var>key</var>)</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.get" type="built-in function">
<h1><span class="secnum">28.1.5</span> Reflect.get ( <var>target</var>, <var>propertyKey</var> [ , <var>receiver</var> ] )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16868"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>key</var> be ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_16869"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>propertyKey</var>).</li><li>If <var>receiver</var> is not present, then<ol><li>Set <var>receiver</var> to <var>target</var>.</li></ol></li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[Get]]</var>(<var>key</var>, <var>receiver</var>)</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.getownpropertydescriptor" type="built-in function">
<h1><span class="secnum">28.1.6</span> Reflect.getOwnPropertyDescriptor ( <var>target</var>, <var>propertyKey</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16870"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>key</var> be ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_16871"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>propertyKey</var>).</li><li>Let <var>desc</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetOwnProperty]]</var>(<var>key</var>)</span>.</li><li>Return <emu-xref aoid="FromPropertyDescriptor" id="_ref_16872"><a href="ecmascript-data-types-and-values.html#sec-frompropertydescriptor">FromPropertyDescriptor</a></emu-xref>(<var>desc</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.getprototypeof" type="built-in function">
<h1><span class="secnum">28.1.7</span> Reflect.getPrototypeOf ( <var>target</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16873"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[GetPrototypeOf]]</var>()</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.has" type="built-in function">
<h1><span class="secnum">28.1.8</span> Reflect.has ( <var>target</var>, <var>propertyKey</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16874"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>key</var> be ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_16875"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>propertyKey</var>).</li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[HasProperty]]</var>(<var>key</var>)</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.isextensible" type="built-in function">
<h1><span class="secnum">28.1.9</span> Reflect.isExtensible ( <var>target</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16876"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[IsExtensible]]</var>()</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.ownkeys" type="built-in function">
<h1><span class="secnum">28.1.10</span> Reflect.ownKeys ( <var>target</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16877"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>keys</var> be ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[OwnPropertyKeys]]</var>()</span>.</li><li>Return <emu-xref aoid="CreateArrayFromList" id="_ref_16878"><a href="abstract-operations.html#sec-createarrayfromlist">CreateArrayFromList</a></emu-xref>(<var>keys</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.preventextensions" type="built-in function">
<h1><span class="secnum">28.1.11</span> Reflect.preventExtensions ( <var>target</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16879"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[PreventExtensions]]</var>()</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.set" type="built-in function">
<h1><span class="secnum">28.1.12</span> Reflect.set ( <var>target</var>, <var>propertyKey</var>, <var>V</var> [ , <var>receiver</var> ] )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16880"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>key</var> be ?&nbsp;<emu-xref aoid="ToPropertyKey" id="_ref_16881"><a href="abstract-operations.html#sec-topropertykey" class="e-user-code">ToPropertyKey</a></emu-xref>(<var>propertyKey</var>).</li><li>If <var>receiver</var> is not present, then<ol><li>Set <var>receiver</var> to <var>target</var>.</li></ol></li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[Set]]</var>(<var>key</var>, <var>V</var>, <var>receiver</var>)</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-reflect.setprototypeof" type="built-in function">
<h1><span class="secnum">28.1.13</span> Reflect.setPrototypeOf ( <var>target</var>, <var>proto</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If <var>target</var> <emu-xref href="#sec-object-type" id="_ref_16882"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>proto</var> <emu-xref href="#sec-object-type" id="_ref_16883"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref> and <var>proto</var> is not <emu-val>null</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return ?&nbsp;<span class="e-user-code"><var>target</var>.<var class="field">[[SetPrototypeOf]]</var>(<var>proto</var>)</span>.</li></ol></emu-alg>
</emu-clause>
<emu-clause oldids="sec-reflect-@@tostringtag" id="sec-reflect-%symbol.tostringtag%"><span id="sec-reflect-@@tostringtag"></span>
<h1><span class="secnum">28.1.14</span> Reflect [ %Symbol.toStringTag% ]</h1>
<p>The initial value of the <emu-xref href="#sec-well-known-symbols" id="_ref_16884"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.toStringTag%</a></emu-xref> property is the String value <emu-val>"Reflect"</emu-val>.</p>
<p>This property has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val> }.</p>
</emu-clause>
</emu-clause>
<emu-clause id="sec-proxy-objects">
<h1><span class="secnum">28.2</span> Proxy Objects</h1>
<emu-clause id="sec-proxy-constructor">
<h1><span class="secnum">28.2.1</span> The Proxy Constructor</h1>
<p>The Proxy <emu-xref href="#constructor" id="_ref_16885"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>:</p>
<ul>
<li>is <dfn tabindex="-1">%Proxy%</dfn>.</li>
<li>is the initial value of the <emu-val>"Proxy"</emu-val> property of the <emu-xref href="#sec-global-object" id="_ref_16886"><a href="global-object.html#sec-global-object">global object</a></emu-xref>.</li>
<li>creates and initializes a new Proxy object when called as a <emu-xref href="#constructor" id="_ref_16887"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>.</li>
<li>is not intended to be called as a function and will throw an exception when called in that manner.</li>
</ul>
<emu-clause id="sec-proxy-target-handler" type="built-in function">
<h1><span class="secnum">28.2.1.1</span> Proxy ( <var>target</var>, <var>handler</var> )</h1>
<p>This function performs the following steps when called:</p>
<emu-alg><ol><li>If NewTarget is <emu-val>undefined</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Return ?&nbsp;<emu-xref aoid="ProxyCreate" id="_ref_16888"><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxycreate">ProxyCreate</a></emu-xref>(<var>target</var>, <var>handler</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-properties-of-the-proxy-constructor">
<h1><span class="secnum">28.2.2</span> Properties of the Proxy Constructor</h1>
<p>The Proxy <emu-xref href="#constructor" id="_ref_16889"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>:</p>
<ul>
<li>has a <var class="field">[[Prototype]]</var> internal slot whose value is <emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_16890"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>.</li>
<li>does not have a <emu-val>"prototype"</emu-val> property because Proxy objects do not have a <var class="field">[[Prototype]]</var> internal slot that requires initialization.</li>
<li>has the following properties:</li>
</ul>
<emu-clause id="sec-proxy.revocable" oldids="sec-proxy-revocation-functions" type="built-in function"><span id="sec-proxy-revocation-functions"></span>
<h1><span class="secnum">28.2.2.1</span> Proxy.revocable ( <var>target</var>, <var>handler</var> )</h1>
<p>This function creates a revocable Proxy object.</p>
<p>It performs the following steps when called:</p>
<emu-alg><ol><li>Let <var>proxy</var> be ?&nbsp;<emu-xref aoid="ProxyCreate" id="_ref_16891"><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxycreate">ProxyCreate</a></emu-xref>(<var>target</var>, <var>handler</var>).</li><li>Let <var>revokerClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_16892"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with no parameters that captures nothing and performs the following steps when called:<ol><li>Let <var>F</var> be the <emu-xref href="#active-function-object" id="_ref_16893"><a href="executable-code-and-execution-contexts.html#active-function-object">active function object</a></emu-xref>.</li><li>Let <var>p</var> be <var>F</var>.<var class="field">[[RevocableProxy]]</var>.</li><li>If <var>p</var> is <emu-val>null</emu-val>, return <emu-xref aoid="NormalCompletion" id="_ref_16894"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li><li>Set <var>F</var>.<var class="field">[[RevocableProxy]]</var> to <emu-val>null</emu-val>.</li><li><emu-xref href="#assert" id="_ref_16895"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>p</var> is a <emu-xref href="#proxy-exotic-object" id="_ref_16896"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref>.</li><li>Set <var>p</var>.<var class="field">[[ProxyTarget]]</var> to <emu-val>null</emu-val>.</li><li>Set <var>p</var>.<var class="field">[[ProxyHandler]]</var> to <emu-val>null</emu-val>.</li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_16897"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></li><li>Let <var>revoker</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_16898"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>revokerClosure</var>, 0, <emu-val>""</emu-val>, « <var class="field">[[RevocableProxy]]</var>&nbsp;»).</li><li>Set <var>revoker</var>.<var class="field">[[RevocableProxy]]</var> to <var>proxy</var>.</li><li>Let <var>result</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_16899"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_16900"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_16901"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>result</var>, <emu-val>"proxy"</emu-val>, <var>proxy</var>).</li><li>Perform !&nbsp;<emu-xref aoid="CreateDataPropertyOrThrow" id="_ref_16902"><a href="abstract-operations.html#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a></emu-xref>(<var>result</var>, <emu-val>"revoke"</emu-val>, <var>revoker</var>).</li><li>Return <var>result</var>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>
<emu-clause id="sec-module-namespace-objects">
<h1><span class="secnum">28.3</span> Module Namespace Objects</h1>
<p>A Module Namespace Object is a <emu-xref href="#module-namespace-exotic-object" id="_ref_16903"><a href="ordinary-and-exotic-objects-behaviours.html#module-namespace-exotic-object">module namespace exotic object</a></emu-xref> that provides runtime property-based access to a module's exported bindings. There is no <emu-xref href="#constructor" id="_ref_16904"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> function for Module Namespace Objects. Instead, such an object is created for each module that is imported by an <emu-nt id="_ref_24569"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> that contains a <emu-nt id="_ref_24570"><a href="ecmascript-language-scripts-and-modules.html#prod-NameSpaceImport">NameSpaceImport</a></emu-nt>.</p>
<p>In addition to the properties specified in <emu-xref href="#sec-module-namespace-exotic-objects" id="_ref_848"><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects">10.4.6</a></emu-xref> each Module Namespace Object has the following own property:</p>
<emu-clause oldids="sec-@@tostringtag" id="sec-%symbol.tostringtag%"><span id="sec-@@tostringtag"></span>
<h1><span class="secnum">28.3.1</span> %Symbol.toStringTag%</h1>
<p>The initial value of the <emu-xref href="#sec-well-known-symbols" id="_ref_16905"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.toStringTag%</a></emu-xref> property is the String value <emu-val>"Module"</emu-val>.</p>
<p>This property has the attributes { <var class="field">[[Writable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val> }.</p>
</emu-clause>
</emu-clause>
</emu-clause></div></body></html>