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 GetOptionsObject (options )
      37. 7.3.37 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.sumPrecise (items )
        35. 21.3.2.35 Math.tan (x )
        36. 21.3.2.36 Math.tanh (x )
        37. 21.3.2.37 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,length )
        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
    3. +23.3 Uint8Array Objects
      1. +23.3.1 Additional Properties of the Uint8Array Constructor
        1. 23.3.1.1 Uint8Array.fromBase64 (string [ ,options ] )
        2. 23.3.1.2 Uint8Array.fromHex (string )
      2. +23.3.2 Additional Properties of the Uint8Array Prototype Object
        1. 23.3.2.1 Uint8Array.prototype.setFromBase64 (string [ ,options ] )
        2. 23.3.2.2 Uint8Array.prototype.setFromHex (string )
        3. 23.3.2.3 Uint8Array.prototype.toBase64 ( [options ] )
        4. 23.3.2.4 Uint8Array.prototype.toHex ( )
      3. +23.3.3 Abstract Operations for Uint8Array Objects
        1. 23.3.3.1 ValidateUint8Array (ta )
        2. 23.3.3.2 GetUint8ArrayBytes (ta )
        3. 23.3.3.3 SetUint8ArrayBytes (into,bytes )
        4. 23.3.3.4 SkipAsciiWhitespace (string,index )
        5. 23.3.3.5 DecodeFinalBase64Chunk (chunk,throwOnExtraBits )
        6. 23.3.3.6 DecodeFullLengthBase64Chunk (chunk )
        7. 23.3.3.7 FromBase64 (string,alphabet,lastChunkHandling [ ,maxLength ] )
        8. 23.3.3.8 FromHex (string [ ,maxLength ] )
  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
        3. +27.1.3.3 Properties of the Iterator Prototype Object
          1. +27.1.3.3.1 Iterator.prototype.constructor
            1. 27.1.3.3.1.1 get Iterator.prototype.constructor
            2. 27.1.3.3.1.2 set Iterator.prototype.constructor
          2. 27.1.3.3.2 Iterator.prototype.drop (limit )
          3. 27.1.3.3.3 Iterator.prototype.every (predicate )
          4. 27.1.3.3.4 Iterator.prototype.filter (predicate )
          5. 27.1.3.3.5 Iterator.prototype.find (predicate )
          6. 27.1.3.3.6 Iterator.prototype.flatMap (mapper )
          7. 27.1.3.3.7 Iterator.prototype.forEach (procedure )
          8. 27.1.3.3.8 Iterator.prototype.map (mapper )
          9. 27.1.3.3.9 Iterator.prototype.reduce (reducer [ ,initialValue ] )
          10. 27.1.3.3.10 Iterator.prototype.some (predicate )
          11. 27.1.3.3.11 Iterator.prototype.take (limit )
          12. 27.1.3.3.12 Iterator.prototype.toArray ( )
          13. 27.1.3.3.13 Iterator.prototype [ %Symbol.iterator% ] ( )
          14. +27.1.3.3.14 Iterator.prototype [ %Symbol.toStringTag% ]
            1. 27.1.3.3.14.1 get Iterator.prototype [ %Symbol.toStringTag% ]
            2. 27.1.3.3.14.2 set Iterator.prototype [ %Symbol.toStringTag% ]
      4. +27.1.4 The %AsyncIteratorPrototype% Object
        1. 27.1.4.1 %AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )
      5. +27.1.5 Async-from-Sync Iterator Objects
        1. 27.1.5.1 CreateAsyncFromSyncIterator (syncIteratorRecord )
        2. +27.1.5.2 The %AsyncFromSyncIteratorPrototype% Object
          1. 27.1.5.2.1 %AsyncFromSyncIteratorPrototype%.next ( [value ] )
          2. 27.1.5.2.2 %AsyncFromSyncIteratorPrototype%.return ( [value ] )
          3. 27.1.5.2.3 %AsyncFromSyncIteratorPrototype%.throw ( [value ] )
        3. 27.1.5.3 Properties of Async-from-Sync Iterator Instances
        4. 27.1.5.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
      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
      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

15 ECMAScript Language: Functions and Classes

Note

Various ECMAScript language elements cause the creation of ECMAScriptfunction objects (10.2).Evaluation of such functions starts with the execution of their[[Call]] internal method (10.2.1).

15.1 Parameter Lists

Syntax

UniqueFormalParameters[Yield, Await]:FormalParameters[?Yield, ?Await]FormalParameters[Yield, Await]:[empty]FunctionRestParameter[?Yield, ?Await]FormalParameterList[?Yield, ?Await]FormalParameterList[?Yield, ?Await],FormalParameterList[?Yield, ?Await],FunctionRestParameter[?Yield, ?Await]FormalParameterList[Yield, Await]:FormalParameter[?Yield, ?Await]FormalParameterList[?Yield, ?Await],FormalParameter[?Yield, ?Await]FunctionRestParameter[Yield, Await]:BindingRestElement[?Yield, ?Await]FormalParameter[Yield, Await]:BindingElement[?Yield, ?Await]

15.1.1 Static Semantics: Early Errors

UniqueFormalParameters:FormalParametersFormalParameters:FormalParameterListNote

Multiple occurrences of the sameBindingIdentifier in aFormalParameterList is only allowed for functions which have simple parameter lists and which are not defined instrict mode code.

15.1.2 Static Semantics: ContainsExpression

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

ObjectBindingPattern:{}{BindingRestProperty}
  1. Returnfalse.
ObjectBindingPattern:{BindingPropertyList,BindingRestProperty}
  1. ReturnContainsExpression ofBindingPropertyList.
ArrayBindingPattern:[Elisionopt]
  1. Returnfalse.
ArrayBindingPattern:[ElisionoptBindingRestElement]
  1. ReturnContainsExpression ofBindingRestElement.
ArrayBindingPattern:[BindingElementList,Elisionopt]
  1. ReturnContainsExpression ofBindingElementList.
ArrayBindingPattern:[BindingElementList,ElisionoptBindingRestElement]
  1. Lethas beContainsExpression ofBindingElementList.
  2. Ifhas istrue, returntrue.
  3. ReturnContainsExpression ofBindingRestElement.
BindingPropertyList:BindingPropertyList,BindingProperty
  1. Lethas beContainsExpression ofBindingPropertyList.
  2. Ifhas istrue, returntrue.
  3. ReturnContainsExpression ofBindingProperty.
BindingElementList:BindingElementList,BindingElisionElement
  1. Lethas beContainsExpression ofBindingElementList.
  2. Ifhas istrue, returntrue.
  3. ReturnContainsExpression ofBindingElisionElement.
BindingElisionElement:ElisionoptBindingElement
  1. ReturnContainsExpression ofBindingElement.
BindingProperty:PropertyName:BindingElement
  1. Lethas beIsComputedPropertyKey ofPropertyName.
  2. Ifhas istrue, returntrue.
  3. ReturnContainsExpression ofBindingElement.
BindingElement:BindingPatternInitializer
  1. Returntrue.
SingleNameBinding:BindingIdentifier
  1. Returnfalse.
SingleNameBinding:BindingIdentifierInitializer
  1. Returntrue.
BindingRestElement:...BindingIdentifier
  1. Returnfalse.
BindingRestElement:...BindingPattern
  1. ReturnContainsExpression ofBindingPattern.
FormalParameters:[empty]
  1. Returnfalse.
FormalParameters:FormalParameterList,FunctionRestParameter
  1. IfContainsExpression ofFormalParameterList istrue, returntrue.
  2. ReturnContainsExpression ofFunctionRestParameter.
FormalParameterList:FormalParameterList,FormalParameter
  1. IfContainsExpression ofFormalParameterList istrue, returntrue.
  2. ReturnContainsExpression ofFormalParameter.
ArrowParameters:BindingIdentifier
  1. Returnfalse.
ArrowParameters:CoverParenthesizedExpressionAndArrowParameterList
  1. Letformals be theArrowFormalParameters that iscovered byCoverParenthesizedExpressionAndArrowParameterList.
  2. ReturnContainsExpression offormals.
AsyncArrowBindingIdentifier:BindingIdentifier
  1. Returnfalse.

15.1.3 Static Semantics: IsSimpleParameterList

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

BindingElement:BindingPattern
  1. Returnfalse.
BindingElement:BindingPatternInitializer
  1. Returnfalse.
SingleNameBinding:BindingIdentifier
  1. Returntrue.
SingleNameBinding:BindingIdentifierInitializer
  1. Returnfalse.
FormalParameters:[empty]
  1. Returntrue.
FormalParameters:FunctionRestParameter
  1. Returnfalse.
FormalParameters:FormalParameterList,FunctionRestParameter
  1. Returnfalse.
FormalParameterList:FormalParameterList,FormalParameter
  1. IfIsSimpleParameterList ofFormalParameterList isfalse, returnfalse.
  2. ReturnIsSimpleParameterList ofFormalParameter.
FormalParameter:BindingElement
  1. ReturnIsSimpleParameterList ofBindingElement.
ArrowParameters:BindingIdentifier
  1. Returntrue.
ArrowParameters:CoverParenthesizedExpressionAndArrowParameterList
  1. Letformals be theArrowFormalParameters that iscovered byCoverParenthesizedExpressionAndArrowParameterList.
  2. ReturnIsSimpleParameterList offormals.
AsyncArrowBindingIdentifier:BindingIdentifier
  1. Returntrue.
CoverCallExpressionAndAsyncArrowHead:MemberExpressionArguments
  1. Lethead be theAsyncArrowHead that iscovered byCoverCallExpressionAndAsyncArrowHead.
  2. ReturnIsSimpleParameterList ofhead.

15.1.4 Static Semantics: HasInitializer

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

BindingElement:BindingPattern
  1. Returnfalse.
BindingElement:BindingPatternInitializer
  1. Returntrue.
SingleNameBinding:BindingIdentifier
  1. Returnfalse.
SingleNameBinding:BindingIdentifierInitializer
  1. Returntrue.
FormalParameterList:FormalParameterList,FormalParameter
  1. IfHasInitializer ofFormalParameterList istrue, returntrue.
  2. ReturnHasInitializer ofFormalParameter.

15.1.5 Static Semantics: ExpectedArgumentCount

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

FormalParameters:[empty]FunctionRestParameter
  1. Return 0.
FormalParameters:FormalParameterList,FunctionRestParameter
  1. Return theExpectedArgumentCount ofFormalParameterList.
Note

The ExpectedArgumentCount of aFormalParameterList is the number ofFormalParameters to the left of either the rest parameter or the firstFormalParameter with an Initializer. AFormalParameter without an initializer is allowed after the first parameter with an initializer but such parameters are considered to be optional withundefined as their default value.

FormalParameterList:FormalParameter
  1. IfHasInitializer ofFormalParameter istrue, return 0.
  2. Return 1.
FormalParameterList:FormalParameterList,FormalParameter
  1. Letcount be theExpectedArgumentCount ofFormalParameterList.
  2. IfHasInitializer ofFormalParameterList istrue orHasInitializer ofFormalParameter istrue, returncount.
  3. Returncount + 1.
ArrowParameters:BindingIdentifier
  1. Return 1.
ArrowParameters:CoverParenthesizedExpressionAndArrowParameterList
  1. Letformals be theArrowFormalParameters that iscovered byCoverParenthesizedExpressionAndArrowParameterList.
  2. Return theExpectedArgumentCount offormals.
PropertySetParameterList:FormalParameter
  1. IfHasInitializer ofFormalParameter istrue, return 0.
  2. Return 1.
AsyncArrowBindingIdentifier:BindingIdentifier
  1. Return 1.

15.2 Function Definitions

Syntax

FunctionDeclaration[Yield, Await, Default]:functionBindingIdentifier[?Yield, ?Await](FormalParameters[~Yield, ~Await]){FunctionBody[~Yield, ~Await]}[+Default]function(FormalParameters[~Yield, ~Await]){FunctionBody[~Yield, ~Await]}FunctionExpression:functionBindingIdentifier[~Yield, ~Await]opt(FormalParameters[~Yield, ~Await]){FunctionBody[~Yield, ~Await]}FunctionBody[Yield, Await]:FunctionStatementList[?Yield, ?Await]FunctionStatementList[Yield, Await]:StatementList[?Yield, ?Await, +Return]opt

15.2.1 Static Semantics: Early Errors

FunctionDeclaration:functionBindingIdentifier(FormalParameters){FunctionBody}function(FormalParameters){FunctionBody}FunctionExpression:functionBindingIdentifieropt(FormalParameters){FunctionBody}Note

TheLexicallyDeclaredNames of aFunctionBody does not include identifiers bound using var or function declarations.

FunctionBody:FunctionStatementList

15.2.2 Static Semantics: FunctionBodyContainsUseStrict

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

FunctionBody:FunctionStatementList
  1. If theDirective Prologue ofFunctionBody contains aUse Strict Directive, returntrue; otherwise returnfalse.

15.2.3 Runtime Semantics: EvaluateFunctionBody

Thesyntax-directed operation EvaluateFunctionBody takes argumentsfunctionObject (an ECMAScriptfunction object) andargumentsList (aList ofECMAScript language values) and returns areturn completion or athrow completion. It is defined piecewise over the following productions:

FunctionBody:FunctionStatementList
  1. Perform ? FunctionDeclarationInstantiation(functionObject,argumentsList).
  2. Perform ? Evaluation ofFunctionStatementList.
  3. NOTE: If the previous step resulted in anormal completion, then evaluation finished by proceeding past the end of theFunctionStatementList.
  4. ReturnReturnCompletion(undefined).

15.2.4 Runtime Semantics: InstantiateOrdinaryFunctionObject

Thesyntax-directed operation InstantiateOrdinaryFunctionObject takes argumentsenv (anEnvironment Record) andprivateEnv (aPrivateEnvironment Record ornull) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

FunctionDeclaration:functionBindingIdentifier(FormalParameters){FunctionBody}
  1. Letname be theStringValue ofBindingIdentifier.
  2. LetsourceText be thesource text matched byFunctionDeclaration.
  3. LetF beOrdinaryFunctionCreate(%Function.prototype%,sourceText,FormalParameters,FunctionBody,non-lexical-this,env,privateEnv).
  4. PerformSetFunctionName(F,name).
  5. PerformMakeConstructor(F).
  6. ReturnF.
FunctionDeclaration:function(FormalParameters){FunctionBody}
  1. LetsourceText be thesource text matched byFunctionDeclaration.
  2. LetF beOrdinaryFunctionCreate(%Function.prototype%,sourceText,FormalParameters,FunctionBody,non-lexical-this,env,privateEnv).
  3. PerformSetFunctionName(F,"default").
  4. PerformMakeConstructor(F).
  5. ReturnF.
Note

An anonymousFunctionDeclaration can only occur as part of anexport default declaration, and its function code is therefore alwaysstrict mode code.

15.2.5 Runtime Semantics: InstantiateOrdinaryFunctionExpression

Thesyntax-directed operation InstantiateOrdinaryFunctionExpression takes optional argumentname (aproperty key or aPrivate Name) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

FunctionExpression:function(FormalParameters){FunctionBody}
  1. Ifname is not present, setname to"".
  2. Letenv be the LexicalEnvironment of therunning execution context.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byFunctionExpression.
  5. Letclosure beOrdinaryFunctionCreate(%Function.prototype%,sourceText,FormalParameters,FunctionBody,non-lexical-this,env,privateEnv).
  6. PerformSetFunctionName(closure,name).
  7. PerformMakeConstructor(closure).
  8. Returnclosure.
FunctionExpression:functionBindingIdentifier(FormalParameters){FunctionBody}
  1. Assert:name is not present.
  2. Setname to theStringValue ofBindingIdentifier.
  3. LetouterEnv be therunning execution context's LexicalEnvironment.
  4. LetfuncEnv beNewDeclarativeEnvironment(outerEnv).
  5. Perform ! funcEnv.CreateImmutableBinding(name,false).
  6. LetprivateEnv be therunning execution context's PrivateEnvironment.
  7. LetsourceText be thesource text matched byFunctionExpression.
  8. Letclosure beOrdinaryFunctionCreate(%Function.prototype%,sourceText,FormalParameters,FunctionBody,non-lexical-this,funcEnv,privateEnv).
  9. PerformSetFunctionName(closure,name).
  10. PerformMakeConstructor(closure).
  11. Perform ! funcEnv.InitializeBinding(name,closure).
  12. Returnclosure.
Note

TheBindingIdentifier in aFunctionExpression can be referenced from inside theFunctionExpression'sFunctionBody to allow the function to call itself recursively. However, unlike in aFunctionDeclaration, theBindingIdentifier in aFunctionExpression cannot be referenced from and does not affect the scope enclosing theFunctionExpression.

15.2.6 Runtime Semantics: Evaluation

FunctionDeclaration:functionBindingIdentifier(FormalParameters){FunctionBody}
  1. Returnempty.
Note 1FunctionDeclaration:function(FormalParameters){FunctionBody}
  1. Returnempty.
FunctionExpression:functionBindingIdentifieropt(FormalParameters){FunctionBody}
  1. ReturnInstantiateOrdinaryFunctionExpression ofFunctionExpression.
Note 2

A"prototype" property is automatically created for every function defined using aFunctionDeclaration orFunctionExpression, to allow for the possibility that the function will be used as aconstructor.

FunctionStatementList:[empty]
  1. Returnundefined.

15.3 Arrow Function Definitions

Syntax

ArrowFunction[In, Yield, Await]:ArrowParameters[?Yield, ?Await][noLineTerminator here]=>ConciseBody[?In]ArrowParameters[Yield, Await]:BindingIdentifier[?Yield, ?Await]CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]ConciseBody[In]:[lookahead ≠{]ExpressionBody[?In, ~Await]{FunctionBody[~Yield, ~Await]}ExpressionBody[In, Await]:AssignmentExpression[?In, ~Yield, ?Await]

Supplemental Syntax

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

ArrowFormalParameters[Yield, Await]:(UniqueFormalParameters[?Yield, ?Await])

15.3.1 Static Semantics: Early Errors

ArrowFunction:ArrowParameters=>ConciseBodyArrowParameters:CoverParenthesizedExpressionAndArrowParameterList

15.3.2 Static Semantics: ConciseBodyContainsUseStrict

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

ConciseBody:ExpressionBody
  1. Returnfalse.
ConciseBody:{FunctionBody}
  1. ReturnFunctionBodyContainsUseStrict ofFunctionBody.

15.3.3 Runtime Semantics: EvaluateConciseBody

Thesyntax-directed operation EvaluateConciseBody takes argumentsfunctionObject (an ECMAScriptfunction object) andargumentsList (aList ofECMAScript language values) and returns areturn completion or athrow completion. It is defined piecewise over the following productions:

ConciseBody:ExpressionBody
  1. Perform ? FunctionDeclarationInstantiation(functionObject,argumentsList).
  2. Return ? Evaluation ofExpressionBody.

15.3.4 Runtime Semantics: InstantiateArrowFunctionExpression

Thesyntax-directed operation InstantiateArrowFunctionExpression takes optional argumentname (aproperty key or aPrivate Name) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

ArrowFunction:ArrowParameters=>ConciseBody
  1. Ifname is not present, setname to"".
  2. Letenv be the LexicalEnvironment of therunning execution context.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byArrowFunction.
  5. Letclosure beOrdinaryFunctionCreate(%Function.prototype%,sourceText,ArrowParameters,ConciseBody,lexical-this,env,privateEnv).
  6. PerformSetFunctionName(closure,name).
  7. Returnclosure.
Note

AnArrowFunction does not define local bindings forarguments,super,this, ornew.target. Any reference toarguments,super,this, ornew.target within anArrowFunction must resolve to a binding in a lexically enclosing environment. Typically this will be the Function Environment of an immediately enclosing function. Even though anArrowFunction may contain references tosuper, thefunction object created in step5 is not made into a method by performingMakeMethod. AnArrowFunction that referencessuper is always contained within a non-ArrowFunction and the necessary state to implementsuper is accessible via theenv that is captured by thefunction object of theArrowFunction.

15.3.5 Runtime Semantics: Evaluation

ArrowFunction:ArrowParameters=>ConciseBody
  1. ReturnInstantiateArrowFunctionExpression ofArrowFunction.
ExpressionBody:AssignmentExpression
  1. LetexprRef be ? Evaluation ofAssignmentExpression.
  2. LetexprValue be ? GetValue(exprRef).
  3. ReturnReturnCompletion(exprValue).

15.4 Method Definitions

Syntax

MethodDefinition[Yield, Await]:ClassElementName[?Yield, ?Await](UniqueFormalParameters[~Yield, ~Await]){FunctionBody[~Yield, ~Await]}GeneratorMethod[?Yield, ?Await]AsyncMethod[?Yield, ?Await]AsyncGeneratorMethod[?Yield, ?Await]getClassElementName[?Yield, ?Await](){FunctionBody[~Yield, ~Await]}setClassElementName[?Yield, ?Await](PropertySetParameterList){FunctionBody[~Yield, ~Await]}PropertySetParameterList:FormalParameter[~Yield, ~Await]

15.4.1 Static Semantics: Early Errors

MethodDefinition:ClassElementName(UniqueFormalParameters){FunctionBody}MethodDefinition:setClassElementName(PropertySetParameterList){FunctionBody}

15.4.2 Static Semantics: HasDirectSuper

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

MethodDefinition:ClassElementName(UniqueFormalParameters){FunctionBody}
  1. IfUniqueFormalParametersContainsSuperCall istrue, returntrue.
  2. ReturnFunctionBodyContainsSuperCall.
MethodDefinition:getClassElementName(){FunctionBody}
  1. ReturnFunctionBodyContainsSuperCall.
MethodDefinition:setClassElementName(PropertySetParameterList){FunctionBody}
  1. IfPropertySetParameterListContainsSuperCall istrue, returntrue.
  2. ReturnFunctionBodyContainsSuperCall.
GeneratorMethod:*ClassElementName(UniqueFormalParameters){GeneratorBody}
  1. IfUniqueFormalParametersContainsSuperCall istrue, returntrue.
  2. ReturnGeneratorBodyContainsSuperCall.
AsyncGeneratorMethod:async*ClassElementName(UniqueFormalParameters){AsyncGeneratorBody}
  1. IfUniqueFormalParametersContainsSuperCall istrue, returntrue.
  2. ReturnAsyncGeneratorBodyContainsSuperCall.
AsyncMethod:asyncClassElementName(UniqueFormalParameters){AsyncFunctionBody}
  1. IfUniqueFormalParametersContainsSuperCall istrue, returntrue.
  2. ReturnAsyncFunctionBodyContainsSuperCall.

15.4.3 Static Semantics: SpecialMethod

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

MethodDefinition:ClassElementName(UniqueFormalParameters){FunctionBody}
  1. Returnfalse.
MethodDefinition:GeneratorMethodAsyncMethodAsyncGeneratorMethodgetClassElementName(){FunctionBody}setClassElementName(PropertySetParameterList){FunctionBody}
  1. Returntrue.

15.4.4 Runtime Semantics: DefineMethod

Thesyntax-directed operation DefineMethod takes argumentobject (an Object) and optional argumentfunctionPrototype (an Object) and returns either anormal completion containing aRecord with fields[[Key]] (aproperty key) and[[Closure]] (an ECMAScriptfunction object) or anabrupt completion. It is defined piecewise over the following productions:

MethodDefinition:ClassElementName(UniqueFormalParameters){FunctionBody}
  1. LetpropKey be ? Evaluation ofClassElementName.
  2. Letenv be therunning execution context's LexicalEnvironment.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. IffunctionPrototype is present, then
    1. Letprototype befunctionPrototype.
  5. Else,
    1. Letprototype be%Function.prototype%.
  6. LetsourceText be thesource text matched byMethodDefinition.
  7. Letclosure beOrdinaryFunctionCreate(prototype,sourceText,UniqueFormalParameters,FunctionBody,non-lexical-this,env,privateEnv).
  8. PerformMakeMethod(closure,object).
  9. Return theRecord {[[Key]]:propKey,[[Closure]]:closure }.

15.4.5 Runtime Semantics: MethodDefinitionEvaluation

Thesyntax-directed operation MethodDefinitionEvaluation takes argumentsobject (an Object) andenumerable (a Boolean) and returns either anormal completion containing either aPrivateElement orunused, or anabrupt completion. It is defined piecewise over the following productions:

MethodDefinition:ClassElementName(UniqueFormalParameters){FunctionBody}
  1. LetmethodDef be ? DefineMethod ofMethodDefinition with argumentobject.
  2. PerformSetFunctionName(methodDef.[[Closure]],methodDef.[[Key]]).
  3. Return ? DefineMethodProperty(object,methodDef.[[Key]],methodDef.[[Closure]],enumerable).
MethodDefinition:getClassElementName(){FunctionBody}
  1. LetpropKey be ? Evaluation ofClassElementName.
  2. Letenv be therunning execution context's LexicalEnvironment.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byMethodDefinition.
  5. LetformalParameterList be an instance of the productionFormalParameters:[empty].
  6. Letclosure beOrdinaryFunctionCreate(%Function.prototype%,sourceText,formalParameterList,FunctionBody,non-lexical-this,env,privateEnv).
  7. PerformMakeMethod(closure,object).
  8. PerformSetFunctionName(closure,propKey,"get").
  9. IfpropKey is aPrivate Name, then
    1. ReturnPrivateElement {[[Key]]:propKey,[[Kind]]:accessor,[[Get]]:closure,[[Set]]:undefined }.
  10. Else,
    1. Letdesc be the PropertyDescriptor {[[Get]]:closure,[[Enumerable]]:enumerable,[[Configurable]]:true }.
    2. Perform ? DefinePropertyOrThrow(object,propKey,desc).
    3. Returnunused.
MethodDefinition:setClassElementName(PropertySetParameterList){FunctionBody}
  1. LetpropKey be ? Evaluation ofClassElementName.
  2. Letenv be therunning execution context's LexicalEnvironment.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byMethodDefinition.
  5. Letclosure beOrdinaryFunctionCreate(%Function.prototype%,sourceText,PropertySetParameterList,FunctionBody,non-lexical-this,env,privateEnv).
  6. PerformMakeMethod(closure,object).
  7. PerformSetFunctionName(closure,propKey,"set").
  8. IfpropKey is aPrivate Name, then
    1. ReturnPrivateElement {[[Key]]:propKey,[[Kind]]:accessor,[[Get]]:undefined,[[Set]]:closure }.
  9. Else,
    1. Letdesc be the PropertyDescriptor {[[Set]]:closure,[[Enumerable]]:enumerable,[[Configurable]]:true }.
    2. Perform ? DefinePropertyOrThrow(object,propKey,desc).
    3. Returnunused.
GeneratorMethod:*ClassElementName(UniqueFormalParameters){GeneratorBody}
  1. LetpropKey be ? Evaluation ofClassElementName.
  2. Letenv be therunning execution context's LexicalEnvironment.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byGeneratorMethod.
  5. Letclosure beOrdinaryFunctionCreate(%GeneratorFunction.prototype%,sourceText,UniqueFormalParameters,GeneratorBody,non-lexical-this,env,privateEnv).
  6. PerformMakeMethod(closure,object).
  7. PerformSetFunctionName(closure,propKey).
  8. Letprototype beOrdinaryObjectCreate(%GeneratorPrototype%).
  9. Perform ! DefinePropertyOrThrow(closure,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  10. Return ? DefineMethodProperty(object,propKey,closure,enumerable).
AsyncGeneratorMethod:async*ClassElementName(UniqueFormalParameters){AsyncGeneratorBody}
  1. LetpropKey be ? Evaluation ofClassElementName.
  2. Letenv be therunning execution context's LexicalEnvironment.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byAsyncGeneratorMethod.
  5. Letclosure beOrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%,sourceText,UniqueFormalParameters,AsyncGeneratorBody,non-lexical-this,env,privateEnv).
  6. PerformMakeMethod(closure,object).
  7. PerformSetFunctionName(closure,propKey).
  8. Letprototype beOrdinaryObjectCreate(%AsyncGeneratorPrototype%).
  9. Perform ! DefinePropertyOrThrow(closure,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  10. Return ? DefineMethodProperty(object,propKey,closure,enumerable).
AsyncMethod:asyncClassElementName(UniqueFormalParameters){AsyncFunctionBody}
  1. LetpropKey be ? Evaluation ofClassElementName.
  2. Letenv be the LexicalEnvironment of therunning execution context.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byAsyncMethod.
  5. Letclosure beOrdinaryFunctionCreate(%AsyncFunction.prototype%,sourceText,UniqueFormalParameters,AsyncFunctionBody,non-lexical-this,env,privateEnv).
  6. PerformMakeMethod(closure,object).
  7. PerformSetFunctionName(closure,propKey).
  8. Return ? DefineMethodProperty(object,propKey,closure,enumerable).

15.5 Generator Function Definitions

Syntax

GeneratorDeclaration[Yield, Await, Default]:function*BindingIdentifier[?Yield, ?Await](FormalParameters[+Yield, ~Await]){GeneratorBody}[+Default]function*(FormalParameters[+Yield, ~Await]){GeneratorBody}GeneratorExpression:function*BindingIdentifier[+Yield, ~Await]opt(FormalParameters[+Yield, ~Await]){GeneratorBody}GeneratorMethod[Yield, Await]:*ClassElementName[?Yield, ?Await](UniqueFormalParameters[+Yield, ~Await]){GeneratorBody}GeneratorBody:FunctionBody[+Yield, ~Await]YieldExpression[In, Await]:yieldyield[noLineTerminator here]AssignmentExpression[?In, +Yield, ?Await]yield[noLineTerminator here]*AssignmentExpression[?In, +Yield, ?Await]Note 1

The syntactic context immediately followingyield requires use of theInputElementRegExpOrTemplateTail lexical goal.

Note 2

YieldExpression cannot be used within theFormalParameters of a generator function because any expressions that are part ofFormalParameters are evaluated before the resulting Generator is in a resumable state.

Note 3

Abstract operations relating to Generators are defined in27.5.3.

15.5.1 Static Semantics: Early Errors

GeneratorMethod:*ClassElementName(UniqueFormalParameters){GeneratorBody}GeneratorDeclaration:function*BindingIdentifier(FormalParameters){GeneratorBody}function*(FormalParameters){GeneratorBody}GeneratorExpression:function*BindingIdentifieropt(FormalParameters){GeneratorBody}

15.5.2 Runtime Semantics: EvaluateGeneratorBody

Thesyntax-directed operation EvaluateGeneratorBody takes argumentsfunctionObject (an ECMAScriptfunction object) andargumentsList (aList ofECMAScript language values) and returns athrow completion or areturn completion. It is defined piecewise over the following productions:

GeneratorBody:FunctionBody
  1. Perform ? FunctionDeclarationInstantiation(functionObject,argumentsList).
  2. LetG be ? OrdinaryCreateFromConstructor(functionObject,"%GeneratorPrototype%", «[[GeneratorState]],[[GeneratorContext]],[[GeneratorBrand]] »).
  3. SetG.[[GeneratorBrand]] toempty.
  4. SetG.[[GeneratorState]] tosuspended-start.
  5. PerformGeneratorStart(G,FunctionBody).
  6. ReturnReturnCompletion(G).

15.5.3 Runtime Semantics: InstantiateGeneratorFunctionObject

Thesyntax-directed operation InstantiateGeneratorFunctionObject takes argumentsenv (anEnvironment Record) andprivateEnv (aPrivateEnvironment Record ornull) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

GeneratorDeclaration:function*BindingIdentifier(FormalParameters){GeneratorBody}
  1. Letname be theStringValue ofBindingIdentifier.
  2. LetsourceText be thesource text matched byGeneratorDeclaration.
  3. LetF beOrdinaryFunctionCreate(%GeneratorFunction.prototype%,sourceText,FormalParameters,GeneratorBody,non-lexical-this,env,privateEnv).
  4. PerformSetFunctionName(F,name).
  5. Letprototype beOrdinaryObjectCreate(%GeneratorPrototype%).
  6. Perform ! DefinePropertyOrThrow(F,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  7. ReturnF.
GeneratorDeclaration:function*(FormalParameters){GeneratorBody}
  1. LetsourceText be thesource text matched byGeneratorDeclaration.
  2. LetF beOrdinaryFunctionCreate(%GeneratorFunction.prototype%,sourceText,FormalParameters,GeneratorBody,non-lexical-this,env,privateEnv).
  3. PerformSetFunctionName(F,"default").
  4. Letprototype beOrdinaryObjectCreate(%GeneratorPrototype%).
  5. Perform ! DefinePropertyOrThrow(F,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  6. ReturnF.
Note

An anonymousGeneratorDeclaration can only occur as part of anexport default declaration, and its function code is therefore alwaysstrict mode code.

15.5.4 Runtime Semantics: InstantiateGeneratorFunctionExpression

Thesyntax-directed operation InstantiateGeneratorFunctionExpression takes optional argumentname (aproperty key or aPrivate Name) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

GeneratorExpression:function*(FormalParameters){GeneratorBody}
  1. Ifname is not present, setname to"".
  2. Letenv be the LexicalEnvironment of therunning execution context.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byGeneratorExpression.
  5. Letclosure beOrdinaryFunctionCreate(%GeneratorFunction.prototype%,sourceText,FormalParameters,GeneratorBody,non-lexical-this,env,privateEnv).
  6. PerformSetFunctionName(closure,name).
  7. Letprototype beOrdinaryObjectCreate(%GeneratorPrototype%).
  8. Perform ! DefinePropertyOrThrow(closure,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  9. Returnclosure.
GeneratorExpression:function*BindingIdentifier(FormalParameters){GeneratorBody}
  1. Assert:name is not present.
  2. Setname to theStringValue ofBindingIdentifier.
  3. LetouterEnv be therunning execution context's LexicalEnvironment.
  4. LetfuncEnv beNewDeclarativeEnvironment(outerEnv).
  5. Perform ! funcEnv.CreateImmutableBinding(name,false).
  6. LetprivateEnv be therunning execution context's PrivateEnvironment.
  7. LetsourceText be thesource text matched byGeneratorExpression.
  8. Letclosure beOrdinaryFunctionCreate(%GeneratorFunction.prototype%,sourceText,FormalParameters,GeneratorBody,non-lexical-this,funcEnv,privateEnv).
  9. PerformSetFunctionName(closure,name).
  10. Letprototype beOrdinaryObjectCreate(%GeneratorPrototype%).
  11. Perform ! DefinePropertyOrThrow(closure,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  12. Perform ! funcEnv.InitializeBinding(name,closure).
  13. Returnclosure.
Note

TheBindingIdentifier in aGeneratorExpression can be referenced from inside theGeneratorExpression'sFunctionBody to allow the generator code to call itself recursively. However, unlike in aGeneratorDeclaration, theBindingIdentifier in aGeneratorExpression cannot be referenced from and does not affect the scope enclosing theGeneratorExpression.

15.5.5 Runtime Semantics: Evaluation

GeneratorExpression:function*BindingIdentifieropt(FormalParameters){GeneratorBody}
  1. ReturnInstantiateGeneratorFunctionExpression ofGeneratorExpression.
YieldExpression:yield
  1. Return ? Yield(undefined).
YieldExpression:yieldAssignmentExpression
  1. LetexprRef be ? Evaluation ofAssignmentExpression.
  2. Letvalue be ? GetValue(exprRef).
  3. Return ? Yield(value).
YieldExpression:yield*AssignmentExpression
  1. LetgeneratorKind beGetGeneratorKind().
  2. Assert:generatorKind is eithersync orasync.
  3. LetexprRef be ? Evaluation ofAssignmentExpression.
  4. Letvalue be ? GetValue(exprRef).
  5. LetiteratorRecord be ? GetIterator(value,generatorKind).
  6. Letiterator beiteratorRecord.[[Iterator]].
  7. Letreceived beNormalCompletion(undefined).
  8. Repeat,
    1. Ifreceived is anormal completion, then
      1. LetinnerResult be ? Call(iteratorRecord.[[NextMethod]],iteratorRecord.[[Iterator]], «received.[[Value]] »).
      2. IfgeneratorKind isasync, setinnerResult to ? Await(innerResult).
      3. IfinnerResultis not an Object, throw aTypeError exception.
      4. Letdone be ? IteratorComplete(innerResult).
      5. Ifdone istrue, then
        1. Return ? IteratorValue(innerResult).
      6. IfgeneratorKind isasync, setreceived toCompletion(AsyncGeneratorYield(?IteratorValue(innerResult))).
      7. Else, setreceived toCompletion(GeneratorYield(innerResult)).
    2. Else ifreceived is athrow completion, then
      1. Letthrow be ? GetMethod(iterator,"throw").
      2. Ifthrow is notundefined, then
        1. LetinnerResult be ? Call(throw,iterator, «received.[[Value]] »).
        2. IfgeneratorKind isasync, setinnerResult to ? Await(innerResult).
        3. NOTE: Exceptions from the inneriteratorthrow method are propagated.Normal completions from an innerthrow method are processed similarly to an innernext.
        4. IfinnerResultis not an Object, throw aTypeError exception.
        5. Letdone be ? IteratorComplete(innerResult).
        6. Ifdone istrue, then
          1. Return ? IteratorValue(innerResult).
        7. IfgeneratorKind isasync, setreceived toCompletion(AsyncGeneratorYield(?IteratorValue(innerResult))).
        8. Else, setreceived toCompletion(GeneratorYield(innerResult)).
      3. Else,
        1. NOTE: Ifiterator does not have athrow method, this throw is going to terminate theyield* loop. But first we need to giveiterator a chance to clean up.
        2. LetcloseCompletion beNormalCompletion(empty).
        3. IfgeneratorKind isasync, perform ? AsyncIteratorClose(iteratorRecord,closeCompletion).
        4. Else, perform ? IteratorClose(iteratorRecord,closeCompletion).
        5. NOTE: The next step throws aTypeError to indicate that there was ayield* protocol violation:iterator does not have athrow method.
        6. Throw aTypeError exception.
    3. Else,
      1. Assert:received is areturn completion.
      2. Letreturn be ? GetMethod(iterator,"return").
      3. Ifreturn isundefined, then
        1. LetreceivedValue bereceived.[[Value]].
        2. IfgeneratorKind isasync, then
          1. SetreceivedValue to ? Await(receivedValue).
        3. ReturnReturnCompletion(receivedValue).
      4. LetinnerReturnResult be ? Call(return,iterator, «received.[[Value]] »).
      5. IfgeneratorKind isasync, setinnerReturnResult to ? Await(innerReturnResult).
      6. IfinnerReturnResultis not an Object, throw aTypeError exception.
      7. Letdone be ? IteratorComplete(innerReturnResult).
      8. Ifdone istrue, then
        1. LetreturnedValue be ? IteratorValue(innerReturnResult).
        2. ReturnReturnCompletion(returnedValue).
      9. IfgeneratorKind isasync, setreceived toCompletion(AsyncGeneratorYield(?IteratorValue(innerReturnResult))).
      10. Else, setreceived toCompletion(GeneratorYield(innerReturnResult)).

15.6 Async Generator Function Definitions

Syntax

AsyncGeneratorDeclaration[Yield, Await, Default]:async[noLineTerminator here]function*BindingIdentifier[?Yield, ?Await](FormalParameters[+Yield, +Await]){AsyncGeneratorBody}[+Default]async[noLineTerminator here]function*(FormalParameters[+Yield, +Await]){AsyncGeneratorBody}AsyncGeneratorExpression:async[noLineTerminator here]function*BindingIdentifier[+Yield, +Await]opt(FormalParameters[+Yield, +Await]){AsyncGeneratorBody}AsyncGeneratorMethod[Yield, Await]:async[noLineTerminator here]*ClassElementName[?Yield, ?Await](UniqueFormalParameters[+Yield, +Await]){AsyncGeneratorBody}AsyncGeneratorBody:FunctionBody[+Yield, +Await]Note 1

YieldExpression andAwaitExpression cannot be used within theFormalParameters of an async generator function because any expressions that are part ofFormalParameters are evaluated before the resulting AsyncGenerator is in a resumable state.

Note 2

Abstract operations relating to AsyncGenerators are defined in27.6.3.

15.6.1 Static Semantics: Early Errors

AsyncGeneratorMethod:async*ClassElementName(UniqueFormalParameters){AsyncGeneratorBody}AsyncGeneratorDeclaration:asyncfunction*BindingIdentifier(FormalParameters){AsyncGeneratorBody}asyncfunction*(FormalParameters){AsyncGeneratorBody}AsyncGeneratorExpression:asyncfunction*BindingIdentifieropt(FormalParameters){AsyncGeneratorBody}

15.6.2 Runtime Semantics: EvaluateAsyncGeneratorBody

Thesyntax-directed operation EvaluateAsyncGeneratorBody takes argumentsfunctionObject (an ECMAScriptfunction object) andargumentsList (aList ofECMAScript language values) and returns athrow completion or areturn completion. It is defined piecewise over the following productions:

AsyncGeneratorBody:FunctionBody
  1. Perform ? FunctionDeclarationInstantiation(functionObject,argumentsList).
  2. Letgenerator be ? OrdinaryCreateFromConstructor(functionObject,"%AsyncGeneratorPrototype%", «[[AsyncGeneratorState]],[[AsyncGeneratorContext]],[[AsyncGeneratorQueue]],[[GeneratorBrand]] »).
  3. Setgenerator.[[GeneratorBrand]] toempty.
  4. Setgenerator.[[AsyncGeneratorState]] tosuspended-start.
  5. PerformAsyncGeneratorStart(generator,FunctionBody).
  6. ReturnReturnCompletion(generator).

15.6.3 Runtime Semantics: InstantiateAsyncGeneratorFunctionObject

Thesyntax-directed operation InstantiateAsyncGeneratorFunctionObject takes argumentsenv (anEnvironment Record) andprivateEnv (aPrivateEnvironment Record ornull) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

AsyncGeneratorDeclaration:asyncfunction*BindingIdentifier(FormalParameters){AsyncGeneratorBody}
  1. Letname be theStringValue ofBindingIdentifier.
  2. LetsourceText be thesource text matched byAsyncGeneratorDeclaration.
  3. LetF beOrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%,sourceText,FormalParameters,AsyncGeneratorBody,non-lexical-this,env,privateEnv).
  4. PerformSetFunctionName(F,name).
  5. Letprototype beOrdinaryObjectCreate(%AsyncGeneratorPrototype%).
  6. Perform ! DefinePropertyOrThrow(F,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  7. ReturnF.
AsyncGeneratorDeclaration:asyncfunction*(FormalParameters){AsyncGeneratorBody}
  1. LetsourceText be thesource text matched byAsyncGeneratorDeclaration.
  2. LetF beOrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%,sourceText,FormalParameters,AsyncGeneratorBody,non-lexical-this,env,privateEnv).
  3. PerformSetFunctionName(F,"default").
  4. Letprototype beOrdinaryObjectCreate(%AsyncGeneratorPrototype%).
  5. Perform ! DefinePropertyOrThrow(F,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  6. ReturnF.
Note

An anonymousAsyncGeneratorDeclaration can only occur as part of anexport default declaration.

15.6.4 Runtime Semantics: InstantiateAsyncGeneratorFunctionExpression

Thesyntax-directed operation InstantiateAsyncGeneratorFunctionExpression takes optional argumentname (aproperty key or aPrivate Name) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

AsyncGeneratorExpression:asyncfunction*(FormalParameters){AsyncGeneratorBody}
  1. Ifname is not present, setname to"".
  2. Letenv be the LexicalEnvironment of therunning execution context.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byAsyncGeneratorExpression.
  5. Letclosure beOrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%,sourceText,FormalParameters,AsyncGeneratorBody,non-lexical-this,env,privateEnv).
  6. PerformSetFunctionName(closure,name).
  7. Letprototype beOrdinaryObjectCreate(%AsyncGeneratorPrototype%).
  8. Perform ! DefinePropertyOrThrow(closure,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  9. Returnclosure.
AsyncGeneratorExpression:asyncfunction*BindingIdentifier(FormalParameters){AsyncGeneratorBody}
  1. Assert:name is not present.
  2. Setname to theStringValue ofBindingIdentifier.
  3. LetouterEnv be therunning execution context's LexicalEnvironment.
  4. LetfuncEnv beNewDeclarativeEnvironment(outerEnv).
  5. Perform ! funcEnv.CreateImmutableBinding(name,false).
  6. LetprivateEnv be therunning execution context's PrivateEnvironment.
  7. LetsourceText be thesource text matched byAsyncGeneratorExpression.
  8. Letclosure beOrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%,sourceText,FormalParameters,AsyncGeneratorBody,non-lexical-this,funcEnv,privateEnv).
  9. PerformSetFunctionName(closure,name).
  10. Letprototype beOrdinaryObjectCreate(%AsyncGeneratorPrototype%).
  11. Perform ! DefinePropertyOrThrow(closure,"prototype", PropertyDescriptor {[[Value]]:prototype,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }).
  12. Perform ! funcEnv.InitializeBinding(name,closure).
  13. Returnclosure.
Note

TheBindingIdentifier in anAsyncGeneratorExpression can be referenced from inside theAsyncGeneratorExpression'sAsyncGeneratorBody to allow the generator code to call itself recursively. However, unlike in anAsyncGeneratorDeclaration, theBindingIdentifier in anAsyncGeneratorExpression cannot be referenced from and does not affect the scope enclosing theAsyncGeneratorExpression.

15.6.5 Runtime Semantics: Evaluation

AsyncGeneratorExpression:asyncfunction*BindingIdentifieropt(FormalParameters){AsyncGeneratorBody}
  1. ReturnInstantiateAsyncGeneratorFunctionExpression ofAsyncGeneratorExpression.

15.7 Class Definitions

Syntax

ClassDeclaration[Yield, Await, Default]:classBindingIdentifier[?Yield, ?Await]ClassTail[?Yield, ?Await][+Default]classClassTail[?Yield, ?Await]ClassExpression[Yield, Await]:classBindingIdentifier[?Yield, ?Await]optClassTail[?Yield, ?Await]ClassTail[Yield, Await]:ClassHeritage[?Yield, ?Await]opt{ClassBody[?Yield, ?Await]opt}ClassHeritage[Yield, Await]:extendsLeftHandSideExpression[?Yield, ?Await]ClassBody[Yield, Await]:ClassElementList[?Yield, ?Await]ClassElementList[Yield, Await]:ClassElement[?Yield, ?Await]ClassElementList[?Yield, ?Await]ClassElement[?Yield, ?Await]ClassElement[Yield, Await]:MethodDefinition[?Yield, ?Await]staticMethodDefinition[?Yield, ?Await]FieldDefinition[?Yield, ?Await];staticFieldDefinition[?Yield, ?Await];ClassStaticBlock;FieldDefinition[Yield, Await]:ClassElementName[?Yield, ?Await]Initializer[+In, ?Yield, ?Await]optClassElementName[Yield, Await]:PropertyName[?Yield, ?Await]PrivateIdentifierClassStaticBlock:static{ClassStaticBlockBody}ClassStaticBlockBody:ClassStaticBlockStatementListClassStaticBlockStatementList:StatementList[~Yield, +Await, ~Return]optNote

A class definition is alwaysstrict mode code.

15.7.1 Static Semantics: Early Errors

ClassTail:ClassHeritageopt{ClassBody}ClassBody:ClassElementListClassElement:MethodDefinitionClassElement:staticMethodDefinitionClassElement:FieldDefinition;ClassElement:staticFieldDefinition;FieldDefinition:ClassElementNameInitializeroptClassElementName:PrivateIdentifierClassStaticBlockBody:ClassStaticBlockStatementList

15.7.2 Static Semantics: ClassElementKind

Thesyntax-directed operation ClassElementKind takes no arguments and returnsconstructor-method,non-constructor-method, orempty. It is defined piecewise over the following productions:

ClassElement:MethodDefinition
  1. If thePropName ofMethodDefinition is"constructor", returnconstructor-method.
  2. Returnnon-constructor-method.
ClassElement:staticMethodDefinitionFieldDefinition;staticFieldDefinition;
  1. Returnnon-constructor-method.
ClassElement:ClassStaticBlock
  1. Returnnon-constructor-method.
ClassElement:;
  1. Returnempty.

15.7.3 Static Semantics: ConstructorMethod

Thesyntax-directed operation ConstructorMethod takes no arguments and returns aClassElementParse Node orempty. It is defined piecewise over the following productions:

ClassElementList:ClassElement
  1. If theClassElementKind ofClassElement isconstructor-method, returnClassElement.
  2. Returnempty.
ClassElementList:ClassElementListClassElement
  1. Lethead be theConstructorMethod ofClassElementList.
  2. Ifhead is notempty, returnhead.
  3. If theClassElementKind ofClassElement isconstructor-method, returnClassElement.
  4. Returnempty.
Note

Early Error rules ensure that there is only one method definition named"constructor" and that it is not anaccessor property or generator definition.

15.7.4 Static Semantics: IsStatic

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

ClassElement:MethodDefinition
  1. Returnfalse.
ClassElement:staticMethodDefinition
  1. Returntrue.
ClassElement:FieldDefinition;
  1. Returnfalse.
ClassElement:staticFieldDefinition;
  1. Returntrue.
ClassElement:ClassStaticBlock
  1. Returntrue.
ClassElement:;
  1. Returnfalse.

15.7.5 Static Semantics: NonConstructorElements

Thesyntax-directed operation NonConstructorElements takes no arguments and returns aList ofClassElementParse Nodes. It is defined piecewise over the following productions:

ClassElementList:ClassElement
  1. If theClassElementKind ofClassElement isnon-constructor-method, then
    1. Return «ClassElement ».
  2. Return a new emptyList.
ClassElementList:ClassElementListClassElement
  1. Letlist be theNonConstructorElements ofClassElementList.
  2. If theClassElementKind ofClassElement isnon-constructor-method, then
    1. AppendClassElement to the end oflist.
  3. Returnlist.

15.7.6 Static Semantics: PrototypePropertyNameList

Thesyntax-directed operation PrototypePropertyNameList takes no arguments and returns aList ofproperty keys. It is defined piecewise over the following productions:

ClassElementList:ClassElement
  1. LetpropName be thePropName ofClassElement.
  2. IfpropName isempty, return a new emptyList.
  3. IfIsStatic ofClassElement istrue, return a new emptyList.
  4. Return «propName ».
ClassElementList:ClassElementListClassElement
  1. Letlist be thePrototypePropertyNameList ofClassElementList.
  2. LetpropName be thePropName ofClassElement.
  3. IfpropName isempty, returnlist.
  4. IfIsStatic ofClassElement istrue, returnlist.
  5. Return thelist-concatenation oflist and «propName ».

15.7.7 Static Semantics: AllPrivateIdentifiersValid

Thesyntax-directed operation AllPrivateIdentifiersValid takes argumentnames (aList of Strings) and returns a Boolean.

Every grammar production alternative in this specification which is not listed below implicitly has the following default definition of AllPrivateIdentifiersValid:

  1. For each child nodechild of thisParse Node, do
    1. Ifchild is an instance of a nonterminal, then
      1. IfAllPrivateIdentifiersValid ofchild with argumentnames isfalse, returnfalse.
  2. Returntrue.
MemberExpression:MemberExpression.PrivateIdentifier
  1. Ifnames contains theStringValue ofPrivateIdentifier, then
    1. ReturnAllPrivateIdentifiersValid ofMemberExpression with argumentnames.
  2. Returnfalse.
CallExpression:CallExpression.PrivateIdentifier
  1. Ifnames contains theStringValue ofPrivateIdentifier, then
    1. ReturnAllPrivateIdentifiersValid ofCallExpression with argumentnames.
  2. Returnfalse.
OptionalChain:?.PrivateIdentifier
  1. Ifnames contains theStringValue ofPrivateIdentifier, returntrue.
  2. Returnfalse.
OptionalChain:OptionalChain.PrivateIdentifier
  1. Ifnames contains theStringValue ofPrivateIdentifier, then
    1. ReturnAllPrivateIdentifiersValid ofOptionalChain with argumentnames.
  2. Returnfalse.
ClassBody:ClassElementList
  1. LetnewNames be thelist-concatenation ofnames and thePrivateBoundIdentifiers ofClassBody.
  2. ReturnAllPrivateIdentifiersValid ofClassElementList with argumentnewNames.
RelationalExpression:PrivateIdentifierinShiftExpression
  1. Ifnames contains theStringValue ofPrivateIdentifier, then
    1. ReturnAllPrivateIdentifiersValid ofShiftExpression with argumentnames.
  2. Returnfalse.

15.7.8 Static Semantics: PrivateBoundIdentifiers

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

FieldDefinition:ClassElementNameInitializeropt
  1. Return thePrivateBoundIdentifiers ofClassElementName.
ClassElementName:PrivateIdentifier
  1. Return aList whose sole element is theStringValue ofPrivateIdentifier.
ClassElementName:PropertyNameClassElement:ClassStaticBlock;
  1. Return a new emptyList.
ClassElementList:ClassElementListClassElement
  1. Letnames1 be thePrivateBoundIdentifiers ofClassElementList.
  2. Letnames2 be thePrivateBoundIdentifiers ofClassElement.
  3. Return thelist-concatenation ofnames1 andnames2.
MethodDefinition:ClassElementName(UniqueFormalParameters){FunctionBody}getClassElementName(){FunctionBody}setClassElementName(PropertySetParameterList){FunctionBody}GeneratorMethod:*ClassElementName(UniqueFormalParameters){GeneratorBody}AsyncMethod:asyncClassElementName(UniqueFormalParameters){AsyncFunctionBody}AsyncGeneratorMethod:async*ClassElementName(UniqueFormalParameters){AsyncGeneratorBody}
  1. Return thePrivateBoundIdentifiers ofClassElementName.

15.7.9 Static Semantics: ContainsArguments

Thesyntax-directed operation ContainsArguments takes no arguments and returns a Boolean.

Every grammar production alternative in this specification which is not listed below implicitly has the following default definition of ContainsArguments:

  1. For each child nodechild of thisParse Node, do
    1. Ifchild is an instance of a nonterminal, then
      1. IfContainsArguments ofchild istrue, returntrue.
  2. Returnfalse.
IdentifierReference:Identifier
  1. If theStringValue ofIdentifier is"arguments", returntrue.
  2. Returnfalse.
FunctionDeclaration:functionBindingIdentifier(FormalParameters){FunctionBody}function(FormalParameters){FunctionBody}FunctionExpression:functionBindingIdentifieropt(FormalParameters){FunctionBody}GeneratorDeclaration:function*BindingIdentifier(FormalParameters){GeneratorBody}function*(FormalParameters){GeneratorBody}GeneratorExpression:function*BindingIdentifieropt(FormalParameters){GeneratorBody}AsyncGeneratorDeclaration:asyncfunction*BindingIdentifier(FormalParameters){AsyncGeneratorBody}asyncfunction*(FormalParameters){AsyncGeneratorBody}AsyncGeneratorExpression:asyncfunction*BindingIdentifieropt(FormalParameters){AsyncGeneratorBody}AsyncFunctionDeclaration:asyncfunctionBindingIdentifier(FormalParameters){AsyncFunctionBody}asyncfunction(FormalParameters){AsyncFunctionBody}AsyncFunctionExpression:asyncfunctionBindingIdentifieropt(FormalParameters){AsyncFunctionBody}
  1. Returnfalse.
MethodDefinition:ClassElementName(UniqueFormalParameters){FunctionBody}getClassElementName(){FunctionBody}setClassElementName(PropertySetParameterList){FunctionBody}GeneratorMethod:*ClassElementName(UniqueFormalParameters){GeneratorBody}AsyncGeneratorMethod:async*ClassElementName(UniqueFormalParameters){AsyncGeneratorBody}AsyncMethod:asyncClassElementName(UniqueFormalParameters){AsyncFunctionBody}
  1. ReturnContainsArguments ofClassElementName.

15.7.10 Runtime Semantics: ClassFieldDefinitionEvaluation

Thesyntax-directed operation ClassFieldDefinitionEvaluation takes argumenthomeObject (an Object) and returns either anormal completion containing aClassFieldDefinition Record or anabrupt completion. It is defined piecewise over the following productions:

FieldDefinition:ClassElementNameInitializeropt
  1. Letname be ? Evaluation ofClassElementName.
  2. IfInitializer is present, then
    1. LetformalParameterList be an instance of the productionFormalParameters:[empty].
    2. Letenv be the LexicalEnvironment of therunning execution context.
    3. LetprivateEnv be therunning execution context's PrivateEnvironment.
    4. LetsourceText be the empty sequence of Unicode code points.
    5. Letinitializer beOrdinaryFunctionCreate(%Function.prototype%,sourceText,formalParameterList,Initializer,non-lexical-this,env,privateEnv).
    6. PerformMakeMethod(initializer,homeObject).
    7. Setinitializer.[[ClassFieldInitializerName]] toname.
  3. Else,
    1. Letinitializer beempty.
  4. Return theClassFieldDefinition Record {[[Name]]:name,[[Initializer]]:initializer }.
Note
The function created forinitializer is never directly accessible to ECMAScript code.

15.7.11 Runtime Semantics: ClassStaticBlockDefinitionEvaluation

Thesyntax-directed operation ClassStaticBlockDefinitionEvaluation takes argumenthomeObject (an Object) and returns aClassStaticBlockDefinition Record. It is defined piecewise over the following productions:

ClassStaticBlock:static{ClassStaticBlockBody}
  1. Letlex be therunning execution context's LexicalEnvironment.
  2. LetprivateEnv be therunning execution context's PrivateEnvironment.
  3. LetsourceText be the empty sequence of Unicode code points.
  4. LetformalParameters be an instance of the productionFormalParameters:[empty].
  5. LetbodyFunction beOrdinaryFunctionCreate(%Function.prototype%,sourceText,formalParameters,ClassStaticBlockBody,non-lexical-this,lex,privateEnv).
  6. PerformMakeMethod(bodyFunction,homeObject).
  7. Return theClassStaticBlockDefinition Record {[[BodyFunction]]:bodyFunction }.
Note
The functionbodyFunction is never directly accessible to ECMAScript code.

15.7.12 Runtime Semantics: EvaluateClassStaticBlockBody

Thesyntax-directed operation EvaluateClassStaticBlockBody takes argumentfunctionObject (an ECMAScriptfunction object) and returns areturn completion or athrow completion. It is defined piecewise over the following productions:

ClassStaticBlockBody:ClassStaticBlockStatementList
  1. Assert:functionObject is a synthetic function created byClassStaticBlockDefinitionEvaluation step5.
  2. Perform ! FunctionDeclarationInstantiation(functionObject, « »).
  3. Perform ? Evaluation ofClassStaticBlockStatementList.
  4. ReturnReturnCompletion(undefined).

15.7.13 Runtime Semantics: ClassElementEvaluation

Thesyntax-directed operation ClassElementEvaluation takes argumentobject (an Object) and returns either anormal completion containing either aClassFieldDefinition Record, aClassStaticBlockDefinition Record, aPrivateElement, orunused, or anabrupt completion. It is defined piecewise over the following productions:

ClassElement:FieldDefinition;staticFieldDefinition;
  1. Return ? ClassFieldDefinitionEvaluation ofFieldDefinition with argumentobject.
ClassElement:MethodDefinitionstaticMethodDefinition
  1. Return ? MethodDefinitionEvaluation ofMethodDefinition with argumentsobject andfalse.
ClassElement:ClassStaticBlock
  1. Return theClassStaticBlockDefinitionEvaluation ofClassStaticBlock with argumentobject.
ClassElement:;
  1. Returnunused.

15.7.14 Runtime Semantics: ClassDefinitionEvaluation

Thesyntax-directed operation ClassDefinitionEvaluation takes argumentsclassBinding (a String orundefined),className (aproperty key or aPrivate Name), andsourceText (ECMAScript source text) and returns either anormal completion containing afunction object or anabrupt completion.

Note

For ease of specification, private methods and accessors are included alongside private fields in the[[PrivateElements]] slot of class instances. However, any given object has either all or none of the private methods and accessors defined by a given class. This feature has been designed so that implementations may choose to implement private methods and accessors using a strategy which does not require tracking each method or accessor individually.

For example, an implementation could directly associate instance private methods with their correspondingPrivate Name and track, for each object, which classconstructors have run with that object as theirthis value. Looking up an instance private method on an object then consists of checking that the classconstructor which defines the method has been used to initialize the object, then returning the method associated with thePrivate Name.

This differs from private fields: because field initializers can throw during class instantiation, an individual object may have some proper subset of the private fields of a given class, and so private fields must in general be tracked individually.

It is defined piecewise over the following productions:

ClassTail:ClassHeritageopt{ClassBodyopt}
  1. Letenv be the LexicalEnvironment of therunning execution context.
  2. LetclassEnv beNewDeclarativeEnvironment(env).
  3. IfclassBinding is notundefined, then
    1. Perform ! classEnv.CreateImmutableBinding(classBinding,true).
  4. LetouterPrivateEnvironment be therunning execution context's PrivateEnvironment.
  5. LetclassPrivateEnvironment beNewPrivateEnvironment(outerPrivateEnvironment).
  6. IfClassBody is present, then
    1. For each Stringdn of thePrivateBoundIdentifiers ofClassBody, do
      1. IfclassPrivateEnvironment.[[Names]] contains aPrivate Namepn such thatpn.[[Description]] isdn, then
        1. Assert: This is only possible for getter/setter pairs.
      2. Else,
        1. Letname be a newPrivate Name whose[[Description]] isdn.
        2. Appendname toclassPrivateEnvironment.[[Names]].
  7. IfClassHeritage is not present, then
    1. LetprotoParent be%Object.prototype%.
    2. LetconstructorParent be%Function.prototype%.
  8. Else,
    1. Set therunning execution context's LexicalEnvironment toclassEnv.
    2. NOTE: Therunning execution context's PrivateEnvironment isouterPrivateEnvironment when evaluatingClassHeritage.
    3. LetsuperclassRef beCompletion(Evaluation ofClassHeritage).
    4. Set therunning execution context's LexicalEnvironment toenv.
    5. Letsuperclass be ? GetValue(?superclassRef).
    6. Ifsuperclass isnull, then
      1. LetprotoParent benull.
      2. LetconstructorParent be%Function.prototype%.
    7. Else ifIsConstructor(superclass) isfalse, then
      1. Throw aTypeError exception.
    8. Else,
      1. LetprotoParent be ? Get(superclass,"prototype").
      2. IfprotoParentis not an Object andprotoParent is notnull, throw aTypeError exception.
      3. LetconstructorParent besuperclass.
  9. Letproto beOrdinaryObjectCreate(protoParent).
  10. IfClassBody is not present, letconstructor beempty.
  11. Else, letconstructor be theConstructorMethod ofClassBody.
  12. Set therunning execution context's LexicalEnvironment toclassEnv.
  13. Set therunning execution context's PrivateEnvironment toclassPrivateEnvironment.
  14. Ifconstructor isempty, then
    1. LetdefaultConstructor be a newAbstract Closure with no parameters that captures nothing and performs the following steps when called:
      1. Letargs be theList of arguments that was passed to this function by[[Call]] or[[Construct]].
      2. If NewTarget isundefined, throw aTypeError exception.
      3. LetF be theactive function object.
      4. IfF.[[ConstructorKind]] isderived, then
        1. NOTE: This branch behaves similarly toconstructor(...args) { super(...args); }. The most notable distinction is that while the aforementionedECMAScript source text observably calls the%Symbol.iterator% method on%Array.prototype%, this function does not.
        2. Letfunc be ! F.[[GetPrototypeOf]]().
        3. IfIsConstructor(func) isfalse, throw aTypeError exception.
        4. Letresult be ? Construct(func,args, NewTarget).
      5. Else,
        1. NOTE: This branch behaves similarly toconstructor() {}.
        2. Letresult be ? OrdinaryCreateFromConstructor(NewTarget,"%Object.prototype%").
      6. Perform ? InitializeInstanceElements(result,F).
      7. ReturnNormalCompletion(result).
    2. LetF beCreateBuiltinFunction(defaultConstructor, 0,className, «[[ConstructorKind]],[[SourceText]],[[PrivateMethods]],[[Fields]] »,the current Realm Record,constructorParent).
  15. Else,
    1. LetconstructorInfo be ! DefineMethod ofconstructor with argumentsproto andconstructorParent.
    2. LetF beconstructorInfo.[[Closure]].
    3. PerformMakeClassConstructor(F).
    4. PerformSetFunctionName(F,className).
  16. SetF.[[SourceText]] tosourceText.
  17. PerformMakeConstructor(F,false,proto).
  18. IfClassHeritage is present, setF.[[ConstructorKind]] toderived.
  19. Perform ! DefineMethodProperty(proto,"constructor",F,false).
  20. IfClassBody is not present, letelements be a new emptyList.
  21. Else, letelements be theNonConstructorElements ofClassBody.
  22. LetinstancePrivateMethods be a new emptyList.
  23. LetstaticPrivateMethods be a new emptyList.
  24. LetinstanceFields be a new emptyList.
  25. LetstaticElements be a new emptyList.
  26. For eachClassElemente ofelements, do
    1. IfIsStatic ofe isfalse, then
      1. Letelement beCompletion(ClassElementEvaluation ofe with argumentproto).
    2. Else,
      1. Letelement beCompletion(ClassElementEvaluation ofe with argumentF).
    3. Ifelement is anabrupt completion, then
      1. Set therunning execution context's LexicalEnvironment toenv.
      2. Set therunning execution context's PrivateEnvironment toouterPrivateEnvironment.
      3. Return ? element.
    4. Setelement to ! element.
    5. Ifelement is aPrivateElement, then
      1. Assert:element.[[Kind]] is eithermethod oraccessor.
      2. IfIsStatic ofe isfalse, letcontainer beinstancePrivateMethods.
      3. Else, letcontainer bestaticPrivateMethods.
      4. Ifcontainer contains aPrivateElementpe such thatpe.[[Key]] iselement.[[Key]], then
        1. Assert:element.[[Kind]] andpe.[[Kind]] are bothaccessor.
        2. Ifelement.[[Get]] isundefined, then
          1. Letcombined bePrivateElement {[[Key]]:element.[[Key]],[[Kind]]:accessor,[[Get]]:pe.[[Get]],[[Set]]:element.[[Set]] }.
        3. Else,
          1. Letcombined bePrivateElement {[[Key]]:element.[[Key]],[[Kind]]:accessor,[[Get]]:element.[[Get]],[[Set]]:pe.[[Set]] }.
        4. Replacepe incontainer withcombined.
      5. Else,
        1. Appendelement tocontainer.
    6. Else ifelement is aClassFieldDefinition Record, then
      1. IfIsStatic ofe isfalse, appendelement toinstanceFields.
      2. Else, appendelement tostaticElements.
    7. Else ifelement is aClassStaticBlockDefinition Record, then
      1. Appendelement tostaticElements.
  27. Set therunning execution context's LexicalEnvironment toenv.
  28. IfclassBinding is notundefined, then
    1. Perform ! classEnv.InitializeBinding(classBinding,F).
  29. SetF.[[PrivateMethods]] toinstancePrivateMethods.
  30. SetF.[[Fields]] toinstanceFields.
  31. For eachPrivateElementmethod ofstaticPrivateMethods, do
    1. Perform ! PrivateMethodOrAccessorAdd(F,method).
  32. For each elementelementRecord ofstaticElements, do
    1. IfelementRecord is aClassFieldDefinition Record, then
      1. Letresult beCompletion(DefineField(F,elementRecord)).
    2. Else,
      1. Assert:elementRecord is aClassStaticBlockDefinition Record.
      2. Letresult beCompletion(Call(elementRecord.[[BodyFunction]],F)).
    3. Ifresult is anabrupt completion, then
      1. Set therunning execution context's PrivateEnvironment toouterPrivateEnvironment.
      2. Return ? result.
  33. Set therunning execution context's PrivateEnvironment toouterPrivateEnvironment.
  34. ReturnF.

15.7.15 Runtime Semantics: BindingClassDeclarationEvaluation

Thesyntax-directed operation BindingClassDeclarationEvaluation takes no arguments and returns either anormal completion containing afunction object or anabrupt completion. It is defined piecewise over the following productions:

ClassDeclaration:classBindingIdentifierClassTail
  1. LetclassName be theStringValue ofBindingIdentifier.
  2. LetsourceText be thesource text matched byClassDeclaration.
  3. Letvalue be ? ClassDefinitionEvaluation ofClassTail with argumentsclassName,className, andsourceText.
  4. Letenv be therunning execution context's LexicalEnvironment.
  5. Perform ? InitializeBoundName(className,value,env).
  6. Returnvalue.
ClassDeclaration:classClassTail
  1. LetsourceText be thesource text matched byClassDeclaration.
  2. Return ? ClassDefinitionEvaluation ofClassTail with argumentsundefined,"default", andsourceText.
Note

ClassDeclaration:classClassTail only occurs as part of anExportDeclaration and establishing its binding is handled as part of the evaluation action for that production. See16.2.3.7.

15.7.16 Runtime Semantics: Evaluation

ClassDeclaration:classBindingIdentifierClassTail
  1. Perform ? BindingClassDeclarationEvaluation of thisClassDeclaration.
  2. Returnempty.
Note

ClassDeclaration:classClassTail only occurs as part of anExportDeclaration and is never directly evaluated.

ClassExpression:classClassTail
  1. LetsourceText be thesource text matched byClassExpression.
  2. Return ? ClassDefinitionEvaluation ofClassTail with argumentsundefined,"", andsourceText.
ClassExpression:classBindingIdentifierClassTail
  1. LetclassName be theStringValue ofBindingIdentifier.
  2. LetsourceText be thesource text matched byClassExpression.
  3. Return ? ClassDefinitionEvaluation ofClassTail with argumentsclassName,className, andsourceText.
ClassElementName:PrivateIdentifier
  1. LetprivateIdentifier be theStringValue ofPrivateIdentifier.
  2. LetprivateEnvRec be therunning execution context's PrivateEnvironment.
  3. Letnames beprivateEnvRec.[[Names]].
  4. Assert: Exactly one element ofnames is aPrivate Name whose[[Description]] isprivateIdentifier.
  5. LetprivateName be thePrivate Name innames whose[[Description]] isprivateIdentifier.
  6. ReturnprivateName.
ClassStaticBlockStatementList:[empty]
  1. Returnundefined.

15.8 Async Function Definitions

Syntax

AsyncFunctionDeclaration[Yield, Await, Default]:async[noLineTerminator here]functionBindingIdentifier[?Yield, ?Await](FormalParameters[~Yield, +Await]){AsyncFunctionBody}[+Default]async[noLineTerminator here]function(FormalParameters[~Yield, +Await]){AsyncFunctionBody}AsyncFunctionExpression:async[noLineTerminator here]functionBindingIdentifier[~Yield, +Await]opt(FormalParameters[~Yield, +Await]){AsyncFunctionBody}AsyncMethod[Yield, Await]:async[noLineTerminator here]ClassElementName[?Yield, ?Await](UniqueFormalParameters[~Yield, +Await]){AsyncFunctionBody}AsyncFunctionBody:FunctionBody[~Yield, +Await]AwaitExpression[Yield]:awaitUnaryExpression[?Yield, +Await]Note 1

await is parsed as akeyword of anAwaitExpression when the[Await] parameter is present. The[Await] parameter is present in the top level of the following contexts, although the parameter may be absent in some contexts depending on the nonterminals, such asFunctionBody:

WhenScript is the syntacticgoal symbol,await may be parsed as an identifier when the[Await] parameter is absent. This includes the following contexts:

Note 2

UnlikeYieldExpression, it is a Syntax Error to omit the operand of anAwaitExpression. You must await something.

15.8.1 Static Semantics: Early Errors

AsyncMethod:asyncClassElementName(UniqueFormalParameters){AsyncFunctionBody}AsyncFunctionDeclaration:asyncfunctionBindingIdentifier(FormalParameters){AsyncFunctionBody}asyncfunction(FormalParameters){AsyncFunctionBody}AsyncFunctionExpression:asyncfunctionBindingIdentifieropt(FormalParameters){AsyncFunctionBody}

15.8.2 Runtime Semantics: InstantiateAsyncFunctionObject

Thesyntax-directed operation InstantiateAsyncFunctionObject takes argumentsenv (anEnvironment Record) andprivateEnv (aPrivateEnvironment Record ornull) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

AsyncFunctionDeclaration:asyncfunctionBindingIdentifier(FormalParameters){AsyncFunctionBody}
  1. Letname be theStringValue ofBindingIdentifier.
  2. LetsourceText be thesource text matched byAsyncFunctionDeclaration.
  3. LetF beOrdinaryFunctionCreate(%AsyncFunction.prototype%,sourceText,FormalParameters,AsyncFunctionBody,non-lexical-this,env,privateEnv).
  4. PerformSetFunctionName(F,name).
  5. ReturnF.
AsyncFunctionDeclaration:asyncfunction(FormalParameters){AsyncFunctionBody}
  1. LetsourceText be thesource text matched byAsyncFunctionDeclaration.
  2. LetF beOrdinaryFunctionCreate(%AsyncFunction.prototype%,sourceText,FormalParameters,AsyncFunctionBody,non-lexical-this,env,privateEnv).
  3. PerformSetFunctionName(F,"default").
  4. ReturnF.

15.8.3 Runtime Semantics: InstantiateAsyncFunctionExpression

Thesyntax-directed operation InstantiateAsyncFunctionExpression takes optional argumentname (aproperty key or aPrivate Name) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

AsyncFunctionExpression:asyncfunction(FormalParameters){AsyncFunctionBody}
  1. Ifname is not present, setname to"".
  2. Letenv be the LexicalEnvironment of therunning execution context.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byAsyncFunctionExpression.
  5. Letclosure beOrdinaryFunctionCreate(%AsyncFunction.prototype%,sourceText,FormalParameters,AsyncFunctionBody,non-lexical-this,env,privateEnv).
  6. PerformSetFunctionName(closure,name).
  7. Returnclosure.
AsyncFunctionExpression:asyncfunctionBindingIdentifier(FormalParameters){AsyncFunctionBody}
  1. Assert:name is not present.
  2. Setname to theStringValue ofBindingIdentifier.
  3. LetouterEnv be the LexicalEnvironment of therunning execution context.
  4. LetfuncEnv beNewDeclarativeEnvironment(outerEnv).
  5. Perform ! funcEnv.CreateImmutableBinding(name,false).
  6. LetprivateEnv be therunning execution context's PrivateEnvironment.
  7. LetsourceText be thesource text matched byAsyncFunctionExpression.
  8. Letclosure beOrdinaryFunctionCreate(%AsyncFunction.prototype%,sourceText,FormalParameters,AsyncFunctionBody,non-lexical-this,funcEnv,privateEnv).
  9. PerformSetFunctionName(closure,name).
  10. Perform ! funcEnv.InitializeBinding(name,closure).
  11. Returnclosure.
Note

TheBindingIdentifier in anAsyncFunctionExpression can be referenced from inside theAsyncFunctionExpression'sAsyncFunctionBody to allow the function to call itself recursively. However, unlike in aFunctionDeclaration, theBindingIdentifier in aAsyncFunctionExpression cannot be referenced from and does not affect the scope enclosing theAsyncFunctionExpression.

15.8.4 Runtime Semantics: EvaluateAsyncFunctionBody

Thesyntax-directed operation EvaluateAsyncFunctionBody takes argumentsfunctionObject (an ECMAScriptfunction object) andargumentsList (aList ofECMAScript language values) and returns areturn completion. It is defined piecewise over the following productions:

AsyncFunctionBody:FunctionBody
  1. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  2. Letcompletion beCompletion(FunctionDeclarationInstantiation(functionObject,argumentsList)).
  3. Ifcompletion is anabrupt completion, then
    1. Perform ! Call(promiseCapability.[[Reject]],undefined, «completion.[[Value]] »).
  4. Else,
    1. PerformAsyncFunctionStart(promiseCapability,FunctionBody).
  5. ReturnReturnCompletion(promiseCapability.[[Promise]]).

15.8.5 Runtime Semantics: Evaluation

AsyncFunctionExpression:asyncfunctionBindingIdentifieropt(FormalParameters){AsyncFunctionBody}
  1. ReturnInstantiateAsyncFunctionExpression ofAsyncFunctionExpression.
AwaitExpression:awaitUnaryExpression
  1. LetexprRef be ? Evaluation ofUnaryExpression.
  2. Letvalue be ? GetValue(exprRef).
  3. Return ? Await(value).

15.9 Async Arrow Function Definitions

Syntax

AsyncArrowFunction[In, Yield, Await]:async[noLineTerminator here]AsyncArrowBindingIdentifier[?Yield][noLineTerminator here]=>AsyncConciseBody[?In]CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][noLineTerminator here]=>AsyncConciseBody[?In]AsyncConciseBody[In]:[lookahead ≠{]ExpressionBody[?In, +Await]{AsyncFunctionBody}AsyncArrowBindingIdentifier[Yield]:BindingIdentifier[?Yield, +Await]CoverCallExpressionAndAsyncArrowHead[Yield, Await]:MemberExpression[?Yield, ?Await]Arguments[?Yield, ?Await]

Supplemental Syntax

When processing an instance of the production
AsyncArrowFunction:CoverCallExpressionAndAsyncArrowHead=>AsyncConciseBody
the interpretation ofCoverCallExpressionAndAsyncArrowHead is refined using the following grammar:

AsyncArrowHead:async[noLineTerminator here]ArrowFormalParameters[~Yield, +Await]

15.9.1 Static Semantics: Early Errors

AsyncArrowFunction:asyncAsyncArrowBindingIdentifier=>AsyncConciseBodyAsyncArrowFunction:CoverCallExpressionAndAsyncArrowHead=>AsyncConciseBody

15.9.2 Static Semantics: AsyncConciseBodyContainsUseStrict

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

AsyncConciseBody:ExpressionBody
  1. Returnfalse.
AsyncConciseBody:{AsyncFunctionBody}
  1. ReturnFunctionBodyContainsUseStrict ofAsyncFunctionBody.

15.9.3 Runtime Semantics: EvaluateAsyncConciseBody

Thesyntax-directed operation EvaluateAsyncConciseBody takes argumentsfunctionObject (an ECMAScriptfunction object) andargumentsList (aList ofECMAScript language values) and returns areturn completion. It is defined piecewise over the following productions:

AsyncConciseBody:ExpressionBody
  1. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  2. Letcompletion beCompletion(FunctionDeclarationInstantiation(functionObject,argumentsList)).
  3. Ifcompletion is anabrupt completion, then
    1. Perform ! Call(promiseCapability.[[Reject]],undefined, «completion.[[Value]] »).
  4. Else,
    1. PerformAsyncFunctionStart(promiseCapability,ExpressionBody).
  5. ReturnReturnCompletion(promiseCapability.[[Promise]]).

15.9.4 Runtime Semantics: InstantiateAsyncArrowFunctionExpression

Thesyntax-directed operation InstantiateAsyncArrowFunctionExpression takes optional argumentname (aproperty key or aPrivate Name) and returns an ECMAScriptfunction object. It is defined piecewise over the following productions:

AsyncArrowFunction:asyncAsyncArrowBindingIdentifier=>AsyncConciseBody
  1. Ifname is not present, setname to"".
  2. Letenv be the LexicalEnvironment of therunning execution context.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byAsyncArrowFunction.
  5. Letparameters beAsyncArrowBindingIdentifier.
  6. Letclosure beOrdinaryFunctionCreate(%AsyncFunction.prototype%,sourceText,parameters,AsyncConciseBody,lexical-this,env,privateEnv).
  7. PerformSetFunctionName(closure,name).
  8. Returnclosure.
AsyncArrowFunction:CoverCallExpressionAndAsyncArrowHead=>AsyncConciseBody
  1. Ifname is not present, setname to"".
  2. Letenv be the LexicalEnvironment of therunning execution context.
  3. LetprivateEnv be therunning execution context's PrivateEnvironment.
  4. LetsourceText be thesource text matched byAsyncArrowFunction.
  5. Lethead be theAsyncArrowHead that iscovered byCoverCallExpressionAndAsyncArrowHead.
  6. Letparameters be theArrowFormalParameters ofhead.
  7. Letclosure beOrdinaryFunctionCreate(%AsyncFunction.prototype%,sourceText,parameters,AsyncConciseBody,lexical-this,env,privateEnv).
  8. PerformSetFunctionName(closure,name).
  9. Returnclosure.

15.9.5 Runtime Semantics: Evaluation

AsyncArrowFunction:asyncAsyncArrowBindingIdentifier=>AsyncConciseBodyCoverCallExpressionAndAsyncArrowHead=>AsyncConciseBody
  1. ReturnInstantiateAsyncArrowFunctionExpression ofAsyncArrowFunction.

15.10 Tail Position Calls

15.10.1 Static Semantics: IsInTailPosition (call )

The abstract operation IsInTailPosition takes argumentcall (aCallExpressionParse Node, aMemberExpressionParse Node, or anOptionalChainParse Node) and returns a Boolean. It performs the following steps when called:

  1. IfIsStrict(call) isfalse, returnfalse.
  2. Ifcall is not contained within aFunctionBody, aConciseBody, or anAsyncConciseBody, returnfalse.
  3. Letbody be theFunctionBody,ConciseBody, orAsyncConciseBody that most closely containscall.
  4. Ifbody is theFunctionBody of aGeneratorBody, returnfalse.
  5. Ifbody is theFunctionBody of anAsyncFunctionBody, returnfalse.
  6. Ifbody is theFunctionBody of anAsyncGeneratorBody, returnfalse.
  7. Ifbody is anAsyncConciseBody, returnfalse.
  8. Return the result ofHasCallInTailPosition ofbody with argumentcall.
Note

Tail Position calls are only defined instrict mode code because of a common non-standard language extension (see10.2.4) that enables observation of the chain of caller contexts.

15.10.2 Static Semantics: HasCallInTailPosition

Thesyntax-directed operation HasCallInTailPosition takes argumentcall (aCallExpressionParse Node, aMemberExpressionParse Node, or anOptionalChainParse Node) and returns a Boolean.

Note 1

call is aParse Node that represents a specific range of source text. When the following algorithms comparecall to anotherParse Node, it is a test of whether they represent the same source text.

Note 2

A potential tail position call that is immediately followed by returnGetValue of the call result is also a possible tail position call. A function call cannot return aReference Record, so such aGetValue operation will always return the same value as the actual function call result.

It is defined piecewise over the following productions:

StatementList:StatementListStatementListItem
  1. Lethas beHasCallInTailPosition ofStatementList with argumentcall.
  2. Ifhas istrue, returntrue.
  3. ReturnHasCallInTailPosition ofStatementListItem with argumentcall.
FunctionStatementList:[empty]StatementListItem:DeclarationStatement:VariableStatementEmptyStatementExpressionStatementContinueStatementBreakStatementThrowStatementDebuggerStatementBlock:{}ReturnStatement:return;LabelledItem:FunctionDeclarationForInOfStatement:for(LeftHandSideExpressionofAssignmentExpression)Statementfor(varForBindingofAssignmentExpression)Statementfor(ForDeclarationofAssignmentExpression)StatementCaseBlock:{}
  1. Returnfalse.
IfStatement:if(Expression)StatementelseStatement
  1. Lethas beHasCallInTailPosition of the firstStatement with argumentcall.
  2. Ifhas istrue, returntrue.
  3. ReturnHasCallInTailPosition of the secondStatement with argumentcall.
IfStatement:if(Expression)StatementDoWhileStatement:doStatementwhile(Expression);WhileStatement:while(Expression)StatementForStatement:for(Expressionopt;Expressionopt;Expressionopt)Statementfor(varVariableDeclarationList;Expressionopt;Expressionopt)Statementfor(LexicalDeclarationExpressionopt;Expressionopt)StatementForInOfStatement:for(LeftHandSideExpressioninExpression)Statementfor(varForBindinginExpression)Statementfor(ForDeclarationinExpression)StatementWithStatement:with(Expression)Statement
  1. ReturnHasCallInTailPosition ofStatement with argumentcall.
LabelledStatement:LabelIdentifier:LabelledItem
  1. ReturnHasCallInTailPosition ofLabelledItem with argumentcall.
ReturnStatement:returnExpression;
  1. ReturnHasCallInTailPosition ofExpression with argumentcall.
SwitchStatement:switch(Expression)CaseBlock
  1. ReturnHasCallInTailPosition ofCaseBlock with argumentcall.
CaseBlock:{CaseClausesoptDefaultClauseCaseClausesopt}
  1. Lethas befalse.
  2. If the firstCaseClauses is present, sethas toHasCallInTailPosition of the firstCaseClauses with argumentcall.
  3. Ifhas istrue, returntrue.
  4. Sethas toHasCallInTailPosition ofDefaultClause with argumentcall.
  5. Ifhas istrue, returntrue.
  6. If the secondCaseClauses is present, sethas toHasCallInTailPosition of the secondCaseClauses with argumentcall.
  7. Returnhas.
CaseClauses:CaseClausesCaseClause
  1. Lethas beHasCallInTailPosition ofCaseClauses with argumentcall.
  2. Ifhas istrue, returntrue.
  3. ReturnHasCallInTailPosition ofCaseClause with argumentcall.
CaseClause:caseExpression:StatementListoptDefaultClause:default:StatementListopt
  1. IfStatementList is present, returnHasCallInTailPosition ofStatementList with argumentcall.
  2. Returnfalse.
TryStatement:tryBlockCatch
  1. ReturnHasCallInTailPosition ofCatch with argumentcall.
TryStatement:tryBlockFinallytryBlockCatchFinally
  1. ReturnHasCallInTailPosition ofFinally with argumentcall.
Catch:catch(CatchParameter)Block
  1. ReturnHasCallInTailPosition ofBlock with argumentcall.
AssignmentExpression:YieldExpressionArrowFunctionAsyncArrowFunctionLeftHandSideExpression=AssignmentExpressionLeftHandSideExpressionAssignmentOperatorAssignmentExpressionLeftHandSideExpression&&=AssignmentExpressionLeftHandSideExpression||=AssignmentExpressionLeftHandSideExpression??=AssignmentExpressionBitwiseANDExpression:BitwiseANDExpression&EqualityExpressionBitwiseXORExpression:BitwiseXORExpression^BitwiseANDExpressionBitwiseORExpression:BitwiseORExpression|BitwiseXORExpressionEqualityExpression:EqualityExpression==RelationalExpressionEqualityExpression!=RelationalExpressionEqualityExpression===RelationalExpressionEqualityExpression!==RelationalExpressionRelationalExpression:RelationalExpression<ShiftExpressionRelationalExpression>ShiftExpressionRelationalExpression<=ShiftExpressionRelationalExpression>=ShiftExpressionRelationalExpressioninstanceofShiftExpressionRelationalExpressioninShiftExpressionPrivateIdentifierinShiftExpressionShiftExpression:ShiftExpression<<AdditiveExpressionShiftExpression>>AdditiveExpressionShiftExpression>>>AdditiveExpressionAdditiveExpression:AdditiveExpression+MultiplicativeExpressionAdditiveExpression-MultiplicativeExpressionMultiplicativeExpression:MultiplicativeExpressionMultiplicativeOperatorExponentiationExpressionExponentiationExpression:UpdateExpression**ExponentiationExpressionUpdateExpression:LeftHandSideExpression++LeftHandSideExpression--++UnaryExpression--UnaryExpressionUnaryExpression:deleteUnaryExpressionvoidUnaryExpressiontypeofUnaryExpression+UnaryExpression-UnaryExpression~UnaryExpression!UnaryExpressionAwaitExpressionCallExpression:SuperCallImportCallCallExpression[Expression]CallExpression.IdentifierNameCallExpression.PrivateIdentifierNewExpression:newNewExpressionMemberExpression:MemberExpression[Expression]MemberExpression.IdentifierNameSuperPropertyMetaPropertynewMemberExpressionArgumentsMemberExpression.PrivateIdentifierPrimaryExpression:thisIdentifierReferenceLiteralArrayLiteralObjectLiteralFunctionExpressionClassExpressionGeneratorExpressionAsyncFunctionExpressionAsyncGeneratorExpressionRegularExpressionLiteralTemplateLiteral
  1. Returnfalse.
Expression:AssignmentExpressionExpression,AssignmentExpression
  1. ReturnHasCallInTailPosition ofAssignmentExpression with argumentcall.
ConditionalExpression:ShortCircuitExpression?AssignmentExpression:AssignmentExpression
  1. Lethas beHasCallInTailPosition of the firstAssignmentExpression with argumentcall.
  2. Ifhas istrue, returntrue.
  3. ReturnHasCallInTailPosition of the secondAssignmentExpression with argumentcall.
LogicalANDExpression:LogicalANDExpression&&BitwiseORExpression
  1. ReturnHasCallInTailPosition ofBitwiseORExpression with argumentcall.
LogicalORExpression:LogicalORExpression||LogicalANDExpression
  1. ReturnHasCallInTailPosition ofLogicalANDExpression with argumentcall.
CoalesceExpression:CoalesceExpressionHead??BitwiseORExpression
  1. ReturnHasCallInTailPosition ofBitwiseORExpression with argumentcall.
CallExpression:CoverCallExpressionAndAsyncArrowHeadCallExpressionArgumentsCallExpressionTemplateLiteral
  1. If thisCallExpression iscall, returntrue.
  2. Returnfalse.
OptionalExpression:MemberExpressionOptionalChainCallExpressionOptionalChainOptionalExpressionOptionalChain
  1. ReturnHasCallInTailPosition ofOptionalChain with argumentcall.
OptionalChain:?.[Expression]?.IdentifierName?.PrivateIdentifierOptionalChain[Expression]OptionalChain.IdentifierNameOptionalChain.PrivateIdentifier
  1. Returnfalse.
OptionalChain:?.ArgumentsOptionalChainArguments
  1. If thisOptionalChain iscall, returntrue.
  2. Returnfalse.
MemberExpression:MemberExpressionTemplateLiteral
  1. If thisMemberExpression iscall, returntrue.
  2. Returnfalse.
PrimaryExpression:CoverParenthesizedExpressionAndArrowParameterList
  1. Letexpr be theParenthesizedExpression that iscovered byCoverParenthesizedExpressionAndArrowParameterList.
  2. ReturnHasCallInTailPosition ofexpr with argumentcall.
ParenthesizedExpression:(Expression)
  1. ReturnHasCallInTailPosition ofExpression with argumentcall.

15.10.3 PrepareForTailCall ( )

The abstract operation PrepareForTailCall takes no arguments and returnsunused. It performs the following steps when called:

  1. Assert: The currentexecution context will not subsequently be used for the evaluation of any ECMAScript code or built-in functions. The invocation of Call subsequent to the invocation of this abstract operation will create and push a newexecution context before performing any such evaluation.
  2. Discard all resources associated with the currentexecution context.
  3. Returnunused.

A tail position call must either release any transient internal resources associated with the currently executing functionexecution context before invoking the target function or reuse those resources in support of the target function.

Note

For example, a tail position call should only grow an implementation's activation record stack by the amount that the size of the target function's activation record exceeds the size of the calling function's activation record. If the target function's activation record is smaller, then the total size of the stack should decrease.


[8]ページ先頭

©2009-2025 Movatter.jp