Movatterモバイル変換


[0]ホーム

URL:


Pins
Table of Contents
  1. Introduction
  2. 1 Scope
  3. +2 Conformance
    1. 2.1 Example Normative Optional Clause Heading
    2. 2.2 Example Legacy Clause Heading
    3. 2.3 Example Legacy Normative Optional Clause Heading
  4. 3 Normative References
  5. +4 Overview
    1. 4.1 Web Scripting
    2. 4.2 Hosts and Implementations
    3. +4.3 ECMAScript Overview
      1. 4.3.1 Objects
      2. 4.3.2 The Strict Variant of ECMAScript
    4. +4.4 Terms and Definitions
      1. 4.4.1 implementation-approximated
      2. 4.4.2 implementation-defined
      3. 4.4.3 host-defined
      4. 4.4.4 type
      5. 4.4.5 primitive value
      6. 4.4.6 object
      7. 4.4.7 constructor
      8. 4.4.8 prototype
      9. 4.4.9 ordinary object
      10. 4.4.10 exotic object
      11. 4.4.11 standard object
      12. 4.4.12 built-in object
      13. 4.4.13 undefined value
      14. 4.4.14 Undefined type
      15. 4.4.15 null value
      16. 4.4.16 Null type
      17. 4.4.17 Boolean value
      18. 4.4.18 Boolean type
      19. 4.4.19 Boolean object
      20. 4.4.20 String value
      21. 4.4.21 String type
      22. 4.4.22 String object
      23. 4.4.23 Number value
      24. 4.4.24 Number type
      25. 4.4.25 Number object
      26. 4.4.26 Infinity
      27. 4.4.27 NaN
      28. 4.4.28 BigInt value
      29. 4.4.29 BigInt type
      30. 4.4.30 BigInt object
      31. 4.4.31 Symbol value
      32. 4.4.32 Symbol type
      33. 4.4.33 Symbol object
      34. 4.4.34 function
      35. 4.4.35 built-in function
      36. 4.4.36 built-in constructor
      37. 4.4.37 property
      38. 4.4.38 method
      39. 4.4.39 built-in method
      40. 4.4.40 attribute
      41. 4.4.41 own property
      42. 4.4.42 inherited property
    5. 4.5 Organization of This Specification
  6. +5 Notational Conventions
    1. +5.1 Syntactic and Lexical Grammars
      1. 5.1.1 Context-Free Grammars
      2. 5.1.2 The Lexical and RegExp Grammars
      3. 5.1.3 The Numeric String Grammar
      4. 5.1.4 The Syntactic Grammar
      5. +5.1.5 Grammar Notation
        1. 5.1.5.1 Terminal Symbols
        2. 5.1.5.2 Nonterminal Symbols and Productions
        3. 5.1.5.3 Optional Symbols
        4. 5.1.5.4 Grammatical Parameters
        5. 5.1.5.5 one of
        6. 5.1.5.6 [empty]
        7. 5.1.5.7 Lookahead Restrictions
        8. 5.1.5.8 [noLineTerminator here]
        9. 5.1.5.9 but not
        10. 5.1.5.10 Descriptive Phrases
    2. +5.2 Algorithm Conventions
      1. 5.2.1 Abstract Operations
      2. 5.2.2 Syntax-Directed Operations
      3. +5.2.3 Runtime Semantics
        1. 5.2.3.1 Completion (completionRecord )
        2. 5.2.3.2 Throw an Exception
        3. 5.2.3.3 ReturnIfAbrupt
        4. 5.2.3.4 ReturnIfAbrupt Shorthands
        5. 5.2.3.5 Implicit Normal Completion
      4. 5.2.4 Static Semantics
      5. 5.2.5 Mathematical Operations
      6. 5.2.6 Value Notation
      7. 5.2.7 Identity
  7. +6 ECMAScript Data Types and Values
    1. +6.1 ECMAScript Language Types
      1. 6.1.1 The Undefined Type
      2. 6.1.2 The Null Type
      3. 6.1.3 The Boolean Type
      4. +6.1.4 The String Type
        1. 6.1.4.1 StringIndexOf (string,searchValue,fromIndex )
        2. 6.1.4.2 StringLastIndexOf (string,searchValue,fromIndex )
      5. +6.1.5 The Symbol Type
        1. 6.1.5.1 Well-Known Symbols
      6. +6.1.6 Numeric Types
        1. +6.1.6.1 The Number Type
          1. 6.1.6.1.1 Number::unaryMinus (x )
          2. 6.1.6.1.2 Number::bitwiseNOT (x )
          3. 6.1.6.1.3 Number::exponentiate (base,exponent )
          4. 6.1.6.1.4 Number::multiply (x,y )
          5. 6.1.6.1.5 Number::divide (x,y )
          6. 6.1.6.1.6 Number::remainder (n,d )
          7. 6.1.6.1.7 Number::add (x,y )
          8. 6.1.6.1.8 Number::subtract (x,y )
          9. 6.1.6.1.9 Number::leftShift (x,y )
          10. 6.1.6.1.10 Number::signedRightShift (x,y )
          11. 6.1.6.1.11 Number::unsignedRightShift (x,y )
          12. 6.1.6.1.12 Number::lessThan (x,y )
          13. 6.1.6.1.13 Number::equal (x,y )
          14. 6.1.6.1.14 Number::sameValue (x,y )
          15. 6.1.6.1.15 Number::sameValueZero (x,y )
          16. 6.1.6.1.16 NumberBitwiseOp (op,x,y )
          17. 6.1.6.1.17 Number::bitwiseAND (x,y )
          18. 6.1.6.1.18 Number::bitwiseXOR (x,y )
          19. 6.1.6.1.19 Number::bitwiseOR (x,y )
          20. 6.1.6.1.20 Number::toString (x,radix )
        2. +6.1.6.2 The BigInt Type
          1. 6.1.6.2.1 BigInt::unaryMinus (x )
          2. 6.1.6.2.2 BigInt::bitwiseNOT (x )
          3. 6.1.6.2.3 BigInt::exponentiate (base,exponent )
          4. 6.1.6.2.4 BigInt::multiply (x,y )
          5. 6.1.6.2.5 BigInt::divide (x,y )
          6. 6.1.6.2.6 BigInt::remainder (n,d )
          7. 6.1.6.2.7 BigInt::add (x,y )
          8. 6.1.6.2.8 BigInt::subtract (x,y )
          9. 6.1.6.2.9 BigInt::leftShift (x,y )
          10. 6.1.6.2.10 BigInt::signedRightShift (x,y )
          11. 6.1.6.2.11 BigInt::unsignedRightShift (x,y )
          12. 6.1.6.2.12 BigInt::lessThan (x,y )
          13. 6.1.6.2.13 BigInt::equal (x,y )
          14. 6.1.6.2.14 BinaryAnd (x,y )
          15. 6.1.6.2.15 BinaryOr (x,y )
          16. 6.1.6.2.16 BinaryXor (x,y )
          17. 6.1.6.2.17 BigIntBitwiseOp (op,x,y )
          18. 6.1.6.2.18 BigInt::bitwiseAND (x,y )
          19. 6.1.6.2.19 BigInt::bitwiseXOR (x,y )
          20. 6.1.6.2.20 BigInt::bitwiseOR (x,y )
          21. 6.1.6.2.21 BigInt::toString (x,radix )
      7. +6.1.7 The Object Type
        1. 6.1.7.1 Property Attributes
        2. 6.1.7.2 Object Internal Methods and Internal Slots
        3. 6.1.7.3 Invariants of the Essential Internal Methods
        4. 6.1.7.4 Well-Known Intrinsic Objects
    2. +6.2 ECMAScript Specification Types
      1. 6.2.1 The Enum Specification Type
      2. 6.2.2 The List and Record Specification Types
      3. 6.2.3 The Set and Relation Specification Types
      4. +6.2.4 The Completion Record Specification Type
        1. 6.2.4.1 NormalCompletion (value )
        2. 6.2.4.2 ThrowCompletion (value )
        3. 6.2.4.3 ReturnCompletion (value )
        4. 6.2.4.4 UpdateEmpty (completionRecord,value )
      5. +6.2.5 The Reference Record Specification Type
        1. 6.2.5.1 IsPropertyReference (V )
        2. 6.2.5.2 IsUnresolvableReference (V )
        3. 6.2.5.3 IsSuperReference (V )
        4. 6.2.5.4 IsPrivateReference (V )
        5. 6.2.5.5 GetValue (V )
        6. 6.2.5.6 PutValue (V,W )
        7. 6.2.5.7 GetThisValue (V )
        8. 6.2.5.8 InitializeReferencedBinding (V,W )
        9. 6.2.5.9 MakePrivateReference (baseValue,privateIdentifier )
      6. +6.2.6 The Property Descriptor Specification Type
        1. 6.2.6.1 IsAccessorDescriptor (Desc )
        2. 6.2.6.2 IsDataDescriptor (Desc )
        3. 6.2.6.3 IsGenericDescriptor (Desc )
        4. 6.2.6.4 FromPropertyDescriptor (Desc )
        5. 6.2.6.5 ToPropertyDescriptor (Obj )
        6. 6.2.6.6 CompletePropertyDescriptor (Desc )
      7. 6.2.7 The Environment Record Specification Type
      8. 6.2.8 The Abstract Closure Specification Type
      9. +6.2.9 Data Blocks
        1. 6.2.9.1 CreateByteDataBlock (size )
        2. 6.2.9.2 CreateSharedByteDataBlock (size )
        3. 6.2.9.3 CopyDataBlockBytes (toBlock,toIndex,fromBlock,fromIndex,count )
      10. 6.2.10 The PrivateElement Specification Type
      11. 6.2.11 The ClassFieldDefinition Record Specification Type
      12. 6.2.12 Private Names
      13. 6.2.13 The ClassStaticBlockDefinition Record Specification Type
  8. +7 Abstract Operations
    1. +7.1 Type Conversion
      1. +7.1.1 ToPrimitive (input [ ,preferredType ] )
        1. 7.1.1.1 OrdinaryToPrimitive (O,hint )
      2. 7.1.2 ToBoolean (argument )
      3. 7.1.3 ToNumeric (value )
      4. +7.1.4 ToNumber (argument )
        1. +7.1.4.1 ToNumber Applied to the String Type
          1. 7.1.4.1.1 StringToNumber (str )
          2. 7.1.4.1.2 RS: StringNumericValue
          3. 7.1.4.1.3 RoundMVResult (n )
      5. 7.1.5 ToIntegerOrInfinity (argument )
      6. 7.1.6 ToInt32 (argument )
      7. 7.1.7 ToUint32 (argument )
      8. 7.1.8 ToInt16 (argument )
      9. 7.1.9 ToUint16 (argument )
      10. 7.1.10 ToInt8 (argument )
      11. 7.1.11 ToUint8 (argument )
      12. 7.1.12 ToUint8Clamp (argument )
      13. 7.1.13 ToBigInt (argument )
      14. +7.1.14 StringToBigInt (str )
        1. 7.1.14.1 StringIntegerLiteral Grammar
        2. 7.1.14.2 RS: MV
      15. 7.1.15 ToBigInt64 (argument )
      16. 7.1.16 ToBigUint64 (argument )
      17. 7.1.17 ToString (argument )
      18. 7.1.18 ToObject (argument )
      19. 7.1.19 ToPropertyKey (argument )
      20. 7.1.20 ToLength (argument )
      21. 7.1.21 CanonicalNumericIndexString (argument )
      22. 7.1.22 ToIndex (value )
    2. +7.2 Testing and Comparison Operations
      1. 7.2.1 RequireObjectCoercible (argument )
      2. 7.2.2 IsArray (argument )
      3. 7.2.3 IsCallable (argument )
      4. 7.2.4 IsConstructor (argument )
      5. 7.2.5 IsExtensible (O )
      6. 7.2.6 IsRegExp (argument )
      7. 7.2.7 SS: IsStringWellFormedUnicode (string )
      8. 7.2.8 SameType (x,y )
      9. 7.2.9 SameValue (x,y )
      10. 7.2.10 SameValueZero (x,y )
      11. 7.2.11 SameValueNonNumber (x,y )
      12. 7.2.12 IsLessThan (x,y,LeftFirst )
      13. 7.2.13 IsLooselyEqual (x,y )
      14. 7.2.14 IsStrictlyEqual (x,y )
    3. +7.3 Operations on Objects
      1. 7.3.1 MakeBasicObject (internalSlotsList )
      2. 7.3.2 Get (O,P )
      3. 7.3.3 GetV (V,P )
      4. 7.3.4 Set (O,P,V,Throw )
      5. 7.3.5 CreateDataProperty (O,P,V )
      6. 7.3.6 CreateDataPropertyOrThrow (O,P,V )
      7. 7.3.7 CreateNonEnumerableDataPropertyOrThrow (O,P,V )
      8. 7.3.8 DefinePropertyOrThrow (O,P,desc )
      9. 7.3.9 DeletePropertyOrThrow (O,P )
      10. 7.3.10 GetMethod (V,P )
      11. 7.3.11 HasProperty (O,P )
      12. 7.3.12 HasOwnProperty (O,P )
      13. 7.3.13 Call (F,V [ ,argumentsList ] )
      14. 7.3.14 Construct (F [ ,argumentsList [ ,newTarget ] ] )
      15. 7.3.15 SetIntegrityLevel (O,level )
      16. 7.3.16 TestIntegrityLevel (O,level )
      17. 7.3.17 CreateArrayFromList (elements )
      18. 7.3.18 LengthOfArrayLike (obj )
      19. 7.3.19 CreateListFromArrayLike (obj [ ,validElementTypes ] )
      20. 7.3.20 Invoke (V,P [ ,argumentsList ] )
      21. 7.3.21 OrdinaryHasInstance (C,O )
      22. 7.3.22 SpeciesConstructor (O,defaultConstructor )
      23. 7.3.23 EnumerableOwnProperties (O,kind )
      24. 7.3.24 GetFunctionRealm (obj )
      25. 7.3.25 CopyDataProperties (target,source,excludedItems )
      26. 7.3.26 PrivateElementFind (O,P )
      27. 7.3.27 PrivateFieldAdd (O,P,value )
      28. 7.3.28 PrivateMethodOrAccessorAdd (O,method )
      29. 7.3.29 HostEnsureCanAddPrivateElement (O )
      30. 7.3.30 PrivateGet (O,P )
      31. 7.3.31 PrivateSet (O,P,value )
      32. 7.3.32 DefineField (receiver,fieldRecord )
      33. 7.3.33 InitializeInstanceElements (O,constructor )
      34. 7.3.34 AddValueToKeyedGroup (groups,key,value )
      35. 7.3.35 GroupBy (items,callback,keyCoercion )
      36. 7.3.36 SetterThatIgnoresPrototypeProperties (thisValue,home,p,v )
    4. +7.4 Operations on Iterator Objects
      1. 7.4.1 Iterator Records
      2. 7.4.2 GetIteratorDirect (obj )
      3. 7.4.3 GetIteratorFromMethod (obj,method )
      4. 7.4.4 GetIterator (obj,kind )
      5. 7.4.5 GetIteratorFlattenable (obj,primitiveHandling )
      6. 7.4.6 IteratorNext (iteratorRecord [ ,value ] )
      7. 7.4.7 IteratorComplete (iteratorResult )
      8. 7.4.8 IteratorValue (iteratorResult )
      9. 7.4.9 IteratorStep (iteratorRecord )
      10. 7.4.10 IteratorStepValue (iteratorRecord )
      11. 7.4.11 IteratorClose (iteratorRecord,completion )
      12. 7.4.12 IfAbruptCloseIterator (value,iteratorRecord )
      13. 7.4.13 AsyncIteratorClose (iteratorRecord,completion )
      14. 7.4.14 CreateIteratorResultObject (value,done )
      15. 7.4.15 CreateListIteratorRecord (list )
      16. 7.4.16 IteratorToList (iteratorRecord )
  9. +8 Syntax-Directed Operations
    1. 8.1 RS: Evaluation
    2. +8.2 Scope Analysis
      1. 8.2.1 SS: BoundNames
      2. 8.2.2 SS: DeclarationPart
      3. 8.2.3 SS: IsConstantDeclaration
      4. 8.2.4 SS: LexicallyDeclaredNames
      5. 8.2.5 SS: LexicallyScopedDeclarations
      6. 8.2.6 SS: VarDeclaredNames
      7. 8.2.7 SS: VarScopedDeclarations
      8. 8.2.8 SS: TopLevelLexicallyDeclaredNames
      9. 8.2.9 SS: TopLevelLexicallyScopedDeclarations
      10. 8.2.10 SS: TopLevelVarDeclaredNames
      11. 8.2.11 SS: TopLevelVarScopedDeclarations
    3. +8.3 Labels
      1. 8.3.1 SS: ContainsDuplicateLabels
      2. 8.3.2 SS: ContainsUndefinedBreakTarget
      3. 8.3.3 SS: ContainsUndefinedContinueTarget
    4. +8.4 Function Name Inference
      1. 8.4.1 SS: HasName
      2. 8.4.2 SS: IsFunctionDefinition
      3. 8.4.3 SS: IsAnonymousFunctionDefinition (expr )
      4. 8.4.4 SS: IsIdentifierRef
      5. 8.4.5 RS: NamedEvaluation
    5. +8.5 Contains
      1. 8.5.1 SS: Contains
      2. 8.5.2 SS: ComputedPropertyContains
    6. +8.6 Miscellaneous
      1. 8.6.1 RS: InstantiateFunctionObject
      2. +8.6.2 RS: BindingInitialization
        1. 8.6.2.1 InitializeBoundName (name,value,environment )
      3. 8.6.3 RS: IteratorBindingInitialization
      4. 8.6.4 SS: AssignmentTargetType
      5. 8.6.5 SS: PropName
  10. +9 Executable Code and Execution Contexts
    1. +9.1 Environment Records
      1. +9.1.1 The Environment Record Type Hierarchy
        1. +9.1.1.1 Declarative Environment Records
          1. 9.1.1.1.1 HasBinding (N )
          2. 9.1.1.1.2 CreateMutableBinding (N,D )
          3. 9.1.1.1.3 CreateImmutableBinding (N,S )
          4. 9.1.1.1.4 InitializeBinding (N,V )
          5. 9.1.1.1.5 SetMutableBinding (N,V,S )
          6. 9.1.1.1.6 GetBindingValue (N,S )
          7. 9.1.1.1.7 DeleteBinding (N )
          8. 9.1.1.1.8 HasThisBinding ( )
          9. 9.1.1.1.9 HasSuperBinding ( )
          10. 9.1.1.1.10 WithBaseObject ( )
        2. +9.1.1.2 Object Environment Records
          1. 9.1.1.2.1 HasBinding (N )
          2. 9.1.1.2.2 CreateMutableBinding (N,D )
          3. 9.1.1.2.3 CreateImmutableBinding (N,S )
          4. 9.1.1.2.4 InitializeBinding (N,V )
          5. 9.1.1.2.5 SetMutableBinding (N,V,S )
          6. 9.1.1.2.6 GetBindingValue (N,S )
          7. 9.1.1.2.7 DeleteBinding (N )
          8. 9.1.1.2.8 HasThisBinding ( )
          9. 9.1.1.2.9 HasSuperBinding ( )
          10. 9.1.1.2.10 WithBaseObject ( )
        3. +9.1.1.3 Function Environment Records
          1. 9.1.1.3.1 BindThisValue (envRec,V )
          2. 9.1.1.3.2 HasThisBinding ( )
          3. 9.1.1.3.3 HasSuperBinding ( )
          4. 9.1.1.3.4 GetThisBinding ( )
          5. 9.1.1.3.5 GetSuperBase (envRec )
        4. +9.1.1.4 Global Environment Records
          1. 9.1.1.4.1 HasBinding (N )
          2. 9.1.1.4.2 CreateMutableBinding (N,D )
          3. 9.1.1.4.3 CreateImmutableBinding (N,S )
          4. 9.1.1.4.4 InitializeBinding (N,V )
          5. 9.1.1.4.5 SetMutableBinding (N,V,S )
          6. 9.1.1.4.6 GetBindingValue (N,S )
          7. 9.1.1.4.7 DeleteBinding (N )
          8. 9.1.1.4.8 HasThisBinding ( )
          9. 9.1.1.4.9 HasSuperBinding ( )
          10. 9.1.1.4.10 WithBaseObject ( )
          11. 9.1.1.4.11 GetThisBinding ( )
          12. 9.1.1.4.12 HasLexicalDeclaration (envRec,N )
          13. 9.1.1.4.13 HasRestrictedGlobalProperty (envRec,N )
          14. 9.1.1.4.14 CanDeclareGlobalVar (envRec,N )
          15. 9.1.1.4.15 CanDeclareGlobalFunction (envRec,N )
          16. 9.1.1.4.16 CreateGlobalVarBinding (envRec,N,D )
          17. 9.1.1.4.17 CreateGlobalFunctionBinding (envRec,N,V,D )
        5. +9.1.1.5 Module Environment Records
          1. 9.1.1.5.1 GetBindingValue (N,S )
          2. 9.1.1.5.2 DeleteBinding (N )
          3. 9.1.1.5.3 HasThisBinding ( )
          4. 9.1.1.5.4 GetThisBinding ( )
          5. 9.1.1.5.5 CreateImportBinding (envRec,N,M,N2 )
      2. +9.1.2 Environment Record Operations
        1. 9.1.2.1 GetIdentifierReference (env,name,strict )
        2. 9.1.2.2 NewDeclarativeEnvironment (E )
        3. 9.1.2.3 NewObjectEnvironment (O,W,E )
        4. 9.1.2.4 NewFunctionEnvironment (F,newTarget )
        5. 9.1.2.5 NewGlobalEnvironment (G,thisValue )
        6. 9.1.2.6 NewModuleEnvironment (E )
    2. +9.2 PrivateEnvironment Records
      1. +9.2.1 PrivateEnvironment Record Operations
        1. 9.2.1.1 NewPrivateEnvironment (outerPrivateEnv )
        2. 9.2.1.2 ResolvePrivateIdentifier (privateEnv,identifier )
    3. +9.3 Realms
      1. 9.3.1 InitializeHostDefinedRealm ( )
      2. 9.3.2 CreateIntrinsics (realmRec )
      3. 9.3.3 SetDefaultGlobalBindings (realmRec )
    4. +9.4 Execution Contexts
      1. 9.4.1 GetActiveScriptOrModule ( )
      2. 9.4.2 ResolveBinding (name [ ,env ] )
      3. 9.4.3 GetThisEnvironment ( )
      4. 9.4.4 ResolveThisBinding ( )
      5. 9.4.5 GetNewTarget ( )
      6. 9.4.6 GetGlobalObject ( )
    5. +9.5 Jobs and Host Operations to Enqueue Jobs
      1. 9.5.1 JobCallback Records
      2. 9.5.2 HostMakeJobCallback (callback )
      3. 9.5.3 HostCallJobCallback (jobCallback,V,argumentsList )
      4. 9.5.4 HostEnqueueGenericJob (job,realm )
      5. 9.5.5 HostEnqueuePromiseJob (job,realm )
      6. 9.5.6 HostEnqueueTimeoutJob (timeoutJob,realm,milliseconds )
    6. +9.6 Agents
      1. 9.6.1 AgentSignifier ( )
      2. 9.6.2 AgentCanSuspend ( )
      3. 9.6.3 IncrementModuleAsyncEvaluationCount ( )
    7. 9.7 Agent Clusters
    8. 9.8 Forward Progress
    9. +9.9 Processing Model of WeakRef and FinalizationRegistry Targets
      1. 9.9.1 Objectives
      2. 9.9.2 Liveness
      3. 9.9.3 Execution
      4. +9.9.4 Host Hooks
        1. 9.9.4.1 HostEnqueueFinalizationRegistryCleanupJob (finalizationRegistry )
    10. 9.10 ClearKeptObjects ( )
    11. 9.11 AddToKeptObjects (value )
    12. 9.12 CleanupFinalizationRegistry (finalizationRegistry )
    13. 9.13 CanBeHeldWeakly (v )
  11. +10 Ordinary and Exotic Objects Behaviours
    1. +10.1 Ordinary Object Internal Methods and Internal Slots
      1. +10.1.1[[GetPrototypeOf]] ( )
        1. 10.1.1.1 OrdinaryGetPrototypeOf (O )
      2. +10.1.2[[SetPrototypeOf]] (V )
        1. 10.1.2.1 OrdinarySetPrototypeOf (O,V )
      3. +10.1.3[[IsExtensible]] ( )
        1. 10.1.3.1 OrdinaryIsExtensible (O )
      4. +10.1.4[[PreventExtensions]] ( )
        1. 10.1.4.1 OrdinaryPreventExtensions (O )
      5. +10.1.5[[GetOwnProperty]] (P )
        1. 10.1.5.1 OrdinaryGetOwnProperty (O,P )
      6. +10.1.6[[DefineOwnProperty]] (P,Desc )
        1. 10.1.6.1 OrdinaryDefineOwnProperty (O,P,Desc )
        2. 10.1.6.2 IsCompatiblePropertyDescriptor (Extensible,Desc,Current )
        3. 10.1.6.3 ValidateAndApplyPropertyDescriptor (O,P,extensible,Desc,current )
      7. +10.1.7[[HasProperty]] (P )
        1. 10.1.7.1 OrdinaryHasProperty (O,P )
      8. +10.1.8[[Get]] (P,Receiver )
        1. 10.1.8.1 OrdinaryGet (O,P,Receiver )
      9. +10.1.9[[Set]] (P,V,Receiver )
        1. 10.1.9.1 OrdinarySet (O,P,V,Receiver )
        2. 10.1.9.2 OrdinarySetWithOwnDescriptor (O,P,V,Receiver,ownDesc )
      10. +10.1.10[[Delete]] (P )
        1. 10.1.10.1 OrdinaryDelete (O,P )
      11. +10.1.11[[OwnPropertyKeys]] ( )
        1. 10.1.11.1 OrdinaryOwnPropertyKeys (O )
      12. 10.1.12 OrdinaryObjectCreate (proto [ ,additionalInternalSlotsList ] )
      13. 10.1.13 OrdinaryCreateFromConstructor (constructor,intrinsicDefaultProto [ ,internalSlotsList ] )
      14. 10.1.14 GetPrototypeFromConstructor (constructor,intrinsicDefaultProto )
      15. 10.1.15 RequireInternalSlot (O,internalSlot )
    2. +10.2 ECMAScript Function Objects
      1. +10.2.1[[Call]] (thisArgument,argumentsList )
        1. 10.2.1.1 PrepareForOrdinaryCall (F,newTarget )
        2. 10.2.1.2 OrdinaryCallBindThis (F,calleeContext,thisArgument )
        3. 10.2.1.3 RS: EvaluateBody
        4. 10.2.1.4 OrdinaryCallEvaluateBody (F,argumentsList )
      2. 10.2.2[[Construct]] (argumentsList,newTarget )
      3. 10.2.3 OrdinaryFunctionCreate (functionPrototype,sourceText,ParameterList,Body,thisMode,env,privateEnv )
      4. +10.2.4 AddRestrictedFunctionProperties (F,realm )
        1. 10.2.4.1 %ThrowTypeError% ( )
      5. 10.2.5 MakeConstructor (F [ ,writablePrototype [ ,prototype ] ] )
      6. 10.2.6 MakeClassConstructor (F )
      7. 10.2.7 MakeMethod (F,homeObject )
      8. 10.2.8 DefineMethodProperty (homeObject,key,closure,enumerable )
      9. 10.2.9 SetFunctionName (F,name [ ,prefix ] )
      10. 10.2.10 SetFunctionLength (F,length )
      11. 10.2.11 FunctionDeclarationInstantiation (func,argumentsList )
    3. +10.3 Built-in Function Objects
      1. 10.3.1[[Call]] (thisArgument,argumentsList )
      2. 10.3.2[[Construct]] (argumentsList,newTarget )
      3. 10.3.3 BuiltinCallOrConstruct (F,thisArgument,argumentsList,newTarget )
      4. 10.3.4 CreateBuiltinFunction (behaviour,length,name,additionalInternalSlotsList [ ,realm [ ,prototype [ ,prefix ] ] ] )
    4. +10.4 Built-in Exotic Object Internal Methods and Slots
      1. +10.4.1 Bound Function Exotic Objects
        1. 10.4.1.1[[Call]] (thisArgument,argumentsList )
        2. 10.4.1.2[[Construct]] (argumentsList,newTarget )
        3. 10.4.1.3 BoundFunctionCreate (targetFunction,boundThis,boundArgs )
      2. +10.4.2 Array Exotic Objects
        1. 10.4.2.1[[DefineOwnProperty]] (P,Desc )
        2. 10.4.2.2 ArrayCreate (length [ ,proto ] )
        3. 10.4.2.3 ArraySpeciesCreate (originalArray,length )
        4. 10.4.2.4 ArraySetLength (A,Desc )
      3. +10.4.3 String Exotic Objects
        1. 10.4.3.1[[GetOwnProperty]] (P )
        2. 10.4.3.2[[DefineOwnProperty]] (P,Desc )
        3. 10.4.3.3[[OwnPropertyKeys]] ( )
        4. 10.4.3.4 StringCreate (value,prototype )
        5. 10.4.3.5 StringGetOwnProperty (S,P )
      4. +10.4.4 Arguments Exotic Objects
        1. 10.4.4.1[[GetOwnProperty]] (P )
        2. 10.4.4.2[[DefineOwnProperty]] (P,Desc )
        3. 10.4.4.3[[Get]] (P,Receiver )
        4. 10.4.4.4[[Set]] (P,V,Receiver )
        5. 10.4.4.5[[Delete]] (P )
        6. 10.4.4.6 CreateUnmappedArgumentsObject (argumentsList )
        7. +10.4.4.7 CreateMappedArgumentsObject (func,formals,argumentsList,env )
          1. 10.4.4.7.1 MakeArgGetter (name,env )
          2. 10.4.4.7.2 MakeArgSetter (name,env )
      5. +10.4.5 TypedArray Exotic Objects
        1. 10.4.5.1[[PreventExtensions]] ( )
        2. 10.4.5.2[[GetOwnProperty]] (P )
        3. 10.4.5.3[[HasProperty]] (P )
        4. 10.4.5.4[[DefineOwnProperty]] (P,Desc )
        5. 10.4.5.5[[Get]] (P,Receiver )
        6. 10.4.5.6[[Set]] (P,V,Receiver )
        7. 10.4.5.7[[Delete]] (P )
        8. 10.4.5.8[[OwnPropertyKeys]] ( )
        9. 10.4.5.9 TypedArray With Buffer Witness Records
        10. 10.4.5.10 MakeTypedArrayWithBufferWitnessRecord (obj,order )
        11. 10.4.5.11 TypedArrayCreate (prototype )
        12. 10.4.5.12 TypedArrayByteLength (taRecord )
        13. 10.4.5.13 TypedArrayLength (taRecord )
        14. 10.4.5.14 IsTypedArrayOutOfBounds (taRecord )
        15. 10.4.5.15 IsTypedArrayFixedLength (O )
        16. 10.4.5.16 IsValidIntegerIndex (O,index )
        17. 10.4.5.17 TypedArrayGetElement (O,index )
        18. 10.4.5.18 TypedArraySetElement (O,index,value )
        19. 10.4.5.19 IsArrayBufferViewOutOfBounds (O )
      6. +10.4.6 Module Namespace Exotic Objects
        1. 10.4.6.1[[GetPrototypeOf]] ( )
        2. 10.4.6.2[[SetPrototypeOf]] (V )
        3. 10.4.6.3[[IsExtensible]] ( )
        4. 10.4.6.4[[PreventExtensions]] ( )
        5. 10.4.6.5[[GetOwnProperty]] (P )
        6. 10.4.6.6[[DefineOwnProperty]] (P,Desc )
        7. 10.4.6.7[[HasProperty]] (P )
        8. 10.4.6.8[[Get]] (P,Receiver )
        9. 10.4.6.9[[Set]] (P,V,Receiver )
        10. 10.4.6.10[[Delete]] (P )
        11. 10.4.6.11[[OwnPropertyKeys]] ( )
        12. 10.4.6.12 ModuleNamespaceCreate (module,exports )
      7. +10.4.7 Immutable Prototype Exotic Objects
        1. 10.4.7.1[[SetPrototypeOf]] (V )
        2. 10.4.7.2 SetImmutablePrototype (O,V )
    5. +10.5 Proxy Object Internal Methods and Internal Slots
      1. 10.5.1[[GetPrototypeOf]] ( )
      2. 10.5.2[[SetPrototypeOf]] (V )
      3. 10.5.3[[IsExtensible]] ( )
      4. 10.5.4[[PreventExtensions]] ( )
      5. 10.5.5[[GetOwnProperty]] (P )
      6. 10.5.6[[DefineOwnProperty]] (P,Desc )
      7. 10.5.7[[HasProperty]] (P )
      8. 10.5.8[[Get]] (P,Receiver )
      9. 10.5.9[[Set]] (P,V,Receiver )
      10. 10.5.10[[Delete]] (P )
      11. 10.5.11[[OwnPropertyKeys]] ( )
      12. 10.5.12[[Call]] (thisArgument,argumentsList )
      13. 10.5.13[[Construct]] (argumentsList,newTarget )
      14. 10.5.14 ValidateNonRevokedProxy (proxy )
      15. 10.5.15 ProxyCreate (target,handler )
  12. +11 ECMAScript Language: Source Text
    1. +11.1 Source Text
      1. 11.1.1 SS: UTF16EncodeCodePoint (cp )
      2. 11.1.2 SS: CodePointsToString (text )
      3. 11.1.3 SS: UTF16SurrogatePairToCodePoint (lead,trail )
      4. 11.1.4 SS: CodePointAt (string,position )
      5. 11.1.5 SS: StringToCodePoints (string )
      6. 11.1.6 SS: ParseText (sourceText,goalSymbol )
    2. +11.2 Types of Source Code
      1. 11.2.1 Directive Prologues and the Use Strict Directive
      2. +11.2.2 Strict Mode Code
        1. 11.2.2.1 SS: IsStrict (node )
      3. 11.2.3 Non-ECMAScript Functions
  13. +12 ECMAScript Language: Lexical Grammar
    1. 12.1 Unicode Format-Control Characters
    2. 12.2 White Space
    3. 12.3 Line Terminators
    4. 12.4 Comments
    5. 12.5 Hashbang Comments
    6. 12.6 Tokens
    7. +12.7 Names and Keywords
      1. +12.7.1 Identifier Names
        1. 12.7.1.1 SS: Early Errors
        2. 12.7.1.2 SS: IdentifierCodePoints
        3. 12.7.1.3 SS: IdentifierCodePoint
      2. 12.7.2 Keywords and Reserved Words
    8. 12.8 Punctuators
    9. +12.9 Literals
      1. 12.9.1 Null Literals
      2. 12.9.2 Boolean Literals
      3. +12.9.3 Numeric Literals
        1. 12.9.3.1 SS: Early Errors
        2. 12.9.3.2 SS: MV
        3. 12.9.3.3 SS: NumericValue
      4. +12.9.4 String Literals
        1. 12.9.4.1 SS: Early Errors
        2. 12.9.4.2 SS: SV
        3. 12.9.4.3 SS: MV
      5. +12.9.5 Regular Expression Literals
        1. 12.9.5.1 SS: BodyText
        2. 12.9.5.2 SS: FlagText
      6. +12.9.6 Template Literal Lexical Components
        1. 12.9.6.1 SS: TV
        2. 12.9.6.2 SS: TRV
    10. +12.10 Automatic Semicolon Insertion
      1. 12.10.1 Rules of Automatic Semicolon Insertion
      2. 12.10.2 Examples of Automatic Semicolon Insertion
      3. +12.10.3 Interesting Cases of Automatic Semicolon Insertion
        1. 12.10.3.1 Interesting Cases of Automatic Semicolon Insertion in Statement Lists
        2. +12.10.3.2 Cases of Automatic Semicolon Insertion and “[noLineTerminator here]”
          1. 12.10.3.2.1 List of Grammar Productions with Optional Operands and “[noLineTerminator here]”
  14. +13 ECMAScript Language: Expressions
    1. +13.1 Identifiers
      1. 13.1.1 SS: Early Errors
      2. 13.1.2 SS: StringValue
      3. 13.1.3 RS: Evaluation
    2. +13.2 Primary Expression
      1. +13.2.1 Thethis Keyword
        1. 13.2.1.1 RS: Evaluation
      2. 13.2.2 Identifier Reference
      3. +13.2.3 Literals
        1. 13.2.3.1 RS: Evaluation
      4. +13.2.4 Array Initializer
        1. 13.2.4.1 RS: ArrayAccumulation
        2. 13.2.4.2 RS: Evaluation
      5. +13.2.5 Object Initializer
        1. 13.2.5.1 SS: Early Errors
        2. 13.2.5.2 SS: IsComputedPropertyKey
        3. 13.2.5.3 SS: PropertyNameList
        4. 13.2.5.4 RS: Evaluation
        5. 13.2.5.5 RS: PropertyDefinitionEvaluation
      6. 13.2.6 Function Defining Expressions
      7. +13.2.7 Regular Expression Literals
        1. 13.2.7.1 SS: Early Errors
        2. 13.2.7.2 SS: IsValidRegularExpressionLiteral (literal )
        3. 13.2.7.3 RS: Evaluation
      8. +13.2.8 Template Literals
        1. 13.2.8.1 SS: Early Errors
        2. 13.2.8.2 SS: TemplateStrings
        3. 13.2.8.3 SS: TemplateString (templateToken,raw )
        4. 13.2.8.4 GetTemplateObject (templateLiteral )
        5. 13.2.8.5 RS: SubstitutionEvaluation
        6. 13.2.8.6 RS: Evaluation
      9. +13.2.9 The Grouping Operator
        1. 13.2.9.1 SS: Early Errors
        2. 13.2.9.2 RS: Evaluation
    3. +13.3 Left-Hand-Side Expressions
      1. +13.3.1 Static Semantics
        1. 13.3.1.1 SS: Early Errors
      2. +13.3.2 Property Accessors
        1. 13.3.2.1 RS: Evaluation
      3. 13.3.3 EvaluatePropertyAccessWithExpressionKey (baseValue,expression,strict )
      4. 13.3.4 EvaluatePropertyAccessWithIdentifierKey (baseValue,identifierName,strict )
      5. +13.3.5 Thenew Operator
        1. +13.3.5.1 RS: Evaluation
          1. 13.3.5.1.1 EvaluateNew (constructExpr,arguments )
      6. +13.3.6 Function Calls
        1. 13.3.6.1 RS: Evaluation
        2. 13.3.6.2 EvaluateCall (func,ref,arguments,tailPosition )
      7. +13.3.7 Thesuper Keyword
        1. 13.3.7.1 RS: Evaluation
        2. 13.3.7.2 GetSuperConstructor ( )
        3. 13.3.7.3 MakeSuperPropertyReference (actualThis,propertyKey,strict )
      8. +13.3.8 Argument Lists
        1. 13.3.8.1 RS: ArgumentListEvaluation
      9. +13.3.9 Optional Chains
        1. 13.3.9.1 RS: Evaluation
        2. 13.3.9.2 RS: ChainEvaluation
      10. +13.3.10 Import Calls
        1. 13.3.10.1 RS: Evaluation
        2. 13.3.10.2 EvaluateImportCall (specifierExpression [ ,optionsExpression ] )
        3. 13.3.10.3 ContinueDynamicImport (promiseCapability,moduleCompletion )
      11. +13.3.11 Tagged Templates
        1. 13.3.11.1 RS: Evaluation
      12. +13.3.12 Meta Properties
        1. +13.3.12.1 RS: Evaluation
          1. 13.3.12.1.1 HostGetImportMetaProperties (moduleRecord )
          2. 13.3.12.1.2 HostFinalizeImportMeta (importMeta,moduleRecord )
    4. +13.4 Update Expressions
      1. 13.4.1 SS: Early Errors
      2. +13.4.2 Postfix Increment Operator
        1. 13.4.2.1 RS: Evaluation
      3. +13.4.3 Postfix Decrement Operator
        1. 13.4.3.1 RS: Evaluation
      4. +13.4.4 Prefix Increment Operator
        1. 13.4.4.1 RS: Evaluation
      5. +13.4.5 Prefix Decrement Operator
        1. 13.4.5.1 RS: Evaluation
    5. +13.5 Unary Operators
      1. +13.5.1 Thedelete Operator
        1. 13.5.1.1 SS: Early Errors
        2. 13.5.1.2 RS: Evaluation
      2. +13.5.2 Thevoid Operator
        1. 13.5.2.1 RS: Evaluation
      3. +13.5.3 Thetypeof Operator
        1. 13.5.3.1 RS: Evaluation
      4. +13.5.4 Unary+ Operator
        1. 13.5.4.1 RS: Evaluation
      5. +13.5.5 Unary- Operator
        1. 13.5.5.1 RS: Evaluation
      6. +13.5.6 Bitwise NOT Operator (~ )
        1. 13.5.6.1 RS: Evaluation
      7. +13.5.7 Logical NOT Operator (! )
        1. 13.5.7.1 RS: Evaluation
    6. +13.6 Exponentiation Operator
      1. 13.6.1 RS: Evaluation
    7. +13.7 Multiplicative Operators
      1. 13.7.1 RS: Evaluation
    8. +13.8 Additive Operators
      1. +13.8.1 The Addition Operator (+ )
        1. 13.8.1.1 RS: Evaluation
      2. +13.8.2 The Subtraction Operator (- )
        1. 13.8.2.1 RS: Evaluation
    9. +13.9 Bitwise Shift Operators
      1. +13.9.1 The Left Shift Operator (<< )
        1. 13.9.1.1 RS: Evaluation
      2. +13.9.2 The Signed Right Shift Operator (>> )
        1. 13.9.2.1 RS: Evaluation
      3. +13.9.3 The Unsigned Right Shift Operator (>>> )
        1. 13.9.3.1 RS: Evaluation
    10. +13.10 Relational Operators
      1. 13.10.1 RS: Evaluation
      2. 13.10.2 InstanceofOperator (V,target )
    11. +13.11 Equality Operators
      1. 13.11.1 RS: Evaluation
    12. +13.12 Binary Bitwise Operators
      1. 13.12.1 RS: Evaluation
    13. +13.13 Binary Logical Operators
      1. 13.13.1 RS: Evaluation
    14. +13.14 Conditional Operator (? : )
      1. 13.14.1 RS: Evaluation
    15. +13.15 Assignment Operators
      1. 13.15.1 SS: Early Errors
      2. 13.15.2 RS: Evaluation
      3. 13.15.3 ApplyStringOrNumericBinaryOperator (lVal,opText,rVal )
      4. 13.15.4 EvaluateStringOrNumericBinaryExpression (leftOperand,opText,rightOperand )
      5. +13.15.5 Destructuring Assignment
        1. 13.15.5.1 SS: Early Errors
        2. 13.15.5.2 RS: DestructuringAssignmentEvaluation
        3. 13.15.5.3 RS: PropertyDestructuringAssignmentEvaluation
        4. 13.15.5.4 RS: RestDestructuringAssignmentEvaluation
        5. 13.15.5.5 RS: IteratorDestructuringAssignmentEvaluation
        6. 13.15.5.6 RS: KeyedDestructuringAssignmentEvaluation
    16. +13.16 Comma Operator (, )
      1. 13.16.1 RS: Evaluation
  15. +14 ECMAScript Language: Statements and Declarations
    1. +14.1 Statement Semantics
      1. 14.1.1 RS: Evaluation
    2. +14.2 Block
      1. 14.2.1 SS: Early Errors
      2. 14.2.2 RS: Evaluation
      3. 14.2.3 BlockDeclarationInstantiation (code,env )
    3. +14.3 Declarations and the Variable Statement
      1. +14.3.1 Let and Const Declarations
        1. 14.3.1.1 SS: Early Errors
        2. 14.3.1.2 RS: Evaluation
      2. +14.3.2 Variable Statement
        1. 14.3.2.1 RS: Evaluation
      3. +14.3.3 Destructuring Binding Patterns
        1. 14.3.3.1 RS: PropertyBindingInitialization
        2. 14.3.3.2 RS: RestBindingInitialization
        3. 14.3.3.3 RS: KeyedBindingInitialization
    4. +14.4 Empty Statement
      1. 14.4.1 RS: Evaluation
    5. +14.5 Expression Statement
      1. 14.5.1 RS: Evaluation
    6. +14.6 Theif Statement
      1. 14.6.1 SS: Early Errors
      2. 14.6.2 RS: Evaluation
    7. +14.7 Iteration Statements
      1. +14.7.1 Semantics
        1. 14.7.1.1 LoopContinues (completion,labelSet )
        2. 14.7.1.2 RS: LoopEvaluation
      2. +14.7.2 Thedo-while Statement
        1. 14.7.2.1 SS: Early Errors
        2. 14.7.2.2 RS: DoWhileLoopEvaluation
      3. +14.7.3 Thewhile Statement
        1. 14.7.3.1 SS: Early Errors
        2. 14.7.3.2 RS: WhileLoopEvaluation
      4. +14.7.4 Thefor Statement
        1. 14.7.4.1 SS: Early Errors
        2. 14.7.4.2 RS: ForLoopEvaluation
        3. 14.7.4.3 ForBodyEvaluation (test,increment,stmt,perIterationBindings,labelSet )
        4. 14.7.4.4 CreatePerIterationEnvironment (perIterationBindings )
      5. +14.7.5 Thefor-in,for-of, andfor-await-of Statements
        1. 14.7.5.1 SS: Early Errors
        2. 14.7.5.2 SS: IsDestructuring
        3. 14.7.5.3 RS: ForDeclarationBindingInitialization
        4. 14.7.5.4 RS: ForDeclarationBindingInstantiation
        5. 14.7.5.5 RS: ForInOfLoopEvaluation
        6. 14.7.5.6 ForIn/OfHeadEvaluation (uninitializedBoundNames,expr,iterationKind )
        7. 14.7.5.7 ForIn/OfBodyEvaluation (lhs,stmt,iteratorRecord,iterationKind,lhsKind,labelSet [ ,iteratorKind ] )
        8. 14.7.5.8 RS: Evaluation
        9. 14.7.5.9 EnumerateObjectProperties (O )
        10. +14.7.5.10 For-In Iterator Objects
          1. 14.7.5.10.1 CreateForInIterator (object )
          2. +14.7.5.10.2 The %ForInIteratorPrototype% Object
            1. 14.7.5.10.2.1 %ForInIteratorPrototype%.next ( )
          3. 14.7.5.10.3 Properties of For-In Iterator Instances
    8. +14.8 Thecontinue Statement
      1. 14.8.1 SS: Early Errors
      2. 14.8.2 RS: Evaluation
    9. +14.9 Thebreak Statement
      1. 14.9.1 SS: Early Errors
      2. 14.9.2 RS: Evaluation
    10. +14.10 Thereturn Statement
      1. 14.10.1 RS: Evaluation
    11. +14.11 Thewith Statement
      1. 14.11.1 SS: Early Errors
      2. 14.11.2 RS: Evaluation
    12. +14.12 Theswitch Statement
      1. 14.12.1 SS: Early Errors
      2. 14.12.2 RS: CaseBlockEvaluation
      3. 14.12.3 CaseClauseIsSelected (C,input )
      4. 14.12.4 RS: Evaluation
    13. +14.13 Labelled Statements
      1. 14.13.1 SS: Early Errors
      2. 14.13.2 SS: IsLabelledFunction (stmt )
      3. 14.13.3 RS: Evaluation
      4. 14.13.4 RS: LabelledEvaluation
    14. +14.14 Thethrow Statement
      1. 14.14.1 RS: Evaluation
    15. +14.15 Thetry Statement
      1. 14.15.1 SS: Early Errors
      2. 14.15.2 RS: CatchClauseEvaluation
      3. 14.15.3 RS: Evaluation
    16. +14.16 Thedebugger Statement
      1. 14.16.1 RS: Evaluation
  16. +15 ECMAScript Language: Functions and Classes
    1. +15.1 Parameter Lists
      1. 15.1.1 SS: Early Errors
      2. 15.1.2 SS: ContainsExpression
      3. 15.1.3 SS: IsSimpleParameterList
      4. 15.1.4 SS: HasInitializer
      5. 15.1.5 SS: ExpectedArgumentCount
    2. +15.2 Function Definitions
      1. 15.2.1 SS: Early Errors
      2. 15.2.2 SS: FunctionBodyContainsUseStrict
      3. 15.2.3 RS: EvaluateFunctionBody
      4. 15.2.4 RS: InstantiateOrdinaryFunctionObject
      5. 15.2.5 RS: InstantiateOrdinaryFunctionExpression
      6. 15.2.6 RS: Evaluation
    3. +15.3 Arrow Function Definitions
      1. 15.3.1 SS: Early Errors
      2. 15.3.2 SS: ConciseBodyContainsUseStrict
      3. 15.3.3 RS: EvaluateConciseBody
      4. 15.3.4 RS: InstantiateArrowFunctionExpression
      5. 15.3.5 RS: Evaluation
    4. +15.4 Method Definitions
      1. 15.4.1 SS: Early Errors
      2. 15.4.2 SS: HasDirectSuper
      3. 15.4.3 SS: SpecialMethod
      4. 15.4.4 RS: DefineMethod
      5. 15.4.5 RS: MethodDefinitionEvaluation
    5. +15.5 Generator Function Definitions
      1. 15.5.1 SS: Early Errors
      2. 15.5.2 RS: EvaluateGeneratorBody
      3. 15.5.3 RS: InstantiateGeneratorFunctionObject
      4. 15.5.4 RS: InstantiateGeneratorFunctionExpression
      5. 15.5.5 RS: Evaluation
    6. +15.6 Async Generator Function Definitions
      1. 15.6.1 SS: Early Errors
      2. 15.6.2 RS: EvaluateAsyncGeneratorBody
      3. 15.6.3 RS: InstantiateAsyncGeneratorFunctionObject
      4. 15.6.4 RS: InstantiateAsyncGeneratorFunctionExpression
      5. 15.6.5 RS: Evaluation
    7. +15.7 Class Definitions
      1. 15.7.1 SS: Early Errors
      2. 15.7.2 SS: ClassElementKind
      3. 15.7.3 SS: ConstructorMethod
      4. 15.7.4 SS: IsStatic
      5. 15.7.5 SS: NonConstructorElements
      6. 15.7.6 SS: PrototypePropertyNameList
      7. 15.7.7 SS: AllPrivateIdentifiersValid
      8. 15.7.8 SS: PrivateBoundIdentifiers
      9. 15.7.9 SS: ContainsArguments
      10. 15.7.10 RS: ClassFieldDefinitionEvaluation
      11. 15.7.11 RS: ClassStaticBlockDefinitionEvaluation
      12. 15.7.12 RS: EvaluateClassStaticBlockBody
      13. 15.7.13 RS: ClassElementEvaluation
      14. 15.7.14 RS: ClassDefinitionEvaluation
      15. 15.7.15 RS: BindingClassDeclarationEvaluation
      16. 15.7.16 RS: Evaluation
    8. +15.8 Async Function Definitions
      1. 15.8.1 SS: Early Errors
      2. 15.8.2 RS: InstantiateAsyncFunctionObject
      3. 15.8.3 RS: InstantiateAsyncFunctionExpression
      4. 15.8.4 RS: EvaluateAsyncFunctionBody
      5. 15.8.5 RS: Evaluation
    9. +15.9 Async Arrow Function Definitions
      1. 15.9.1 SS: Early Errors
      2. 15.9.2 SS: AsyncConciseBodyContainsUseStrict
      3. 15.9.3 RS: EvaluateAsyncConciseBody
      4. 15.9.4 RS: InstantiateAsyncArrowFunctionExpression
      5. 15.9.5 RS: Evaluation
    10. +15.10 Tail Position Calls
      1. 15.10.1 SS: IsInTailPosition (call )
      2. 15.10.2 SS: HasCallInTailPosition
      3. 15.10.3 PrepareForTailCall ( )
  17. +16 ECMAScript Language: Scripts and Modules
    1. +16.1 Scripts
      1. 16.1.1 SS: Early Errors
      2. 16.1.2 SS: ScriptIsStrict
      3. 16.1.3 RS: Evaluation
      4. 16.1.4 Script Records
      5. 16.1.5 ParseScript (sourceText,realm,hostDefined )
      6. 16.1.6 ScriptEvaluation (scriptRecord )
      7. 16.1.7 GlobalDeclarationInstantiation (script,env )
    2. +16.2 Modules
      1. +16.2.1 Module Semantics
        1. 16.2.1.1 SS: Early Errors
        2. 16.2.1.2 SS: ImportedLocalNames (importEntries )
        3. +16.2.1.3 ModuleRequest Records
          1. 16.2.1.3.1 ModuleRequestsEqual (left,right )
        4. 16.2.1.4 SS: ModuleRequests
        5. +16.2.1.5 Abstract Module Records
          1. 16.2.1.5.1 EvaluateModuleSync (module )
        6. +16.2.1.6 Cyclic Module Records
          1. +16.2.1.6.1 Implementation of Module Record Abstract Methods
            1. +16.2.1.6.1.1 LoadRequestedModules ( [hostDefined ] )
              1. 16.2.1.6.1.1.1 InnerModuleLoading (state,module )
              2. 16.2.1.6.1.1.2 ContinueModuleLoading (state,moduleCompletion )
            2. +16.2.1.6.1.2 Link ( )
              1. 16.2.1.6.1.2.1 InnerModuleLinking (module,stack,index )
            3. +16.2.1.6.1.3 Evaluate ( )
              1. 16.2.1.6.1.3.1 InnerModuleEvaluation (module,stack,index )
              2. 16.2.1.6.1.3.2 ExecuteAsyncModule (module )
              3. 16.2.1.6.1.3.3 GatherAvailableAncestors (module,execList )
              4. 16.2.1.6.1.3.4 AsyncModuleExecutionFulfilled (module )
              5. 16.2.1.6.1.3.5 AsyncModuleExecutionRejected (module,error )
          2. 16.2.1.6.2 Example Cyclic Module Record Graphs
        7. +16.2.1.7 Source Text Module Records
          1. 16.2.1.7.1 ParseModule (sourceText,realm,hostDefined )
          2. +16.2.1.7.2 Implementation of Module Record Abstract Methods
            1. 16.2.1.7.2.1 GetExportedNames ( [exportStarSet ] )
            2. 16.2.1.7.2.2 ResolveExport (exportName [ ,resolveSet ] )
          3. +16.2.1.7.3 Implementation of Cyclic Module Record Abstract Methods
            1. 16.2.1.7.3.1 InitializeEnvironment ( )
            2. 16.2.1.7.3.2 ExecuteModule ( [capability ] )
        8. +16.2.1.8 Synthetic Module Records
          1. 16.2.1.8.1 CreateDefaultExportSyntheticModule (defaultExport )
          2. 16.2.1.8.2 ParseJSONModule (source )
          3. 16.2.1.8.3 SetSyntheticModuleExport (module,exportName,exportValue )
          4. +16.2.1.8.4 Implementation of Module Record Abstract Methods
            1. 16.2.1.8.4.1 LoadRequestedModules ( )
            2. 16.2.1.8.4.2 GetExportedNames ( )
            3. 16.2.1.8.4.3 ResolveExport (exportName )
            4. 16.2.1.8.4.4 Link ( )
            5. 16.2.1.8.4.5 Evaluate ( )
        9. 16.2.1.9 GetImportedModule (referrer,request )
        10. 16.2.1.10 HostLoadImportedModule (referrer,moduleRequest,hostDefined,payload )
        11. 16.2.1.11 FinishLoadingImportedModule (referrer,moduleRequest,payload,result )
        12. +16.2.1.12 AllImportAttributesSupported (attributes )
          1. 16.2.1.12.1 HostGetSupportedImportAttributes ( )
        13. 16.2.1.13 GetModuleNamespace (module )
        14. 16.2.1.14 RS: Evaluation
      2. +16.2.2 Imports
        1. 16.2.2.1 SS: Early Errors
        2. 16.2.2.2 SS: ImportEntries
        3. 16.2.2.3 SS: ImportEntriesForModule
        4. 16.2.2.4 SS: WithClauseToAttributes
      3. +16.2.3 Exports
        1. 16.2.3.1 SS: Early Errors
        2. 16.2.3.2 SS: ExportedBindings
        3. 16.2.3.3 SS: ExportedNames
        4. 16.2.3.4 SS: ExportEntries
        5. 16.2.3.5 SS: ExportEntriesForModule
        6. 16.2.3.6 SS: ReferencedBindings
        7. 16.2.3.7 RS: Evaluation
  18. +17 Error Handling and Language Extensions
    1. 17.1 Forbidden Extensions
  19. 18 ECMAScript Standard Built-in Objects
  20. +19 The Global Object
    1. +19.1 Value Properties of the Global Object
      1. 19.1.1 globalThis
      2. 19.1.2 Infinity
      3. 19.1.3 NaN
      4. 19.1.4 undefined
    2. +19.2 Function Properties of the Global Object
      1. +19.2.1 eval (x )
        1. 19.2.1.1 PerformEval (x,strictCaller,direct )
        2. 19.2.1.2 HostEnsureCanCompileStrings (calleeRealm,parameterStrings,bodyString,direct )
        3. 19.2.1.3 EvalDeclarationInstantiation (body,varEnv,lexEnv,privateEnv,strict )
      2. 19.2.2 isFinite (number )
      3. 19.2.3 isNaN (number )
      4. 19.2.4 parseFloat (string )
      5. 19.2.5 parseInt (string,radix )
      6. +19.2.6 URI Handling Functions
        1. 19.2.6.1 decodeURI (encodedURI )
        2. 19.2.6.2 decodeURIComponent (encodedURIComponent )
        3. 19.2.6.3 encodeURI (uri )
        4. 19.2.6.4 encodeURIComponent (uriComponent )
        5. 19.2.6.5 Encode (string,extraUnescaped )
        6. 19.2.6.6 Decode (string,preserveEscapeSet )
        7. 19.2.6.7 ParseHexOctet (string,position )
    3. +19.3 Constructor Properties of the Global Object
      1. 19.3.1 AggregateError ( . . . )
      2. 19.3.2 Array ( . . . )
      3. 19.3.3 ArrayBuffer ( . . . )
      4. 19.3.4 BigInt ( . . . )
      5. 19.3.5 BigInt64Array ( . . . )
      6. 19.3.6 BigUint64Array ( . . . )
      7. 19.3.7 Boolean ( . . . )
      8. 19.3.8 DataView ( . . . )
      9. 19.3.9 Date ( . . . )
      10. 19.3.10 Error ( . . . )
      11. 19.3.11 EvalError ( . . . )
      12. 19.3.12 FinalizationRegistry ( . . . )
      13. 19.3.13 Float16Array ( . . . )
      14. 19.3.14 Float32Array ( . . . )
      15. 19.3.15 Float64Array ( . . . )
      16. 19.3.16 Function ( . . . )
      17. 19.3.17 Int8Array ( . . . )
      18. 19.3.18 Int16Array ( . . . )
      19. 19.3.19 Int32Array ( . . . )
      20. 19.3.20 Iterator ( . . . )
      21. 19.3.21 Map ( . . . )
      22. 19.3.22 Number ( . . . )
      23. 19.3.23 Object ( . . . )
      24. 19.3.24 Promise ( . . . )
      25. 19.3.25 Proxy ( . . . )
      26. 19.3.26 RangeError ( . . . )
      27. 19.3.27 ReferenceError ( . . . )
      28. 19.3.28 RegExp ( . . . )
      29. 19.3.29 Set ( . . . )
      30. 19.3.30 SharedArrayBuffer ( . . . )
      31. 19.3.31 String ( . . . )
      32. 19.3.32 Symbol ( . . . )
      33. 19.3.33 SyntaxError ( . . . )
      34. 19.3.34 TypeError ( . . . )
      35. 19.3.35 Uint8Array ( . . . )
      36. 19.3.36 Uint8ClampedArray ( . . . )
      37. 19.3.37 Uint16Array ( . . . )
      38. 19.3.38 Uint32Array ( . . . )
      39. 19.3.39 URIError ( . . . )
      40. 19.3.40 WeakMap ( . . . )
      41. 19.3.41 WeakRef ( . . . )
      42. 19.3.42 WeakSet ( . . . )
    4. +19.4 Other Properties of the Global Object
      1. 19.4.1 Atomics
      2. 19.4.2 JSON
      3. 19.4.3 Math
      4. 19.4.4 Reflect
  21. +20 Fundamental Objects
    1. +20.1 Object Objects
      1. +20.1.1 The Object Constructor
        1. 20.1.1.1 Object ( [value ] )
      2. +20.1.2 Properties of the Object Constructor
        1. 20.1.2.1 Object.assign (target, ...sources )
        2. 20.1.2.2 Object.create (O,Properties )
        3. +20.1.2.3 Object.defineProperties (O,Properties )
          1. 20.1.2.3.1 ObjectDefineProperties (O,Properties )
        4. 20.1.2.4 Object.defineProperty (O,P,Attributes )
        5. 20.1.2.5 Object.entries (O )
        6. 20.1.2.6 Object.freeze (O )
        7. 20.1.2.7 Object.fromEntries (iterable )
        8. 20.1.2.8 Object.getOwnPropertyDescriptor (O,P )
        9. 20.1.2.9 Object.getOwnPropertyDescriptors (O )
        10. 20.1.2.10 Object.getOwnPropertyNames (O )
        11. +20.1.2.11 Object.getOwnPropertySymbols (O )
          1. 20.1.2.11.1 GetOwnPropertyKeys (O,type )
        12. 20.1.2.12 Object.getPrototypeOf (O )
        13. 20.1.2.13 Object.groupBy (items,callback )
        14. 20.1.2.14 Object.hasOwn (O,P )
        15. 20.1.2.15 Object.is (value1,value2 )
        16. 20.1.2.16 Object.isExtensible (O )
        17. 20.1.2.17 Object.isFrozen (O )
        18. 20.1.2.18 Object.isSealed (O )
        19. 20.1.2.19 Object.keys (O )
        20. 20.1.2.20 Object.preventExtensions (O )
        21. 20.1.2.21 Object.prototype
        22. 20.1.2.22 Object.seal (O )
        23. 20.1.2.23 Object.setPrototypeOf (O,proto )
        24. 20.1.2.24 Object.values (O )
      3. +20.1.3 Properties of the Object Prototype Object
        1. 20.1.3.1 Object.prototype.constructor
        2. 20.1.3.2 Object.prototype.hasOwnProperty (V )
        3. 20.1.3.3 Object.prototype.isPrototypeOf (V )
        4. 20.1.3.4 Object.prototype.propertyIsEnumerable (V )
        5. 20.1.3.5 Object.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        6. 20.1.3.6 Object.prototype.toString ( )
        7. 20.1.3.7 Object.prototype.valueOf ( )
        8. +20.1.3.8 Object.prototype.__proto__
          1. 20.1.3.8.1 get Object.prototype.__proto__
          2. 20.1.3.8.2 set Object.prototype.__proto__
        9. +20.1.3.9 Legacy Object.prototype Accessor Methods
          1. 20.1.3.9.1 Object.prototype.__defineGetter__ (P,getter )
          2. 20.1.3.9.2 Object.prototype.__defineSetter__ (P,setter )
          3. 20.1.3.9.3 Object.prototype.__lookupGetter__ (P )
          4. 20.1.3.9.4 Object.prototype.__lookupSetter__ (P )
      4. 20.1.4 Properties of Object Instances
    2. +20.2 Function Objects
      1. +20.2.1 The Function Constructor
        1. +20.2.1.1 Function ( ...parameterArgs,bodyArg )
          1. 20.2.1.1.1 CreateDynamicFunction (constructor,newTarget,kind,parameterArgs,bodyArg )
      2. +20.2.2 Properties of the Function Constructor
        1. 20.2.2.1 Function.prototype
      3. +20.2.3 Properties of the Function Prototype Object
        1. 20.2.3.1 Function.prototype.apply (thisArg,argArray )
        2. 20.2.3.2 Function.prototype.bind (thisArg, ...args )
        3. 20.2.3.3 Function.prototype.call (thisArg, ...args )
        4. 20.2.3.4 Function.prototype.constructor
        5. 20.2.3.5 Function.prototype.toString ( )
        6. 20.2.3.6 Function.prototype [ %Symbol.hasInstance% ] (V )
      4. +20.2.4 Function Instances
        1. 20.2.4.1 length
        2. 20.2.4.2 name
        3. 20.2.4.3 prototype
      5. 20.2.5 HostHasSourceTextAvailable (func )
    3. +20.3 Boolean Objects
      1. +20.3.1 The Boolean Constructor
        1. 20.3.1.1 Boolean (value )
      2. +20.3.2 Properties of the Boolean Constructor
        1. 20.3.2.1 Boolean.prototype
      3. +20.3.3 Properties of the Boolean Prototype Object
        1. 20.3.3.1 Boolean.prototype.constructor
        2. 20.3.3.2 Boolean.prototype.toString ( )
        3. +20.3.3.3 Boolean.prototype.valueOf ( )
          1. 20.3.3.3.1 ThisBooleanValue (value )
      4. 20.3.4 Properties of Boolean Instances
    4. +20.4 Symbol Objects
      1. +20.4.1 The Symbol Constructor
        1. 20.4.1.1 Symbol ( [description ] )
      2. +20.4.2 Properties of the Symbol Constructor
        1. 20.4.2.1 Symbol.asyncIterator
        2. 20.4.2.2 Symbol.for (key )
        3. 20.4.2.3 Symbol.hasInstance
        4. 20.4.2.4 Symbol.isConcatSpreadable
        5. 20.4.2.5 Symbol.iterator
        6. 20.4.2.6 Symbol.keyFor (sym )
        7. 20.4.2.7 Symbol.match
        8. 20.4.2.8 Symbol.matchAll
        9. 20.4.2.9 Symbol.prototype
        10. 20.4.2.10 Symbol.replace
        11. 20.4.2.11 Symbol.search
        12. 20.4.2.12 Symbol.species
        13. 20.4.2.13 Symbol.split
        14. 20.4.2.14 Symbol.toPrimitive
        15. 20.4.2.15 Symbol.toStringTag
        16. 20.4.2.16 Symbol.unscopables
      3. +20.4.3 Properties of the Symbol Prototype Object
        1. 20.4.3.1 Symbol.prototype.constructor
        2. 20.4.3.2 get Symbol.prototype.description
        3. +20.4.3.3 Symbol.prototype.toString ( )
          1. 20.4.3.3.1 SymbolDescriptiveString (sym )
        4. +20.4.3.4 Symbol.prototype.valueOf ( )
          1. 20.4.3.4.1 ThisSymbolValue (value )
        5. 20.4.3.5 Symbol.prototype [ %Symbol.toPrimitive% ] (hint )
        6. 20.4.3.6 Symbol.prototype [ %Symbol.toStringTag% ]
      4. 20.4.4 Properties of Symbol Instances
      5. +20.4.5 Abstract Operations for Symbols
        1. 20.4.5.1 KeyForSymbol (sym )
    5. +20.5 Error Objects
      1. +20.5.1 The Error Constructor
        1. 20.5.1.1 Error (message [ ,options ] )
      2. +20.5.2 Properties of the Error Constructor
        1. 20.5.2.1 Error.isError (arg )
        2. 20.5.2.2 Error.prototype
      3. +20.5.3 Properties of the Error Prototype Object
        1. 20.5.3.1 Error.prototype.constructor
        2. 20.5.3.2 Error.prototype.message
        3. 20.5.3.3 Error.prototype.name
        4. 20.5.3.4 Error.prototype.toString ( )
      4. 20.5.4 Properties of Error Instances
      5. +20.5.5 Native Error Types Used in This Standard
        1. 20.5.5.1 EvalError
        2. 20.5.5.2 RangeError
        3. 20.5.5.3 ReferenceError
        4. 20.5.5.4 SyntaxError
        5. 20.5.5.5 TypeError
        6. 20.5.5.6 URIError
      6. +20.5.6NativeError Object Structure
        1. +20.5.6.1 TheNativeError Constructors
          1. 20.5.6.1.1NativeError (message [ ,options ] )
        2. +20.5.6.2 Properties of theNativeError Constructors
          1. 20.5.6.2.1NativeError.prototype
        3. +20.5.6.3 Properties of theNativeError Prototype Objects
          1. 20.5.6.3.1NativeError.prototype.constructor
          2. 20.5.6.3.2NativeError.prototype.message
          3. 20.5.6.3.3NativeError.prototype.name
        4. 20.5.6.4 Properties ofNativeError Instances
      7. +20.5.7 AggregateError Objects
        1. +20.5.7.1 The AggregateError Constructor
          1. 20.5.7.1.1 AggregateError (errors,message [ ,options ] )
        2. +20.5.7.2 Properties of the AggregateError Constructor
          1. 20.5.7.2.1 AggregateError.prototype
        3. +20.5.7.3 Properties of the AggregateError Prototype Object
          1. 20.5.7.3.1 AggregateError.prototype.constructor
          2. 20.5.7.3.2 AggregateError.prototype.message
          3. 20.5.7.3.3 AggregateError.prototype.name
        4. 20.5.7.4 Properties of AggregateError Instances
      8. +20.5.8 Abstract Operations for Error Objects
        1. 20.5.8.1 InstallErrorCause (O,options )
  22. +21 Numbers and Dates
    1. +21.1 Number Objects
      1. +21.1.1 The Number Constructor
        1. 21.1.1.1 Number (value )
      2. +21.1.2 Properties of the Number Constructor
        1. 21.1.2.1 Number.EPSILON
        2. 21.1.2.2 Number.isFinite (number )
        3. 21.1.2.3 Number.isInteger (number )
        4. 21.1.2.4 Number.isNaN (number )
        5. 21.1.2.5 Number.isSafeInteger (number )
        6. 21.1.2.6 Number.MAX_SAFE_INTEGER
        7. 21.1.2.7 Number.MAX_VALUE
        8. 21.1.2.8 Number.MIN_SAFE_INTEGER
        9. 21.1.2.9 Number.MIN_VALUE
        10. 21.1.2.10 Number.NaN
        11. 21.1.2.11 Number.NEGATIVE_INFINITY
        12. 21.1.2.12 Number.parseFloat (string )
        13. 21.1.2.13 Number.parseInt (string,radix )
        14. 21.1.2.14 Number.POSITIVE_INFINITY
        15. 21.1.2.15 Number.prototype
      3. +21.1.3 Properties of the Number Prototype Object
        1. 21.1.3.1 Number.prototype.constructor
        2. 21.1.3.2 Number.prototype.toExponential (fractionDigits )
        3. 21.1.3.3 Number.prototype.toFixed (fractionDigits )
        4. 21.1.3.4 Number.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        5. 21.1.3.5 Number.prototype.toPrecision (precision )
        6. 21.1.3.6 Number.prototype.toString ( [radix ] )
        7. +21.1.3.7 Number.prototype.valueOf ( )
          1. 21.1.3.7.1 ThisNumberValue (value )
      4. 21.1.4 Properties of Number Instances
    2. +21.2 BigInt Objects
      1. +21.2.1 The BigInt Constructor
        1. +21.2.1.1 BigInt (value )
          1. 21.2.1.1.1 NumberToBigInt (number )
      2. +21.2.2 Properties of the BigInt Constructor
        1. 21.2.2.1 BigInt.asIntN (bits,bigint )
        2. 21.2.2.2 BigInt.asUintN (bits,bigint )
        3. 21.2.2.3 BigInt.prototype
      3. +21.2.3 Properties of the BigInt Prototype Object
        1. 21.2.3.1 BigInt.prototype.constructor
        2. 21.2.3.2 BigInt.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        3. 21.2.3.3 BigInt.prototype.toString ( [radix ] )
        4. +21.2.3.4 BigInt.prototype.valueOf ( )
          1. 21.2.3.4.1 ThisBigIntValue (value )
        5. 21.2.3.5 BigInt.prototype [ %Symbol.toStringTag% ]
      4. 21.2.4 Properties of BigInt Instances
    3. +21.3 The Math Object
      1. +21.3.1 Value Properties of the Math Object
        1. 21.3.1.1 Math.E
        2. 21.3.1.2 Math.LN10
        3. 21.3.1.3 Math.LN2
        4. 21.3.1.4 Math.LOG10E
        5. 21.3.1.5 Math.LOG2E
        6. 21.3.1.6 Math.PI
        7. 21.3.1.7 Math.SQRT1_2
        8. 21.3.1.8 Math.SQRT2
        9. 21.3.1.9 Math [ %Symbol.toStringTag% ]
      2. +21.3.2 Function Properties of the Math Object
        1. 21.3.2.1 Math.abs (x )
        2. 21.3.2.2 Math.acos (x )
        3. 21.3.2.3 Math.acosh (x )
        4. 21.3.2.4 Math.asin (x )
        5. 21.3.2.5 Math.asinh (x )
        6. 21.3.2.6 Math.atan (x )
        7. 21.3.2.7 Math.atanh (x )
        8. 21.3.2.8 Math.atan2 (y,x )
        9. 21.3.2.9 Math.cbrt (x )
        10. 21.3.2.10 Math.ceil (x )
        11. 21.3.2.11 Math.clz32 (x )
        12. 21.3.2.12 Math.cos (x )
        13. 21.3.2.13 Math.cosh (x )
        14. 21.3.2.14 Math.exp (x )
        15. 21.3.2.15 Math.expm1 (x )
        16. 21.3.2.16 Math.floor (x )
        17. 21.3.2.17 Math.fround (x )
        18. 21.3.2.18 Math.f16round (x )
        19. 21.3.2.19 Math.hypot ( ...args )
        20. 21.3.2.20 Math.imul (x,y )
        21. 21.3.2.21 Math.log (x )
        22. 21.3.2.22 Math.log1p (x )
        23. 21.3.2.23 Math.log10 (x )
        24. 21.3.2.24 Math.log2 (x )
        25. 21.3.2.25 Math.max ( ...args )
        26. 21.3.2.26 Math.min ( ...args )
        27. 21.3.2.27 Math.pow (base,exponent )
        28. 21.3.2.28 Math.random ( )
        29. 21.3.2.29 Math.round (x )
        30. 21.3.2.30 Math.sign (x )
        31. 21.3.2.31 Math.sin (x )
        32. 21.3.2.32 Math.sinh (x )
        33. 21.3.2.33 Math.sqrt (x )
        34. 21.3.2.34 Math.tan (x )
        35. 21.3.2.35 Math.tanh (x )
        36. 21.3.2.36 Math.trunc (x )
    4. +21.4 Date Objects
      1. +21.4.1 Overview of Date Objects and Definitions of Abstract Operations
        1. 21.4.1.1 Time Values and Time Range
        2. 21.4.1.2 Time-related Constants
        3. 21.4.1.3 Day (t )
        4. 21.4.1.4 TimeWithinDay (t )
        5. 21.4.1.5 DaysInYear (y )
        6. 21.4.1.6 DayFromYear (y )
        7. 21.4.1.7 TimeFromYear (y )
        8. 21.4.1.8 YearFromTime (t )
        9. 21.4.1.9 DayWithinYear (t )
        10. 21.4.1.10 InLeapYear (t )
        11. 21.4.1.11 MonthFromTime (t )
        12. 21.4.1.12 DateFromTime (t )
        13. 21.4.1.13 WeekDay (t )
        14. 21.4.1.14 HourFromTime (t )
        15. 21.4.1.15 MinFromTime (t )
        16. 21.4.1.16 SecFromTime (t )
        17. 21.4.1.17 msFromTime (t )
        18. 21.4.1.18 GetUTCEpochNanoseconds (year,month,day,hour,minute,second,millisecond,microsecond,nanosecond )
        19. 21.4.1.19 Time Zone Identifiers
        20. 21.4.1.20 GetNamedTimeZoneEpochNanoseconds (timeZoneIdentifier,year,month,day,hour,minute,second,millisecond,microsecond,nanosecond )
        21. 21.4.1.21 GetNamedTimeZoneOffsetNanoseconds (timeZoneIdentifier,epochNanoseconds )
        22. 21.4.1.22 Time Zone Identifier Record
        23. 21.4.1.23 AvailableNamedTimeZoneIdentifiers ( )
        24. 21.4.1.24 SystemTimeZoneIdentifier ( )
        25. 21.4.1.25 LocalTime (t )
        26. 21.4.1.26 UTC (t )
        27. 21.4.1.27 MakeTime (hour,min,sec,ms )
        28. 21.4.1.28 MakeDay (year,month,date )
        29. 21.4.1.29 MakeDate (day,time )
        30. 21.4.1.30 MakeFullYear (year )
        31. 21.4.1.31 TimeClip (time )
        32. +21.4.1.32 Date Time String Format
          1. 21.4.1.32.1 Expanded Years
        33. +21.4.1.33 Time Zone Offset String Format
          1. 21.4.1.33.1 IsTimeZoneOffsetString (offsetString )
          2. 21.4.1.33.2 ParseTimeZoneOffsetString (offsetString )
      2. +21.4.2 The Date Constructor
        1. 21.4.2.1 Date ( ...values )
      3. +21.4.3 Properties of the Date Constructor
        1. 21.4.3.1 Date.now ( )
        2. 21.4.3.2 Date.parse (string )
        3. 21.4.3.3 Date.prototype
        4. 21.4.3.4 Date.UTC (year [ ,month [ ,date [ ,hours [ ,minutes [ ,seconds [ ,ms ] ] ] ] ] ] )
      4. +21.4.4 Properties of the Date Prototype Object
        1. 21.4.4.1 Date.prototype.constructor
        2. 21.4.4.2 Date.prototype.getDate ( )
        3. 21.4.4.3 Date.prototype.getDay ( )
        4. 21.4.4.4 Date.prototype.getFullYear ( )
        5. 21.4.4.5 Date.prototype.getHours ( )
        6. 21.4.4.6 Date.prototype.getMilliseconds ( )
        7. 21.4.4.7 Date.prototype.getMinutes ( )
        8. 21.4.4.8 Date.prototype.getMonth ( )
        9. 21.4.4.9 Date.prototype.getSeconds ( )
        10. 21.4.4.10 Date.prototype.getTime ( )
        11. 21.4.4.11 Date.prototype.getTimezoneOffset ( )
        12. 21.4.4.12 Date.prototype.getUTCDate ( )
        13. 21.4.4.13 Date.prototype.getUTCDay ( )
        14. 21.4.4.14 Date.prototype.getUTCFullYear ( )
        15. 21.4.4.15 Date.prototype.getUTCHours ( )
        16. 21.4.4.16 Date.prototype.getUTCMilliseconds ( )
        17. 21.4.4.17 Date.prototype.getUTCMinutes ( )
        18. 21.4.4.18 Date.prototype.getUTCMonth ( )
        19. 21.4.4.19 Date.prototype.getUTCSeconds ( )
        20. 21.4.4.20 Date.prototype.setDate (date )
        21. 21.4.4.21 Date.prototype.setFullYear (year [ ,month [ ,date ] ] )
        22. 21.4.4.22 Date.prototype.setHours (hour [ ,min [ ,sec [ ,ms ] ] ] )
        23. 21.4.4.23 Date.prototype.setMilliseconds (ms )
        24. 21.4.4.24 Date.prototype.setMinutes (min [ ,sec [ ,ms ] ] )
        25. 21.4.4.25 Date.prototype.setMonth (month [ ,date ] )
        26. 21.4.4.26 Date.prototype.setSeconds (sec [ ,ms ] )
        27. 21.4.4.27 Date.prototype.setTime (time )
        28. 21.4.4.28 Date.prototype.setUTCDate (date )
        29. 21.4.4.29 Date.prototype.setUTCFullYear (year [ ,month [ ,date ] ] )
        30. 21.4.4.30 Date.prototype.setUTCHours (hour [ ,min [ ,sec [ ,ms ] ] ] )
        31. 21.4.4.31 Date.prototype.setUTCMilliseconds (ms )
        32. 21.4.4.32 Date.prototype.setUTCMinutes (min [ ,sec [ ,ms ] ] )
        33. 21.4.4.33 Date.prototype.setUTCMonth (month [ ,date ] )
        34. 21.4.4.34 Date.prototype.setUTCSeconds (sec [ ,ms ] )
        35. 21.4.4.35 Date.prototype.toDateString ( )
        36. 21.4.4.36 Date.prototype.toISOString ( )
        37. 21.4.4.37 Date.prototype.toJSON (key )
        38. 21.4.4.38 Date.prototype.toLocaleDateString ( [reserved1 [ ,reserved2 ] ] )
        39. 21.4.4.39 Date.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        40. 21.4.4.40 Date.prototype.toLocaleTimeString ( [reserved1 [ ,reserved2 ] ] )
        41. +21.4.4.41 Date.prototype.toString ( )
          1. 21.4.4.41.1 TimeString (tv )
          2. 21.4.4.41.2 DateString (tv )
          3. 21.4.4.41.3 TimeZoneString (tv )
          4. 21.4.4.41.4 ToDateString (tv )
        42. 21.4.4.42 Date.prototype.toTimeString ( )
        43. 21.4.4.43 Date.prototype.toUTCString ( )
        44. 21.4.4.44 Date.prototype.valueOf ( )
        45. 21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] (hint )
      5. 21.4.5 Properties of Date Instances
  23. +22 Text Processing
    1. +22.1 String Objects
      1. +22.1.1 The String Constructor
        1. 22.1.1.1 String (value )
      2. +22.1.2 Properties of the String Constructor
        1. 22.1.2.1 String.fromCharCode ( ...codeUnits )
        2. 22.1.2.2 String.fromCodePoint ( ...codePoints )
        3. 22.1.2.3 String.prototype
        4. 22.1.2.4 String.raw (template, ...substitutions )
      3. +22.1.3 Properties of the String Prototype Object
        1. 22.1.3.1 String.prototype.at (index )
        2. 22.1.3.2 String.prototype.charAt (pos )
        3. 22.1.3.3 String.prototype.charCodeAt (pos )
        4. 22.1.3.4 String.prototype.codePointAt (pos )
        5. 22.1.3.5 String.prototype.concat ( ...args )
        6. 22.1.3.6 String.prototype.constructor
        7. 22.1.3.7 String.prototype.endsWith (searchString [ ,endPosition ] )
        8. 22.1.3.8 String.prototype.includes (searchString [ ,position ] )
        9. 22.1.3.9 String.prototype.indexOf (searchString [ ,position ] )
        10. 22.1.3.10 String.prototype.isWellFormed ( )
        11. 22.1.3.11 String.prototype.lastIndexOf (searchString [ ,position ] )
        12. 22.1.3.12 String.prototype.localeCompare (that [ ,reserved1 [ ,reserved2 ] ] )
        13. 22.1.3.13 String.prototype.match (regexp )
        14. 22.1.3.14 String.prototype.matchAll (regexp )
        15. 22.1.3.15 String.prototype.normalize ( [form ] )
        16. 22.1.3.16 String.prototype.padEnd (maxLength [ ,fillString ] )
        17. +22.1.3.17 String.prototype.padStart (maxLength [ ,fillString ] )
          1. 22.1.3.17.1 StringPaddingBuiltinsImpl (O,maxLength,fillString,placement )
          2. 22.1.3.17.2 StringPad (S,maxLength,fillString,placement )
          3. 22.1.3.17.3 ToZeroPaddedDecimalString (n,minLength )
        18. 22.1.3.18 String.prototype.repeat (count )
        19. +22.1.3.19 String.prototype.replace (searchValue,replaceValue )
          1. 22.1.3.19.1 GetSubstitution (matched,str,position,captures,namedCaptures,replacementTemplate )
        20. 22.1.3.20 String.prototype.replaceAll (searchValue,replaceValue )
        21. 22.1.3.21 String.prototype.search (regexp )
        22. 22.1.3.22 String.prototype.slice (start,end )
        23. 22.1.3.23 String.prototype.split (separator,limit )
        24. 22.1.3.24 String.prototype.startsWith (searchString [ ,position ] )
        25. 22.1.3.25 String.prototype.substring (start,end )
        26. 22.1.3.26 String.prototype.toLocaleLowerCase ( [reserved1 [ ,reserved2 ] ] )
        27. 22.1.3.27 String.prototype.toLocaleUpperCase ( [reserved1 [ ,reserved2 ] ] )
        28. 22.1.3.28 String.prototype.toLowerCase ( )
        29. 22.1.3.29 String.prototype.toString ( )
        30. 22.1.3.30 String.prototype.toUpperCase ( )
        31. 22.1.3.31 String.prototype.toWellFormed ( )
        32. +22.1.3.32 String.prototype.trim ( )
          1. 22.1.3.32.1 TrimString (string,where )
        33. 22.1.3.33 String.prototype.trimEnd ( )
        34. 22.1.3.34 String.prototype.trimStart ( )
        35. +22.1.3.35 String.prototype.valueOf ( )
          1. 22.1.3.35.1 ThisStringValue (value )
        36. 22.1.3.36 String.prototype [ %Symbol.iterator% ] ( )
      4. +22.1.4 Properties of String Instances
        1. 22.1.4.1 length
      5. +22.1.5 String Iterator Objects
        1. +22.1.5.1 The %StringIteratorPrototype% Object
          1. 22.1.5.1.1 %StringIteratorPrototype%.next ( )
          2. 22.1.5.1.2 %StringIteratorPrototype% [ %Symbol.toStringTag% ]
    2. +22.2 RegExp (Regular Expression) Objects
      1. +22.2.1 Patterns
        1. 22.2.1.1 SS: Early Errors
        2. 22.2.1.2 SS: CountLeftCapturingParensWithin (node )
        3. 22.2.1.3 SS: CountLeftCapturingParensBefore (node )
        4. 22.2.1.4 SS: MightBothParticipate (x,y )
        5. 22.2.1.5 SS: CapturingGroupNumber
        6. 22.2.1.6 SS: IsCharacterClass
        7. 22.2.1.7 SS: CharacterValue
        8. 22.2.1.8 SS: MayContainStrings
        9. 22.2.1.9 SS: GroupSpecifiersThatMatch (thisGroupName )
        10. 22.2.1.10 SS: CapturingGroupName
        11. 22.2.1.11 SS: RegExpIdentifierCodePoints
        12. 22.2.1.12 SS: RegExpIdentifierCodePoint
      2. +22.2.2 Pattern Semantics
        1. +22.2.2.1 Notation
          1. 22.2.2.1.1 RegExp Records
        2. 22.2.2.2 RS: CompilePattern
        3. +22.2.2.3 RS: CompileSubpattern
          1. 22.2.2.3.1 RepeatMatcher (m,min,max,greedy,x,c,parenIndex,parenCount )
          2. 22.2.2.3.2 EmptyMatcher ( )
          3. 22.2.2.3.3 MatchTwoAlternatives (m1,m2 )
          4. 22.2.2.3.4 MatchSequence (m1,m2,direction )
        4. +22.2.2.4 RS: CompileAssertion
          1. 22.2.2.4.1 IsWordChar (rer,Input,e )
        5. 22.2.2.5 RS: CompileQuantifier
        6. 22.2.2.6 RS: CompileQuantifierPrefix
        7. +22.2.2.7 RS: CompileAtom
          1. 22.2.2.7.1 CharacterSetMatcher (rer,A,invert,direction )
          2. 22.2.2.7.2 BackreferenceMatcher (rer,ns,direction )
          3. 22.2.2.7.3 Canonicalize (rer,ch )
          4. 22.2.2.7.4 UpdateModifiers (rer,add,remove )
        8. 22.2.2.8 RS: CompileCharacterClass
        9. +22.2.2.9 RS: CompileToCharSet
          1. 22.2.2.9.1 CharacterRange (A,B )
          2. 22.2.2.9.2 HasEitherUnicodeFlag (rer )
          3. 22.2.2.9.3 WordCharacters (rer )
          4. 22.2.2.9.4 AllCharacters (rer )
          5. 22.2.2.9.5 MaybeSimpleCaseFolding (rer,A )
          6. 22.2.2.9.6 CharacterComplement (rer,S )
          7. 22.2.2.9.7 UnicodeMatchProperty (rer,p )
          8. 22.2.2.9.8 UnicodeMatchPropertyValue (p,v )
        10. 22.2.2.10 RS: CompileClassSetString
      3. +22.2.3 Abstract Operations for RegExp Creation
        1. 22.2.3.1 RegExpCreate (P,F )
        2. 22.2.3.2 RegExpAlloc (newTarget )
        3. 22.2.3.3 RegExpInitialize (obj,pattern,flags )
        4. 22.2.3.4 SS: ParsePattern (patternText,u,v )
      4. +22.2.4 The RegExp Constructor
        1. 22.2.4.1 RegExp (pattern,flags )
      5. +22.2.5 Properties of the RegExp Constructor
        1. +22.2.5.1 RegExp.escape (S )
          1. 22.2.5.1.1 EncodeForRegExpEscape (cp )
        2. 22.2.5.2 RegExp.prototype
        3. 22.2.5.3 get RegExp [ %Symbol.species% ]
      6. +22.2.6 Properties of the RegExp Prototype Object
        1. 22.2.6.1 RegExp.prototype.constructor
        2. 22.2.6.2 RegExp.prototype.exec (string )
        3. 22.2.6.3 get RegExp.prototype.dotAll
        4. +22.2.6.4 get RegExp.prototype.flags
          1. 22.2.6.4.1 RegExpHasFlag (R,codeUnit )
        5. 22.2.6.5 get RegExp.prototype.global
        6. 22.2.6.6 get RegExp.prototype.hasIndices
        7. 22.2.6.7 get RegExp.prototype.ignoreCase
        8. 22.2.6.8 RegExp.prototype [ %Symbol.match% ] (string )
        9. 22.2.6.9 RegExp.prototype [ %Symbol.matchAll% ] (string )
        10. 22.2.6.10 get RegExp.prototype.multiline
        11. 22.2.6.11 RegExp.prototype [ %Symbol.replace% ] (string,replaceValue )
        12. 22.2.6.12 RegExp.prototype [ %Symbol.search% ] (string )
        13. +22.2.6.13 get RegExp.prototype.source
          1. 22.2.6.13.1 EscapeRegExpPattern (P,F )
        14. 22.2.6.14 RegExp.prototype [ %Symbol.split% ] (string,limit )
        15. 22.2.6.15 get RegExp.prototype.sticky
        16. 22.2.6.16 RegExp.prototype.test (S )
        17. 22.2.6.17 RegExp.prototype.toString ( )
        18. 22.2.6.18 get RegExp.prototype.unicode
        19. 22.2.6.19 get RegExp.prototype.unicodeSets
      7. +22.2.7 Abstract Operations for RegExp Matching
        1. 22.2.7.1 RegExpExec (R,S )
        2. 22.2.7.2 RegExpBuiltinExec (R,S )
        3. 22.2.7.3 AdvanceStringIndex (S,index,unicode )
        4. 22.2.7.4 GetStringIndex (S,codePointIndex )
        5. 22.2.7.5 Match Records
        6. 22.2.7.6 GetMatchString (S,match )
        7. 22.2.7.7 GetMatchIndexPair (S,match )
        8. 22.2.7.8 MakeMatchIndicesIndexPairArray (S,indices,groupNames,hasGroups )
      8. +22.2.8 Properties of RegExp Instances
        1. 22.2.8.1 lastIndex
      9. +22.2.9 RegExp String Iterator Objects
        1. 22.2.9.1 CreateRegExpStringIterator (R,S,global,fullUnicode )
        2. +22.2.9.2 The %RegExpStringIteratorPrototype% Object
          1. 22.2.9.2.1 %RegExpStringIteratorPrototype%.next ( )
          2. 22.2.9.2.2 %RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]
        3. 22.2.9.3 Properties of RegExp String Iterator Instances
  24. +23 Indexed Collections
    1. +23.1 Array Objects
      1. +23.1.1 The Array Constructor
        1. 23.1.1.1 Array ( ...values )
      2. +23.1.2 Properties of the Array Constructor
        1. 23.1.2.1 Array.from (items [ ,mapper [ ,thisArg ] ] )
        2. 23.1.2.2 Array.isArray (arg )
        3. 23.1.2.3 Array.of ( ...items )
        4. 23.1.2.4 Array.prototype
        5. 23.1.2.5 get Array [ %Symbol.species% ]
      3. +23.1.3 Properties of the Array Prototype Object
        1. 23.1.3.1 Array.prototype.at (index )
        2. +23.1.3.2 Array.prototype.concat ( ...items )
          1. 23.1.3.2.1 IsConcatSpreadable (O )
        3. 23.1.3.3 Array.prototype.constructor
        4. 23.1.3.4 Array.prototype.copyWithin (target,start [ ,end ] )
        5. 23.1.3.5 Array.prototype.entries ( )
        6. 23.1.3.6 Array.prototype.every (callback [ ,thisArg ] )
        7. 23.1.3.7 Array.prototype.fill (value [ ,start [ ,end ] ] )
        8. 23.1.3.8 Array.prototype.filter (callback [ ,thisArg ] )
        9. 23.1.3.9 Array.prototype.find (predicate [ ,thisArg ] )
        10. 23.1.3.10 Array.prototype.findIndex (predicate [ ,thisArg ] )
        11. 23.1.3.11 Array.prototype.findLast (predicate [ ,thisArg ] )
        12. +23.1.3.12 Array.prototype.findLastIndex (predicate [ ,thisArg ] )
          1. 23.1.3.12.1 FindViaPredicate (O,len,direction,predicate,thisArg )
        13. +23.1.3.13 Array.prototype.flat ( [depth ] )
          1. 23.1.3.13.1 FlattenIntoArray (target,source,sourceLen,start,depth [ ,mapperFunction [ ,thisArg ] ] )
        14. 23.1.3.14 Array.prototype.flatMap (mapperFunction [ ,thisArg ] )
        15. 23.1.3.15 Array.prototype.forEach (callback [ ,thisArg ] )
        16. 23.1.3.16 Array.prototype.includes (searchElement [ ,fromIndex ] )
        17. 23.1.3.17 Array.prototype.indexOf (searchElement [ ,fromIndex ] )
        18. 23.1.3.18 Array.prototype.join (separator )
        19. 23.1.3.19 Array.prototype.keys ( )
        20. 23.1.3.20 Array.prototype.lastIndexOf (searchElement [ ,fromIndex ] )
        21. 23.1.3.21 Array.prototype.map (callback [ ,thisArg ] )
        22. 23.1.3.22 Array.prototype.pop ( )
        23. 23.1.3.23 Array.prototype.push ( ...items )
        24. 23.1.3.24 Array.prototype.reduce (callback [ ,initialValue ] )
        25. 23.1.3.25 Array.prototype.reduceRight (callback [ ,initialValue ] )
        26. 23.1.3.26 Array.prototype.reverse ( )
        27. 23.1.3.27 Array.prototype.shift ( )
        28. 23.1.3.28 Array.prototype.slice (start,end )
        29. 23.1.3.29 Array.prototype.some (callback [ ,thisArg ] )
        30. +23.1.3.30 Array.prototype.sort (comparator )
          1. 23.1.3.30.1 SortIndexedProperties (obj,len,SortCompare,holes )
          2. 23.1.3.30.2 CompareArrayElements (x,y,comparator )
        31. 23.1.3.31 Array.prototype.splice (start,deleteCount, ...items )
        32. 23.1.3.32 Array.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        33. 23.1.3.33 Array.prototype.toReversed ( )
        34. 23.1.3.34 Array.prototype.toSorted (comparator )
        35. 23.1.3.35 Array.prototype.toSpliced (start,skipCount, ...items )
        36. 23.1.3.36 Array.prototype.toString ( )
        37. 23.1.3.37 Array.prototype.unshift ( ...items )
        38. 23.1.3.38 Array.prototype.values ( )
        39. 23.1.3.39 Array.prototype.with (index,value )
        40. 23.1.3.40 Array.prototype [ %Symbol.iterator% ] ( )
        41. 23.1.3.41 Array.prototype [ %Symbol.unscopables% ]
      4. +23.1.4 Properties of Array Instances
        1. 23.1.4.1 length
      5. +23.1.5 Array Iterator Objects
        1. 23.1.5.1 CreateArrayIterator (array,kind )
        2. +23.1.5.2 The %ArrayIteratorPrototype% Object
          1. 23.1.5.2.1 %ArrayIteratorPrototype%.next ( )
          2. 23.1.5.2.2 %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]
        3. 23.1.5.3 Properties of Array Iterator Instances
    2. +23.2 TypedArray Objects
      1. +23.2.1 The %TypedArray% Intrinsic Object
        1. 23.2.1.1 %TypedArray% ( )
      2. +23.2.2 Properties of the %TypedArray% Intrinsic Object
        1. 23.2.2.1 %TypedArray%.from (source [ ,mapper [ ,thisArg ] ] )
        2. 23.2.2.2 %TypedArray%.of ( ...items )
        3. 23.2.2.3 %TypedArray%.prototype
        4. 23.2.2.4 get %TypedArray% [ %Symbol.species% ]
      3. +23.2.3 Properties of the %TypedArray% Prototype Object
        1. 23.2.3.1 %TypedArray%.prototype.at (index )
        2. 23.2.3.2 get %TypedArray%.prototype.buffer
        3. 23.2.3.3 get %TypedArray%.prototype.byteLength
        4. 23.2.3.4 get %TypedArray%.prototype.byteOffset
        5. 23.2.3.5 %TypedArray%.prototype.constructor
        6. 23.2.3.6 %TypedArray%.prototype.copyWithin (target,start [ ,end ] )
        7. 23.2.3.7 %TypedArray%.prototype.entries ( )
        8. 23.2.3.8 %TypedArray%.prototype.every (callback [ ,thisArg ] )
        9. 23.2.3.9 %TypedArray%.prototype.fill (value [ ,start [ ,end ] ] )
        10. 23.2.3.10 %TypedArray%.prototype.filter (callback [ ,thisArg ] )
        11. 23.2.3.11 %TypedArray%.prototype.find (predicate [ ,thisArg ] )
        12. 23.2.3.12 %TypedArray%.prototype.findIndex (predicate [ ,thisArg ] )
        13. 23.2.3.13 %TypedArray%.prototype.findLast (predicate [ ,thisArg ] )
        14. 23.2.3.14 %TypedArray%.prototype.findLastIndex (predicate [ ,thisArg ] )
        15. 23.2.3.15 %TypedArray%.prototype.forEach (callback [ ,thisArg ] )
        16. 23.2.3.16 %TypedArray%.prototype.includes (searchElement [ ,fromIndex ] )
        17. 23.2.3.17 %TypedArray%.prototype.indexOf (searchElement [ ,fromIndex ] )
        18. 23.2.3.18 %TypedArray%.prototype.join (separator )
        19. 23.2.3.19 %TypedArray%.prototype.keys ( )
        20. 23.2.3.20 %TypedArray%.prototype.lastIndexOf (searchElement [ ,fromIndex ] )
        21. 23.2.3.21 get %TypedArray%.prototype.length
        22. 23.2.3.22 %TypedArray%.prototype.map (callback [ ,thisArg ] )
        23. 23.2.3.23 %TypedArray%.prototype.reduce (callback [ ,initialValue ] )
        24. 23.2.3.24 %TypedArray%.prototype.reduceRight (callback [ ,initialValue ] )
        25. 23.2.3.25 %TypedArray%.prototype.reverse ( )
        26. +23.2.3.26 %TypedArray%.prototype.set (source [ ,offset ] )
          1. 23.2.3.26.1 SetTypedArrayFromArrayLike (target,targetOffset,source )
          2. 23.2.3.26.2 SetTypedArrayFromTypedArray (target,targetOffset,source )
        27. 23.2.3.27 %TypedArray%.prototype.slice (start,end )
        28. 23.2.3.28 %TypedArray%.prototype.some (callback [ ,thisArg ] )
        29. 23.2.3.29 %TypedArray%.prototype.sort (comparator )
        30. 23.2.3.30 %TypedArray%.prototype.subarray (start,end )
        31. 23.2.3.31 %TypedArray%.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        32. 23.2.3.32 %TypedArray%.prototype.toReversed ( )
        33. 23.2.3.33 %TypedArray%.prototype.toSorted (comparator )
        34. 23.2.3.34 %TypedArray%.prototype.toString ( )
        35. 23.2.3.35 %TypedArray%.prototype.values ( )
        36. 23.2.3.36 %TypedArray%.prototype.with (index,value )
        37. 23.2.3.37 %TypedArray%.prototype [ %Symbol.iterator% ] ( )
        38. 23.2.3.38 get %TypedArray%.prototype [ %Symbol.toStringTag% ]
      4. +23.2.4 Abstract Operations for TypedArray Objects
        1. 23.2.4.1 TypedArrayCreateFromConstructor (constructor,argumentList )
        2. 23.2.4.2 TypedArrayCreateSameType (exemplar,argumentList )
        3. 23.2.4.3 TypedArraySpeciesCreate (exemplar,argumentList )
        4. 23.2.4.4 ValidateTypedArray (O,order )
        5. 23.2.4.5 TypedArrayElementSize (O )
        6. 23.2.4.6 TypedArrayElementType (O )
        7. 23.2.4.7 CompareTypedArrayElements (x,y,comparator )
      5. +23.2.5 TheTypedArray Constructors
        1. +23.2.5.1TypedArray ( ...args )
          1. 23.2.5.1.1 AllocateTypedArray (constructorName,newTarget,defaultProto [ ,length ] )
          2. 23.2.5.1.2 InitializeTypedArrayFromTypedArray (O,srcArray )
          3. 23.2.5.1.3 InitializeTypedArrayFromArrayBuffer (O,buffer,byteOffset,length )
          4. 23.2.5.1.4 InitializeTypedArrayFromList (O,values )
          5. 23.2.5.1.5 InitializeTypedArrayFromArrayLike (O,arrayLike )
          6. 23.2.5.1.6 AllocateTypedArrayBuffer (O,length )
      6. +23.2.6 Properties of theTypedArray Constructors
        1. 23.2.6.1TypedArray.BYTES_PER_ELEMENT
        2. 23.2.6.2TypedArray.prototype
      7. +23.2.7 Properties of theTypedArray Prototype Objects
        1. 23.2.7.1TypedArray.prototype.BYTES_PER_ELEMENT
        2. 23.2.7.2TypedArray.prototype.constructor
      8. 23.2.8 Properties ofTypedArray Instances
  25. +24 Keyed Collections
    1. +24.1 Map Objects
      1. +24.1.1 The Map Constructor
        1. 24.1.1.1 Map ( [iterable ] )
        2. 24.1.1.2 AddEntriesFromIterable (target,iterable,adder )
      2. +24.1.2 Properties of the Map Constructor
        1. 24.1.2.1 Map.groupBy (items,callback )
        2. 24.1.2.2 Map.prototype
        3. 24.1.2.3 get Map [ %Symbol.species% ]
      3. +24.1.3 Properties of the Map Prototype Object
        1. 24.1.3.1 Map.prototype.clear ( )
        2. 24.1.3.2 Map.prototype.constructor
        3. 24.1.3.3 Map.prototype.delete (key )
        4. 24.1.3.4 Map.prototype.entries ( )
        5. 24.1.3.5 Map.prototype.forEach (callback [ ,thisArg ] )
        6. 24.1.3.6 Map.prototype.get (key )
        7. 24.1.3.7 Map.prototype.has (key )
        8. 24.1.3.8 Map.prototype.keys ( )
        9. 24.1.3.9 Map.prototype.set (key,value )
        10. 24.1.3.10 get Map.prototype.size
        11. 24.1.3.11 Map.prototype.values ( )
        12. 24.1.3.12 Map.prototype [ %Symbol.iterator% ] ( )
        13. 24.1.3.13 Map.prototype [ %Symbol.toStringTag% ]
      4. 24.1.4 Properties of Map Instances
      5. +24.1.5 Map Iterator Objects
        1. 24.1.5.1 CreateMapIterator (map,kind )
        2. +24.1.5.2 The %MapIteratorPrototype% Object
          1. 24.1.5.2.1 %MapIteratorPrototype%.next ( )
          2. 24.1.5.2.2 %MapIteratorPrototype% [ %Symbol.toStringTag% ]
    2. +24.2 Set Objects
      1. +24.2.1 Abstract Operations For Set Objects
        1. 24.2.1.1 Set Records
        2. 24.2.1.2 GetSetRecord (obj )
        3. 24.2.1.3 SetDataHas (setData,value )
        4. 24.2.1.4 SetDataIndex (setData,value )
        5. 24.2.1.5 SetDataSize (setData )
      2. +24.2.2 The Set Constructor
        1. 24.2.2.1 Set ( [iterable ] )
      3. +24.2.3 Properties of the Set Constructor
        1. 24.2.3.1 Set.prototype
        2. 24.2.3.2 get Set [ %Symbol.species% ]
      4. +24.2.4 Properties of the Set Prototype Object
        1. 24.2.4.1 Set.prototype.add (value )
        2. 24.2.4.2 Set.prototype.clear ( )
        3. 24.2.4.3 Set.prototype.constructor
        4. 24.2.4.4 Set.prototype.delete (value )
        5. 24.2.4.5 Set.prototype.difference (other )
        6. 24.2.4.6 Set.prototype.entries ( )
        7. 24.2.4.7 Set.prototype.forEach (callback [ ,thisArg ] )
        8. 24.2.4.8 Set.prototype.has (value )
        9. 24.2.4.9 Set.prototype.intersection (other )
        10. 24.2.4.10 Set.prototype.isDisjointFrom (other )
        11. 24.2.4.11 Set.prototype.isSubsetOf (other )
        12. 24.2.4.12 Set.prototype.isSupersetOf (other )
        13. 24.2.4.13 Set.prototype.keys ( )
        14. 24.2.4.14 get Set.prototype.size
        15. 24.2.4.15 Set.prototype.symmetricDifference (other )
        16. 24.2.4.16 Set.prototype.union (other )
        17. 24.2.4.17 Set.prototype.values ( )
        18. 24.2.4.18 Set.prototype [ %Symbol.iterator% ] ( )
        19. 24.2.4.19 Set.prototype [ %Symbol.toStringTag% ]
      5. 24.2.5 Properties of Set Instances
      6. +24.2.6 Set Iterator Objects
        1. 24.2.6.1 CreateSetIterator (set,kind )
        2. +24.2.6.2 The %SetIteratorPrototype% Object
          1. 24.2.6.2.1 %SetIteratorPrototype%.next ( )
          2. 24.2.6.2.2 %SetIteratorPrototype% [ %Symbol.toStringTag% ]
    3. +24.3 WeakMap Objects
      1. +24.3.1 The WeakMap Constructor
        1. 24.3.1.1 WeakMap ( [iterable ] )
      2. +24.3.2 Properties of the WeakMap Constructor
        1. 24.3.2.1 WeakMap.prototype
      3. +24.3.3 Properties of the WeakMap Prototype Object
        1. 24.3.3.1 WeakMap.prototype.constructor
        2. 24.3.3.2 WeakMap.prototype.delete (key )
        3. 24.3.3.3 WeakMap.prototype.get (key )
        4. 24.3.3.4 WeakMap.prototype.has (key )
        5. 24.3.3.5 WeakMap.prototype.set (key,value )
        6. 24.3.3.6 WeakMap.prototype [ %Symbol.toStringTag% ]
      4. 24.3.4 Properties of WeakMap Instances
    4. +24.4 WeakSet Objects
      1. +24.4.1 The WeakSet Constructor
        1. 24.4.1.1 WeakSet ( [iterable ] )
      2. +24.4.2 Properties of the WeakSet Constructor
        1. 24.4.2.1 WeakSet.prototype
      3. +24.4.3 Properties of the WeakSet Prototype Object
        1. 24.4.3.1 WeakSet.prototype.add (value )
        2. 24.4.3.2 WeakSet.prototype.constructor
        3. 24.4.3.3 WeakSet.prototype.delete (value )
        4. 24.4.3.4 WeakSet.prototype.has (value )
        5. 24.4.3.5 WeakSet.prototype [ %Symbol.toStringTag% ]
      4. 24.4.4 Properties of WeakSet Instances
    5. +24.5 Abstract Operations for Keyed Collections
      1. 24.5.1 CanonicalizeKeyedCollectionKey (key )
  26. +25 Structured Data
    1. +25.1 ArrayBuffer Objects
      1. 25.1.1 Notation
      2. 25.1.2 Fixed-length and Resizable ArrayBuffer Objects
      3. +25.1.3 Abstract Operations For ArrayBuffer Objects
        1. 25.1.3.1 AllocateArrayBuffer (constructor,byteLength [ ,maxByteLength ] )
        2. 25.1.3.2 ArrayBufferByteLength (arrayBuffer,order )
        3. 25.1.3.3 ArrayBufferCopyAndDetach (arrayBuffer,newLength,preserveResizability )
        4. 25.1.3.4 IsDetachedBuffer (arrayBuffer )
        5. 25.1.3.5 DetachArrayBuffer (arrayBuffer [ ,key ] )
        6. 25.1.3.6 CloneArrayBuffer (srcBuffer,srcByteOffset,srcLength )
        7. 25.1.3.7 GetArrayBufferMaxByteLengthOption (options )
        8. 25.1.3.8 HostResizeArrayBuffer (buffer,newByteLength )
        9. 25.1.3.9 IsFixedLengthArrayBuffer (arrayBuffer )
        10. 25.1.3.10 IsUnsignedElementType (type )
        11. 25.1.3.11 IsUnclampedIntegerElementType (type )
        12. 25.1.3.12 IsBigIntElementType (type )
        13. 25.1.3.13 IsNoTearConfiguration (type,order )
        14. 25.1.3.14 RawBytesToNumeric (type,rawBytes,isLittleEndian )
        15. 25.1.3.15 GetRawBytesFromSharedBlock (block,byteIndex,type,isTypedArray,order )
        16. 25.1.3.16 GetValueFromBuffer (arrayBuffer,byteIndex,type,isTypedArray,order [ ,isLittleEndian ] )
        17. 25.1.3.17 NumericToRawBytes (type,value,isLittleEndian )
        18. 25.1.3.18 SetValueInBuffer (arrayBuffer,byteIndex,type,value,isTypedArray,order [ ,isLittleEndian ] )
        19. 25.1.3.19 GetModifySetValueInBuffer (arrayBuffer,byteIndex,type,value,op )
      4. +25.1.4 The ArrayBuffer Constructor
        1. 25.1.4.1 ArrayBuffer (length [ ,options ] )
      5. +25.1.5 Properties of the ArrayBuffer Constructor
        1. 25.1.5.1 ArrayBuffer.isView (arg )
        2. 25.1.5.2 ArrayBuffer.prototype
        3. 25.1.5.3 get ArrayBuffer [ %Symbol.species% ]
      6. +25.1.6 Properties of the ArrayBuffer Prototype Object
        1. 25.1.6.1 get ArrayBuffer.prototype.byteLength
        2. 25.1.6.2 ArrayBuffer.prototype.constructor
        3. 25.1.6.3 get ArrayBuffer.prototype.detached
        4. 25.1.6.4 get ArrayBuffer.prototype.maxByteLength
        5. 25.1.6.5 get ArrayBuffer.prototype.resizable
        6. 25.1.6.6 ArrayBuffer.prototype.resize (newLength )
        7. 25.1.6.7 ArrayBuffer.prototype.slice (start,end )
        8. 25.1.6.8 ArrayBuffer.prototype.transfer ( [newLength ] )
        9. 25.1.6.9 ArrayBuffer.prototype.transferToFixedLength ( [newLength ] )
        10. 25.1.6.10 ArrayBuffer.prototype [ %Symbol.toStringTag% ]
      7. 25.1.7 Properties of ArrayBuffer Instances
      8. 25.1.8 Resizable ArrayBuffer Guidelines
    2. +25.2 SharedArrayBuffer Objects
      1. 25.2.1 Fixed-length and Growable SharedArrayBuffer Objects
      2. +25.2.2 Abstract Operations for SharedArrayBuffer Objects
        1. 25.2.2.1 AllocateSharedArrayBuffer (constructor,byteLength [ ,maxByteLength ] )
        2. 25.2.2.2 IsSharedArrayBuffer (obj )
        3. 25.2.2.3 HostGrowSharedArrayBuffer (buffer,newByteLength )
      3. +25.2.3 The SharedArrayBuffer Constructor
        1. 25.2.3.1 SharedArrayBuffer (length [ ,options ] )
      4. +25.2.4 Properties of the SharedArrayBuffer Constructor
        1. 25.2.4.1 SharedArrayBuffer.prototype
        2. 25.2.4.2 get SharedArrayBuffer [ %Symbol.species% ]
      5. +25.2.5 Properties of the SharedArrayBuffer Prototype Object
        1. 25.2.5.1 get SharedArrayBuffer.prototype.byteLength
        2. 25.2.5.2 SharedArrayBuffer.prototype.constructor
        3. 25.2.5.3 SharedArrayBuffer.prototype.grow (newLength )
        4. 25.2.5.4 get SharedArrayBuffer.prototype.growable
        5. 25.2.5.5 get SharedArrayBuffer.prototype.maxByteLength
        6. 25.2.5.6 SharedArrayBuffer.prototype.slice (start,end )
        7. 25.2.5.7 SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]
      6. 25.2.6 Properties of SharedArrayBuffer Instances
      7. 25.2.7 Growable SharedArrayBuffer Guidelines
    3. +25.3 DataView Objects
      1. +25.3.1 Abstract Operations For DataView Objects
        1. 25.3.1.1 DataView With Buffer Witness Records
        2. 25.3.1.2 MakeDataViewWithBufferWitnessRecord (obj,order )
        3. 25.3.1.3 GetViewByteLength (viewRecord )
        4. 25.3.1.4 IsViewOutOfBounds (viewRecord )
        5. 25.3.1.5 GetViewValue (view,requestIndex,isLittleEndian,type )
        6. 25.3.1.6 SetViewValue (view,requestIndex,isLittleEndian,type,value )
      2. +25.3.2 The DataView Constructor
        1. 25.3.2.1 DataView (buffer [ ,byteOffset [ ,byteLength ] ] )
      3. +25.3.3 Properties of the DataView Constructor
        1. 25.3.3.1 DataView.prototype
      4. +25.3.4 Properties of the DataView Prototype Object
        1. 25.3.4.1 get DataView.prototype.buffer
        2. 25.3.4.2 get DataView.prototype.byteLength
        3. 25.3.4.3 get DataView.prototype.byteOffset
        4. 25.3.4.4 DataView.prototype.constructor
        5. 25.3.4.5 DataView.prototype.getBigInt64 (byteOffset [ ,littleEndian ] )
        6. 25.3.4.6 DataView.prototype.getBigUint64 (byteOffset [ ,littleEndian ] )
        7. 25.3.4.7 DataView.prototype.getFloat16 (byteOffset [ ,littleEndian ] )
        8. 25.3.4.8 DataView.prototype.getFloat32 (byteOffset [ ,littleEndian ] )
        9. 25.3.4.9 DataView.prototype.getFloat64 (byteOffset [ ,littleEndian ] )
        10. 25.3.4.10 DataView.prototype.getInt8 (byteOffset )
        11. 25.3.4.11 DataView.prototype.getInt16 (byteOffset [ ,littleEndian ] )
        12. 25.3.4.12 DataView.prototype.getInt32 (byteOffset [ ,littleEndian ] )
        13. 25.3.4.13 DataView.prototype.getUint8 (byteOffset )
        14. 25.3.4.14 DataView.prototype.getUint16 (byteOffset [ ,littleEndian ] )
        15. 25.3.4.15 DataView.prototype.getUint32 (byteOffset [ ,littleEndian ] )
        16. 25.3.4.16 DataView.prototype.setBigInt64 (byteOffset,value [ ,littleEndian ] )
        17. 25.3.4.17 DataView.prototype.setBigUint64 (byteOffset,value [ ,littleEndian ] )
        18. 25.3.4.18 DataView.prototype.setFloat16 (byteOffset,value [ ,littleEndian ] )
        19. 25.3.4.19 DataView.prototype.setFloat32 (byteOffset,value [ ,littleEndian ] )
        20. 25.3.4.20 DataView.prototype.setFloat64 (byteOffset,value [ ,littleEndian ] )
        21. 25.3.4.21 DataView.prototype.setInt8 (byteOffset,value )
        22. 25.3.4.22 DataView.prototype.setInt16 (byteOffset,value [ ,littleEndian ] )
        23. 25.3.4.23 DataView.prototype.setInt32 (byteOffset,value [ ,littleEndian ] )
        24. 25.3.4.24 DataView.prototype.setUint8 (byteOffset,value )
        25. 25.3.4.25 DataView.prototype.setUint16 (byteOffset,value [ ,littleEndian ] )
        26. 25.3.4.26 DataView.prototype.setUint32 (byteOffset,value [ ,littleEndian ] )
        27. 25.3.4.27 DataView.prototype [ %Symbol.toStringTag% ]
      5. 25.3.5 Properties of DataView Instances
    4. +25.4 The Atomics Object
      1. 25.4.1 Waiter Record
      2. 25.4.2 WaiterList Records
      3. +25.4.3 Abstract Operations for Atomics
        1. 25.4.3.1 ValidateIntegerTypedArray (typedArray,waitable )
        2. 25.4.3.2 ValidateAtomicAccess (taRecord,requestIndex )
        3. 25.4.3.3 ValidateAtomicAccessOnIntegerTypedArray (typedArray,requestIndex )
        4. 25.4.3.4 RevalidateAtomicAccess (typedArray,byteIndexInBuffer )
        5. 25.4.3.5 GetWaiterList (block,i )
        6. 25.4.3.6 EnterCriticalSection (WL )
        7. 25.4.3.7 LeaveCriticalSection (WL )
        8. 25.4.3.8 AddWaiter (WL,waiterRecord )
        9. 25.4.3.9 RemoveWaiter (WL,waiterRecord )
        10. 25.4.3.10 RemoveWaiters (WL,c )
        11. 25.4.3.11 SuspendThisAgent (WL,waiterRecord )
        12. 25.4.3.12 NotifyWaiter (WL,waiterRecord )
        13. 25.4.3.13 EnqueueResolveInAgentJob (agentSignifier,promiseCapability,resolution )
        14. 25.4.3.14 DoWait (mode,typedArray,index,value,timeout )
        15. 25.4.3.15 EnqueueAtomicsWaitAsyncTimeoutJob (WL,waiterRecord )
        16. 25.4.3.16 AtomicCompareExchangeInSharedBlock (block,byteIndexInBuffer,elementSize,expectedBytes,replacementBytes )
        17. 25.4.3.17 AtomicReadModifyWrite (typedArray,index,value,op )
        18. 25.4.3.18 ByteListBitwiseOp (op,xBytes,yBytes )
        19. 25.4.3.19 ByteListEqual (xBytes,yBytes )
      4. 25.4.4 Atomics.add (typedArray,index,value )
      5. 25.4.5 Atomics.and (typedArray,index,value )
      6. 25.4.6 Atomics.compareExchange (typedArray,index,expectedValue,replacementValue )
      7. 25.4.7 Atomics.exchange (typedArray,index,value )
      8. 25.4.8 Atomics.isLockFree (size )
      9. 25.4.9 Atomics.load (typedArray,index )
      10. 25.4.10 Atomics.or (typedArray,index,value )
      11. 25.4.11 Atomics.store (typedArray,index,value )
      12. 25.4.12 Atomics.sub (typedArray,index,value )
      13. 25.4.13 Atomics.wait (typedArray,index,value,timeout )
      14. 25.4.14 Atomics.waitAsync (typedArray,index,value,timeout )
      15. 25.4.15 Atomics.notify (typedArray,index,count )
      16. 25.4.16 Atomics.xor (typedArray,index,value )
      17. 25.4.17 Atomics [ %Symbol.toStringTag% ]
    5. +25.5 The JSON Object
      1. +25.5.1 JSON.parse (text [ ,reviver ] )
        1. 25.5.1.1 ParseJSON (text )
        2. 25.5.1.2 InternalizeJSONProperty (holder,name,reviver )
      2. +25.5.2 JSON.stringify (value [ ,replacer [ ,space ] ] )
        1. 25.5.2.1 JSON Serialization Record
        2. 25.5.2.2 SerializeJSONProperty (state,key,holder )
        3. 25.5.2.3 QuoteJSONString (value )
        4. 25.5.2.4 UnicodeEscape (C )
        5. 25.5.2.5 SerializeJSONObject (state,value )
        6. 25.5.2.6 SerializeJSONArray (state,value )
      3. 25.5.3 JSON [ %Symbol.toStringTag% ]
  27. +26 Managing Memory
    1. +26.1 WeakRef Objects
      1. +26.1.1 The WeakRef Constructor
        1. 26.1.1.1 WeakRef (target )
      2. +26.1.2 Properties of the WeakRef Constructor
        1. 26.1.2.1 WeakRef.prototype
      3. +26.1.3 Properties of the WeakRef Prototype Object
        1. 26.1.3.1 WeakRef.prototype.constructor
        2. 26.1.3.2 WeakRef.prototype.deref ( )
        3. 26.1.3.3 WeakRef.prototype [ %Symbol.toStringTag% ]
      4. +26.1.4 WeakRef Abstract Operations
        1. 26.1.4.1 WeakRefDeref (weakRef )
      5. 26.1.5 Properties of WeakRef Instances
    2. +26.2 FinalizationRegistry Objects
      1. +26.2.1 The FinalizationRegistry Constructor
        1. 26.2.1.1 FinalizationRegistry (cleanupCallback )
      2. +26.2.2 Properties of the FinalizationRegistry Constructor
        1. 26.2.2.1 FinalizationRegistry.prototype
      3. +26.2.3 Properties of the FinalizationRegistry Prototype Object
        1. 26.2.3.1 FinalizationRegistry.prototype.constructor
        2. 26.2.3.2 FinalizationRegistry.prototype.register (target,heldValue [ ,unregisterToken ] )
        3. 26.2.3.3 FinalizationRegistry.prototype.unregister (unregisterToken )
        4. 26.2.3.4 FinalizationRegistry.prototype [ %Symbol.toStringTag% ]
      4. 26.2.4 Properties of FinalizationRegistry Instances
  28. +27 Control Abstraction Objects
    1. +27.1 Iteration
      1. +27.1.1 Common Iteration Interfaces
        1. 27.1.1.1 The Iterable Interface
        2. 27.1.1.2 The Iterator Interface
        3. 27.1.1.3 The Async Iterable Interface
        4. 27.1.1.4 The Async Iterator Interface
        5. 27.1.1.5 The IteratorResult Interface
      2. +27.1.2 Iterator Helper Objects
        1. +27.1.2.1 The %IteratorHelperPrototype% Object
          1. 27.1.2.1.1 %IteratorHelperPrototype%.next ( )
          2. 27.1.2.1.2 %IteratorHelperPrototype%.return ( )
          3. 27.1.2.1.3 %IteratorHelperPrototype% [ %Symbol.toStringTag% ]
      3. +27.1.3 Iterator Objects
        1. +27.1.3.1 The Iterator Constructor
          1. 27.1.3.1.1 Iterator ( )
        2. +27.1.3.2 Properties of the Iterator Constructor
          1. +27.1.3.2.1 Iterator.from (O )
            1. +27.1.3.2.1.1 The %WrapForValidIteratorPrototype% Object
              1. 27.1.3.2.1.1.1 %WrapForValidIteratorPrototype%.next ( )
              2. 27.1.3.2.1.1.2 %WrapForValidIteratorPrototype%.return ( )
          2. 27.1.3.2.2 Iterator.prototype
      4. +27.1.4 Properties of the Iterator Prototype Object
        1. +27.1.4.1 Iterator.prototype.constructor
          1. 27.1.4.1.1 get Iterator.prototype.constructor
          2. 27.1.4.1.2 set Iterator.prototype.constructor
        2. 27.1.4.2 Iterator.prototype.drop (limit )
        3. 27.1.4.3 Iterator.prototype.every (predicate )
        4. 27.1.4.4 Iterator.prototype.filter (predicate )
        5. 27.1.4.5 Iterator.prototype.find (predicate )
        6. 27.1.4.6 Iterator.prototype.flatMap (mapper )
        7. 27.1.4.7 Iterator.prototype.forEach (procedure )
        8. 27.1.4.8 Iterator.prototype.map (mapper )
        9. 27.1.4.9 Iterator.prototype.reduce (reducer [ ,initialValue ] )
        10. 27.1.4.10 Iterator.prototype.some (predicate )
        11. 27.1.4.11 Iterator.prototype.take (limit )
        12. 27.1.4.12 Iterator.prototype.toArray ( )
        13. 27.1.4.13 Iterator.prototype [ %Symbol.iterator% ] ( )
        14. +27.1.4.14 Iterator.prototype [ %Symbol.toStringTag% ]
          1. 27.1.4.14.1 get Iterator.prototype [ %Symbol.toStringTag% ]
          2. 27.1.4.14.2 set Iterator.prototype [ %Symbol.toStringTag% ]
      5. +27.1.5 The %AsyncIteratorPrototype% Object
        1. 27.1.5.1 %AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )
      6. +27.1.6 Async-from-Sync Iterator Objects
        1. 27.1.6.1 CreateAsyncFromSyncIterator (syncIteratorRecord )
        2. +27.1.6.2 The %AsyncFromSyncIteratorPrototype% Object
          1. 27.1.6.2.1 %AsyncFromSyncIteratorPrototype%.next ( [value ] )
          2. 27.1.6.2.2 %AsyncFromSyncIteratorPrototype%.return ( [value ] )
          3. 27.1.6.2.3 %AsyncFromSyncIteratorPrototype%.throw ( [value ] )
        3. 27.1.6.3 Properties of Async-from-Sync Iterator Instances
        4. 27.1.6.4 AsyncFromSyncIteratorContinuation (result,promiseCapability,syncIteratorRecord,closeOnRejection )
    2. +27.2 Promise Objects
      1. +27.2.1 Promise Abstract Operations
        1. +27.2.1.1 PromiseCapability Records
          1. 27.2.1.1.1 IfAbruptRejectPromise (value,capability )
        2. 27.2.1.2 PromiseReaction Records
        3. +27.2.1.3 CreateResolvingFunctions (promise )
          1. 27.2.1.3.1 Promise Reject Functions
          2. 27.2.1.3.2 Promise Resolve Functions
        4. 27.2.1.4 FulfillPromise (promise,value )
        5. 27.2.1.5 NewPromiseCapability (C )
        6. 27.2.1.6 IsPromise (x )
        7. 27.2.1.7 RejectPromise (promise,reason )
        8. 27.2.1.8 TriggerPromiseReactions (reactions,argument )
        9. 27.2.1.9 HostPromiseRejectionTracker (promise,operation )
      2. +27.2.2 Promise Jobs
        1. 27.2.2.1 NewPromiseReactionJob (reaction,argument )
        2. 27.2.2.2 NewPromiseResolveThenableJob (promiseToResolve,thenable,then )
      3. +27.2.3 The Promise Constructor
        1. 27.2.3.1 Promise (executor )
      4. +27.2.4 Properties of the Promise Constructor
        1. +27.2.4.1 Promise.all (iterable )
          1. 27.2.4.1.1 GetPromiseResolve (promiseConstructor )
          2. 27.2.4.1.2 PerformPromiseAll (iteratorRecord,constructor,resultCapability,promiseResolve )
          3. 27.2.4.1.3Promise.all Resolve Element Functions
        2. +27.2.4.2 Promise.allSettled (iterable )
          1. 27.2.4.2.1 PerformPromiseAllSettled (iteratorRecord,constructor,resultCapability,promiseResolve )
          2. 27.2.4.2.2Promise.allSettled Resolve Element Functions
          3. 27.2.4.2.3Promise.allSettled Reject Element Functions
        3. +27.2.4.3 Promise.any (iterable )
          1. 27.2.4.3.1 PerformPromiseAny (iteratorRecord,constructor,resultCapability,promiseResolve )
          2. 27.2.4.3.2Promise.any Reject Element Functions
        4. 27.2.4.4 Promise.prototype
        5. +27.2.4.5 Promise.race (iterable )
          1. 27.2.4.5.1 PerformPromiseRace (iteratorRecord,constructor,resultCapability,promiseResolve )
        6. 27.2.4.6 Promise.reject (r )
        7. +27.2.4.7 Promise.resolve (x )
          1. 27.2.4.7.1 PromiseResolve (C,x )
        8. 27.2.4.8 Promise.try (callback, ...args )
        9. 27.2.4.9 Promise.withResolvers ( )
        10. 27.2.4.10 get Promise [ %Symbol.species% ]
      5. +27.2.5 Properties of the Promise Prototype Object
        1. 27.2.5.1 Promise.prototype.catch (onRejected )
        2. 27.2.5.2 Promise.prototype.constructor
        3. 27.2.5.3 Promise.prototype.finally (onFinally )
        4. +27.2.5.4 Promise.prototype.then (onFulfilled,onRejected )
          1. 27.2.5.4.1 PerformPromiseThen (promise,onFulfilled,onRejected [ ,resultCapability ] )
        5. 27.2.5.5 Promise.prototype [ %Symbol.toStringTag% ]
      6. 27.2.6 Properties of Promise Instances
    3. +27.3 GeneratorFunction Objects
      1. +27.3.1 The GeneratorFunction Constructor
        1. 27.3.1.1 GeneratorFunction ( ...parameterArgs,bodyArg )
      2. +27.3.2 Properties of the GeneratorFunction Constructor
        1. 27.3.2.1 GeneratorFunction.prototype
      3. +27.3.3 Properties of the GeneratorFunction Prototype Object
        1. 27.3.3.1 GeneratorFunction.prototype.constructor
        2. 27.3.3.2 GeneratorFunction.prototype.prototype
        3. 27.3.3.3 GeneratorFunction.prototype [ %Symbol.toStringTag% ]
      4. +27.3.4 GeneratorFunction Instances
        1. 27.3.4.1 length
        2. 27.3.4.2 name
        3. 27.3.4.3 prototype
    4. +27.4 AsyncGeneratorFunction Objects
      1. +27.4.1 The AsyncGeneratorFunction Constructor
        1. 27.4.1.1 AsyncGeneratorFunction ( ...parameterArgs,bodyArg )
      2. +27.4.2 Properties of the AsyncGeneratorFunction Constructor
        1. 27.4.2.1 AsyncGeneratorFunction.prototype
      3. +27.4.3 Properties of the AsyncGeneratorFunction Prototype Object
        1. 27.4.3.1 AsyncGeneratorFunction.prototype.constructor
        2. 27.4.3.2 AsyncGeneratorFunction.prototype.prototype
        3. 27.4.3.3 AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]
      4. +27.4.4 AsyncGeneratorFunction Instances
        1. 27.4.4.1 length
        2. 27.4.4.2 name
        3. 27.4.4.3 prototype
    5. +27.5 Generator Objects
      1. +27.5.1 The %GeneratorPrototype% Object
        1. 27.5.1.1 %GeneratorPrototype%.constructor
        2. 27.5.1.2 %GeneratorPrototype%.next (value )
        3. 27.5.1.3 %GeneratorPrototype%.return (value )
        4. 27.5.1.4 %GeneratorPrototype%.throw (exception )
        5. 27.5.1.5 %GeneratorPrototype% [ %Symbol.toStringTag% ]
      2. 27.5.2 Properties of Generator Instances
      3. +27.5.3 Generator Abstract Operations
        1. 27.5.3.1 GeneratorStart (generator,generatorBody )
        2. 27.5.3.2 GeneratorValidate (generator,generatorBrand )
        3. 27.5.3.3 GeneratorResume (generator,value,generatorBrand )
        4. 27.5.3.4 GeneratorResumeAbrupt (generator,abruptCompletion,generatorBrand )
        5. 27.5.3.5 GetGeneratorKind ( )
        6. 27.5.3.6 GeneratorYield (iteratorResult )
        7. 27.5.3.7 Yield (value )
        8. 27.5.3.8 CreateIteratorFromClosure (closure,generatorBrand,generatorPrototype [ ,extraSlots ] )
    6. +27.6 AsyncGenerator Objects
      1. +27.6.1 The %AsyncGeneratorPrototype% Object
        1. 27.6.1.1 %AsyncGeneratorPrototype%.constructor
        2. 27.6.1.2 %AsyncGeneratorPrototype%.next (value )
        3. 27.6.1.3 %AsyncGeneratorPrototype%.return (value )
        4. 27.6.1.4 %AsyncGeneratorPrototype%.throw (exception )
        5. 27.6.1.5 %AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]
      2. 27.6.2 Properties of AsyncGenerator Instances
      3. +27.6.3 AsyncGenerator Abstract Operations
        1. 27.6.3.1 AsyncGeneratorRequest Records
        2. 27.6.3.2 AsyncGeneratorStart (generator,generatorBody )
        3. 27.6.3.3 AsyncGeneratorValidate (generator,generatorBrand )
        4. 27.6.3.4 AsyncGeneratorEnqueue (generator,completion,promiseCapability )
        5. 27.6.3.5 AsyncGeneratorCompleteStep (generator,completion,done [ ,realm ] )
        6. 27.6.3.6 AsyncGeneratorResume (generator,completion )
        7. 27.6.3.7 AsyncGeneratorUnwrapYieldResumption (resumptionValue )
        8. 27.6.3.8 AsyncGeneratorYield (value )
        9. 27.6.3.9 AsyncGeneratorAwaitReturn (generator )
        10. 27.6.3.10 AsyncGeneratorDrainQueue (generator )
        11. 27.6.3.11 CreateAsyncIteratorFromClosure (closure,generatorBrand,generatorPrototype )
    7. +27.7 AsyncFunction Objects
      1. +27.7.1 The AsyncFunction Constructor
        1. 27.7.1.1 AsyncFunction ( ...parameterArgs,bodyArg )
      2. +27.7.2 Properties of the AsyncFunction Constructor
        1. 27.7.2.1 AsyncFunction.prototype
      3. +27.7.3 Properties of the AsyncFunction Prototype Object
        1. 27.7.3.1 AsyncFunction.prototype.constructor
        2. 27.7.3.2 AsyncFunction.prototype [ %Symbol.toStringTag% ]
      4. +27.7.4 AsyncFunction Instances
        1. 27.7.4.1 length
        2. 27.7.4.2 name
      5. +27.7.5 Async Functions Abstract Operations
        1. 27.7.5.1 AsyncFunctionStart (promiseCapability,asyncFunctionBody )
        2. 27.7.5.2 AsyncBlockStart (promiseCapability,asyncBody,asyncContext )
        3. 27.7.5.3 Await (value )
  29. +28 Reflection
    1. +28.1 The Reflect Object
      1. 28.1.1 Reflect.apply (target,thisArgument,argumentsList )
      2. 28.1.2 Reflect.construct (target,argumentsList [ ,newTarget ] )
      3. 28.1.3 Reflect.defineProperty (target,propertyKey,attributes )
      4. 28.1.4 Reflect.deleteProperty (target,propertyKey )
      5. 28.1.5 Reflect.get (target,propertyKey [ ,receiver ] )
      6. 28.1.6 Reflect.getOwnPropertyDescriptor (target,propertyKey )
      7. 28.1.7 Reflect.getPrototypeOf (target )
      8. 28.1.8 Reflect.has (target,propertyKey )
      9. 28.1.9 Reflect.isExtensible (target )
      10. 28.1.10 Reflect.ownKeys (target )
      11. 28.1.11 Reflect.preventExtensions (target )
      12. 28.1.12 Reflect.set (target,propertyKey,V [ ,receiver ] )
      13. 28.1.13 Reflect.setPrototypeOf (target,proto )
      14. 28.1.14 Reflect [ %Symbol.toStringTag% ]
    2. +28.2 Proxy Objects
      1. +28.2.1 The Proxy Constructor
        1. 28.2.1.1 Proxy (target,handler )
      2. +28.2.2 Properties of the Proxy Constructor
        1. 28.2.2.1 Proxy.revocable (target,handler )
    3. +28.3 Module Namespace Objects
      1. 28.3.1 %Symbol.toStringTag%
  30. +29 Memory Model
    1. 29.1 Memory Model Fundamentals
    2. 29.2 Agent Events Records
    3. 29.3 Chosen Value Records
    4. 29.4 Candidate Executions
    5. +29.5 Abstract Operations for the Memory Model
      1. 29.5.1 EventSet (execution )
      2. 29.5.2 SharedDataBlockEventSet (execution )
      3. 29.5.3 HostEventSet (execution )
      4. 29.5.4 ComposeWriteEventBytes (execution,byteIndex,Ws )
      5. 29.5.5 ValueOfReadEvent (execution,R )
    6. +29.6 Relations of Candidate Executions
      1. 29.6.1 is-agent-order-before
      2. 29.6.2 reads-bytes-from
      3. 29.6.3 reads-from
      4. 29.6.4 host-synchronizes-with
      5. 29.6.5 synchronizes-with
      6. 29.6.6 happens-before
    7. +29.7 Properties of Valid Executions
      1. 29.7.1 Valid Chosen Reads
      2. 29.7.2 Coherent Reads
      3. 29.7.3 Tear Free Reads
      4. 29.7.4 Sequentially Consistent Atomics
      5. 29.7.5 Valid Executions
    8. 29.8 Races
    9. 29.9 Data Races
    10. 29.10 Data Race Freedom
    11. 29.11 Shared Memory Guidelines
  31. +Annex A(informative) Grammar Summary
    1. A.1 Lexical Grammar
    2. A.2 Expressions
    3. A.3 Statements
    4. A.4 Functions and Classes
    5. A.5 Scripts and Modules
    6. A.6 Number Conversions
    7. A.7 Time Zone Offset String Format
    8. A.8 Regular Expressions
  32. +Annex B(normative) Additional ECMAScript Features for Web Browsers
    1. +B.1 Additional Syntax
      1. B.1.1 HTML-like Comments
      2. +B.1.2 Regular Expressions Patterns
        1. B.1.2.1 SS: Early Errors
        2. B.1.2.2 SS: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore
        3. B.1.2.3 SS: IsCharacterClass
        4. B.1.2.4 SS: CharacterValue
        5. B.1.2.5 RS: CompileSubpattern
        6. B.1.2.6 RS: CompileAssertion
        7. B.1.2.7 RS: CompileAtom
        8. +B.1.2.8 RS: CompileToCharSet
          1. B.1.2.8.1 CharacterRangeOrUnion (rer,A,B )
        9. B.1.2.9 SS: ParsePattern (patternText,u,v )
    2. +B.2 Additional Built-in Properties
      1. +B.2.1 Additional Properties of the Global Object
        1. B.2.1.1 escape (string )
        2. B.2.1.2 unescape (string )
      2. +B.2.2 Additional Properties of the String.prototype Object
        1. B.2.2.1 String.prototype.substr (start,length )
        2. +B.2.2.2 String.prototype.anchor (name )
          1. B.2.2.2.1 CreateHTML (string,tag,attribute,value )
        3. B.2.2.3 String.prototype.big ( )
        4. B.2.2.4 String.prototype.blink ( )
        5. B.2.2.5 String.prototype.bold ( )
        6. B.2.2.6 String.prototype.fixed ( )
        7. B.2.2.7 String.prototype.fontcolor (colour )
        8. B.2.2.8 String.prototype.fontsize (size )
        9. B.2.2.9 String.prototype.italics ( )
        10. B.2.2.10 String.prototype.link (url )
        11. B.2.2.11 String.prototype.small ( )
        12. B.2.2.12 String.prototype.strike ( )
        13. B.2.2.13 String.prototype.sub ( )
        14. B.2.2.14 String.prototype.sup ( )
        15. B.2.2.15 String.prototype.trimLeft ( )
        16. B.2.2.16 String.prototype.trimRight ( )
      3. +B.2.3 Additional Properties of the Date.prototype Object
        1. B.2.3.1 Date.prototype.getYear ( )
        2. B.2.3.2 Date.prototype.setYear (year )
        3. B.2.3.3 Date.prototype.toGMTString ( )
      4. +B.2.4 Additional Properties of the RegExp.prototype Object
        1. B.2.4.1 RegExp.prototype.compile (pattern,flags )
    3. +B.3 Other Additional Features
      1. B.3.1 Labelled Function Declarations
      2. +B.3.2 Block-Level Function Declarations Web Legacy Compatibility Semantics
        1. B.3.2.1 Changes to FunctionDeclarationInstantiation
        2. B.3.2.2 Changes to GlobalDeclarationInstantiation
        3. B.3.2.3 Changes to EvalDeclarationInstantiation
        4. B.3.2.4 Changes to Block SS: Early Errors
        5. B.3.2.5 Changes toswitch Statement SS: Early Errors
        6. B.3.2.6 Changes to BlockDeclarationInstantiation
      3. B.3.3 FunctionDeclarations in IfStatement Statement Clauses
      4. B.3.4 VariableStatements in Catch Blocks
      5. B.3.5 Initializers in ForIn Statement Heads
      6. +B.3.6 The[[IsHTMLDDA]] Internal Slot
        1. B.3.6.1 Changes to ToBoolean
        2. B.3.6.2 Changes to IsLooselyEqual
        3. B.3.6.3 Changes to thetypeof Operator
      7. B.3.7 Non-default behaviour in HostMakeJobCallback
      8. B.3.8 Non-default behaviour in HostEnsureCanAddPrivateElement
      9. B.3.9 Runtime Errors for Function Call Assignment Targets
  33. Annex C(informative) The Strict Mode of ECMAScript
  34. +Annex D(informative) Host Layering Points
    1. D.1 Host Hooks
    2. D.2 Host-defined Fields
    3. D.3 Host-defined Objects
    4. D.4 Running Jobs
    5. D.5 Internal Methods of Exotic Objects
    6. D.6 Built-in Objects and Methods
  35. Annex E(informative) Corrections and Clarifications in ECMAScript 2015 with Possible Compatibility Impact
  36. Annex F(informative) Additions and Changes That Introduce Incompatibilities with Prior Editions
  37. Bibliography
  38. Colophon
  39. Copyright & Software License
Menu

13 ECMAScript Language: Expressions

13.1 Identifiers

Syntax

IdentifierReference[Yield, Await]:Identifier[~Yield]yield[~Await]awaitBindingIdentifier[Yield, Await]:IdentifieryieldawaitLabelIdentifier[Yield, Await]:Identifier[~Yield]yield[~Await]awaitIdentifier:IdentifierNamebut notReservedWordNote

yield andawait are permitted asBindingIdentifier in the grammar, and prohibited withstatic semantics below, to prohibit automatic semicolon insertion in cases such as

letawait0;

13.1.1 Static Semantics: Early Errors

BindingIdentifier:IdentifierIdentifierReference:yieldBindingIdentifier:yieldLabelIdentifier:yield
  • It is a Syntax Error ifIsStrict(this production) istrue.
IdentifierReference:awaitBindingIdentifier:awaitLabelIdentifier:awaitBindingIdentifier[Yield, Await]:yield
  • It is a Syntax Error if this production has a[Yield] parameter.
BindingIdentifier[Yield, Await]:await
  • It is a Syntax Error if this production has an[Await] parameter.
IdentifierReference[Yield, Await]:IdentifierBindingIdentifier[Yield, Await]:IdentifierLabelIdentifier[Yield, Await]:Identifier
  • It is a Syntax Error if this production has a[Yield] parameter and theStringValue ofIdentifier is"yield".
  • It is a Syntax Error if this production has an[Await] parameter and theStringValue ofIdentifier is"await".
Identifier:IdentifierNamebut notReservedWordNote

TheStringValue ofIdentifierName normalizes any Unicode escape sequences inIdentifierName hence such escapes cannot be used to write anIdentifier whose code point sequence is the same as aReservedWord.

13.1.2 Static Semantics: StringValue

Thesyntax-directed operation StringValue takes no arguments and returns a String. It is defined piecewise over the following productions:

IdentifierName::IdentifierStartIdentifierNameIdentifierPart
  1. LetidTextUnescaped be theIdentifierCodePoints ofIdentifierName.
  2. ReturnCodePointsToString(idTextUnescaped).
IdentifierReference:yieldBindingIdentifier:yieldLabelIdentifier:yield
  1. Return"yield".
IdentifierReference:awaitBindingIdentifier:awaitLabelIdentifier:await
  1. Return"await".
Identifier:IdentifierNamebut notReservedWord
  1. Return theStringValue ofIdentifierName.
PrivateIdentifier::#IdentifierName
  1. Return thestring-concatenation of 0x0023 (NUMBER SIGN) and theStringValue ofIdentifierName.
ModuleExportName:StringLiteral
  1. Return theSV ofStringLiteral.

13.1.3 Runtime Semantics: Evaluation

IdentifierReference:Identifier
  1. Return ? ResolveBinding(StringValue ofIdentifier).
IdentifierReference:yield
  1. Return ? ResolveBinding("yield").
IdentifierReference:await
  1. Return ? ResolveBinding("await").
Note 1

The result of evaluating anIdentifierReference is always a value of type Reference.

Note 2

Innon-strict code, thekeywordyield may be used as an identifier. Evaluating theIdentifierReference resolves the binding ofyield as if it was anIdentifier. Early Error restriction ensures that such an evaluation only can occur fornon-strict code.

13.2 Primary Expression

Syntax

PrimaryExpression[Yield, Await]:thisIdentifierReference[?Yield, ?Await]LiteralArrayLiteral[?Yield, ?Await]ObjectLiteral[?Yield, ?Await]FunctionExpressionClassExpression[?Yield, ?Await]GeneratorExpressionAsyncFunctionExpressionAsyncGeneratorExpressionRegularExpressionLiteralTemplateLiteral[?Yield, ?Await, ~Tagged]CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]CoverParenthesizedExpressionAndArrowParameterList[Yield, Await]:(Expression[+In, ?Yield, ?Await])(Expression[+In, ?Yield, ?Await],)()(...BindingIdentifier[?Yield, ?Await])(...BindingPattern[?Yield, ?Await])(Expression[+In, ?Yield, ?Await],...BindingIdentifier[?Yield, ?Await])(Expression[+In, ?Yield, ?Await],...BindingPattern[?Yield, ?Await])

Supplemental Syntax

When processing an instance of the production
PrimaryExpression[Yield, Await]:CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]
the interpretation ofCoverParenthesizedExpressionAndArrowParameterList is refined using the following grammar:

ParenthesizedExpression[Yield, Await]:(Expression[+In, ?Yield, ?Await])

13.2.1 Thethis Keyword

13.2.1.1 Runtime Semantics: Evaluation

PrimaryExpression:this
  1. Return ? ResolveThisBinding().

13.2.2 Identifier Reference

See13.1 forIdentifierReference.

13.2.3 Literals

Syntax

Literal:NullLiteralBooleanLiteralNumericLiteralStringLiteral

13.2.3.1 Runtime Semantics: Evaluation

Literal:NullLiteral
  1. Returnnull.
Literal:BooleanLiteral
  1. IfBooleanLiteral is the tokenfalse, returnfalse.
  2. IfBooleanLiteral is the tokentrue, returntrue.
Literal:NumericLiteral
  1. Return theNumericValue ofNumericLiteral as defined in12.9.3.
Literal:StringLiteral
  1. Return theSV ofStringLiteral as defined in12.9.4.2.

13.2.4 Array Initializer

Note

AnArrayLiteral is an expression describing the initialization of an Array, using a list, of zero or more expressions each of which represents an array element, enclosed in square brackets. The elements need not be literals; they are evaluated each time the array initializer is evaluated.

Array elements may be elided at the beginning, middle or end of the element list. Whenever a comma in the element list is not preceded by anAssignmentExpression (i.e., a comma at the beginning or after another comma), the missing array element contributes to the length of the Array and increases the index of subsequent elements. Elided array elements are not defined. If an element is elided at the end of an array, that element does not contribute to the length of the Array.

Syntax

ArrayLiteral[Yield, Await]:[Elisionopt][ElementList[?Yield, ?Await]][ElementList[?Yield, ?Await],Elisionopt]ElementList[Yield, Await]:ElisionoptAssignmentExpression[+In, ?Yield, ?Await]ElisionoptSpreadElement[?Yield, ?Await]ElementList[?Yield, ?Await],ElisionoptAssignmentExpression[+In, ?Yield, ?Await]ElementList[?Yield, ?Await],ElisionoptSpreadElement[?Yield, ?Await]Elision:,Elision,SpreadElement[Yield, Await]:...AssignmentExpression[+In, ?Yield, ?Await]

13.2.4.1 Runtime Semantics: ArrayAccumulation

Thesyntax-directed operation ArrayAccumulation takes argumentsarray (an Array) andnextIndex (aninteger) and returns either anormal completion containing aninteger or anabrupt completion. It is defined piecewise over the following productions:

Elision:,
  1. Letlen benextIndex + 1.
  2. Perform ? Set(array,"length",𝔽(len),true).
  3. NOTE: The above step throws iflen exceeds 232 - 1.
  4. Returnlen.
Elision:Elision,
  1. Return ? ArrayAccumulation ofElision with argumentsarray and (nextIndex + 1).
ElementList:ElisionoptAssignmentExpression
  1. IfElision is present, then
    1. SetnextIndex to ? ArrayAccumulation ofElision with argumentsarray andnextIndex.
  2. LetinitResult be ? Evaluation ofAssignmentExpression.
  3. LetinitValue be ? GetValue(initResult).
  4. Perform ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)),initValue).
  5. ReturnnextIndex + 1.
ElementList:ElisionoptSpreadElement
  1. IfElision is present, then
    1. SetnextIndex to ? ArrayAccumulation ofElision with argumentsarray andnextIndex.
  2. Return ? ArrayAccumulation ofSpreadElement with argumentsarray andnextIndex.
ElementList:ElementList,ElisionoptAssignmentExpression
  1. SetnextIndex to ? ArrayAccumulation ofElementList with argumentsarray andnextIndex.
  2. IfElision is present, then
    1. SetnextIndex to ? ArrayAccumulation ofElision with argumentsarray andnextIndex.
  3. LetinitResult be ? Evaluation ofAssignmentExpression.
  4. LetinitValue be ? GetValue(initResult).
  5. Perform ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)),initValue).
  6. ReturnnextIndex + 1.
ElementList:ElementList,ElisionoptSpreadElement
  1. SetnextIndex to ? ArrayAccumulation ofElementList with argumentsarray andnextIndex.
  2. IfElision is present, then
    1. SetnextIndex to ? ArrayAccumulation ofElision with argumentsarray andnextIndex.
  3. Return ? ArrayAccumulation ofSpreadElement with argumentsarray andnextIndex.
SpreadElement:...AssignmentExpression
  1. LetspreadRef be ? Evaluation ofAssignmentExpression.
  2. LetspreadObj be ? GetValue(spreadRef).
  3. LetiteratorRecord be ? GetIterator(spreadObj,sync).
  4. Repeat,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext isdone, returnnextIndex.
    3. Perform ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)),next).
    4. SetnextIndex tonextIndex + 1.
Note

CreateDataPropertyOrThrow is used to ensure that own properties are defined for the array even if the standard built-inArray prototype object has been modified in a manner that would preclude the creation of new own properties using[[Set]].

13.2.4.2 Runtime Semantics: Evaluation

ArrayLiteral:[Elisionopt]
  1. Letarray be ! ArrayCreate(0).
  2. IfElision is present, then
    1. Perform ? ArrayAccumulation ofElision with argumentsarray and 0.
  3. Returnarray.
ArrayLiteral:[ElementList]
  1. Letarray be ! ArrayCreate(0).
  2. Perform ? ArrayAccumulation ofElementList with argumentsarray and 0.
  3. Returnarray.
ArrayLiteral:[ElementList,Elisionopt]
  1. Letarray be ! ArrayCreate(0).
  2. LetnextIndex be ? ArrayAccumulation ofElementList with argumentsarray and 0.
  3. IfElision is present, then
    1. Perform ? ArrayAccumulation ofElision with argumentsarray andnextIndex.
  4. Returnarray.

13.2.5 Object Initializer

Note 1

An object initializer is an expression describing the initialization of an Object, written in a form resembling a literal. It is a list of zero or more pairs ofproperty keys and associated values, enclosed in curly brackets. The values need not be literals; they are evaluated each time the object initializer is evaluated.

Syntax

ObjectLiteral[Yield, Await]:{}{PropertyDefinitionList[?Yield, ?Await]}{PropertyDefinitionList[?Yield, ?Await],}PropertyDefinitionList[Yield, Await]:PropertyDefinition[?Yield, ?Await]PropertyDefinitionList[?Yield, ?Await],PropertyDefinition[?Yield, ?Await]PropertyDefinition[Yield, Await]:IdentifierReference[?Yield, ?Await]CoverInitializedName[?Yield, ?Await]PropertyName[?Yield, ?Await]:AssignmentExpression[+In, ?Yield, ?Await]MethodDefinition[?Yield, ?Await]...AssignmentExpression[+In, ?Yield, ?Await]PropertyName[Yield, Await]:LiteralPropertyNameComputedPropertyName[?Yield, ?Await]LiteralPropertyName:IdentifierNameStringLiteralNumericLiteralComputedPropertyName[Yield, Await]:[AssignmentExpression[+In, ?Yield, ?Await]]CoverInitializedName[Yield, Await]:IdentifierReference[?Yield, ?Await]Initializer[+In, ?Yield, ?Await]Initializer[In, Yield, Await]:=AssignmentExpression[?In, ?Yield, ?Await]Note 2

MethodDefinition is defined in15.4.

Note 3

In certain contexts,ObjectLiteral is used as a cover grammar for a more restricted secondary grammar. TheCoverInitializedName production is necessary to fully cover these secondary grammars. However, use of this production results in an early Syntax Error in normal contexts where an actualObjectLiteral is expected.

13.2.5.1 Static Semantics: Early Errors

PropertyDefinition:MethodDefinition

In addition to describing an actual object initializer theObjectLiteral productions are also used as a cover grammar forObjectAssignmentPattern and may be recognized as part of aCoverParenthesizedExpressionAndArrowParameterList. WhenObjectLiteral appears in a context whereObjectAssignmentPattern is required the following Early Error rules arenot applied. In addition, they are not applied when initially parsing aCoverParenthesizedExpressionAndArrowParameterList orCoverCallExpressionAndAsyncArrowHead.

PropertyDefinition:CoverInitializedName
  • It is a Syntax Error if any source text is matched by this production.
Note 1

This production exists so thatObjectLiteral can serve as a cover grammar forObjectAssignmentPattern. It cannot occur in an actual object initializer.

ObjectLiteral:{PropertyDefinitionList}{PropertyDefinitionList,}Note 2

TheList returned byPropertyNameList does not include property names defined using aComputedPropertyName.

13.2.5.2 Static Semantics: IsComputedPropertyKey

Thesyntax-directed operation IsComputedPropertyKey takes no arguments and returns a Boolean. It is defined piecewise over the following productions:

PropertyName:LiteralPropertyName
  1. Returnfalse.
PropertyName:ComputedPropertyName
  1. Returntrue.

13.2.5.3 Static Semantics: PropertyNameList

Thesyntax-directed operation PropertyNameList takes no arguments and returns aList of Strings. It is defined piecewise over the following productions:

PropertyDefinitionList:PropertyDefinition
  1. LetpropName be thePropName ofPropertyDefinition.
  2. IfpropName isempty, return a new emptyList.
  3. Return «propName ».
PropertyDefinitionList:PropertyDefinitionList,PropertyDefinition
  1. Letlist be thePropertyNameList ofPropertyDefinitionList.
  2. LetpropName be thePropName ofPropertyDefinition.
  3. IfpropName isempty, returnlist.
  4. Return thelist-concatenation oflist and «propName ».

13.2.5.4 Runtime Semantics: Evaluation

ObjectLiteral:{}
  1. ReturnOrdinaryObjectCreate(%Object.prototype%).
ObjectLiteral:{PropertyDefinitionList}{PropertyDefinitionList,}
  1. Letobj beOrdinaryObjectCreate(%Object.prototype%).
  2. Perform ? PropertyDefinitionEvaluation ofPropertyDefinitionList with argumentobj.
  3. Returnobj.
LiteralPropertyName:IdentifierName
  1. Return theStringValue ofIdentifierName.
LiteralPropertyName:StringLiteral
  1. Return theSV ofStringLiteral.
LiteralPropertyName:NumericLiteral
  1. Letnbr be theNumericValue ofNumericLiteral.
  2. Return ! ToString(nbr).
ComputedPropertyName:[AssignmentExpression]
  1. LetexprValue be ? Evaluation ofAssignmentExpression.
  2. LetpropName be ? GetValue(exprValue).
  3. Return ? ToPropertyKey(propName).

13.2.5.5 Runtime Semantics: PropertyDefinitionEvaluation

Thesyntax-directed operation PropertyDefinitionEvaluation takes argumentobject (an Object) and returns either anormal completion containingunused or anabrupt completion. It is defined piecewise over the following productions:

PropertyDefinitionList:PropertyDefinitionList,PropertyDefinition
  1. Perform ? PropertyDefinitionEvaluation ofPropertyDefinitionList with argumentobject.
  2. Perform ? PropertyDefinitionEvaluation ofPropertyDefinition with argumentobject.
  3. Returnunused.
PropertyDefinition:...AssignmentExpression
  1. LetexprValue be ? Evaluation ofAssignmentExpression.
  2. LetfromValue be ? GetValue(exprValue).
  3. LetexcludedNames be a new emptyList.
  4. Perform ? CopyDataProperties(object,fromValue,excludedNames).
  5. Returnunused.
PropertyDefinition:IdentifierReference
  1. LetpropName be theStringValue ofIdentifierReference.
  2. LetexprValue be ? Evaluation ofIdentifierReference.
  3. LetpropValue be ? GetValue(exprValue).
  4. Assert:object is an ordinary, extensible object with no non-configurable properties.
  5. Perform ! CreateDataPropertyOrThrow(object,propName,propValue).
  6. Returnunused.
PropertyDefinition:PropertyName:AssignmentExpression
  1. LetpropKey be ? Evaluation ofPropertyName.
  2. If thisPropertyDefinition is contained within aScript that is being evaluated forParseJSON (see step6 ofParseJSON), then
    1. LetisProtoSetter befalse.
  3. Else ifpropKey is"__proto__" andIsComputedPropertyKey ofPropertyName isfalse, then
    1. LetisProtoSetter betrue.
  4. Else,
    1. LetisProtoSetter befalse.
  5. IfIsAnonymousFunctionDefinition(AssignmentExpression) istrue andisProtoSetter isfalse, then
    1. LetpropValue be ? NamedEvaluation ofAssignmentExpression with argumentpropKey.
  6. Else,
    1. LetexprValueRef be ? Evaluation ofAssignmentExpression.
    2. LetpropValue be ? GetValue(exprValueRef).
  7. IfisProtoSetter istrue, then
    1. IfpropValueis an Object orpropValue isnull, then
      1. Perform ! object.[[SetPrototypeOf]](propValue).
    2. Returnunused.
  8. Assert:object is an ordinary, extensible object with no non-configurable properties.
  9. Perform ! CreateDataPropertyOrThrow(object,propKey,propValue).
  10. Returnunused.
PropertyDefinition:MethodDefinition
  1. Perform ? MethodDefinitionEvaluation ofMethodDefinition with argumentsobject andtrue.
  2. Returnunused.

13.2.6 Function Defining Expressions

See15.2 forPrimaryExpression:FunctionExpression.

See15.5 forPrimaryExpression:GeneratorExpression.

See15.7 forPrimaryExpression:ClassExpression.

See15.8 forPrimaryExpression:AsyncFunctionExpression.

See15.6 forPrimaryExpression:AsyncGeneratorExpression.

13.2.7 Regular Expression Literals

Syntax

See12.9.5.

13.2.7.1 Static Semantics: Early Errors

PrimaryExpression:RegularExpressionLiteral

13.2.7.2 Static Semantics: IsValidRegularExpressionLiteral (literal )

The abstract operation IsValidRegularExpressionLiteral takes argumentliteral (aRegularExpressionLiteralParse Node) and returns a Boolean. It determines if its argument is a valid regular expression literal. It performs the following steps when called:

  1. Letflags be theFlagText ofliteral.
  2. Ifflags contains any code points other thand,g,i,m,s,u,v, ory, or ifflags contains any code point more than once, returnfalse.
  3. Ifflags containsu, letu betrue; else letu befalse.
  4. Ifflags containsv, letv betrue; else letv befalse.
  5. LetpatternText be theBodyText ofliteral.
  6. Ifu isfalse andv isfalse, then
    1. LetstringValue beCodePointsToString(patternText).
    2. SetpatternText to the sequence of code points resulting from interpreting each of the 16-bit elements ofstringValue as a Unicode BMP code point. UTF-16 decoding is not applied to the elements.
  7. LetparseResult beParsePattern(patternText,u,v).
  8. IfparseResult is aParse Node, returntrue; else returnfalse.

13.2.7.3 Runtime Semantics: Evaluation

PrimaryExpression:RegularExpressionLiteral
  1. Letpattern beCodePointsToString(BodyText ofRegularExpressionLiteral).
  2. Letflags beCodePointsToString(FlagText ofRegularExpressionLiteral).
  3. Return ! RegExpCreate(pattern,flags).

13.2.8 Template Literals

Syntax

TemplateLiteral[Yield, Await, Tagged]:NoSubstitutionTemplateSubstitutionTemplate[?Yield, ?Await, ?Tagged]SubstitutionTemplate[Yield, Await, Tagged]:TemplateHeadExpression[+In, ?Yield, ?Await]TemplateSpans[?Yield, ?Await, ?Tagged]TemplateSpans[Yield, Await, Tagged]:TemplateTailTemplateMiddleList[?Yield, ?Await, ?Tagged]TemplateTailTemplateMiddleList[Yield, Await, Tagged]:TemplateMiddleExpression[+In, ?Yield, ?Await]TemplateMiddleList[?Yield, ?Await, ?Tagged]TemplateMiddleExpression[+In, ?Yield, ?Await]

13.2.8.1 Static Semantics: Early Errors

TemplateLiteral[Yield, Await, Tagged]:NoSubstitutionTemplateTemplateLiteral[Yield, Await, Tagged]:SubstitutionTemplate[?Yield, ?Await, ?Tagged]SubstitutionTemplate[Yield, Await, Tagged]:TemplateHeadExpression[+In, ?Yield, ?Await]TemplateSpans[?Yield, ?Await, ?Tagged]TemplateSpans[Yield, Await, Tagged]:TemplateTailTemplateMiddleList[Yield, Await, Tagged]:TemplateMiddleExpression[+In, ?Yield, ?Await]TemplateMiddleList[?Yield, ?Await, ?Tagged]TemplateMiddleExpression[+In, ?Yield, ?Await]

13.2.8.2 Static Semantics: TemplateStrings

Thesyntax-directed operation TemplateStrings takes argumentraw (a Boolean) and returns aList of either Strings orundefined. It is defined piecewise over the following productions:

TemplateLiteral:NoSubstitutionTemplate
  1. Return «TemplateString(NoSubstitutionTemplate,raw) ».
SubstitutionTemplate:TemplateHeadExpressionTemplateSpans
  1. Lethead be «TemplateString(TemplateHead,raw) ».
  2. Lettail be theTemplateStrings ofTemplateSpans with argumentraw.
  3. Return thelist-concatenation ofhead andtail.
TemplateSpans:TemplateTail
  1. Return «TemplateString(TemplateTail,raw) ».
TemplateSpans:TemplateMiddleListTemplateTail
  1. Letmiddle be theTemplateStrings ofTemplateMiddleList with argumentraw.
  2. Lettail be «TemplateString(TemplateTail,raw) ».
  3. Return thelist-concatenation ofmiddle andtail.
TemplateMiddleList:TemplateMiddleExpression
  1. Return «TemplateString(TemplateMiddle,raw) ».
TemplateMiddleList:TemplateMiddleListTemplateMiddleExpression
  1. Letfront be theTemplateStrings ofTemplateMiddleList with argumentraw.
  2. Letlast be «TemplateString(TemplateMiddle,raw) ».
  3. Return thelist-concatenation offront andlast.

13.2.8.3 Static Semantics: TemplateString (templateToken,raw )

The abstract operation TemplateString takes argumentstemplateToken (aNoSubstitutionTemplateParse Node, aTemplateHeadParse Node, aTemplateMiddleParse Node, or aTemplateTailParse Node) andraw (a Boolean) and returns a String orundefined. It performs the following steps when called:

  1. Ifraw istrue, then
    1. Letstring be theTRV oftemplateToken.
  2. Else,
    1. Letstring be theTV oftemplateToken.
  3. Returnstring.
Note

This operation returnsundefined ifraw isfalse andtemplateToken contains aNotEscapeSequence. In all other cases, it returns a String.

13.2.8.4 GetTemplateObject (templateLiteral )

The abstract operation GetTemplateObject takes argumenttemplateLiteral (aParse Node) and returns an Array. It performs the following steps when called:

  1. Letrealm bethe current Realm Record.
  2. LettemplateRegistry berealm.[[TemplateMap]].
  3. For each elemente oftemplateRegistry, do
    1. Ife.[[Site]] isthe same Parse Node astemplateLiteral, then
      1. Returne.[[Array]].
  4. LetrawStrings be theTemplateStrings oftemplateLiteral with argumenttrue.
  5. Assert:rawStrings is aList of Strings.
  6. LetcookedStrings be theTemplateStrings oftemplateLiteral with argumentfalse.
  7. Letcount be the number of elements in theListcookedStrings.
  8. Assert:count ≤ 232 - 1.
  9. Lettemplate be ! ArrayCreate(count).
  10. LetrawObj be ! ArrayCreate(count).
  11. Letindex be 0.
  12. Repeat, whileindex <count,
    1. Letprop be ! ToString(𝔽(index)).
    2. LetcookedValue becookedStrings[index].
    3. Perform ! DefinePropertyOrThrow(template,prop, PropertyDescriptor {[[Value]]:cookedValue,[[Writable]]:false,[[Enumerable]]:true,[[Configurable]]:false }).
    4. LetrawValue be the String valuerawStrings[index].
    5. Perform ! DefinePropertyOrThrow(rawObj,prop, PropertyDescriptor {[[Value]]:rawValue,[[Writable]]:false,[[Enumerable]]:true,[[Configurable]]:false }).
    6. Setindex toindex + 1.
  13. Perform ! SetIntegrityLevel(rawObj,frozen).
  14. Perform ! DefinePropertyOrThrow(template,"raw", PropertyDescriptor {[[Value]]:rawObj,[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false }).
  15. Perform ! SetIntegrityLevel(template,frozen).
  16. Append theRecord {[[Site]]:templateLiteral,[[Array]]:template } torealm.[[TemplateMap]].
  17. Returntemplate.
Note 1

The creation of a template object cannot result in anabrupt completion.

Note 2

EachTemplateLiteral in the program code of arealm is associated with a unique template object that is used in the evaluation of tagged Templates (13.2.8.6). The template objects are frozen and the same template object is used each time a specific tagged Template is evaluated. Whether template objects are created lazily upon first evaluation of theTemplateLiteral or eagerly prior to first evaluation is an implementation choice that is not observable to ECMAScript code.

Note 3

Future editions of this specification may define additional non-enumerable properties of template objects.

13.2.8.5 Runtime Semantics: SubstitutionEvaluation

Thesyntax-directed operation SubstitutionEvaluation takes no arguments and returns either anormal completion containing aList ofECMAScript language values or anabrupt completion. It is defined piecewise over the following productions:

TemplateSpans:TemplateTail
  1. Return a new emptyList.
TemplateSpans:TemplateMiddleListTemplateTail
  1. Return ? SubstitutionEvaluation ofTemplateMiddleList.
TemplateMiddleList:TemplateMiddleExpression
  1. LetsubRef be ? Evaluation ofExpression.
  2. Letsub be ? GetValue(subRef).
  3. Return «sub ».
TemplateMiddleList:TemplateMiddleListTemplateMiddleExpression
  1. Letpreceding be ? SubstitutionEvaluation ofTemplateMiddleList.
  2. LetnextRef be ? Evaluation ofExpression.
  3. Letnext be ? GetValue(nextRef).
  4. Return thelist-concatenation ofpreceding and «next ».

13.2.8.6 Runtime Semantics: Evaluation

TemplateLiteral:NoSubstitutionTemplate
  1. Return theTV ofNoSubstitutionTemplate as defined in12.9.6.
SubstitutionTemplate:TemplateHeadExpressionTemplateSpans
  1. Lethead be theTV ofTemplateHead as defined in12.9.6.
  2. LetsubRef be ? Evaluation ofExpression.
  3. Letsub be ? GetValue(subRef).
  4. Letmiddle be ? ToString(sub).
  5. Lettail be ? Evaluation ofTemplateSpans.
  6. Return thestring-concatenation ofhead,middle, andtail.
Note 1

The string conversion semantics applied to theExpression value are likeString.prototype.concat rather than the+ operator.

TemplateSpans:TemplateTail
  1. Return theTV ofTemplateTail as defined in12.9.6.
TemplateSpans:TemplateMiddleListTemplateTail
  1. Lethead be ? Evaluation ofTemplateMiddleList.
  2. Lettail be theTV ofTemplateTail as defined in12.9.6.
  3. Return thestring-concatenation ofhead andtail.
TemplateMiddleList:TemplateMiddleExpression
  1. Lethead be theTV ofTemplateMiddle as defined in12.9.6.
  2. LetsubRef be ? Evaluation ofExpression.
  3. Letsub be ? GetValue(subRef).
  4. Letmiddle be ? ToString(sub).
  5. Return thestring-concatenation ofhead andmiddle.
Note 2

The string conversion semantics applied to theExpression value are likeString.prototype.concat rather than the+ operator.

TemplateMiddleList:TemplateMiddleListTemplateMiddleExpression
  1. Letrest be ? Evaluation ofTemplateMiddleList.
  2. Letmiddle be theTV ofTemplateMiddle as defined in12.9.6.
  3. LetsubRef be ? Evaluation ofExpression.
  4. Letsub be ? GetValue(subRef).
  5. Letlast be ? ToString(sub).
  6. Return thestring-concatenation ofrest,middle, andlast.
Note 3

The string conversion semantics applied to theExpression value are likeString.prototype.concat rather than the+ operator.

13.2.9 The Grouping Operator

13.2.9.1 Static Semantics: Early Errors

PrimaryExpression:CoverParenthesizedExpressionAndArrowParameterList

13.2.9.2 Runtime Semantics: Evaluation

PrimaryExpression:CoverParenthesizedExpressionAndArrowParameterList
  1. Letexpr be theParenthesizedExpression that iscovered byCoverParenthesizedExpressionAndArrowParameterList.
  2. Return ? Evaluation ofexpr.
ParenthesizedExpression:(Expression)
  1. Return ? Evaluation ofExpression. This may be of type Reference.
Note

This algorithm does not applyGetValue toEvaluation ofExpression. The principal motivation for this is so that operators such asdelete andtypeof may be applied to parenthesized expressions.

13.3 Left-Hand-Side Expressions

Syntax

MemberExpression[Yield, Await]:PrimaryExpression[?Yield, ?Await]MemberExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]MemberExpression[?Yield, ?Await].IdentifierNameMemberExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await, +Tagged]SuperProperty[?Yield, ?Await]MetaPropertynewMemberExpression[?Yield, ?Await]Arguments[?Yield, ?Await]MemberExpression[?Yield, ?Await].PrivateIdentifierSuperProperty[Yield, Await]:super[Expression[+In, ?Yield, ?Await]]super.IdentifierNameMetaProperty:NewTargetImportMetaNewTarget:new.targetImportMeta:import.metaNewExpression[Yield, Await]:MemberExpression[?Yield, ?Await]newNewExpression[?Yield, ?Await]CallExpression[Yield, Await]:CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]SuperCall[?Yield, ?Await]ImportCall[?Yield, ?Await]CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]CallExpression[?Yield, ?Await].IdentifierNameCallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await, +Tagged]CallExpression[?Yield, ?Await].PrivateIdentifierSuperCall[Yield, Await]:superArguments[?Yield, ?Await]ImportCall[Yield, Await]:import(AssignmentExpression[+In, ?Yield, ?Await],opt)import(AssignmentExpression[+In, ?Yield, ?Await],AssignmentExpression[+In, ?Yield, ?Await],opt)Arguments[Yield, Await]:()(ArgumentList[?Yield, ?Await])(ArgumentList[?Yield, ?Await],)ArgumentList[Yield, Await]:AssignmentExpression[+In, ?Yield, ?Await]...AssignmentExpression[+In, ?Yield, ?Await]ArgumentList[?Yield, ?Await],AssignmentExpression[+In, ?Yield, ?Await]ArgumentList[?Yield, ?Await],...AssignmentExpression[+In, ?Yield, ?Await]OptionalExpression[Yield, Await]:MemberExpression[?Yield, ?Await]OptionalChain[?Yield, ?Await]CallExpression[?Yield, ?Await]OptionalChain[?Yield, ?Await]OptionalExpression[?Yield, ?Await]OptionalChain[?Yield, ?Await]OptionalChain[Yield, Await]:?.Arguments[?Yield, ?Await]?.[Expression[+In, ?Yield, ?Await]]?.IdentifierName?.TemplateLiteral[?Yield, ?Await, +Tagged]?.PrivateIdentifierOptionalChain[?Yield, ?Await]Arguments[?Yield, ?Await]OptionalChain[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]OptionalChain[?Yield, ?Await].IdentifierNameOptionalChain[?Yield, ?Await]TemplateLiteral[?Yield, ?Await, +Tagged]OptionalChain[?Yield, ?Await].PrivateIdentifierLeftHandSideExpression[Yield, Await]:NewExpression[?Yield, ?Await]CallExpression[?Yield, ?Await]OptionalExpression[?Yield, ?Await]

Supplemental Syntax

When processing an instance of the production
CallExpression:CoverCallExpressionAndAsyncArrowHead
the interpretation ofCoverCallExpressionAndAsyncArrowHead is refined using the following grammar:

CallMemberExpression[Yield, Await]:MemberExpression[?Yield, ?Await]Arguments[?Yield, ?Await]

13.3.1 Static Semantics

13.3.1.1 Static Semantics: Early Errors

OptionalChain:?.TemplateLiteralOptionalChainTemplateLiteral
  • It is a Syntax Error if any source text is matched by this production.
Note

This production exists in order to prevent automatic semicolon insertion rules (12.10) from being applied to the following code:

a?.b`c`

so that it would be interpreted as two valid statements. The purpose is to maintain consistency with similar code without optional chaining:

a.b`c`

which is a valid statement and where automatic semicolon insertion does not apply.

ImportMeta:import.meta

13.3.2 Property Accessors

Note

Properties are accessed by name, using either the dot notation:

or the bracket notation:

The dot notation is explained by the following syntactic conversion:

is identical in its behaviour to

MemberExpression[ <identifier-name-string>]

and similarly

is identical in its behaviour to

CallExpression[ <identifier-name-string>]

where <identifier-name-string> is theStringValue ofIdentifierName.

13.3.2.1 Runtime Semantics: Evaluation

MemberExpression:MemberExpression[Expression]
  1. LetbaseReference be ? Evaluation ofMemberExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. Letstrict beIsStrict(thisMemberExpression).
  4. Return ? EvaluatePropertyAccessWithExpressionKey(baseValue,Expression,strict).
MemberExpression:MemberExpression.IdentifierName
  1. LetbaseReference be ? Evaluation ofMemberExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. Letstrict beIsStrict(thisMemberExpression).
  4. ReturnEvaluatePropertyAccessWithIdentifierKey(baseValue,IdentifierName,strict).
MemberExpression:MemberExpression.PrivateIdentifier
  1. LetbaseReference be ? Evaluation ofMemberExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. LetfieldNameString be theStringValue ofPrivateIdentifier.
  4. ReturnMakePrivateReference(baseValue,fieldNameString).
CallExpression:CallExpression[Expression]
  1. LetbaseReference be ? Evaluation ofCallExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. Letstrict beIsStrict(thisCallExpression).
  4. Return ? EvaluatePropertyAccessWithExpressionKey(baseValue,Expression,strict).
CallExpression:CallExpression.IdentifierName
  1. LetbaseReference be ? Evaluation ofCallExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. Letstrict beIsStrict(thisCallExpression).
  4. ReturnEvaluatePropertyAccessWithIdentifierKey(baseValue,IdentifierName,strict).
CallExpression:CallExpression.PrivateIdentifier
  1. LetbaseReference be ? Evaluation ofCallExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. LetfieldNameString be theStringValue ofPrivateIdentifier.
  4. ReturnMakePrivateReference(baseValue,fieldNameString).

13.3.3 EvaluatePropertyAccessWithExpressionKey (baseValue,expression,strict )

The abstract operation EvaluatePropertyAccessWithExpressionKey takes argumentsbaseValue (anECMAScript language value),expression (anExpressionParse Node), andstrict (a Boolean) and returns either anormal completion containing aReference Record or anabrupt completion. It performs the following steps when called:

  1. LetpropertyNameReference be ? Evaluation ofexpression.
  2. LetpropertyNameValue be ? GetValue(propertyNameReference).
  3. NOTE: In most cases,ToPropertyKey will be performed onpropertyNameValue immediately after this step. However, in the case ofa[b] = c, it will not be performed until after evaluation ofc.
  4. Return theReference Record {[[Base]]:baseValue,[[ReferencedName]]:propertyNameValue,[[Strict]]:strict,[[ThisValue]]:empty }.

13.3.4 EvaluatePropertyAccessWithIdentifierKey (baseValue,identifierName,strict )

The abstract operation EvaluatePropertyAccessWithIdentifierKey takes argumentsbaseValue (anECMAScript language value),identifierName (anIdentifierNameParse Node), andstrict (a Boolean) and returns aReference Record. It performs the following steps when called:

  1. LetpropertyNameString be theStringValue ofidentifierName.
  2. Return theReference Record {[[Base]]:baseValue,[[ReferencedName]]:propertyNameString,[[Strict]]:strict,[[ThisValue]]:empty }.

13.3.5 Thenew Operator

13.3.5.1 Runtime Semantics: Evaluation

NewExpression:newNewExpression
  1. Return ? EvaluateNew(NewExpression,empty).
MemberExpression:newMemberExpressionArguments
  1. Return ? EvaluateNew(MemberExpression,Arguments).

13.3.5.1.1 EvaluateNew (constructExpr,arguments )

The abstract operation EvaluateNew takes argumentsconstructExpr (aNewExpressionParse Node or aMemberExpressionParse Node) andarguments (empty or anArgumentsParse Node) and returns either anormal completion containing anECMAScript language value or anabrupt completion. It performs the following steps when called:

  1. Letref be ? Evaluation ofconstructExpr.
  2. Letconstructor be ? GetValue(ref).
  3. Ifarguments isempty, then
    1. LetargList be a new emptyList.
  4. Else,
    1. LetargList be ? ArgumentListEvaluation ofarguments.
  5. IfIsConstructor(constructor) isfalse, throw aTypeError exception.
  6. Return ? Construct(constructor,argList).

13.3.6 Function Calls

13.3.6.1 Runtime Semantics: Evaluation

CallExpression:CoverCallExpressionAndAsyncArrowHead
  1. Letexpr be theCallMemberExpression that iscovered byCoverCallExpressionAndAsyncArrowHead.
  2. LetmemberExpr be theMemberExpression ofexpr.
  3. Letarguments be theArguments ofexpr.
  4. Letref be ? Evaluation ofmemberExpr.
  5. Letfunc be ? GetValue(ref).
  6. Ifref is aReference Record,IsPropertyReference(ref) isfalse, andref.[[ReferencedName]] is"eval", then
    1. IfSameValue(func,%eval%) istrue, then
      1. LetargList be ? ArgumentListEvaluation ofarguments.
      2. IfargList has no elements, returnundefined.
      3. LetevalArg be the first element ofargList.
      4. IfIsStrict(thisCallExpression) istrue, letstrictCaller betrue. Otherwise letstrictCaller befalse.
      5. Return ? PerformEval(evalArg,strictCaller,true).
  7. LetthisCall be thisCallExpression.
  8. LettailCall beIsInTailPosition(thisCall).
  9. Return ? EvaluateCall(func,ref,arguments,tailCall).

ACallExpression evaluation that executes step6.a.v is adirect eval.

CallExpression:CallExpressionArguments
  1. Letref be ? Evaluation ofCallExpression.
  2. Letfunc be ? GetValue(ref).
  3. LetthisCall be thisCallExpression.
  4. LettailCall beIsInTailPosition(thisCall).
  5. Return ? EvaluateCall(func,ref,Arguments,tailCall).

13.3.6.2 EvaluateCall (func,ref,arguments,tailPosition )

The abstract operation EvaluateCall takes argumentsfunc (anECMAScript language value),ref (anECMAScript language value or aReference Record),arguments (aParse Node), andtailPosition (a Boolean) and returns either anormal completion containing anECMAScript language value or anabrupt completion. It performs the following steps when called:

  1. Ifref is aReference Record, then
    1. IfIsPropertyReference(ref) istrue, then
      1. LetthisValue beGetThisValue(ref).
    2. Else,
      1. LetrefEnv beref.[[Base]].
      2. Assert:refEnv is anEnvironment Record.
      3. LetthisValue berefEnv.WithBaseObject().
  2. Else,
    1. LetthisValue beundefined.
  3. LetargList be ? ArgumentListEvaluation ofarguments.
  4. Iffuncis not an Object, throw aTypeError exception.
  5. IfIsCallable(func) isfalse, throw aTypeError exception.
  6. IftailPosition istrue, performPrepareForTailCall().
  7. Return ? Call(func,thisValue,argList).

13.3.7 Thesuper Keyword

13.3.7.1 Runtime Semantics: Evaluation

SuperProperty:super[Expression]
  1. Letenv beGetThisEnvironment().
  2. LetactualThis be ? env.GetThisBinding().
  3. LetpropertyNameReference be ? Evaluation ofExpression.
  4. LetpropertyNameValue be ? GetValue(propertyNameReference).
  5. Letstrict beIsStrict(thisSuperProperty).
  6. NOTE: In most cases,ToPropertyKey will be performed onpropertyNameValue immediately after this step. However, in the case ofsuper[b] = c, it will not be performed until after evaluation ofc.
  7. ReturnMakeSuperPropertyReference(actualThis,propertyNameValue,strict).
SuperProperty:super.IdentifierName
  1. Letenv beGetThisEnvironment().
  2. LetactualThis be ? env.GetThisBinding().
  3. LetpropertyKey be theStringValue ofIdentifierName.
  4. Letstrict beIsStrict(thisSuperProperty).
  5. ReturnMakeSuperPropertyReference(actualThis,propertyKey,strict).
SuperCall:superArguments
  1. LetnewTarget beGetNewTarget().
  2. Assert:newTarget is aconstructor.
  3. Letfunc beGetSuperConstructor().
  4. LetargList be ? ArgumentListEvaluation ofArguments.
  5. IfIsConstructor(func) isfalse, throw aTypeError exception.
  6. Letresult be ? Construct(func,argList,newTarget).
  7. LetthisER beGetThisEnvironment().
  8. Assert:thisER is aFunction Environment Record.
  9. Perform ? BindThisValue(thisER,result).
  10. LetF bethisER.[[FunctionObject]].
  11. Assert:F is an ECMAScriptfunction object.
  12. Perform ? InitializeInstanceElements(result,F).
  13. Returnresult.

13.3.7.2 GetSuperConstructor ( )

The abstract operation GetSuperConstructor takes no arguments and returns anECMAScript language value. It performs the following steps when called:

  1. LetenvRec beGetThisEnvironment().
  2. Assert:envRec is aFunction Environment Record.
  3. LetactiveFunction beenvRec.[[FunctionObject]].
  4. Assert:activeFunction is an ECMAScriptfunction object.
  5. LetsuperConstructor be ! activeFunction.[[GetPrototypeOf]]().
  6. ReturnsuperConstructor.

13.3.7.3 MakeSuperPropertyReference (actualThis,propertyKey,strict )

The abstract operation MakeSuperPropertyReference takes argumentsactualThis (anECMAScript language value),propertyKey (anECMAScript language value), andstrict (a Boolean) and returns aSuper Reference Record. It performs the following steps when called:

  1. Letenv beGetThisEnvironment().
  2. Assert:env.HasSuperBinding() istrue.
  3. Assert:env is aFunction Environment Record.
  4. LetbaseValue beGetSuperBase(env).
  5. Return theReference Record {[[Base]]:baseValue,[[ReferencedName]]:propertyKey,[[Strict]]:strict,[[ThisValue]]:actualThis }.

13.3.8 Argument Lists

Note

The evaluation of an argument list produces aList of values.

13.3.8.1 Runtime Semantics: ArgumentListEvaluation

Thesyntax-directed operation ArgumentListEvaluation takes no arguments and returns either anormal completion containing aList ofECMAScript language values or anabrupt completion. It is defined piecewise over the following productions:

Arguments:()
  1. Return a new emptyList.
ArgumentList:AssignmentExpression
  1. Letref be ? Evaluation ofAssignmentExpression.
  2. Letarg be ? GetValue(ref).
  3. Return «arg ».
ArgumentList:...AssignmentExpression
  1. Letlist be a new emptyList.
  2. LetspreadRef be ? Evaluation ofAssignmentExpression.
  3. LetspreadObj be ? GetValue(spreadRef).
  4. LetiteratorRecord be ? GetIterator(spreadObj,sync).
  5. Repeat,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext isdone, returnlist.
    3. Appendnext tolist.
ArgumentList:ArgumentList,AssignmentExpression
  1. LetprecedingArgs be ? ArgumentListEvaluation ofArgumentList.
  2. Letref be ? Evaluation ofAssignmentExpression.
  3. Letarg be ? GetValue(ref).
  4. Return thelist-concatenation ofprecedingArgs and «arg ».
ArgumentList:ArgumentList,...AssignmentExpression
  1. LetprecedingArgs be ? ArgumentListEvaluation ofArgumentList.
  2. LetspreadRef be ? Evaluation ofAssignmentExpression.
  3. LetiteratorRecord be ? GetIterator(?GetValue(spreadRef),sync).
  4. Repeat,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext isdone, returnprecedingArgs.
    3. Appendnext toprecedingArgs.
TemplateLiteral:NoSubstitutionTemplate
  1. LettemplateLiteral be thisTemplateLiteral.
  2. LetsiteObj beGetTemplateObject(templateLiteral).
  3. Return «siteObj ».
TemplateLiteral:SubstitutionTemplate
  1. LettemplateLiteral be thisTemplateLiteral.
  2. LetsiteObj beGetTemplateObject(templateLiteral).
  3. Letremaining be ? ArgumentListEvaluation ofSubstitutionTemplate.
  4. Return thelist-concatenation of «siteObj » andremaining.
SubstitutionTemplate:TemplateHeadExpressionTemplateSpans
  1. LetfirstSubRef be ? Evaluation ofExpression.
  2. LetfirstSub be ? GetValue(firstSubRef).
  3. LetrestSub be ? SubstitutionEvaluation ofTemplateSpans.
  4. Assert:restSub is a possibly emptyList.
  5. Return thelist-concatenation of «firstSub » andrestSub.

13.3.9 Optional Chains

Note
An optional chain is a chain of one or more property accesses and function calls, the first of which begins with the token?..

13.3.9.1 Runtime Semantics: Evaluation

OptionalExpression:MemberExpressionOptionalChain
  1. LetbaseReference be ? Evaluation ofMemberExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. IfbaseValue is eitherundefined ornull, then
    1. Returnundefined.
  4. Return ? ChainEvaluation ofOptionalChain with argumentsbaseValue andbaseReference.
OptionalExpression:CallExpressionOptionalChain
  1. LetbaseReference be ? Evaluation ofCallExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. IfbaseValue is eitherundefined ornull, then
    1. Returnundefined.
  4. Return ? ChainEvaluation ofOptionalChain with argumentsbaseValue andbaseReference.
OptionalExpression:OptionalExpressionOptionalChain
  1. LetbaseReference be ? Evaluation ofOptionalExpression.
  2. LetbaseValue be ? GetValue(baseReference).
  3. IfbaseValue is eitherundefined ornull, then
    1. Returnundefined.
  4. Return ? ChainEvaluation ofOptionalChain with argumentsbaseValue andbaseReference.

13.3.9.2 Runtime Semantics: ChainEvaluation

Thesyntax-directed operation ChainEvaluation takes argumentsbaseValue (anECMAScript language value) andbaseReference (anECMAScript language value or aReference Record) and returns either anormal completion containing either anECMAScript language value or aReference Record, or anabrupt completion. It is defined piecewise over the following productions:

OptionalChain:?.Arguments
  1. LetthisChain be thisOptionalChain.
  2. LettailCall beIsInTailPosition(thisChain).
  3. Return ? EvaluateCall(baseValue,baseReference,Arguments,tailCall).
OptionalChain:?.[Expression]
  1. Letstrict beIsStrict(thisOptionalChain).
  2. Return ? EvaluatePropertyAccessWithExpressionKey(baseValue,Expression,strict).
OptionalChain:?.IdentifierName
  1. Letstrict beIsStrict(thisOptionalChain).
  2. ReturnEvaluatePropertyAccessWithIdentifierKey(baseValue,IdentifierName,strict).
OptionalChain:?.PrivateIdentifier
  1. LetfieldNameString be theStringValue ofPrivateIdentifier.
  2. ReturnMakePrivateReference(baseValue,fieldNameString).
OptionalChain:OptionalChainArguments
  1. LetoptionalChain beOptionalChain.
  2. LetnewReference be ? ChainEvaluation ofoptionalChain with argumentsbaseValue andbaseReference.
  3. LetnewValue be ? GetValue(newReference).
  4. LetthisChain be thisOptionalChain.
  5. LettailCall beIsInTailPosition(thisChain).
  6. Return ? EvaluateCall(newValue,newReference,Arguments,tailCall).
OptionalChain:OptionalChain[Expression]
  1. LetoptionalChain beOptionalChain.
  2. LetnewReference be ? ChainEvaluation ofoptionalChain with argumentsbaseValue andbaseReference.
  3. LetnewValue be ? GetValue(newReference).
  4. Letstrict beIsStrict(thisOptionalChain).
  5. Return ? EvaluatePropertyAccessWithExpressionKey(newValue,Expression,strict).
OptionalChain:OptionalChain.IdentifierName
  1. LetoptionalChain beOptionalChain.
  2. LetnewReference be ? ChainEvaluation ofoptionalChain with argumentsbaseValue andbaseReference.
  3. LetnewValue be ? GetValue(newReference).
  4. Letstrict beIsStrict(thisOptionalChain).
  5. ReturnEvaluatePropertyAccessWithIdentifierKey(newValue,IdentifierName,strict).
OptionalChain:OptionalChain.PrivateIdentifier
  1. LetoptionalChain beOptionalChain.
  2. LetnewReference be ? ChainEvaluation ofoptionalChain with argumentsbaseValue andbaseReference.
  3. LetnewValue be ? GetValue(newReference).
  4. LetfieldNameString be theStringValue ofPrivateIdentifier.
  5. ReturnMakePrivateReference(newValue,fieldNameString).

13.3.10 Import Calls

13.3.10.1 Runtime Semantics: Evaluation

ImportCall:import(AssignmentExpression,opt)
  1. Return ? EvaluateImportCall(AssignmentExpression).
ImportCall:import(AssignmentExpression,AssignmentExpression,opt)
  1. Return ? EvaluateImportCall(the firstAssignmentExpression, the secondAssignmentExpression).

13.3.10.2 EvaluateImportCall (specifierExpression [ ,optionsExpression ] )

The abstract operation EvaluateImportCall takes argumentspecifierExpression (aParse Node) and optional argumentoptionsExpression (aParse Node) and returns either anormal completion containing a Promise or anabrupt completion. It performs the following steps when called:

  1. Letreferrer beGetActiveScriptOrModule().
  2. Ifreferrer isnull, setreferrer tothe current Realm Record.
  3. LetspecifierRef be ? Evaluation ofspecifierExpression.
  4. Letspecifier be ? GetValue(specifierRef).
  5. IfoptionsExpression is present, then
    1. LetoptionsRef be ? Evaluation ofoptionsExpression.
    2. Letoptions be ? GetValue(optionsRef).
  6. Else,
    1. Letoptions beundefined.
  7. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  8. LetspecifierString beCompletion(ToString(specifier)).
  9. IfAbruptRejectPromise(specifierString,promiseCapability).
  10. Letattributes be a new emptyList.
  11. Ifoptions is notundefined, then
    1. Ifoptionsis not an Object, then
      1. Perform ! Call(promiseCapability.[[Reject]],undefined, « a newly createdTypeError object »).
      2. ReturnpromiseCapability.[[Promise]].
    2. LetattributesObj beCompletion(Get(options,"with")).
    3. IfAbruptRejectPromise(attributesObj,promiseCapability).
    4. IfattributesObj is notundefined, then
      1. IfattributesObjis not an Object, then
        1. Perform ! Call(promiseCapability.[[Reject]],undefined, « a newly createdTypeError object »).
        2. ReturnpromiseCapability.[[Promise]].
      2. Letentries beCompletion(EnumerableOwnProperties(attributesObj,key+value)).
      3. IfAbruptRejectPromise(entries,promiseCapability).
      4. For each elemententry ofentries, do
        1. Letkey be ! Get(entry,"0").
        2. Letvalue be ! Get(entry,"1").
        3. Ifkeyis a String, then
          1. Ifvalueis not a String, then
            1. Perform ! Call(promiseCapability.[[Reject]],undefined, « a newly createdTypeError object »).
            2. ReturnpromiseCapability.[[Promise]].
          2. Append theImportAttribute Record {[[Key]]:key,[[Value]]:value } toattributes.
    5. IfAllImportAttributesSupported(attributes) isfalse, then
      1. Perform ! Call(promiseCapability.[[Reject]],undefined, « a newly createdTypeError object »).
      2. ReturnpromiseCapability.[[Promise]].
    6. Sortattributes according to the lexicographic order of their[[Key]] field, treating the value of each such field as a sequence of UTF-16 code unit values. NOTE: This sorting is observable only in thathosts are prohibited from changing behaviour based on the order in which attributes are enumerated.
  12. LetmoduleRequest be a newModuleRequest Record {[[Specifier]]:specifierString,[[Attributes]]:attributes }.
  13. PerformHostLoadImportedModule(referrer,moduleRequest,empty,promiseCapability).
  14. ReturnpromiseCapability.[[Promise]].

13.3.10.3 ContinueDynamicImport (promiseCapability,moduleCompletion )

The abstract operation ContinueDynamicImport takes argumentspromiseCapability (aPromiseCapability Record) andmoduleCompletion (either anormal completion containing aModule Record or athrow completion) and returnsunused. It completes the process of a dynamic import originally started by animport() call, resolving or rejecting the promise returned by that call as appropriate. It performs the following steps when called:

  1. IfmoduleCompletion is anabrupt completion, then
    1. Perform ! Call(promiseCapability.[[Reject]],undefined, «moduleCompletion.[[Value]] »).
    2. Returnunused.
  2. Letmodule bemoduleCompletion.[[Value]].
  3. LetloadPromise bemodule.LoadRequestedModules().
  4. LetrejectedClosure be a newAbstract Closure with parameters (reason) that capturespromiseCapability and performs the following steps when called:
    1. Perform ! Call(promiseCapability.[[Reject]],undefined, «reason »).
    2. ReturnNormalCompletion(undefined).
  5. LetonRejected beCreateBuiltinFunction(rejectedClosure, 1,"", « »).
  6. LetlinkAndEvaluateClosure be a newAbstract Closure with no parameters that capturesmodule,promiseCapability, andonRejected and performs the following steps when called:
    1. Letlink beCompletion(module.Link()).
    2. Iflink is anabrupt completion, then
      1. Perform ! Call(promiseCapability.[[Reject]],undefined, «link.[[Value]] »).
      2. ReturnNormalCompletion(undefined).
    3. LetevaluatePromise bemodule.Evaluate().
    4. LetfulfilledClosure be a newAbstract Closure with no parameters that capturesmodule andpromiseCapability and performs the following steps when called:
      1. Letnamespace beGetModuleNamespace(module).
      2. Perform ! Call(promiseCapability.[[Resolve]],undefined, «namespace »).
      3. ReturnNormalCompletion(undefined).
    5. LetonFulfilled beCreateBuiltinFunction(fulfilledClosure, 0,"", « »).
    6. PerformPerformPromiseThen(evaluatePromise,onFulfilled,onRejected).
    7. Returnunused.
  7. LetlinkAndEvaluate beCreateBuiltinFunction(linkAndEvaluateClosure, 0,"", « »).
  8. PerformPerformPromiseThen(loadPromise,linkAndEvaluate,onRejected).
  9. Returnunused.

13.3.11 Tagged Templates

Note

A tagged template is a function call where the arguments of the call are derived from aTemplateLiteral (13.2.8). The actual arguments include a template object (13.2.8.4) and the values produced by evaluating the expressions embedded within theTemplateLiteral.

13.3.11.1 Runtime Semantics: Evaluation

MemberExpression:MemberExpressionTemplateLiteral
  1. LettagRef be ? Evaluation ofMemberExpression.
  2. LettagFunc be ? GetValue(tagRef).
  3. LetthisCall be thisMemberExpression.
  4. LettailCall beIsInTailPosition(thisCall).
  5. Return ? EvaluateCall(tagFunc,tagRef,TemplateLiteral,tailCall).
CallExpression:CallExpressionTemplateLiteral
  1. LettagRef be ? Evaluation ofCallExpression.
  2. LettagFunc be ? GetValue(tagRef).
  3. LetthisCall be thisCallExpression.
  4. LettailCall beIsInTailPosition(thisCall).
  5. Return ? EvaluateCall(tagFunc,tagRef,TemplateLiteral,tailCall).

13.3.12 Meta Properties

13.3.12.1 Runtime Semantics: Evaluation

NewTarget:new.target
  1. ReturnGetNewTarget().
ImportMeta:import.meta
  1. Letmodule beGetActiveScriptOrModule().
  2. Assert:module is aSource Text Module Record.
  3. LetimportMeta bemodule.[[ImportMeta]].
  4. IfimportMeta isempty, then
    1. SetimportMeta toOrdinaryObjectCreate(null).
    2. LetimportMetaValues beHostGetImportMetaProperties(module).
    3. For eachRecord {[[Key]],[[Value]] }p ofimportMetaValues, do
      1. Perform ! CreateDataPropertyOrThrow(importMeta,p.[[Key]],p.[[Value]]).
    4. PerformHostFinalizeImportMeta(importMeta,module).
    5. Setmodule.[[ImportMeta]] toimportMeta.
    6. ReturnimportMeta.
  5. Else,
    1. Assert:importMetais an Object.
    2. ReturnimportMeta.

13.3.12.1.1 HostGetImportMetaProperties (moduleRecord )

Thehost-defined abstract operation HostGetImportMetaProperties takes argumentmoduleRecord (aModule Record) and returns aList ofRecords with fields[[Key]] (aproperty key) and[[Value]] (anECMAScript language value). It allowshosts to provideproperty keys and values for the object returned fromimport.meta.

The default implementation of HostGetImportMetaProperties is to return a new emptyList.

13.3.12.1.2 HostFinalizeImportMeta (importMeta,moduleRecord )

Thehost-defined abstract operation HostFinalizeImportMeta takes argumentsimportMeta (an Object) andmoduleRecord (aModule Record) and returnsunused. It allowshosts to perform any extraordinary operations to prepare the object returned fromimport.meta.

Mosthosts will be able to simply defineHostGetImportMetaProperties, and leave HostFinalizeImportMeta with its default behaviour. However, HostFinalizeImportMeta provides an "escape hatch" forhosts which need to directly manipulate the object before it is exposed to ECMAScript code.

The default implementation of HostFinalizeImportMeta is to returnunused.

13.4 Update Expressions

Syntax

UpdateExpression[Yield, Await]:LeftHandSideExpression[?Yield, ?Await]LeftHandSideExpression[?Yield, ?Await][noLineTerminator here]++LeftHandSideExpression[?Yield, ?Await][noLineTerminator here]--++UnaryExpression[?Yield, ?Await]--UnaryExpression[?Yield, ?Await]

13.4.1 Static Semantics: Early Errors

UpdateExpression:LeftHandSideExpression++LeftHandSideExpression--UpdateExpression:++UnaryExpression--UnaryExpression

13.4.2 Postfix Increment Operator

13.4.2.1 Runtime Semantics: Evaluation

UpdateExpression:LeftHandSideExpression++
  1. Letlhs be ? Evaluation ofLeftHandSideExpression.
  2. If theAssignmentTargetType ofLeftHandSideExpression isweb-compat, throw aReferenceError exception.
  3. LetoldValue be ? ToNumeric(?GetValue(lhs)).
  4. IfoldValueis a Number, then
    1. LetnewValue beNumber::add(oldValue,1𝔽).
  5. Else,
    1. Assert:oldValueis a BigInt.
    2. LetnewValue beBigInt::add(oldValue,1).
  6. Perform ? PutValue(lhs,newValue).
  7. ReturnoldValue.

13.4.3 Postfix Decrement Operator

13.4.3.1 Runtime Semantics: Evaluation

UpdateExpression:LeftHandSideExpression--
  1. Letlhs be ? Evaluation ofLeftHandSideExpression.
  2. If theAssignmentTargetType ofLeftHandSideExpression isweb-compat, throw aReferenceError exception.
  3. LetoldValue be ? ToNumeric(?GetValue(lhs)).
  4. IfoldValueis a Number, then
    1. LetnewValue beNumber::subtract(oldValue,1𝔽).
  5. Else,
    1. Assert:oldValueis a BigInt.
    2. LetnewValue beBigInt::subtract(oldValue,1).
  6. Perform ? PutValue(lhs,newValue).
  7. ReturnoldValue.

13.4.4 Prefix Increment Operator

13.4.4.1 Runtime Semantics: Evaluation

UpdateExpression:++UnaryExpression
  1. Letexpr be ? Evaluation ofUnaryExpression.
  2. If theAssignmentTargetType ofUnaryExpression isweb-compat, throw aReferenceError exception.
  3. LetoldValue be ? ToNumeric(?GetValue(expr)).
  4. IfoldValueis a Number, then
    1. LetnewValue beNumber::add(oldValue,1𝔽).
  5. Else,
    1. Assert:oldValueis a BigInt.
    2. LetnewValue beBigInt::add(oldValue,1).
  6. Perform ? PutValue(expr,newValue).
  7. ReturnnewValue.

13.4.5 Prefix Decrement Operator

13.4.5.1 Runtime Semantics: Evaluation

UpdateExpression:--UnaryExpression
  1. Letexpr be ? Evaluation ofUnaryExpression.
  2. If theAssignmentTargetType ofUnaryExpression isweb-compat, throw aReferenceError exception.
  3. LetoldValue be ? ToNumeric(?GetValue(expr)).
  4. IfoldValueis a Number, then
    1. LetnewValue beNumber::subtract(oldValue,1𝔽).
  5. Else,
    1. Assert:oldValueis a BigInt.
    2. LetnewValue beBigInt::subtract(oldValue,1).
  6. Perform ? PutValue(expr,newValue).
  7. ReturnnewValue.

13.5 Unary Operators

Syntax

UnaryExpression[Yield, Await]:UpdateExpression[?Yield, ?Await]deleteUnaryExpression[?Yield, ?Await]voidUnaryExpression[?Yield, ?Await]typeofUnaryExpression[?Yield, ?Await]+UnaryExpression[?Yield, ?Await]-UnaryExpression[?Yield, ?Await]~UnaryExpression[?Yield, ?Await]!UnaryExpression[?Yield, ?Await][+Await]AwaitExpression[?Yield]

13.5.1 Thedelete Operator

13.5.1.1 Static Semantics: Early Errors

UnaryExpression:deleteUnaryExpressionNote

The last rule means that expressions such asdelete (((foo))) produceearly errors because of recursive application of the first rule.

13.5.1.2 Runtime Semantics: Evaluation

UnaryExpression:deleteUnaryExpression
  1. Letref be ? Evaluation ofUnaryExpression.
  2. Ifref is not aReference Record, returntrue.
  3. IfIsUnresolvableReference(ref) istrue, then
    1. Assert:ref.[[Strict]] isfalse.
    2. Returntrue.
  4. IfIsPropertyReference(ref) istrue, then
    1. Assert:IsPrivateReference(ref) isfalse.
    2. IfIsSuperReference(ref) istrue, throw aReferenceError exception.
    3. LetbaseObj be ? ToObject(ref.[[Base]]).
    4. Ifref.[[ReferencedName]] is not aproperty key, then
      1. Setref.[[ReferencedName]] to ? ToPropertyKey(ref.[[ReferencedName]]).
    5. LetdeleteStatus be ? baseObj.[[Delete]](ref.[[ReferencedName]]).
    6. IfdeleteStatus isfalse andref.[[Strict]] istrue, throw aTypeError exception.
    7. ReturndeleteStatus.
  5. Else,
    1. Letbase beref.[[Base]].
    2. Assert:base is anEnvironment Record.
    3. Return ? base.DeleteBinding(ref.[[ReferencedName]]).
Note 1

When adelete operator occurs withinstrict mode code, aSyntaxError exception is thrown if itsUnaryExpression is a direct reference to a variable, function argument, or function name. In addition, if adelete operator occurs withinstrict mode code and the property to be deleted has the attribute {[[Configurable]]:false } (or otherwise cannot be deleted), aTypeError exception is thrown.

Note 2

The object that may be created in step4.c is not accessible outside of the above abstract operation and theordinary object[[Delete]] internal method. An implementation might choose to avoid the actual creation of that object.

13.5.2 Thevoid Operator

13.5.2.1 Runtime Semantics: Evaluation

UnaryExpression:voidUnaryExpression
  1. Letexpr be ? Evaluation ofUnaryExpression.
  2. Perform ? GetValue(expr).
  3. Returnundefined.
Note

GetValue must be called even though its value is not used because it may have observable side-effects.

13.5.3 Thetypeof Operator

13.5.3.1 Runtime Semantics: Evaluation

UnaryExpression:typeofUnaryExpression
  1. Letval be ? Evaluation ofUnaryExpression.
  2. Ifval is aReference Record, then
    1. IfIsUnresolvableReference(val) istrue, return"undefined".
  3. Setval to ? GetValue(val).
  4. Ifval isundefined, return"undefined".
  5. Ifval isnull, return"object".
  6. Ifvalis a String, return"string".
  7. Ifvalis a Symbol, return"symbol".
  8. Ifvalis a Boolean, return"boolean".
  9. Ifvalis a Number, return"number".
  10. Ifvalis a BigInt, return"bigint".
  11. Assert:valis an Object.
  12. NOTE: This step is replaced in sectionB.3.6.3.
  13. Ifval has a[[Call]] internal method, return"function".
  14. Return"object".

13.5.4 Unary+ Operator

Note

The unary + operator converts its operand toNumber type.

13.5.4.1 Runtime Semantics: Evaluation

UnaryExpression:+UnaryExpression
  1. Letexpr be ? Evaluation ofUnaryExpression.
  2. Return ? ToNumber(?GetValue(expr)).

13.5.5 Unary- Operator

Note

The unary- operator converts its operand to a numeric value and then negates it. Negating+0𝔽 produces-0𝔽, and negating-0𝔽 produces+0𝔽.

13.5.5.1 Runtime Semantics: Evaluation

UnaryExpression:-UnaryExpression
  1. Letexpr be ? Evaluation ofUnaryExpression.
  2. LetoldValue be ? ToNumeric(?GetValue(expr)).
  3. IfoldValueis a Number, then
    1. ReturnNumber::unaryMinus(oldValue).
  4. Else,
    1. Assert:oldValueis a BigInt.
    2. ReturnBigInt::unaryMinus(oldValue).

13.5.6 Bitwise NOT Operator (~ )

13.5.6.1 Runtime Semantics: Evaluation

UnaryExpression:~UnaryExpression
  1. Letexpr be ? Evaluation ofUnaryExpression.
  2. LetoldValue be ? ToNumeric(?GetValue(expr)).
  3. IfoldValueis a Number, then
    1. ReturnNumber::bitwiseNOT(oldValue).
  4. Else,
    1. Assert:oldValueis a BigInt.
    2. ReturnBigInt::bitwiseNOT(oldValue).

13.5.7 Logical NOT Operator (! )

13.5.7.1 Runtime Semantics: Evaluation

UnaryExpression:!UnaryExpression
  1. Letexpr be ? Evaluation ofUnaryExpression.
  2. LetoldValue beToBoolean(?GetValue(expr)).
  3. IfoldValue istrue, returnfalse.
  4. Returntrue.

13.6 Exponentiation Operator

Syntax

ExponentiationExpression[Yield, Await]:UnaryExpression[?Yield, ?Await]UpdateExpression[?Yield, ?Await]**ExponentiationExpression[?Yield, ?Await]

13.6.1 Runtime Semantics: Evaluation

ExponentiationExpression:UpdateExpression**ExponentiationExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(UpdateExpression,**,ExponentiationExpression).

13.7 Multiplicative Operators

Syntax

MultiplicativeExpression[Yield, Await]:ExponentiationExpression[?Yield, ?Await]MultiplicativeExpression[?Yield, ?Await]MultiplicativeOperatorExponentiationExpression[?Yield, ?Await]MultiplicativeOperator:one of*/%Note
  • The* operator performs multiplication, producing the product of its operands.
  • The/ operator performs division, producing the quotient of its operands.
  • The% operator yields the remainder of its operands from an implied division.

13.7.1 Runtime Semantics: Evaluation

MultiplicativeExpression:MultiplicativeExpressionMultiplicativeOperatorExponentiationExpression
  1. LetopText be thesource text matched byMultiplicativeOperator.
  2. Return ? EvaluateStringOrNumericBinaryExpression(MultiplicativeExpression,opText,ExponentiationExpression).

13.8 Additive Operators

Syntax

AdditiveExpression[Yield, Await]:MultiplicativeExpression[?Yield, ?Await]AdditiveExpression[?Yield, ?Await]+MultiplicativeExpression[?Yield, ?Await]AdditiveExpression[?Yield, ?Await]-MultiplicativeExpression[?Yield, ?Await]

13.8.1 The Addition Operator (+ )

Note

The addition operator either performs string concatenation or numeric addition.

13.8.1.1 Runtime Semantics: Evaluation

AdditiveExpression:AdditiveExpression+MultiplicativeExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(AdditiveExpression,+,MultiplicativeExpression).

13.8.2 The Subtraction Operator (- )

Note

The- operator performs subtraction, producing the difference of its operands.

13.8.2.1 Runtime Semantics: Evaluation

AdditiveExpression:AdditiveExpression-MultiplicativeExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(AdditiveExpression,-,MultiplicativeExpression).

13.9 Bitwise Shift Operators

Syntax

ShiftExpression[Yield, Await]:AdditiveExpression[?Yield, ?Await]ShiftExpression[?Yield, ?Await]<<AdditiveExpression[?Yield, ?Await]ShiftExpression[?Yield, ?Await]>>AdditiveExpression[?Yield, ?Await]ShiftExpression[?Yield, ?Await]>>>AdditiveExpression[?Yield, ?Await]

13.9.1 The Left Shift Operator (<< )

Note

Performs a bitwise left shift operation on the left operand by the amount specified by the right operand.

13.9.1.1 Runtime Semantics: Evaluation

ShiftExpression:ShiftExpression<<AdditiveExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(ShiftExpression,<<,AdditiveExpression).

13.9.2 The Signed Right Shift Operator (>> )

Note

Performs a sign-filling bitwise right shift operation on the left operand by the amount specified by the right operand.

13.9.2.1 Runtime Semantics: Evaluation

ShiftExpression:ShiftExpression>>AdditiveExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(ShiftExpression,>>,AdditiveExpression).

13.9.3 The Unsigned Right Shift Operator (>>> )

Note

Performs a zero-filling bitwise right shift operation on the left operand by the amount specified by the right operand.

13.9.3.1 Runtime Semantics: Evaluation

ShiftExpression:ShiftExpression>>>AdditiveExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(ShiftExpression,>>>,AdditiveExpression).

13.10 Relational Operators

Note 1

The result of evaluating a relational operator is always of type Boolean, reflecting whether the relationship named by the operator holds between its two operands.

Syntax

RelationalExpression[In, Yield, Await]:ShiftExpression[?Yield, ?Await]RelationalExpression[?In, ?Yield, ?Await]<ShiftExpression[?Yield, ?Await]RelationalExpression[?In, ?Yield, ?Await]>ShiftExpression[?Yield, ?Await]RelationalExpression[?In, ?Yield, ?Await]<=ShiftExpression[?Yield, ?Await]RelationalExpression[?In, ?Yield, ?Await]>=ShiftExpression[?Yield, ?Await]RelationalExpression[?In, ?Yield, ?Await]instanceofShiftExpression[?Yield, ?Await][+In]RelationalExpression[+In, ?Yield, ?Await]inShiftExpression[?Yield, ?Await][+In]PrivateIdentifierinShiftExpression[?Yield, ?Await]Note 2

The[In] grammar parameter is needed to avoid confusing thein operator in a relational expression with thein operator in afor statement.

13.10.1 Runtime Semantics: Evaluation

RelationalExpression:RelationalExpression<ShiftExpression
  1. LetlRef be ? Evaluation ofRelationalExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofShiftExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Letr be ? IsLessThan(lVal,rVal,true).
  6. Ifr isundefined, returnfalse. Otherwise, returnr.
RelationalExpression:RelationalExpression>ShiftExpression
  1. LetlRef be ? Evaluation ofRelationalExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofShiftExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Letr be ? IsLessThan(rVal,lVal,false).
  6. Ifr isundefined, returnfalse. Otherwise, returnr.
RelationalExpression:RelationalExpression<=ShiftExpression
  1. LetlRef be ? Evaluation ofRelationalExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofShiftExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Letr be ? IsLessThan(rVal,lVal,false).
  6. Ifr is eithertrue orundefined, returnfalse. Otherwise, returntrue.
RelationalExpression:RelationalExpression>=ShiftExpression
  1. LetlRef be ? Evaluation ofRelationalExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofShiftExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Letr be ? IsLessThan(lVal,rVal,true).
  6. Ifr is eithertrue orundefined, returnfalse. Otherwise, returntrue.
RelationalExpression:RelationalExpressioninstanceofShiftExpression
  1. LetlRef be ? Evaluation ofRelationalExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofShiftExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Return ? InstanceofOperator(lVal,rVal).
RelationalExpression:RelationalExpressioninShiftExpression
  1. LetlRef be ? Evaluation ofRelationalExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofShiftExpression.
  4. LetrVal be ? GetValue(rRef).
  5. IfrValis not an Object, throw aTypeError exception.
  6. Return ? HasProperty(rVal, ? ToPropertyKey(lVal)).
RelationalExpression:PrivateIdentifierinShiftExpression
  1. LetprivateIdentifier be theStringValue ofPrivateIdentifier.
  2. LetrRef be ? Evaluation ofShiftExpression.
  3. LetrVal be ? GetValue(rRef).
  4. IfrValis not an Object, throw aTypeError exception.
  5. LetprivateEnv be therunning execution context's PrivateEnvironment.
  6. Assert:privateEnv is notnull.
  7. LetprivateName beResolvePrivateIdentifier(privateEnv,privateIdentifier).
  8. IfPrivateElementFind(rVal,privateName) is notempty, returntrue.
  9. Returnfalse.

13.10.2 InstanceofOperator (V,target )

The abstract operation InstanceofOperator takes argumentsV (anECMAScript language value) andtarget (anECMAScript language value) and returns either anormal completion containing a Boolean or athrow completion. It implements the generic algorithm for determining ifV is an instance oftarget either by consultingtarget's%Symbol.hasInstance% method or, if absent, determining whether the value oftarget's"prototype" property is present inV's prototype chain. It performs the following steps when called:

  1. Iftargetis not an Object, throw aTypeError exception.
  2. LetinstOfHandler be ? GetMethod(target,%Symbol.hasInstance%).
  3. IfinstOfHandler is notundefined, then
    1. ReturnToBoolean(?Call(instOfHandler,target, «V »)).
  4. IfIsCallable(target) isfalse, throw aTypeError exception.
  5. Return ? OrdinaryHasInstance(target,V).
Note

Steps4 and5 provide compatibility with previous editions of ECMAScript that did not use a%Symbol.hasInstance% method to define theinstanceof operator semantics. If an object does not define or inherit%Symbol.hasInstance% it uses the defaultinstanceof semantics.

13.11 Equality Operators

Note

The result of evaluating an equality operator is always of type Boolean, reflecting whether the relationship named by the operator holds between its two operands.

Syntax

EqualityExpression[In, Yield, Await]:RelationalExpression[?In, ?Yield, ?Await]EqualityExpression[?In, ?Yield, ?Await]==RelationalExpression[?In, ?Yield, ?Await]EqualityExpression[?In, ?Yield, ?Await]!=RelationalExpression[?In, ?Yield, ?Await]EqualityExpression[?In, ?Yield, ?Await]===RelationalExpression[?In, ?Yield, ?Await]EqualityExpression[?In, ?Yield, ?Await]!==RelationalExpression[?In, ?Yield, ?Await]

13.11.1 Runtime Semantics: Evaluation

EqualityExpression:EqualityExpression==RelationalExpression
  1. LetlRef be ? Evaluation ofEqualityExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofRelationalExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Return ? IsLooselyEqual(rVal,lVal).
EqualityExpression:EqualityExpression!=RelationalExpression
  1. LetlRef be ? Evaluation ofEqualityExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofRelationalExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Letr be ? IsLooselyEqual(rVal,lVal).
  6. Ifr istrue, returnfalse. Otherwise, returntrue.
EqualityExpression:EqualityExpression===RelationalExpression
  1. LetlRef be ? Evaluation ofEqualityExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofRelationalExpression.
  4. LetrVal be ? GetValue(rRef).
  5. ReturnIsStrictlyEqual(rVal,lVal).
EqualityExpression:EqualityExpression!==RelationalExpression
  1. LetlRef be ? Evaluation ofEqualityExpression.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofRelationalExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Letr beIsStrictlyEqual(rVal,lVal).
  6. Ifr istrue, returnfalse. Otherwise, returntrue.
Note 1

Given the above definition of equality:

  • String comparison can be forced by:`${a}` == `${b}`.
  • Numeric comparison can be forced by:+a == +b.
  • Boolean comparison can be forced by:!a == !b.
Note 2

The equality operators maintain the following invariants:

  • A != B is equivalent to!(A == B).
  • A == B is equivalent toB == A, except in the order of evaluation ofA andB.
Note 3

The equality operator is not always transitive. For example, there might be two distinct String objects, each representing the same String value; each String object would be considered equal to the String value by the== operator, but the two String objects would not be equal to each other. For example:

  • new String("a") == "a" and"a" == new String("a") are bothtrue.
  • new String("a") == new String("a") isfalse.
Note 4

Comparison of Strings uses a simple equality test on sequences of code unit values. There is no attempt to use the more complex, semantically oriented definitions of character or string equality and collating order defined in the Unicode specification. Therefore Strings values that are canonically equal according to the Unicode Standard could test as unequal. In effect this algorithm assumes that both Strings are already in normalized form.

13.12 Binary Bitwise Operators

Syntax

BitwiseANDExpression[In, Yield, Await]:EqualityExpression[?In, ?Yield, ?Await]BitwiseANDExpression[?In, ?Yield, ?Await]&EqualityExpression[?In, ?Yield, ?Await]BitwiseXORExpression[In, Yield, Await]:BitwiseANDExpression[?In, ?Yield, ?Await]BitwiseXORExpression[?In, ?Yield, ?Await]^BitwiseANDExpression[?In, ?Yield, ?Await]BitwiseORExpression[In, Yield, Await]:BitwiseXORExpression[?In, ?Yield, ?Await]BitwiseORExpression[?In, ?Yield, ?Await]|BitwiseXORExpression[?In, ?Yield, ?Await]

13.12.1 Runtime Semantics: Evaluation

BitwiseANDExpression:BitwiseANDExpression&EqualityExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(BitwiseANDExpression,&,EqualityExpression).
BitwiseXORExpression:BitwiseXORExpression^BitwiseANDExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(BitwiseXORExpression,^,BitwiseANDExpression).
BitwiseORExpression:BitwiseORExpression|BitwiseXORExpression
  1. Return ? EvaluateStringOrNumericBinaryExpression(BitwiseORExpression,|,BitwiseXORExpression).

13.13 Binary Logical Operators

Syntax

LogicalANDExpression[In, Yield, Await]:BitwiseORExpression[?In, ?Yield, ?Await]LogicalANDExpression[?In, ?Yield, ?Await]&&BitwiseORExpression[?In, ?Yield, ?Await]LogicalORExpression[In, Yield, Await]:LogicalANDExpression[?In, ?Yield, ?Await]LogicalORExpression[?In, ?Yield, ?Await]||LogicalANDExpression[?In, ?Yield, ?Await]CoalesceExpression[In, Yield, Await]:CoalesceExpressionHead[?In, ?Yield, ?Await]??BitwiseORExpression[?In, ?Yield, ?Await]CoalesceExpressionHead[In, Yield, Await]:CoalesceExpression[?In, ?Yield, ?Await]BitwiseORExpression[?In, ?Yield, ?Await]ShortCircuitExpression[In, Yield, Await]:LogicalORExpression[?In, ?Yield, ?Await]CoalesceExpression[?In, ?Yield, ?Await]Note

The value produced by a&& or|| operator is not necessarily of type Boolean. The value produced will always be the value of one of the two operand expressions.

13.13.1 Runtime Semantics: Evaluation

LogicalANDExpression:LogicalANDExpression&&BitwiseORExpression
  1. LetlRef be ? Evaluation ofLogicalANDExpression.
  2. LetlVal be ? GetValue(lRef).
  3. IfToBoolean(lVal) isfalse, returnlVal.
  4. LetrRef be ? Evaluation ofBitwiseORExpression.
  5. Return ? GetValue(rRef).
LogicalORExpression:LogicalORExpression||LogicalANDExpression
  1. LetlRef be ? Evaluation ofLogicalORExpression.
  2. LetlVal be ? GetValue(lRef).
  3. IfToBoolean(lVal) istrue, returnlVal.
  4. LetrRef be ? Evaluation ofLogicalANDExpression.
  5. Return ? GetValue(rRef).
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
  1. LetlRef be ? Evaluation ofCoalesceExpressionHead.
  2. LetlVal be ? GetValue(lRef).
  3. IflVal is eitherundefined ornull, then
    1. LetrRef be ? Evaluation ofBitwiseORExpression.
    2. Return ? GetValue(rRef).
  4. Else,
    1. ReturnlVal.

13.14 Conditional Operator (? : )

Syntax

ConditionalExpression[In, Yield, Await]:ShortCircuitExpression[?In, ?Yield, ?Await]ShortCircuitExpression[?In, ?Yield, ?Await]?AssignmentExpression[+In, ?Yield, ?Await]:AssignmentExpression[?In, ?Yield, ?Await]Note

The grammar for aConditionalExpression in ECMAScript is slightly different from that in C and Java, which each allow the second subexpression to be anExpression but restrict the third expression to be aConditionalExpression. The motivation for this difference in ECMAScript is to allow an assignment expression to be governed by either arm of a conditional and to eliminate the confusing and fairly useless case of a comma expression as the centre expression.

13.14.1 Runtime Semantics: Evaluation

ConditionalExpression:ShortCircuitExpression?AssignmentExpression:AssignmentExpression
  1. LetlRef be ? Evaluation ofShortCircuitExpression.
  2. LetlVal beToBoolean(?GetValue(lRef)).
  3. IflVal istrue, then
    1. LettrueRef be ? Evaluation of the firstAssignmentExpression.
    2. Return ? GetValue(trueRef).
  4. Else,
    1. LetfalseRef be ? Evaluation of the secondAssignmentExpression.
    2. Return ? GetValue(falseRef).

13.15 Assignment Operators

Syntax

AssignmentExpression[In, Yield, Await]:ConditionalExpression[?In, ?Yield, ?Await][+Yield]YieldExpression[?In, ?Await]ArrowFunction[?In, ?Yield, ?Await]AsyncArrowFunction[?In, ?Yield, ?Await]LeftHandSideExpression[?Yield, ?Await]=AssignmentExpression[?In, ?Yield, ?Await]LeftHandSideExpression[?Yield, ?Await]AssignmentOperatorAssignmentExpression[?In, ?Yield, ?Await]LeftHandSideExpression[?Yield, ?Await]&&=AssignmentExpression[?In, ?Yield, ?Await]LeftHandSideExpression[?Yield, ?Await]||=AssignmentExpression[?In, ?Yield, ?Await]LeftHandSideExpression[?Yield, ?Await]??=AssignmentExpression[?In, ?Yield, ?Await]AssignmentOperator:one of*=/=%=+=-=<<=>>=>>>=&=^=|=**=

13.15.1 Static Semantics: Early Errors

AssignmentExpression:LeftHandSideExpression=AssignmentExpressionAssignmentExpression:LeftHandSideExpressionAssignmentOperatorAssignmentExpressionAssignmentExpression:LeftHandSideExpression&&=AssignmentExpressionLeftHandSideExpression||=AssignmentExpressionLeftHandSideExpression??=AssignmentExpression

13.15.2 Runtime Semantics: Evaluation

AssignmentExpression:LeftHandSideExpression=AssignmentExpression
  1. IfLeftHandSideExpression is neither anObjectLiteral nor anArrayLiteral, then
    1. LetlRef be ? Evaluation ofLeftHandSideExpression.
    2. If theAssignmentTargetType ofLeftHandSideExpression isweb-compat, throw aReferenceError exception.
    3. IfIsAnonymousFunctionDefinition(AssignmentExpression) istrue andIsIdentifierRef ofLeftHandSideExpression istrue, then
      1. Letlhs be theStringValue ofLeftHandSideExpression.
      2. LetrVal be ? NamedEvaluation ofAssignmentExpression with argumentlhs.
    4. Else,
      1. LetrRef be ? Evaluation ofAssignmentExpression.
      2. LetrVal be ? GetValue(rRef).
    5. Perform ? PutValue(lRef,rVal).
    6. ReturnrVal.
  2. LetassignmentPattern be theAssignmentPattern that iscovered byLeftHandSideExpression.
  3. LetrRef be ? Evaluation ofAssignmentExpression.
  4. LetrVal be ? GetValue(rRef).
  5. Perform ? DestructuringAssignmentEvaluation ofassignmentPattern with argumentrVal.
  6. ReturnrVal.
AssignmentExpression:LeftHandSideExpressionAssignmentOperatorAssignmentExpression
  1. LetlRef be ? Evaluation ofLeftHandSideExpression.
  2. If theAssignmentTargetType ofLeftHandSideExpression isweb-compat, throw aReferenceError exception.
  3. LetlVal be ? GetValue(lRef).
  4. LetrRef be ? Evaluation ofAssignmentExpression.
  5. LetrVal be ? GetValue(rRef).
  6. LetassignmentOpText be thesource text matched byAssignmentOperator.
  7. LetopText be the sequence of Unicode code points associated withassignmentOpText in the following table:
    assignmentOpTextopText
    **=**
    *=*
    /=/
    %=%
    +=+
    -=-
    <<=<<
    >>=>>
    >>>=>>>
    &=&
    ^=^
    |=|
  8. Letr be ? ApplyStringOrNumericBinaryOperator(lVal,opText,rVal).
  9. Perform ? PutValue(lRef,r).
  10. Returnr.
AssignmentExpression:LeftHandSideExpression&&=AssignmentExpression
  1. LetlRef be ? Evaluation ofLeftHandSideExpression.
  2. LetlVal be ? GetValue(lRef).
  3. IfToBoolean(lVal) isfalse, returnlVal.
  4. IfIsAnonymousFunctionDefinition(AssignmentExpression) istrue andIsIdentifierRef ofLeftHandSideExpression istrue, then
    1. Letlhs be theStringValue ofLeftHandSideExpression.
    2. LetrVal be ? NamedEvaluation ofAssignmentExpression with argumentlhs.
  5. Else,
    1. LetrRef be ? Evaluation ofAssignmentExpression.
    2. LetrVal be ? GetValue(rRef).
  6. Perform ? PutValue(lRef,rVal).
  7. ReturnrVal.
AssignmentExpression:LeftHandSideExpression||=AssignmentExpression
  1. LetlRef be ? Evaluation ofLeftHandSideExpression.
  2. LetlVal be ? GetValue(lRef).
  3. IfToBoolean(lVal) istrue, returnlVal.
  4. IfIsAnonymousFunctionDefinition(AssignmentExpression) istrue andIsIdentifierRef ofLeftHandSideExpression istrue, then
    1. Letlhs be theStringValue ofLeftHandSideExpression.
    2. LetrVal be ? NamedEvaluation ofAssignmentExpression with argumentlhs.
  5. Else,
    1. LetrRef be ? Evaluation ofAssignmentExpression.
    2. LetrVal be ? GetValue(rRef).
  6. Perform ? PutValue(lRef,rVal).
  7. ReturnrVal.
AssignmentExpression:LeftHandSideExpression??=AssignmentExpression
  1. LetlRef be ? Evaluation ofLeftHandSideExpression.
  2. LetlVal be ? GetValue(lRef).
  3. IflVal is neitherundefined nornull, returnlVal.
  4. IfIsAnonymousFunctionDefinition(AssignmentExpression) istrue andIsIdentifierRef ofLeftHandSideExpression istrue, then
    1. Letlhs be theStringValue ofLeftHandSideExpression.
    2. LetrVal be ? NamedEvaluation ofAssignmentExpression with argumentlhs.
  5. Else,
    1. LetrRef be ? Evaluation ofAssignmentExpression.
    2. LetrVal be ? GetValue(rRef).
  6. Perform ? PutValue(lRef,rVal).
  7. ReturnrVal.
Note

When this expression occurs withinstrict mode code, it is a runtime error iflRef in step1.e,3,2,2,2 is an unresolvable reference. If it is, aReferenceError exception is thrown. Additionally, it is a runtime error if thelRef in step9,6,6,6 is a reference to adata property with the attribute value {[[Writable]]:false }, to anaccessor property with the attribute value {[[Set]]:undefined }, or to a non-existent property of an object for which theIsExtensible predicate returns the valuefalse. In these cases aTypeError exception is thrown.

13.15.3 ApplyStringOrNumericBinaryOperator (lVal,opText,rVal )

The abstract operation ApplyStringOrNumericBinaryOperator takes argumentslVal (anECMAScript language value),opText (**,*,/,%,+,-,<<,>>,>>>,&,^, or|), andrVal (anECMAScript language value) and returns either anormal completion containing either a String, a BigInt, or a Number, or athrow completion. It performs the following steps when called:

  1. IfopText is+, then
    1. LetlPrim be ? ToPrimitive(lVal).
    2. LetrPrim be ? ToPrimitive(rVal).
    3. IflPrimis a String orrPrimis a String, then
      1. LetlStr be ? ToString(lPrim).
      2. LetrStr be ? ToString(rPrim).
      3. Return thestring-concatenation oflStr andrStr.
    4. SetlVal tolPrim.
    5. SetrVal torPrim.
  2. NOTE: At this point, it must be a numeric operation.
  3. LetlNum be ? ToNumeric(lVal).
  4. LetrNum be ? ToNumeric(rVal).
  5. IfSameType(lNum,rNum) isfalse, throw aTypeError exception.
  6. IflNumis a BigInt, then
    1. IfopText is**, return ? BigInt::exponentiate(lNum,rNum).
    2. IfopText is/, return ? BigInt::divide(lNum,rNum).
    3. IfopText is%, return ? BigInt::remainder(lNum,rNum).
    4. IfopText is>>>, return ? BigInt::unsignedRightShift(lNum,rNum).
    5. Letoperation be the abstract operation associated withopText in the following table:
      opTextoperation
      *BigInt::multiply
      +BigInt::add
      -BigInt::subtract
      <<BigInt::leftShift
      >>BigInt::signedRightShift
      &BigInt::bitwiseAND
      ^BigInt::bitwiseXOR
      |BigInt::bitwiseOR
  7. Else,
    1. Assert:lNumis a Number.
    2. Letoperation be the abstract operation associated withopText in the following table:
      opTextoperation
      **Number::exponentiate
      *Number::multiply
      /Number::divide
      %Number::remainder
      +Number::add
      -Number::subtract
      <<Number::leftShift
      >>Number::signedRightShift
      >>>Number::unsignedRightShift
      &Number::bitwiseAND
      ^Number::bitwiseXOR
      |Number::bitwiseOR
  8. Returnoperation(lNum,rNum).
Note 1

No hint is provided in the calls toToPrimitive in steps1.a and1.b. All standard objects except Dates handle the absence of a hint as ifnumber were given; Dates handle the absence of a hint as ifstring were given.Exotic objects may handle the absence of a hint in some other manner.

Note 2

Step1.c differs from step3 of theIsLessThan algorithm, by using the logical-or operation instead of the logical-and operation.

13.15.4 EvaluateStringOrNumericBinaryExpression (leftOperand,opText,rightOperand )

The abstract operation EvaluateStringOrNumericBinaryExpression takes argumentsleftOperand (aParse Node),opText (a sequence of Unicode code points), andrightOperand (aParse Node) and returns either anormal completion containing either a String, a BigInt, or a Number, or anabrupt completion. It performs the following steps when called:

  1. LetlRef be ? Evaluation ofleftOperand.
  2. LetlVal be ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofrightOperand.
  4. LetrVal be ? GetValue(rRef).
  5. Return ? ApplyStringOrNumericBinaryOperator(lVal,opText,rVal).

13.15.5 Destructuring Assignment

Supplemental Syntax

In certain circumstances when processing an instance of the production
AssignmentExpression:LeftHandSideExpression=AssignmentExpression
the interpretation ofLeftHandSideExpression is refined using the following grammar:

AssignmentPattern[Yield, Await]:ObjectAssignmentPattern[?Yield, ?Await]ArrayAssignmentPattern[?Yield, ?Await]ObjectAssignmentPattern[Yield, Await]:{}{AssignmentRestProperty[?Yield, ?Await]}{AssignmentPropertyList[?Yield, ?Await]}{AssignmentPropertyList[?Yield, ?Await],AssignmentRestProperty[?Yield, ?Await]opt}ArrayAssignmentPattern[Yield, Await]:[ElisionoptAssignmentRestElement[?Yield, ?Await]opt][AssignmentElementList[?Yield, ?Await]][AssignmentElementList[?Yield, ?Await],ElisionoptAssignmentRestElement[?Yield, ?Await]opt]AssignmentRestProperty[Yield, Await]:...DestructuringAssignmentTarget[?Yield, ?Await]AssignmentPropertyList[Yield, Await]:AssignmentProperty[?Yield, ?Await]AssignmentPropertyList[?Yield, ?Await],AssignmentProperty[?Yield, ?Await]AssignmentElementList[Yield, Await]:AssignmentElisionElement[?Yield, ?Await]AssignmentElementList[?Yield, ?Await],AssignmentElisionElement[?Yield, ?Await]AssignmentElisionElement[Yield, Await]:ElisionoptAssignmentElement[?Yield, ?Await]AssignmentProperty[Yield, Await]:IdentifierReference[?Yield, ?Await]Initializer[+In, ?Yield, ?Await]optPropertyName[?Yield, ?Await]:AssignmentElement[?Yield, ?Await]AssignmentElement[Yield, Await]:DestructuringAssignmentTarget[?Yield, ?Await]Initializer[+In, ?Yield, ?Await]optAssignmentRestElement[Yield, Await]:...DestructuringAssignmentTarget[?Yield, ?Await]DestructuringAssignmentTarget[Yield, Await]:LeftHandSideExpression[?Yield, ?Await]

13.15.5.1 Static Semantics: Early Errors

AssignmentProperty:IdentifierReferenceInitializeroptAssignmentRestProperty:...DestructuringAssignmentTargetDestructuringAssignmentTarget:LeftHandSideExpression

13.15.5.2 Runtime Semantics: DestructuringAssignmentEvaluation

Thesyntax-directed operation DestructuringAssignmentEvaluation takes argumentvalue (anECMAScript language value) and returns either anormal completion containingunused or anabrupt completion. It is defined piecewise over the following productions:

ObjectAssignmentPattern:{}
  1. Perform ? RequireObjectCoercible(value).
  2. Returnunused.
ObjectAssignmentPattern:{AssignmentPropertyList}{AssignmentPropertyList,}
  1. Perform ? RequireObjectCoercible(value).
  2. Perform ? PropertyDestructuringAssignmentEvaluation ofAssignmentPropertyList with argumentvalue.
  3. Returnunused.
ObjectAssignmentPattern:{AssignmentRestProperty}
  1. Perform ? RequireObjectCoercible(value).
  2. LetexcludedNames be a new emptyList.
  3. Return ? RestDestructuringAssignmentEvaluation ofAssignmentRestProperty with argumentsvalue andexcludedNames.
ObjectAssignmentPattern:{AssignmentPropertyList,AssignmentRestProperty}
  1. Perform ? RequireObjectCoercible(value).
  2. LetexcludedNames be ? PropertyDestructuringAssignmentEvaluation ofAssignmentPropertyList with argumentvalue.
  3. Return ? RestDestructuringAssignmentEvaluation ofAssignmentRestProperty with argumentsvalue andexcludedNames.
ArrayAssignmentPattern:[]
  1. LetiteratorRecord be ? GetIterator(value,sync).
  2. Return ? IteratorClose(iteratorRecord,NormalCompletion(unused)).
ArrayAssignmentPattern:[Elision]
  1. LetiteratorRecord be ? GetIterator(value,sync).
  2. Letresult beCompletion(IteratorDestructuringAssignmentEvaluation ofElision with argumentiteratorRecord).
  3. IfiteratorRecord.[[Done]] isfalse, return ? IteratorClose(iteratorRecord,result).
  4. Returnresult.
ArrayAssignmentPattern:[ElisionoptAssignmentRestElement]
  1. LetiteratorRecord be ? GetIterator(value,sync).
  2. IfElision is present, then
    1. Letstatus beCompletion(IteratorDestructuringAssignmentEvaluation ofElision with argumentiteratorRecord).
    2. Ifstatus is anabrupt completion, then
      1. Assert:iteratorRecord.[[Done]] istrue.
      2. Return ? status.
  3. Letresult beCompletion(IteratorDestructuringAssignmentEvaluation ofAssignmentRestElement with argumentiteratorRecord).
  4. IfiteratorRecord.[[Done]] isfalse, return ? IteratorClose(iteratorRecord,result).
  5. Returnresult.
ArrayAssignmentPattern:[AssignmentElementList]
  1. LetiteratorRecord be ? GetIterator(value,sync).
  2. Letresult beCompletion(IteratorDestructuringAssignmentEvaluation ofAssignmentElementList with argumentiteratorRecord).
  3. IfiteratorRecord.[[Done]] isfalse, return ? IteratorClose(iteratorRecord,result).
  4. Returnresult.
ArrayAssignmentPattern:[AssignmentElementList,ElisionoptAssignmentRestElementopt]
  1. LetiteratorRecord be ? GetIterator(value,sync).
  2. Letstatus beCompletion(IteratorDestructuringAssignmentEvaluation ofAssignmentElementList with argumentiteratorRecord).
  3. Ifstatus is anabrupt completion, then
    1. IfiteratorRecord.[[Done]] isfalse, return ? IteratorClose(iteratorRecord,status).
    2. Return ? status.
  4. IfElision is present, then
    1. Setstatus toCompletion(IteratorDestructuringAssignmentEvaluation ofElision with argumentiteratorRecord).
    2. Ifstatus is anabrupt completion, then
      1. Assert:iteratorRecord.[[Done]] istrue.
      2. Return ? status.
  5. IfAssignmentRestElement is present, then
    1. Setstatus toCompletion(IteratorDestructuringAssignmentEvaluation ofAssignmentRestElement with argumentiteratorRecord).
  6. IfiteratorRecord.[[Done]] isfalse, return ? IteratorClose(iteratorRecord,status).
  7. Return ? status.

13.15.5.3 Runtime Semantics: PropertyDestructuringAssignmentEvaluation

Thesyntax-directed operation PropertyDestructuringAssignmentEvaluation takes argumentvalue (anECMAScript language value) and returns either anormal completion containing aList ofproperty keys or anabrupt completion. It collects a list of all destructuredproperty keys. It is defined piecewise over the following productions:

AssignmentPropertyList:AssignmentPropertyList,AssignmentProperty
  1. LetpropertyNames be ? PropertyDestructuringAssignmentEvaluation ofAssignmentPropertyList with argumentvalue.
  2. LetnextNames be ? PropertyDestructuringAssignmentEvaluation ofAssignmentProperty with argumentvalue.
  3. Return thelist-concatenation ofpropertyNames andnextNames.
AssignmentProperty:IdentifierReferenceInitializeropt
  1. LetP be theStringValue ofIdentifierReference.
  2. LetlRef be ? ResolveBinding(P).
  3. Letv be ? GetV(value,P).
  4. IfInitializer is present andv isundefined, then
    1. IfIsAnonymousFunctionDefinition(Initializer) istrue, then
      1. Setv to ? NamedEvaluation ofInitializer with argumentP.
    2. Else,
      1. LetdefaultValue be ? Evaluation ofInitializer.
      2. Setv to ? GetValue(defaultValue).
  5. Perform ? PutValue(lRef,v).
  6. Return «P ».
AssignmentProperty:PropertyName:AssignmentElement
  1. Letname be ? Evaluation ofPropertyName.
  2. Perform ? KeyedDestructuringAssignmentEvaluation ofAssignmentElement with argumentsvalue andname.
  3. Return «name ».

13.15.5.4 Runtime Semantics: RestDestructuringAssignmentEvaluation

Thesyntax-directed operation RestDestructuringAssignmentEvaluation takes argumentsvalue (anECMAScript language value) andexcludedNames (aList ofproperty keys) and returns either anormal completion containingunused or anabrupt completion. It is defined piecewise over the following productions:

AssignmentRestProperty:...DestructuringAssignmentTarget
  1. LetlRef be ? Evaluation ofDestructuringAssignmentTarget.
  2. LetrestObj beOrdinaryObjectCreate(%Object.prototype%).
  3. Perform ? CopyDataProperties(restObj,value,excludedNames).
  4. Return ? PutValue(lRef,restObj).

13.15.5.5 Runtime Semantics: IteratorDestructuringAssignmentEvaluation

Thesyntax-directed operation IteratorDestructuringAssignmentEvaluation takes argumentiteratorRecord (anIterator Record) and returns either anormal completion containingunused or anabrupt completion. It is defined piecewise over the following productions:

AssignmentElementList:AssignmentElisionElement
  1. Return ? IteratorDestructuringAssignmentEvaluation ofAssignmentElisionElement with argumentiteratorRecord.
AssignmentElementList:AssignmentElementList,AssignmentElisionElement
  1. Perform ? IteratorDestructuringAssignmentEvaluation ofAssignmentElementList with argumentiteratorRecord.
  2. Return ? IteratorDestructuringAssignmentEvaluation ofAssignmentElisionElement with argumentiteratorRecord.
AssignmentElisionElement:AssignmentElement
  1. Return ? IteratorDestructuringAssignmentEvaluation ofAssignmentElement with argumentiteratorRecord.
AssignmentElisionElement:ElisionAssignmentElement
  1. Perform ? IteratorDestructuringAssignmentEvaluation ofElision with argumentiteratorRecord.
  2. Return ? IteratorDestructuringAssignmentEvaluation ofAssignmentElement with argumentiteratorRecord.
Elision:,
  1. IfiteratorRecord.[[Done]] isfalse, then
    1. Perform ? IteratorStep(iteratorRecord).
  2. Returnunused.
Elision:Elision,
  1. Perform ? IteratorDestructuringAssignmentEvaluation ofElision with argumentiteratorRecord.
  2. IfiteratorRecord.[[Done]] isfalse, then
    1. Perform ? IteratorStep(iteratorRecord).
  3. Returnunused.
AssignmentElement:DestructuringAssignmentTargetInitializeropt
  1. IfDestructuringAssignmentTarget is neither anObjectLiteral nor anArrayLiteral, then
    1. LetlRef be ? Evaluation ofDestructuringAssignmentTarget.
  2. Letvalue beundefined.
  3. IfiteratorRecord.[[Done]] isfalse, then
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext is notdone, then
      1. Setvalue tonext.
  4. IfInitializer is present andvalue isundefined, then
    1. IfIsAnonymousFunctionDefinition(Initializer) istrue andIsIdentifierRef ofDestructuringAssignmentTarget istrue, then
      1. Lettarget be theStringValue ofDestructuringAssignmentTarget.
      2. Letv be ? NamedEvaluation ofInitializer with argumenttarget.
    2. Else,
      1. LetdefaultValue be ? Evaluation ofInitializer.
      2. Letv be ? GetValue(defaultValue).
  5. Else,
    1. Letv bevalue.
  6. IfDestructuringAssignmentTarget is either anObjectLiteral or anArrayLiteral, then
    1. LetnestedAssignmentPattern be theAssignmentPattern that iscovered byDestructuringAssignmentTarget.
    2. Return ? DestructuringAssignmentEvaluation ofnestedAssignmentPattern with argumentv.
  7. Return ? PutValue(lRef,v).
Note

Left to right evaluation order is maintained by evaluating aDestructuringAssignmentTarget that is not a destructuring pattern prior to accessing theiterator or evaluating theInitializer.

AssignmentRestElement:...DestructuringAssignmentTarget
  1. IfDestructuringAssignmentTarget is neither anObjectLiteral nor anArrayLiteral, then
    1. LetlRef be ? Evaluation ofDestructuringAssignmentTarget.
  2. LetA be ! ArrayCreate(0).
  3. Letn be 0.
  4. Repeat, whileiteratorRecord.[[Done]] isfalse,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext is notdone, then
      1. Perform ! CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)),next).
      2. Setn ton + 1.
  5. IfDestructuringAssignmentTarget is neither anObjectLiteral nor anArrayLiteral, then
    1. Return ? PutValue(lRef,A).
  6. LetnestedAssignmentPattern be theAssignmentPattern that iscovered byDestructuringAssignmentTarget.
  7. Return ? DestructuringAssignmentEvaluation ofnestedAssignmentPattern with argumentA.

13.15.5.6 Runtime Semantics: KeyedDestructuringAssignmentEvaluation

Thesyntax-directed operation KeyedDestructuringAssignmentEvaluation takes argumentsvalue (anECMAScript language value) andpropertyName (aproperty key) and returns either anormal completion containingunused or anabrupt completion. It is defined piecewise over the following productions:

AssignmentElement:DestructuringAssignmentTargetInitializeropt
  1. IfDestructuringAssignmentTarget is neither anObjectLiteral nor anArrayLiteral, then
    1. LetlRef be ? Evaluation ofDestructuringAssignmentTarget.
  2. Letv be ? GetV(value,propertyName).
  3. IfInitializer is present andv isundefined, then
    1. IfIsAnonymousFunctionDefinition(Initializer) istrue andIsIdentifierRef ofDestructuringAssignmentTarget istrue, then
      1. Lettarget be theStringValue ofDestructuringAssignmentTarget.
      2. LetrhsValue be ? NamedEvaluation ofInitializer with argumenttarget.
    2. Else,
      1. LetdefaultValue be ? Evaluation ofInitializer.
      2. LetrhsValue be ? GetValue(defaultValue).
  4. Else,
    1. LetrhsValue bev.
  5. IfDestructuringAssignmentTarget is either anObjectLiteral or anArrayLiteral, then
    1. LetassignmentPattern be theAssignmentPattern that iscovered byDestructuringAssignmentTarget.
    2. Return ? DestructuringAssignmentEvaluation ofassignmentPattern with argumentrhsValue.
  6. Return ? PutValue(lRef,rhsValue).

13.16 Comma Operator (, )

Syntax

Expression[In, Yield, Await]:AssignmentExpression[?In, ?Yield, ?Await]Expression[?In, ?Yield, ?Await],AssignmentExpression[?In, ?Yield, ?Await]

13.16.1 Runtime Semantics: Evaluation

Expression:Expression,AssignmentExpression
  1. LetlRef be ? Evaluation ofExpression.
  2. Perform ? GetValue(lRef).
  3. LetrRef be ? Evaluation ofAssignmentExpression.
  4. Return ? GetValue(rRef).
Note

GetValue must be called even though its value is not used because it may have observable side-effects.


[8]ページ先頭

©2009-2025 Movatter.jp