Movatterモバイル変換


[0]ホーム

URL:


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

27 Control Abstraction Objects

27.1 Iteration

27.1.1 Common Iteration Interfaces

An interface is a set ofproperty keys whose associated values match a specific specification. Any object that provides all the properties as described by an interface's specificationconforms to that interface. An interface is not represented by a distinct object. There may be many separately implemented objects that conform to any interface. An individual object may conform to multiple interfaces.

27.1.1.1 The Iterable Interface

Theiterable interface includes the property described inTable 82:

Table 82:Iterable Interface Required Properties
Property Value Requirements
%Symbol.iterator% a function that returns aniterator object The returned object must conform to theiterator interface.

27.1.1.2 The Iterator Interface

An object that implements theiterator interface must include the property inTable 83. Such objects may also implement the properties inTable 84.

Table 83:Iterator Interface Required Properties
Property Value Requirements
"next" a function that returns anIteratorResult object The returned object must conform to theIteratorResult interface. If a previous call to thenext method of aniterator has returned anIteratorResult object whose"done" property istrue, then all subsequent calls to thenext method of that object should also return anIteratorResult object whose"done" property istrue. However, this requirement is not enforced.
Note 1

Arguments may be passed to thenext function but their interpretation and validity is dependent upon the target iterator. The for-of statement and other common users of iterators do not pass any arguments, so iterator objects that expect to be used in such a manner must be prepared to deal with being called with no arguments.

Table 84:Iterator Interface Optional Properties
Property Value Requirements
"return" a function that returns anIteratorResult object The returned object must conform to theIteratorResult interface. Invoking this method notifies theiterator object that the caller does not intend to make any morenext method calls to theiterator. The returnedIteratorResult object will typically have a"done" property whose value istrue, and a"value" property with the value passed as the argument of thereturn method. However, this requirement is not enforced.
"throw" a function that returns anIteratorResult object The returned object must conform to theIteratorResult interface. Invoking this method notifies theiterator object that the caller has detected an error condition. The argument may be used to identify the error condition and typically will be an exception object. A typical response is tothrow the value passed as the argument. If the method does notthrow, the returnedIteratorResult object will typically have a"done" property whose value istrue.
Note 2

Typically callers of these methods should check for their existence before invoking them. Certain ECMAScript language features includingfor-of,yield*, and array destructuring call these methods after performing an existence check. Most ECMAScript library functions that acceptiterable objects as arguments also conditionally call them.

27.1.1.3 The Async Iterable Interface

Theasync iterable interface includes the properties described inTable 85:

Table 85: AsyncIterable Interface Required Properties
PropertyValueRequirements
%Symbol.asyncIterator%a function that returns anasync iterator objectThe returned object must conform to theasync iterator interface.

27.1.1.4 The Async Iterator Interface

An object that implements theasync iterator interface must include the properties inTable 86. Such objects may also implement the properties inTable 87.

Table 86: AsyncIterator Interface Required Properties
PropertyValueRequirements
"next"a function that returns a promise for anIteratorResult object

The returned promise, when fulfilled, must fulfill with an object that conforms to theIteratorResult interface. If a previous call to thenext method of anasync iterator has returned a promise for anIteratorResult object whose"done" property istrue, then all subsequent calls to thenext method of that object should also return a promise for anIteratorResult object whose"done" property istrue. However, this requirement is not enforced.

Additionally, theIteratorResult object that serves as a fulfillment value should have a"value" property whose value is not a promise (or "thenable"). However, this requirement is also not enforced.

Note 1

Arguments may be passed to thenext function but their interpretation and validity is dependent upon the target async iterator. Thefor-await-of statement and other common users of async iterators do not pass any arguments, so async iterator objects that expect to be used in such a manner must be prepared to deal with being called with no arguments.

Table 87: AsyncIterator Interface Optional Properties
PropertyValueRequirements
"return"a function that returns a promise for anIteratorResult object

The returned promise, when fulfilled, must fulfill with an object that conforms to theIteratorResult interface. Invoking this method notifies theasync iterator object that the caller does not intend to make any morenext method calls to theasync iterator. The returned promise will fulfill with anIteratorResult object which will typically have a"done" property whose value istrue, and a"value" property with the value passed as the argument of thereturn method. However, this requirement is not enforced.

Additionally, theIteratorResult object that serves as a fulfillment value should have a"value" property whose value is not a promise (or "thenable"). If the argument value is used in the typical manner, then if it is a rejected promise, a promise rejected with the same reason should be returned; if it is a fulfilled promise, then its fulfillment value should be used as the"value" property of the returned promise'sIteratorResult object fulfillment value. However, these requirements are also not enforced.

"throw"a function that returns a promise for anIteratorResult object

The returned promise, when fulfilled, must fulfill with an object that conforms to theIteratorResult interface. Invoking this method notifies theasync iterator object that the caller has detected an error condition. The argument may be used to identify the error condition and typically will be an exception object. A typical response is to return a rejected promise which rejects with the value passed as the argument.

If the returned promise is fulfilled, theIteratorResult object fulfillment value will typically have a"done" property whose value istrue. Additionally, it should have a"value" property whose value is not a promise (or "thenable"), but this requirement is not enforced.

Note 2

Typically callers of these methods should check for their existence before invoking them. Certain ECMAScript language features includingfor-await-of andyield* call these methods after performing an existence check.

27.1.1.5 The IteratorResult Interface

TheIteratorResult interface includes the properties listed inTable 88:

Table 88: IteratorResult Interface Properties
Property Value Requirements
"done" a Boolean This is the result status of aniteratornext method call. If the end of theiterator was reached"done" istrue. If the end was not reached"done" isfalse and a value is available. If a"done" property (either own or inherited) does not exist, it is considered to have the valuefalse.
"value" anECMAScript language value If done isfalse, this is the current iteration element value. If done istrue, this is the return value of theiterator, if it supplied one. If theiterator does not have a return value,"value" isundefined. In that case, the"value" property may be absent from the conforming object if it does not inherit an explicit"value" property.

27.1.2 Iterator Helper Objects

AnIterator Helper object is anordinary object that represents a lazy transformation of some specific sourceiterator object. There is not a namedconstructor for Iterator Helper objects. Instead, Iterator Helper objects are created by calling certain methods ofIterator instance objects.

27.1.2.1 The %IteratorHelperPrototype% Object

The%IteratorHelperPrototype% object:

27.1.2.1.1 %IteratorHelperPrototype%.next ( )

  1. Return ? GeneratorResume(this value,undefined,"Iterator Helper").

27.1.2.1.2 %IteratorHelperPrototype%.return ( )

  1. LetO bethis value.
  2. Perform ? RequireInternalSlot(O,[[UnderlyingIterator]]).
  3. Assert:O has a[[GeneratorState]] internal slot.
  4. IfO.[[GeneratorState]] issuspended-start, then
    1. SetO.[[GeneratorState]] tocompleted.
    2. NOTE: Once a generator enters the completed state it never leaves it and its associatedexecution context is never resumed. Any execution state associated withO can be discarded at this point.
    3. Perform ? IteratorClose(O.[[UnderlyingIterator]],NormalCompletion(unused)).
    4. ReturnCreateIteratorResultObject(undefined,true).
  5. LetC beReturnCompletion(undefined).
  6. Return ? GeneratorResumeAbrupt(O,C,"Iterator Helper").

27.1.2.1.3 %IteratorHelperPrototype% [ %Symbol.toStringTag% ]

The initial value of the%Symbol.toStringTag% property is the String value"Iterator Helper".

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.1.3 Iterator Objects

27.1.3.1 The Iterator Constructor

TheIteratorconstructor:

  • is%Iterator%.
  • is the initial value of the"Iterator" property of theglobal object.
  • is designed to be subclassable. It may be used as the value of anextends clause of a class definition.

27.1.3.1.1 Iterator ( )

This function performs the following steps when called:

  1. If NewTarget is eitherundefined or theactive function object, throw aTypeError exception.
  2. Return ? OrdinaryCreateFromConstructor(NewTarget,"%Iterator.prototype%").

27.1.3.2 Properties of the Iterator Constructor

TheIteratorconstructor:

27.1.3.2.1 Iterator.from (O )

  1. LetiteratorRecord be ? GetIteratorFlattenable(O,iterate-string-primitives).
  2. LethasInstance be ? OrdinaryHasInstance(%Iterator%,iteratorRecord.[[Iterator]]).
  3. IfhasInstance istrue, then
    1. ReturniteratorRecord.[[Iterator]].
  4. Letwrapper beOrdinaryObjectCreate(%WrapForValidIteratorPrototype%, «[[Iterated]] »).
  5. Setwrapper.[[Iterated]] toiteratorRecord.
  6. Returnwrapper.

27.1.3.2.1.1 The %WrapForValidIteratorPrototype% Object

The%WrapForValidIteratorPrototype% object:

27.1.3.2.1.1.1 %WrapForValidIteratorPrototype%.next ( )

  1. LetO bethis value.
  2. Perform ? RequireInternalSlot(O,[[Iterated]]).
  3. LetiteratorRecord beO.[[Iterated]].
  4. Return ? Call(iteratorRecord.[[NextMethod]],iteratorRecord.[[Iterator]]).

27.1.3.2.1.1.2 %WrapForValidIteratorPrototype%.return ( )

  1. LetO bethis value.
  2. Perform ? RequireInternalSlot(O,[[Iterated]]).
  3. Letiterator beO.[[Iterated]].[[Iterator]].
  4. Assert:iteratoris an Object.
  5. LetreturnMethod be ? GetMethod(iterator,"return").
  6. IfreturnMethod isundefined, then
    1. ReturnCreateIteratorResultObject(undefined,true).
  7. Return ? Call(returnMethod,iterator).

27.1.3.2.2 Iterator.prototype

The initial value of Iterator.prototype is theIterator prototype object.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false }.

27.1.4 Properties of the Iterator Prototype Object

TheIterator prototype object:

Note

All objects defined in this specification that implement theiterator interface also inherit from %Iterator.prototype%. ECMAScript code may also define objects that inherit from %Iterator.prototype%. %Iterator.prototype% provides a place where additional methods that are applicable to alliterator objects may be added.

The following expression is one way that ECMAScript code can access the %Iterator.prototype% object:

Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))

27.1.4.1 Iterator.prototype.constructor

Iterator.prototype.constructor is anaccessor property with attributes {[[Enumerable]]:false,[[Configurable]]:true }. The[[Get]] and[[Set]] attributes are defined as follows:

27.1.4.1.1 get Iterator.prototype.constructor

The value of the[[Get]] attribute is a built-in function that requires no arguments. It performs the following steps when called:

  1. Return%Iterator%.

27.1.4.1.2 set Iterator.prototype.constructor

The value of the[[Set]] attribute is a built-in function that takes an argumentv. It performs the following steps when called:

  1. Perform ? SetterThatIgnoresPrototypeProperties(this value,%Iterator.prototype%,"constructor",v).
  2. Returnundefined.
Note

Unlike the"constructor" property on most built-in prototypes, for web-compatibility reasons this property must be an accessor.

27.1.4.2 Iterator.prototype.drop (limit )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. LetnumLimit beCompletion(ToNumber(limit)).
  5. IfAbruptCloseIterator(numLimit,iterated).
  6. IfnumLimit isNaN, then
    1. Leterror beThrowCompletion(a newly createdRangeError object).
    2. Return ? IteratorClose(iterated,error).
  7. LetintegerLimit be ! ToIntegerOrInfinity(numLimit).
  8. IfintegerLimit < 0, then
    1. Leterror beThrowCompletion(a newly createdRangeError object).
    2. Return ? IteratorClose(iterated,error).
  9. Setiterated to ? GetIteratorDirect(O).
  10. Letclosure be a newAbstract Closure with no parameters that capturesiterated andintegerLimit and performs the following steps when called:
    1. Letremaining beintegerLimit.
    2. Repeat, whileremaining > 0,
      1. Ifremaining ≠ +∞, then
        1. Setremaining toremaining - 1.
      2. Letnext be ? IteratorStep(iterated).
      3. Ifnext isdone, returnReturnCompletion(undefined).
    3. Repeat,
      1. Letvalue be ? IteratorStepValue(iterated).
      2. Ifvalue isdone, returnReturnCompletion(undefined).
      3. Letcompletion beCompletion(Yield(value)).
      4. IfAbruptCloseIterator(completion,iterated).
  11. Letresult beCreateIteratorFromClosure(closure,"Iterator Helper",%IteratorHelperPrototype%, «[[UnderlyingIterator]] »).
  12. Setresult.[[UnderlyingIterator]] toiterated.
  13. Returnresult.

27.1.4.3 Iterator.prototype.every (predicate )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. IfIsCallable(predicate) isfalse, then
    1. Leterror beThrowCompletion(a newly createdTypeError object).
    2. Return ? IteratorClose(iterated,error).
  5. Setiterated to ? GetIteratorDirect(O).
  6. Letcounter be 0.
  7. Repeat,
    1. Letvalue be ? IteratorStepValue(iterated).
    2. Ifvalue isdone, returntrue.
    3. Letresult beCompletion(Call(predicate,undefined, «value,𝔽(counter) »)).
    4. IfAbruptCloseIterator(result,iterated).
    5. IfToBoolean(result) isfalse, return ? IteratorClose(iterated,NormalCompletion(false)).
    6. Setcounter tocounter + 1.

27.1.4.4 Iterator.prototype.filter (predicate )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. IfIsCallable(predicate) isfalse, then
    1. Leterror beThrowCompletion(a newly createdTypeError object).
    2. Return ? IteratorClose(iterated,error).
  5. Setiterated to ? GetIteratorDirect(O).
  6. Letclosure be a newAbstract Closure with no parameters that capturesiterated andpredicate and performs the following steps when called:
    1. Letcounter be 0.
    2. Repeat,
      1. Letvalue be ? IteratorStepValue(iterated).
      2. Ifvalue isdone, returnReturnCompletion(undefined).
      3. Letselected beCompletion(Call(predicate,undefined, «value,𝔽(counter) »)).
      4. IfAbruptCloseIterator(selected,iterated).
      5. IfToBoolean(selected) istrue, then
        1. Letcompletion beCompletion(Yield(value)).
        2. IfAbruptCloseIterator(completion,iterated).
      6. Setcounter tocounter + 1.
  7. Letresult beCreateIteratorFromClosure(closure,"Iterator Helper",%IteratorHelperPrototype%, «[[UnderlyingIterator]] »).
  8. Setresult.[[UnderlyingIterator]] toiterated.
  9. Returnresult.

27.1.4.5 Iterator.prototype.find (predicate )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. IfIsCallable(predicate) isfalse, then
    1. Leterror beThrowCompletion(a newly createdTypeError object).
    2. Return ? IteratorClose(iterated,error).
  5. Setiterated to ? GetIteratorDirect(O).
  6. Letcounter be 0.
  7. Repeat,
    1. Letvalue be ? IteratorStepValue(iterated).
    2. Ifvalue isdone, returnundefined.
    3. Letresult beCompletion(Call(predicate,undefined, «value,𝔽(counter) »)).
    4. IfAbruptCloseIterator(result,iterated).
    5. IfToBoolean(result) istrue, return ? IteratorClose(iterated,NormalCompletion(value)).
    6. Setcounter tocounter + 1.

27.1.4.6 Iterator.prototype.flatMap (mapper )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. IfIsCallable(mapper) isfalse, then
    1. Leterror beThrowCompletion(a newly createdTypeError object).
    2. Return ? IteratorClose(iterated,error).
  5. Setiterated to ? GetIteratorDirect(O).
  6. Letclosure be a newAbstract Closure with no parameters that capturesiterated andmapper and performs the following steps when called:
    1. Letcounter be 0.
    2. Repeat,
      1. Letvalue be ? IteratorStepValue(iterated).
      2. Ifvalue isdone, returnReturnCompletion(undefined).
      3. Letmapped beCompletion(Call(mapper,undefined, «value,𝔽(counter) »)).
      4. IfAbruptCloseIterator(mapped,iterated).
      5. LetinnerIterator beCompletion(GetIteratorFlattenable(mapped,reject-primitives)).
      6. IfAbruptCloseIterator(innerIterator,iterated).
      7. LetinnerAlive betrue.
      8. Repeat, whileinnerAlive istrue,
        1. LetinnerValue beCompletion(IteratorStepValue(innerIterator)).
        2. IfAbruptCloseIterator(innerValue,iterated).
        3. IfinnerValue isdone, then
          1. SetinnerAlive tofalse.
        4. Else,
          1. Letcompletion beCompletion(Yield(innerValue)).
          2. Ifcompletion is anabrupt completion, then
            1. LetbackupCompletion beCompletion(IteratorClose(innerIterator,completion)).
            2. IfAbruptCloseIterator(backupCompletion,iterated).
            3. Return ? IteratorClose(iterated,completion).
      9. Setcounter tocounter + 1.
  7. Letresult beCreateIteratorFromClosure(closure,"Iterator Helper",%IteratorHelperPrototype%, «[[UnderlyingIterator]] »).
  8. Setresult.[[UnderlyingIterator]] toiterated.
  9. Returnresult.

27.1.4.7 Iterator.prototype.forEach (procedure )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. IfIsCallable(procedure) isfalse, then
    1. Leterror beThrowCompletion(a newly createdTypeError object).
    2. Return ? IteratorClose(iterated,error).
  5. Setiterated to ? GetIteratorDirect(O).
  6. Letcounter be 0.
  7. Repeat,
    1. Letvalue be ? IteratorStepValue(iterated).
    2. Ifvalue isdone, returnundefined.
    3. Letresult beCompletion(Call(procedure,undefined, «value,𝔽(counter) »)).
    4. IfAbruptCloseIterator(result,iterated).
    5. Setcounter tocounter + 1.

27.1.4.8 Iterator.prototype.map (mapper )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. IfIsCallable(mapper) isfalse, then
    1. Leterror beThrowCompletion(a newly createdTypeError object).
    2. Return ? IteratorClose(iterated,error).
  5. Setiterated to ? GetIteratorDirect(O).
  6. Letclosure be a newAbstract Closure with no parameters that capturesiterated andmapper and performs the following steps when called:
    1. Letcounter be 0.
    2. Repeat,
      1. Letvalue be ? IteratorStepValue(iterated).
      2. Ifvalue isdone, returnReturnCompletion(undefined).
      3. Letmapped beCompletion(Call(mapper,undefined, «value,𝔽(counter) »)).
      4. IfAbruptCloseIterator(mapped,iterated).
      5. Letcompletion beCompletion(Yield(mapped)).
      6. IfAbruptCloseIterator(completion,iterated).
      7. Setcounter tocounter + 1.
  7. Letresult beCreateIteratorFromClosure(closure,"Iterator Helper",%IteratorHelperPrototype%, «[[UnderlyingIterator]] »).
  8. Setresult.[[UnderlyingIterator]] toiterated.
  9. Returnresult.

27.1.4.9 Iterator.prototype.reduce (reducer [ ,initialValue ] )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. IfIsCallable(reducer) isfalse, then
    1. Leterror beThrowCompletion(a newly createdTypeError object).
    2. Return ? IteratorClose(iterated,error).
  5. Setiterated to ? GetIteratorDirect(O).
  6. IfinitialValue is not present, then
    1. Letaccumulator be ? IteratorStepValue(iterated).
    2. Ifaccumulator isdone, throw aTypeError exception.
    3. Letcounter be 1.
  7. Else,
    1. Letaccumulator beinitialValue.
    2. Letcounter be 0.
  8. Repeat,
    1. Letvalue be ? IteratorStepValue(iterated).
    2. Ifvalue isdone, returnaccumulator.
    3. Letresult beCompletion(Call(reducer,undefined, «accumulator,value,𝔽(counter) »)).
    4. IfAbruptCloseIterator(result,iterated).
    5. Setaccumulator toresult.
    6. Setcounter tocounter + 1.

27.1.4.10 Iterator.prototype.some (predicate )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. IfIsCallable(predicate) isfalse, then
    1. Leterror beThrowCompletion(a newly createdTypeError object).
    2. Return ? IteratorClose(iterated,error).
  5. Setiterated to ? GetIteratorDirect(O).
  6. Letcounter be 0.
  7. Repeat,
    1. Letvalue be ? IteratorStepValue(iterated).
    2. Ifvalue isdone, returnfalse.
    3. Letresult beCompletion(Call(predicate,undefined, «value,𝔽(counter) »)).
    4. IfAbruptCloseIterator(result,iterated).
    5. IfToBoolean(result) istrue, return ? IteratorClose(iterated,NormalCompletion(true)).
    6. Setcounter tocounter + 1.

27.1.4.11 Iterator.prototype.take (limit )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be theIterator Record {[[Iterator]]:O,[[NextMethod]]:undefined,[[Done]]:false }.
  4. LetnumLimit beCompletion(ToNumber(limit)).
  5. IfAbruptCloseIterator(numLimit,iterated).
  6. IfnumLimit isNaN, then
    1. Leterror beThrowCompletion(a newly createdRangeError object).
    2. Return ? IteratorClose(iterated,error).
  7. LetintegerLimit be ! ToIntegerOrInfinity(numLimit).
  8. IfintegerLimit < 0, then
    1. Leterror beThrowCompletion(a newly createdRangeError object).
    2. Return ? IteratorClose(iterated,error).
  9. Setiterated to ? GetIteratorDirect(O).
  10. Letclosure be a newAbstract Closure with no parameters that capturesiterated andintegerLimit and performs the following steps when called:
    1. Letremaining beintegerLimit.
    2. Repeat,
      1. Ifremaining = 0, then
        1. Return ? IteratorClose(iterated,ReturnCompletion(undefined)).
      2. Ifremaining ≠ +∞, then
        1. Setremaining toremaining - 1.
      3. Letvalue be ? IteratorStepValue(iterated).
      4. Ifvalue isdone, returnReturnCompletion(undefined).
      5. Letcompletion beCompletion(Yield(value)).
      6. IfAbruptCloseIterator(completion,iterated).
  11. Letresult beCreateIteratorFromClosure(closure,"Iterator Helper",%IteratorHelperPrototype%, «[[UnderlyingIterator]] »).
  12. Setresult.[[UnderlyingIterator]] toiterated.
  13. Returnresult.

27.1.4.12 Iterator.prototype.toArray ( )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. IfOis not an Object, throw aTypeError exception.
  3. Letiterated be ? GetIteratorDirect(O).
  4. Letitems be a new emptyList.
  5. Repeat,
    1. Letvalue be ? IteratorStepValue(iterated).
    2. Ifvalue isdone, returnCreateArrayFromList(items).
    3. Appendvalue toitems.

27.1.4.13 Iterator.prototype [ %Symbol.iterator% ] ( )

This function performs the following steps when called:

  1. Return thethis value.

The value of the"name" property of this function is"[Symbol.iterator]".

27.1.4.14 Iterator.prototype [ %Symbol.toStringTag% ]

Iterator.prototype[%Symbol.toStringTag%] is anaccessor property with attributes {[[Enumerable]]:false,[[Configurable]]:true }. The[[Get]] and[[Set]] attributes are defined as follows:

27.1.4.14.1 get Iterator.prototype [ %Symbol.toStringTag% ]

The value of the[[Get]] attribute is a built-in function that requires no arguments. It performs the following steps when called:

  1. Return"Iterator".

27.1.4.14.2 set Iterator.prototype [ %Symbol.toStringTag% ]

The value of the[[Set]] attribute is a built-in function that takes an argumentv. It performs the following steps when called:

  1. Perform ? SetterThatIgnoresPrototypeProperties(this value,%Iterator.prototype%,%Symbol.toStringTag%,v).
  2. Returnundefined.
Note

Unlike the%Symbol.toStringTag% property on most built-in prototypes, for web-compatibility reasons this property must be an accessor.

27.1.5 The %AsyncIteratorPrototype% Object

The%AsyncIteratorPrototype% object:

Note

All objects defined in this specification that implement theasync iterator interface also inherit from %AsyncIteratorPrototype%. ECMAScript code may also define objects that inherit from %AsyncIteratorPrototype%. The %AsyncIteratorPrototype% object provides a place where additional methods that are applicable to allasync iterator objects may be added.

27.1.5.1 %AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )

This function performs the following steps when called:

  1. Return thethis value.

The value of the"name" property of this function is"[Symbol.asyncIterator]".

27.1.6 Async-from-Sync Iterator Objects

AnAsync-from-Sync Iterator object is anasync iterator that adapts a specific synchronousiterator. Async-from-Sync Iterator objects are never directly accessible to ECMAScript code. There is not a namedconstructor for Async-from-Sync Iterator objects. Instead, Async-from-Sync Iterator objects are created by theCreateAsyncFromSyncIterator abstract operation as needed.

27.1.6.1 CreateAsyncFromSyncIterator (syncIteratorRecord )

The abstract operation CreateAsyncFromSyncIterator takes argumentsyncIteratorRecord (anIterator Record) and returns anIterator Record. It is used to create an asyncIterator Record from a synchronousIterator Record. It performs the following steps when called:

  1. LetasyncIterator beOrdinaryObjectCreate(%AsyncFromSyncIteratorPrototype%, «[[SyncIteratorRecord]] »).
  2. SetasyncIterator.[[SyncIteratorRecord]] tosyncIteratorRecord.
  3. LetnextMethod be ! Get(asyncIterator,"next").
  4. LetiteratorRecord be theIterator Record {[[Iterator]]:asyncIterator,[[NextMethod]]:nextMethod,[[Done]]:false }.
  5. ReturniteratorRecord.

27.1.6.2 The %AsyncFromSyncIteratorPrototype% Object

The%AsyncFromSyncIteratorPrototype% object:

27.1.6.2.1 %AsyncFromSyncIteratorPrototype%.next ( [value ] )

  1. LetO be thethis value.
  2. Assert:Ois an Object that has a[[SyncIteratorRecord]] internal slot.
  3. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  4. LetsyncIteratorRecord beO.[[SyncIteratorRecord]].
  5. Ifvalue is present, then
    1. Letresult beCompletion(IteratorNext(syncIteratorRecord,value)).
  6. Else,
    1. Letresult beCompletion(IteratorNext(syncIteratorRecord)).
  7. IfAbruptRejectPromise(result,promiseCapability).
  8. ReturnAsyncFromSyncIteratorContinuation(result,promiseCapability,syncIteratorRecord,true).

27.1.6.2.2 %AsyncFromSyncIteratorPrototype%.return ( [value ] )

  1. LetO be thethis value.
  2. Assert:Ois an Object that has a[[SyncIteratorRecord]] internal slot.
  3. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  4. LetsyncIteratorRecord beO.[[SyncIteratorRecord]].
  5. LetsyncIterator besyncIteratorRecord.[[Iterator]].
  6. Letreturn beCompletion(GetMethod(syncIterator,"return")).
  7. IfAbruptRejectPromise(return,promiseCapability).
  8. Ifreturn isundefined, then
    1. LetiteratorResult beCreateIteratorResultObject(value,true).
    2. Perform ! Call(promiseCapability.[[Resolve]],undefined, «iteratorResult »).
    3. ReturnpromiseCapability.[[Promise]].
  9. Ifvalue is present, then
    1. Letresult beCompletion(Call(return,syncIterator, «value »)).
  10. Else,
    1. Letresult beCompletion(Call(return,syncIterator)).
  11. IfAbruptRejectPromise(result,promiseCapability).
  12. Ifresultis not an Object, then
    1. Perform ! Call(promiseCapability.[[Reject]],undefined, « a newly createdTypeError object »).
    2. ReturnpromiseCapability.[[Promise]].
  13. ReturnAsyncFromSyncIteratorContinuation(result,promiseCapability,syncIteratorRecord,false).

27.1.6.2.3 %AsyncFromSyncIteratorPrototype%.throw ( [value ] )

Note
In this specification,value is always provided, but is left optional for consistency with%AsyncFromSyncIteratorPrototype%.return ( [value ] ).
  1. LetO be thethis value.
  2. Assert:Ois an Object that has a[[SyncIteratorRecord]] internal slot.
  3. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  4. LetsyncIteratorRecord beO.[[SyncIteratorRecord]].
  5. LetsyncIterator besyncIteratorRecord.[[Iterator]].
  6. Letthrow beCompletion(GetMethod(syncIterator,"throw")).
  7. IfAbruptRejectPromise(throw,promiseCapability).
  8. Ifthrow isundefined, then
    1. NOTE: IfsyncIterator does not have athrow method, close it to give it a chance to clean up before we reject the capability.
    2. LetcloseCompletion beNormalCompletion(empty).
    3. Letresult beCompletion(IteratorClose(syncIteratorRecord,closeCompletion)).
    4. IfAbruptRejectPromise(result,promiseCapability).
    5. NOTE: The next step throws aTypeError to indicate that there was a protocol violation:syncIterator does not have athrow method.
    6. NOTE: If closingsyncIterator does not throw then the result of that operation is ignored, even if it yields a rejected promise.
    7. Perform ! Call(promiseCapability.[[Reject]],undefined, « a newly createdTypeError object »).
    8. ReturnpromiseCapability.[[Promise]].
  9. Ifvalue is present, then
    1. Letresult beCompletion(Call(throw,syncIterator, «value »)).
  10. Else,
    1. Letresult beCompletion(Call(throw,syncIterator)).
  11. IfAbruptRejectPromise(result,promiseCapability).
  12. Ifresultis not an Object, then
    1. Perform ! Call(promiseCapability.[[Reject]],undefined, « a newly createdTypeError object »).
    2. ReturnpromiseCapability.[[Promise]].
  13. ReturnAsyncFromSyncIteratorContinuation(result,promiseCapability,syncIteratorRecord,true).

27.1.6.3 Properties of Async-from-Sync Iterator Instances

Async-from-SyncIterator instances areordinary objects that inherit properties from the%AsyncFromSyncIteratorPrototype% intrinsic object. Async-from-SyncIterator instances are initially created with the internal slots listed inTable 89.

Table 89: Internal Slots of Async-from-SyncIterator Instances
Internal Slot Type Description
[[SyncIteratorRecord]] anIterator Record Represents the original synchronousiterator which is being adapted.

27.1.6.4 AsyncFromSyncIteratorContinuation (result,promiseCapability,syncIteratorRecord,closeOnRejection )

The abstract operation AsyncFromSyncIteratorContinuation takes argumentsresult (an Object),promiseCapability (aPromiseCapability Record for an intrinsic%Promise%),syncIteratorRecord (anIterator Record), andcloseOnRejection (a Boolean) and returns a Promise. It performs the following steps when called:

  1. NOTE: BecausepromiseCapability is derived from the intrinsic%Promise%, the calls topromiseCapability.[[Reject]] entailed by the useIfAbruptRejectPromise below are guaranteed not to throw.
  2. Letdone beCompletion(IteratorComplete(result)).
  3. IfAbruptRejectPromise(done,promiseCapability).
  4. Letvalue beCompletion(IteratorValue(result)).
  5. IfAbruptRejectPromise(value,promiseCapability).
  6. LetvalueWrapper beCompletion(PromiseResolve(%Promise%,value)).
  7. IfvalueWrapper is anabrupt completion,done isfalse, andcloseOnRejection istrue, then
    1. SetvalueWrapper toCompletion(IteratorClose(syncIteratorRecord,valueWrapper)).
  8. IfAbruptRejectPromise(valueWrapper,promiseCapability).
  9. Letunwrap be a newAbstract Closure with parameters (v) that capturesdone and performs the following steps when called:
    1. ReturnCreateIteratorResultObject(v,done).
  10. LetonFulfilled beCreateBuiltinFunction(unwrap, 1,"", « »).
  11. NOTE:onFulfilled is used when processing the"value" property of anIteratorResult object in order to wait for its value if it is a promise and re-package the result in a new "unwrapped"IteratorResult object.
  12. Ifdone istrue, or ifcloseOnRejection isfalse, then
    1. LetonRejected beundefined.
  13. Else,
    1. LetcloseIterator be a newAbstract Closure with parameters (error) that capturessyncIteratorRecord and performs the following steps when called:
      1. Return ? IteratorClose(syncIteratorRecord,ThrowCompletion(error)).
    2. LetonRejected beCreateBuiltinFunction(closeIterator, 1,"", « »).
    3. NOTE:onRejected is used to close theIterator when the"value" property of anIteratorResult object it yields is a rejected promise.
  14. PerformPerformPromiseThen(valueWrapper,onFulfilled,onRejected,promiseCapability).
  15. ReturnpromiseCapability.[[Promise]].

27.2 Promise Objects

A Promise is an object that is used as a placeholder for the eventual results of a deferred (and possibly asynchronous) computation.

Any Promise is in one of three mutually exclusive states:fulfilled,rejected, andpending:

  • A promisep is fulfilled ifp.then(f, r) will immediately enqueue aJob to call the functionf.
  • A promisep is rejected ifp.then(f, r) will immediately enqueue aJob to call the functionr.
  • A promise is pending if it is neither fulfilled nor rejected.

A promise is said to besettled if it is not pending, i.e. if it is either fulfilled or rejected.

A promise isresolved if it is settled or if it has been “locked in” to match the state of another promise. Attempting to resolve or reject a resolved promise has no effect. A promise isunresolved if it is not resolved. An unresolved promise is always in the pending state. A resolved promise may be pending, fulfilled or rejected.

27.2.1 Promise Abstract Operations

27.2.1.1 PromiseCapability Records

APromiseCapability Record is aRecord value used to encapsulate a Promise or promise-like object along with the functions that are capable of resolving or rejecting that promise. PromiseCapability Records are produced by theNewPromiseCapability abstract operation.

PromiseCapability Records have the fields listed inTable 90.

Table 90:PromiseCapability Record Fields
Field Name Value Meaning
[[Promise]] an Object An object that is usable as a promise.
[[Resolve]] afunction object The function that is used to resolve the given promise.
[[Reject]] afunction object The function that is used to reject the given promise.

27.2.1.1.1 IfAbruptRejectPromise (value,capability )

IfAbruptRejectPromise is a shorthand for a sequence of algorithm steps that use aPromiseCapability Record. An algorithm step of the form:

  1. IfAbruptRejectPromise(value,capability).

means the same thing as:

  1. Assert:value is aCompletion Record.
  2. Ifvalue is anabrupt completion, then
    1. Perform ? Call(capability.[[Reject]],undefined, «value.[[Value]] »).
    2. Returncapability.[[Promise]].
  3. Else,
    1. Setvalue to ! value.

27.2.1.2 PromiseReaction Records

APromiseReaction Record is aRecord value used to store information about how a promise should react when it becomes resolved or rejected with a given value. PromiseReaction Records are created by thePerformPromiseThen abstract operation, and are used by theAbstract Closure returned byNewPromiseReactionJob.

PromiseReaction Records have the fields listed inTable 91.

Table 91:PromiseReaction Record Fields
Field Name Value Meaning
[[Capability]] aPromiseCapability Record orundefined The capabilities of the promise for which this record provides a reaction handler.
[[Type]]fulfill orreject The[[Type]] is used when[[Handler]] isempty to allow for behaviour specific to the settlement type.
[[Handler]] aJobCallback Record orempty The function that should be applied to the incoming value, and whose return value will govern what happens to the derived promise. If[[Handler]] isempty, a function that depends on the value of[[Type]] will be used instead.

27.2.1.3 CreateResolvingFunctions (promise )

The abstract operation CreateResolvingFunctions takes argumentpromise (a Promise) and returns aRecord with fields[[Resolve]] (afunction object) and[[Reject]] (afunction object). It performs the following steps when called:

  1. LetalreadyResolved be theRecord {[[Value]]:false }.
  2. LetstepsResolve be the algorithm steps defined inPromise Resolve Functions.
  3. LetlengthResolve be the number of non-optional parameters of the function definition inPromise Resolve Functions.
  4. Letresolve beCreateBuiltinFunction(stepsResolve,lengthResolve,"", «[[Promise]],[[AlreadyResolved]] »).
  5. Setresolve.[[Promise]] topromise.
  6. Setresolve.[[AlreadyResolved]] toalreadyResolved.
  7. LetstepsReject be the algorithm steps defined inPromise Reject Functions.
  8. LetlengthReject be the number of non-optional parameters of the function definition inPromise Reject Functions.
  9. Letreject beCreateBuiltinFunction(stepsReject,lengthReject,"", «[[Promise]],[[AlreadyResolved]] »).
  10. Setreject.[[Promise]] topromise.
  11. Setreject.[[AlreadyResolved]] toalreadyResolved.
  12. Return theRecord {[[Resolve]]:resolve,[[Reject]]:reject }.

27.2.1.3.1 Promise Reject Functions

A promise reject function is an anonymous built-in function that has[[Promise]] and[[AlreadyResolved]] internal slots.

When a promise reject function is called with argumentreason, the following steps are taken:

  1. LetF be theactive function object.
  2. Assert:F has a[[Promise]] internal slot whose valueis an Object.
  3. Letpromise beF.[[Promise]].
  4. LetalreadyResolved beF.[[AlreadyResolved]].
  5. IfalreadyResolved.[[Value]] istrue, returnundefined.
  6. SetalreadyResolved.[[Value]] totrue.
  7. PerformRejectPromise(promise,reason).
  8. Returnundefined.

The"length" property of a promise reject function is1𝔽.

27.2.1.3.2 Promise Resolve Functions

A promise resolve function is an anonymous built-in function that has[[Promise]] and[[AlreadyResolved]] internal slots.

When a promise resolve function is called with argumentresolution, the following steps are taken:

  1. LetF be theactive function object.
  2. Assert:F has a[[Promise]] internal slot whose valueis an Object.
  3. Letpromise beF.[[Promise]].
  4. LetalreadyResolved beF.[[AlreadyResolved]].
  5. IfalreadyResolved.[[Value]] istrue, returnundefined.
  6. SetalreadyResolved.[[Value]] totrue.
  7. IfSameValue(resolution,promise) istrue, then
    1. LetselfResolutionError be a newly createdTypeError object.
    2. PerformRejectPromise(promise,selfResolutionError).
    3. Returnundefined.
  8. Ifresolutionis not an Object, then
    1. PerformFulfillPromise(promise,resolution).
    2. Returnundefined.
  9. Letthen beCompletion(Get(resolution,"then")).
  10. Ifthen is anabrupt completion, then
    1. PerformRejectPromise(promise,then.[[Value]]).
    2. Returnundefined.
  11. LetthenAction bethen.[[Value]].
  12. IfIsCallable(thenAction) isfalse, then
    1. PerformFulfillPromise(promise,resolution).
    2. Returnundefined.
  13. LetthenJobCallback beHostMakeJobCallback(thenAction).
  14. Letjob beNewPromiseResolveThenableJob(promise,resolution,thenJobCallback).
  15. PerformHostEnqueuePromiseJob(job.[[Job]],job.[[Realm]]).
  16. Returnundefined.

The"length" property of a promise resolve function is1𝔽.

27.2.1.4 FulfillPromise (promise,value )

The abstract operation FulfillPromise takes argumentspromise (a Promise) andvalue (anECMAScript language value) and returnsunused. It performs the following steps when called:

  1. Assert:promise.[[PromiseState]] ispending.
  2. Letreactions bepromise.[[PromiseFulfillReactions]].
  3. Setpromise.[[PromiseResult]] tovalue.
  4. Setpromise.[[PromiseFulfillReactions]] toundefined.
  5. Setpromise.[[PromiseRejectReactions]] toundefined.
  6. Setpromise.[[PromiseState]] tofulfilled.
  7. PerformTriggerPromiseReactions(reactions,value).
  8. Returnunused.

27.2.1.5 NewPromiseCapability (C )

The abstract operation NewPromiseCapability takes argumentC (anECMAScript language value) and returns either anormal completion containing aPromiseCapability Record or athrow completion. It attempts to useC as aconstructor in the fashion of the built-in Promiseconstructor to create a promise and extract itsresolve andreject functions. The promise plus theresolve andreject functions are used to initialize a newPromiseCapability Record. It performs the following steps when called:

  1. IfIsConstructor(C) isfalse, throw aTypeError exception.
  2. NOTE:C is assumed to be aconstructor function that supports the parameter conventions of the Promiseconstructor (see27.2.3.1).
  3. LetresolvingFunctions be theRecord {[[Resolve]]:undefined,[[Reject]]:undefined }.
  4. LetexecutorClosure be a newAbstract Closure with parameters (resolve,reject) that capturesresolvingFunctions and performs the following steps when called:
    1. IfresolvingFunctions.[[Resolve]] is notundefined, throw aTypeError exception.
    2. IfresolvingFunctions.[[Reject]] is notundefined, throw aTypeError exception.
    3. SetresolvingFunctions.[[Resolve]] toresolve.
    4. SetresolvingFunctions.[[Reject]] toreject.
    5. ReturnNormalCompletion(undefined).
  5. Letexecutor beCreateBuiltinFunction(executorClosure, 2,"", « »).
  6. Letpromise be ? Construct(C, «executor »).
  7. IfIsCallable(resolvingFunctions.[[Resolve]]) isfalse, throw aTypeError exception.
  8. IfIsCallable(resolvingFunctions.[[Reject]]) isfalse, throw aTypeError exception.
  9. Return thePromiseCapability Record {[[Promise]]:promise,[[Resolve]]:resolvingFunctions.[[Resolve]],[[Reject]]:resolvingFunctions.[[Reject]] }.
Note

This abstract operation supports Promise subclassing, as it is generic on anyconstructor that calls a passed executor function argument in the same way as the Promiseconstructor. It is used to generalize static methods of the Promiseconstructor to any subclass.

27.2.1.6 IsPromise (x )

The abstract operation IsPromise takes argumentx (anECMAScript language value) and returns a Boolean. It checks for the promise brand on an object. It performs the following steps when called:

  1. Ifxis not an Object, returnfalse.
  2. Ifx does not have a[[PromiseState]] internal slot, returnfalse.
  3. Returntrue.

27.2.1.7 RejectPromise (promise,reason )

The abstract operation RejectPromise takes argumentspromise (a Promise) andreason (anECMAScript language value) and returnsunused. It performs the following steps when called:

  1. Assert:promise.[[PromiseState]] ispending.
  2. Letreactions bepromise.[[PromiseRejectReactions]].
  3. Setpromise.[[PromiseResult]] toreason.
  4. Setpromise.[[PromiseFulfillReactions]] toundefined.
  5. Setpromise.[[PromiseRejectReactions]] toundefined.
  6. Setpromise.[[PromiseState]] torejected.
  7. Ifpromise.[[PromiseIsHandled]] isfalse, performHostPromiseRejectionTracker(promise,"reject").
  8. PerformTriggerPromiseReactions(reactions,reason).
  9. Returnunused.

27.2.1.8 TriggerPromiseReactions (reactions,argument )

The abstract operation TriggerPromiseReactions takes argumentsreactions (aList ofPromiseReaction Records) andargument (anECMAScript language value) and returnsunused. It enqueues a newJob for each record inreactions. Each suchJob processes the[[Type]] and[[Handler]] of thePromiseReaction Record, and if the[[Handler]] is notempty, calls it passing the given argument. If the[[Handler]] isempty, the behaviour is determined by the[[Type]]. It performs the following steps when called:

  1. For each elementreaction ofreactions, do
    1. Letjob beNewPromiseReactionJob(reaction,argument).
    2. PerformHostEnqueuePromiseJob(job.[[Job]],job.[[Realm]]).
  2. Returnunused.

27.2.1.9 HostPromiseRejectionTracker (promise,operation )

Thehost-defined abstract operation HostPromiseRejectionTracker takes argumentspromise (a Promise) andoperation ("reject" or"handle") and returnsunused. It allowshost environments to track promise rejections.

The default implementation of HostPromiseRejectionTracker is to returnunused.

Note 1

HostPromiseRejectionTracker is called in two scenarios:

  • When a promise is rejected without any handlers, it is called with itsoperation argument set to"reject".
  • When a handler is added to a rejected promise for the first time, it is called with itsoperation argument set to"handle".

A typical implementation of HostPromiseRejectionTracker might try to notify developers of unhandled rejections, while also being careful to notify them if such previous notifications are later invalidated by new handlers being attached.

Note 2

Ifoperation is"handle", an implementation should not hold a reference topromise in a way that would interfere with garbage collection. An implementation may hold a reference topromise ifoperation is"reject", since it is expected that rejections will be rare and not on hot code paths.

27.2.2 Promise Jobs

27.2.2.1 NewPromiseReactionJob (reaction,argument )

The abstract operation NewPromiseReactionJob takes argumentsreaction (aPromiseReaction Record) andargument (anECMAScript language value) and returns aRecord with fields[[Job]] (aJobAbstract Closure) and[[Realm]] (aRealm Record ornull). It returns a newJobAbstract Closure that applies the appropriate handler to the incoming value, and uses the handler's return value to resolve or reject the derived promise associated with that handler. It performs the following steps when called:

  1. Letjob be a newJobAbstract Closure with no parameters that capturesreaction andargument and performs the following steps when called:
    1. LetpromiseCapability bereaction.[[Capability]].
    2. Lettype bereaction.[[Type]].
    3. Lethandler bereaction.[[Handler]].
    4. Ifhandler isempty, then
      1. Iftype isfulfill, then
        1. LethandlerResult beNormalCompletion(argument).
      2. Else,
        1. Assert:type isreject.
        2. LethandlerResult beThrowCompletion(argument).
    5. Else,
      1. LethandlerResult beCompletion(HostCallJobCallback(handler,undefined, «argument »)).
    6. IfpromiseCapability isundefined, then
      1. Assert:handlerResult is not anabrupt completion.
      2. Returnempty.
    7. Assert:promiseCapability is aPromiseCapability Record.
    8. IfhandlerResult is anabrupt completion, then
      1. Return ? Call(promiseCapability.[[Reject]],undefined, «handlerResult.[[Value]] »).
    9. Else,
      1. Return ? Call(promiseCapability.[[Resolve]],undefined, «handlerResult.[[Value]] »).
  2. LethandlerRealm benull.
  3. Ifreaction.[[Handler]] is notempty, then
    1. LetgetHandlerRealmResult beCompletion(GetFunctionRealm(reaction.[[Handler]].[[Callback]])).
    2. IfgetHandlerRealmResult is anormal completion, sethandlerRealm togetHandlerRealmResult.[[Value]].
    3. Else, sethandlerRealm tothe current Realm Record.
    4. NOTE:handlerRealm is nevernull unless the handler isundefined. When the handler is a revoked Proxy and no ECMAScript code runs,handlerRealm is used to create error objects.
  4. Return theRecord {[[Job]]:job,[[Realm]]:handlerRealm }.

27.2.2.2 NewPromiseResolveThenableJob (promiseToResolve,thenable,then )

The abstract operation NewPromiseResolveThenableJob takes argumentspromiseToResolve (a Promise),thenable (an Object), andthen (aJobCallback Record) and returns aRecord with fields[[Job]] (aJobAbstract Closure) and[[Realm]] (aRealm Record). It performs the following steps when called:

  1. Letjob be a newJobAbstract Closure with no parameters that capturespromiseToResolve,thenable, andthen and performs the following steps when called:
    1. LetresolvingFunctions beCreateResolvingFunctions(promiseToResolve).
    2. LetthenCallResult beCompletion(HostCallJobCallback(then,thenable, «resolvingFunctions.[[Resolve]],resolvingFunctions.[[Reject]] »)).
    3. IfthenCallResult is anabrupt completion, then
      1. Return ? Call(resolvingFunctions.[[Reject]],undefined, «thenCallResult.[[Value]] »).
    4. Return ! thenCallResult.
  2. LetgetThenRealmResult beCompletion(GetFunctionRealm(then.[[Callback]])).
  3. IfgetThenRealmResult is anormal completion, letthenRealm begetThenRealmResult.[[Value]].
  4. Else, letthenRealm bethe current Realm Record.
  5. NOTE:thenRealm is nevernull. Whenthen.[[Callback]] is a revoked Proxy and no code runs,thenRealm is used to create error objects.
  6. Return theRecord {[[Job]]:job,[[Realm]]:thenRealm }.
Note

ThisJob uses the supplied thenable and itsthen method to resolve the given promise. This process must take place as aJob to ensure that the evaluation of thethen method occurs after evaluation of any surrounding code has completed.

27.2.3 The Promise Constructor

The Promiseconstructor:

  • is%Promise%.
  • is the initial value of the"Promise" property of theglobal object.
  • creates and initializes a new Promise when called as aconstructor.
  • is not intended to be called as a function and will throw an exception when called in that manner.
  • may be used as the value in anextends clause of a class definition. Subclassconstructors that intend to inherit the specified Promise behaviour must include asuper call to the Promiseconstructor to create and initialize the subclass instance with the internal state necessary to support thePromise andPromise.prototype built-in methods.

27.2.3.1 Promise (executor )

This function performs the following steps when called:

  1. If NewTarget isundefined, throw aTypeError exception.
  2. IfIsCallable(executor) isfalse, throw aTypeError exception.
  3. Letpromise be ? OrdinaryCreateFromConstructor(NewTarget,"%Promise.prototype%", «[[PromiseState]],[[PromiseResult]],[[PromiseFulfillReactions]],[[PromiseRejectReactions]],[[PromiseIsHandled]] »).
  4. Setpromise.[[PromiseState]] topending.
  5. Setpromise.[[PromiseResult]] toempty.
  6. Setpromise.[[PromiseFulfillReactions]] to a new emptyList.
  7. Setpromise.[[PromiseRejectReactions]] to a new emptyList.
  8. Setpromise.[[PromiseIsHandled]] tofalse.
  9. LetresolvingFunctions beCreateResolvingFunctions(promise).
  10. Letcompletion beCompletion(Call(executor,undefined, «resolvingFunctions.[[Resolve]],resolvingFunctions.[[Reject]] »)).
  11. Ifcompletion is anabrupt completion, then
    1. Perform ? Call(resolvingFunctions.[[Reject]],undefined, «completion.[[Value]] »).
  12. Returnpromise.
Note

Theexecutor argument must be afunction object. It is called for initiating and reporting completion of the possibly deferred action represented by this Promise. The executor is called with two arguments:resolve andreject. These are functions that may be used by theexecutor function to report eventual completion or failure of the deferred computation. Returning from the executor function does not mean that the deferred action has been completed but only that the request to eventually perform the deferred action has been accepted.

Theresolve function that is passed to anexecutor function accepts a single argument. Theexecutor code may eventually call theresolve function to indicate that it wishes to resolve the associated Promise. The argument passed to theresolve function represents the eventual value of the deferred action and can be either the actual fulfillment value or another promise which will provide the value if it is fulfilled.

Thereject function that is passed to anexecutor function accepts a single argument. Theexecutor code may eventually call thereject function to indicate that the associated Promise is rejected and will never be fulfilled. The argument passed to thereject function is used as the rejection value of the promise. Typically it will be an Error object.

The resolve and reject functions passed to anexecutor function by the Promiseconstructor have the capability to actually resolve and reject the associated promise. Subclasses may have differentconstructor behaviour that passes in customized values for resolve and reject.

27.2.4 Properties of the Promise Constructor

The Promiseconstructor:

27.2.4.1 Promise.all (iterable )

This function returns a new promise which is fulfilled with an array of fulfillment values for the passed promises, or rejects with the reason of the first passed promise that rejects. It resolves all elements of the passediterable to promises as it runs this algorithm.

  1. LetC be thethis value.
  2. LetpromiseCapability be ? NewPromiseCapability(C).
  3. LetpromiseResolve beCompletion(GetPromiseResolve(C)).
  4. IfAbruptRejectPromise(promiseResolve,promiseCapability).
  5. LetiteratorRecord beCompletion(GetIterator(iterable,sync)).
  6. IfAbruptRejectPromise(iteratorRecord,promiseCapability).
  7. Letresult beCompletion(PerformPromiseAll(iteratorRecord,C,promiseCapability,promiseResolve)).
  8. Ifresult is anabrupt completion, then
    1. IfiteratorRecord.[[Done]] isfalse, setresult toCompletion(IteratorClose(iteratorRecord,result)).
    2. IfAbruptRejectPromise(result,promiseCapability).
  9. Return ! result.
Note

This function requires itsthis value to be aconstructor function that supports the parameter conventions of the Promiseconstructor.

27.2.4.1.1 GetPromiseResolve (promiseConstructor )

The abstract operation GetPromiseResolve takes argumentpromiseConstructor (aconstructor) and returns either anormal completion containing afunction object or athrow completion. It performs the following steps when called:

  1. LetpromiseResolve be ? Get(promiseConstructor,"resolve").
  2. IfIsCallable(promiseResolve) isfalse, throw aTypeError exception.
  3. ReturnpromiseResolve.

27.2.4.1.2 PerformPromiseAll (iteratorRecord,constructor,resultCapability,promiseResolve )

The abstract operation PerformPromiseAll takes argumentsiteratorRecord (anIterator Record),constructor (aconstructor),resultCapability (aPromiseCapability Record), andpromiseResolve (afunction object) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Letvalues be a new emptyList.
  2. LetremainingElementsCount be theRecord {[[Value]]: 1 }.
  3. Letindex be 0.
  4. Repeat,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext isdone, then
      1. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] - 1.
      2. IfremainingElementsCount.[[Value]] = 0, then
        1. LetvaluesArray beCreateArrayFromList(values).
        2. Perform ? Call(resultCapability.[[Resolve]],undefined, «valuesArray »).
      3. ReturnresultCapability.[[Promise]].
    3. Appendundefined tovalues.
    4. LetnextPromise be ? Call(promiseResolve,constructor, «next »).
    5. Letsteps be the algorithm steps defined inPromise.all Resolve Element Functions.
    6. Letlength be the number of non-optional parameters of the function definition inPromise.all Resolve Element Functions.
    7. LetonFulfilled beCreateBuiltinFunction(steps,length,"", «[[AlreadyCalled]],[[Index]],[[Values]],[[Capability]],[[RemainingElements]] »).
    8. SetonFulfilled.[[AlreadyCalled]] tofalse.
    9. SetonFulfilled.[[Index]] toindex.
    10. SetonFulfilled.[[Values]] tovalues.
    11. SetonFulfilled.[[Capability]] toresultCapability.
    12. SetonFulfilled.[[RemainingElements]] toremainingElementsCount.
    13. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] + 1.
    14. Perform ? Invoke(nextPromise,"then", «onFulfilled,resultCapability.[[Reject]] »).
    15. Setindex toindex + 1.

27.2.4.1.3Promise.all Resolve Element Functions

APromise.all resolve element function is an anonymous built-in function that is used to resolve a specificPromise.all element. EachPromise.all resolve element function has[[Index]],[[Values]],[[Capability]],[[RemainingElements]], and[[AlreadyCalled]] internal slots.

When aPromise.all resolve element function is called with argumentx, the following steps are taken:

  1. LetF be theactive function object.
  2. IfF.[[AlreadyCalled]] istrue, returnundefined.
  3. SetF.[[AlreadyCalled]] totrue.
  4. Letindex beF.[[Index]].
  5. Letvalues beF.[[Values]].
  6. LetpromiseCapability beF.[[Capability]].
  7. LetremainingElementsCount beF.[[RemainingElements]].
  8. Setvalues[index] tox.
  9. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] - 1.
  10. IfremainingElementsCount.[[Value]] = 0, then
    1. LetvaluesArray beCreateArrayFromList(values).
    2. Return ? Call(promiseCapability.[[Resolve]],undefined, «valuesArray »).
  11. Returnundefined.

The"length" property of aPromise.all resolve element function is1𝔽.

27.2.4.2 Promise.allSettled (iterable )

This function returns a promise that is fulfilled with an array of promise state snapshots, but only after all the original promises have settled, i.e. become either fulfilled or rejected. It resolves all elements of the passediterable to promises as it runs this algorithm.

  1. LetC be thethis value.
  2. LetpromiseCapability be ? NewPromiseCapability(C).
  3. LetpromiseResolve beCompletion(GetPromiseResolve(C)).
  4. IfAbruptRejectPromise(promiseResolve,promiseCapability).
  5. LetiteratorRecord beCompletion(GetIterator(iterable,sync)).
  6. IfAbruptRejectPromise(iteratorRecord,promiseCapability).
  7. Letresult beCompletion(PerformPromiseAllSettled(iteratorRecord,C,promiseCapability,promiseResolve)).
  8. Ifresult is anabrupt completion, then
    1. IfiteratorRecord.[[Done]] isfalse, setresult toCompletion(IteratorClose(iteratorRecord,result)).
    2. IfAbruptRejectPromise(result,promiseCapability).
  9. Return ! result.
Note

This function requires itsthis value to be aconstructor function that supports the parameter conventions of the Promiseconstructor.

27.2.4.2.1 PerformPromiseAllSettled (iteratorRecord,constructor,resultCapability,promiseResolve )

The abstract operation PerformPromiseAllSettled takes argumentsiteratorRecord (anIterator Record),constructor (aconstructor),resultCapability (aPromiseCapability Record), andpromiseResolve (afunction object) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Letvalues be a new emptyList.
  2. LetremainingElementsCount be theRecord {[[Value]]: 1 }.
  3. Letindex be 0.
  4. Repeat,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext isdone, then
      1. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] - 1.
      2. IfremainingElementsCount.[[Value]] = 0, then
        1. LetvaluesArray beCreateArrayFromList(values).
        2. Perform ? Call(resultCapability.[[Resolve]],undefined, «valuesArray »).
      3. ReturnresultCapability.[[Promise]].
    3. Appendundefined tovalues.
    4. LetnextPromise be ? Call(promiseResolve,constructor, «next »).
    5. LetstepsFulfilled be the algorithm steps defined inPromise.allSettled Resolve Element Functions.
    6. LetlengthFulfilled be the number of non-optional parameters of the function definition inPromise.allSettled Resolve Element Functions.
    7. LetonFulfilled beCreateBuiltinFunction(stepsFulfilled,lengthFulfilled,"", «[[AlreadyCalled]],[[Index]],[[Values]],[[Capability]],[[RemainingElements]] »).
    8. LetalreadyCalled be theRecord {[[Value]]:false }.
    9. SetonFulfilled.[[AlreadyCalled]] toalreadyCalled.
    10. SetonFulfilled.[[Index]] toindex.
    11. SetonFulfilled.[[Values]] tovalues.
    12. SetonFulfilled.[[Capability]] toresultCapability.
    13. SetonFulfilled.[[RemainingElements]] toremainingElementsCount.
    14. LetstepsRejected be the algorithm steps defined inPromise.allSettled Reject Element Functions.
    15. LetlengthRejected be the number of non-optional parameters of the function definition inPromise.allSettled Reject Element Functions.
    16. LetonRejected beCreateBuiltinFunction(stepsRejected,lengthRejected,"", «[[AlreadyCalled]],[[Index]],[[Values]],[[Capability]],[[RemainingElements]] »).
    17. SetonRejected.[[AlreadyCalled]] toalreadyCalled.
    18. SetonRejected.[[Index]] toindex.
    19. SetonRejected.[[Values]] tovalues.
    20. SetonRejected.[[Capability]] toresultCapability.
    21. SetonRejected.[[RemainingElements]] toremainingElementsCount.
    22. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] + 1.
    23. Perform ? Invoke(nextPromise,"then", «onFulfilled,onRejected »).
    24. Setindex toindex + 1.

27.2.4.2.2Promise.allSettled Resolve Element Functions

APromise.allSettled resolve element function is an anonymous built-in function that is used to resolve a specificPromise.allSettled element. EachPromise.allSettled resolve element function has[[Index]],[[Values]],[[Capability]],[[RemainingElements]], and[[AlreadyCalled]] internal slots.

When aPromise.allSettled resolve element function is called with argumentx, the following steps are taken:

  1. LetF be theactive function object.
  2. LetalreadyCalled beF.[[AlreadyCalled]].
  3. IfalreadyCalled.[[Value]] istrue, returnundefined.
  4. SetalreadyCalled.[[Value]] totrue.
  5. Letindex beF.[[Index]].
  6. Letvalues beF.[[Values]].
  7. LetpromiseCapability beF.[[Capability]].
  8. LetremainingElementsCount beF.[[RemainingElements]].
  9. Letobj beOrdinaryObjectCreate(%Object.prototype%).
  10. Perform ! CreateDataPropertyOrThrow(obj,"status","fulfilled").
  11. Perform ! CreateDataPropertyOrThrow(obj,"value",x).
  12. Setvalues[index] toobj.
  13. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] - 1.
  14. IfremainingElementsCount.[[Value]] = 0, then
    1. LetvaluesArray beCreateArrayFromList(values).
    2. Return ? Call(promiseCapability.[[Resolve]],undefined, «valuesArray »).
  15. Returnundefined.

The"length" property of aPromise.allSettled resolve element function is1𝔽.

27.2.4.2.3Promise.allSettled Reject Element Functions

APromise.allSettled reject element function is an anonymous built-in function that is used to reject a specificPromise.allSettled element. EachPromise.allSettled reject element function has[[Index]],[[Values]],[[Capability]],[[RemainingElements]], and[[AlreadyCalled]] internal slots.

When aPromise.allSettled reject element function is called with argumentx, the following steps are taken:

  1. LetF be theactive function object.
  2. LetalreadyCalled beF.[[AlreadyCalled]].
  3. IfalreadyCalled.[[Value]] istrue, returnundefined.
  4. SetalreadyCalled.[[Value]] totrue.
  5. Letindex beF.[[Index]].
  6. Letvalues beF.[[Values]].
  7. LetpromiseCapability beF.[[Capability]].
  8. LetremainingElementsCount beF.[[RemainingElements]].
  9. Letobj beOrdinaryObjectCreate(%Object.prototype%).
  10. Perform ! CreateDataPropertyOrThrow(obj,"status","rejected").
  11. Perform ! CreateDataPropertyOrThrow(obj,"reason",x).
  12. Setvalues[index] toobj.
  13. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] - 1.
  14. IfremainingElementsCount.[[Value]] = 0, then
    1. LetvaluesArray beCreateArrayFromList(values).
    2. Return ? Call(promiseCapability.[[Resolve]],undefined, «valuesArray »).
  15. Returnundefined.

The"length" property of aPromise.allSettled reject element function is1𝔽.

27.2.4.3 Promise.any (iterable )

This function returns a promise that is fulfilled by the first given promise to be fulfilled, or rejected with anAggregateError holding the rejection reasons if all of the given promises are rejected. It resolves all elements of the passediterable to promises as it runs this algorithm.

  1. LetC be thethis value.
  2. LetpromiseCapability be ? NewPromiseCapability(C).
  3. LetpromiseResolve beCompletion(GetPromiseResolve(C)).
  4. IfAbruptRejectPromise(promiseResolve,promiseCapability).
  5. LetiteratorRecord beCompletion(GetIterator(iterable,sync)).
  6. IfAbruptRejectPromise(iteratorRecord,promiseCapability).
  7. Letresult beCompletion(PerformPromiseAny(iteratorRecord,C,promiseCapability,promiseResolve)).
  8. Ifresult is anabrupt completion, then
    1. IfiteratorRecord.[[Done]] isfalse, setresult toCompletion(IteratorClose(iteratorRecord,result)).
    2. IfAbruptRejectPromise(result,promiseCapability).
  9. Return ! result.
Note

This function requires itsthis value to be aconstructor function that supports the parameter conventions of thePromiseconstructor.

27.2.4.3.1 PerformPromiseAny (iteratorRecord,constructor,resultCapability,promiseResolve )

The abstract operation PerformPromiseAny takes argumentsiteratorRecord (anIterator Record),constructor (aconstructor),resultCapability (aPromiseCapability Record), andpromiseResolve (afunction object) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Leterrors be a new emptyList.
  2. LetremainingElementsCount be theRecord {[[Value]]: 1 }.
  3. Letindex be 0.
  4. Repeat,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext isdone, then
      1. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] - 1.
      2. IfremainingElementsCount.[[Value]] = 0, then
        1. Leterror be a newly createdAggregateError object.
        2. Perform ! DefinePropertyOrThrow(error,"errors", PropertyDescriptor {[[Configurable]]:true,[[Enumerable]]:false,[[Writable]]:true,[[Value]]:CreateArrayFromList(errors) }).
        3. ReturnThrowCompletion(error).
      3. ReturnresultCapability.[[Promise]].
    3. Appendundefined toerrors.
    4. LetnextPromise be ? Call(promiseResolve,constructor, «next »).
    5. LetstepsRejected be the algorithm steps defined inPromise.any Reject Element Functions.
    6. LetlengthRejected be the number of non-optional parameters of the function definition inPromise.any Reject Element Functions.
    7. LetonRejected beCreateBuiltinFunction(stepsRejected,lengthRejected,"", «[[AlreadyCalled]],[[Index]],[[Errors]],[[Capability]],[[RemainingElements]] »).
    8. SetonRejected.[[AlreadyCalled]] tofalse.
    9. SetonRejected.[[Index]] toindex.
    10. SetonRejected.[[Errors]] toerrors.
    11. SetonRejected.[[Capability]] toresultCapability.
    12. SetonRejected.[[RemainingElements]] toremainingElementsCount.
    13. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] + 1.
    14. Perform ? Invoke(nextPromise,"then", «resultCapability.[[Resolve]],onRejected »).
    15. Setindex toindex + 1.

27.2.4.3.2Promise.any Reject Element Functions

APromise.any reject element function is an anonymous built-in function that is used to reject a specificPromise.any element. EachPromise.any reject element function has[[Index]],[[Errors]],[[Capability]],[[RemainingElements]], and[[AlreadyCalled]] internal slots.

When aPromise.any reject element function is called with argumentx, the following steps are taken:

  1. LetF be theactive function object.
  2. IfF.[[AlreadyCalled]] istrue, returnundefined.
  3. SetF.[[AlreadyCalled]] totrue.
  4. Letindex beF.[[Index]].
  5. Leterrors beF.[[Errors]].
  6. LetpromiseCapability beF.[[Capability]].
  7. LetremainingElementsCount beF.[[RemainingElements]].
  8. Seterrors[index] tox.
  9. SetremainingElementsCount.[[Value]] toremainingElementsCount.[[Value]] - 1.
  10. IfremainingElementsCount.[[Value]] = 0, then
    1. Leterror be a newly createdAggregateError object.
    2. Perform ! DefinePropertyOrThrow(error,"errors", PropertyDescriptor {[[Configurable]]:true,[[Enumerable]]:false,[[Writable]]:true,[[Value]]:CreateArrayFromList(errors) }).
    3. Return ? Call(promiseCapability.[[Reject]],undefined, «error »).
  11. Returnundefined.

The"length" property of aPromise.any reject element function is1𝔽.

27.2.4.4 Promise.prototype

The initial value ofPromise.prototype is thePromise prototype object.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false }.

27.2.4.5 Promise.race (iterable )

This function returns a new promise which is settled in the same way as the first passed promise to settle. It resolves all elements of the passediterable to promises as it runs this algorithm.

  1. LetC be thethis value.
  2. LetpromiseCapability be ? NewPromiseCapability(C).
  3. LetpromiseResolve beCompletion(GetPromiseResolve(C)).
  4. IfAbruptRejectPromise(promiseResolve,promiseCapability).
  5. LetiteratorRecord beCompletion(GetIterator(iterable,sync)).
  6. IfAbruptRejectPromise(iteratorRecord,promiseCapability).
  7. Letresult beCompletion(PerformPromiseRace(iteratorRecord,C,promiseCapability,promiseResolve)).
  8. Ifresult is anabrupt completion, then
    1. IfiteratorRecord.[[Done]] isfalse, setresult toCompletion(IteratorClose(iteratorRecord,result)).
    2. IfAbruptRejectPromise(result,promiseCapability).
  9. Return ! result.
Note 1

If theiterable argument yields no values or if none of the promises yielded byiterable ever settle, then the pending promise returned by this method will never be settled.

Note 2

This function expects itsthis value to be aconstructor function that supports the parameter conventions of the Promiseconstructor. It also expects that itsthis value provides aresolve method.

27.2.4.5.1 PerformPromiseRace (iteratorRecord,constructor,resultCapability,promiseResolve )

The abstract operation PerformPromiseRace takes argumentsiteratorRecord (anIterator Record),constructor (aconstructor),resultCapability (aPromiseCapability Record), andpromiseResolve (afunction object) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Repeat,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext isdone, then
      1. ReturnresultCapability.[[Promise]].
    3. LetnextPromise be ? Call(promiseResolve,constructor, «next »).
    4. Perform ? Invoke(nextPromise,"then", «resultCapability.[[Resolve]],resultCapability.[[Reject]] »).

27.2.4.6 Promise.reject (r )

This function returns a new promise rejected with the passed argument.

  1. LetC be thethis value.
  2. LetpromiseCapability be ? NewPromiseCapability(C).
  3. Perform ? Call(promiseCapability.[[Reject]],undefined, «r »).
  4. ReturnpromiseCapability.[[Promise]].
Note

This function expects itsthis value to be aconstructor function that supports the parameter conventions of the Promiseconstructor.

27.2.4.7 Promise.resolve (x )

This function returns either a new promise resolved with the passed argument, or the argument itself if the argument is a promise produced by thisconstructor.

  1. LetC be thethis value.
  2. IfCis not an Object, throw aTypeError exception.
  3. Return ? PromiseResolve(C,x).
Note

This function expects itsthis value to be aconstructor function that supports the parameter conventions of the Promiseconstructor.

27.2.4.7.1 PromiseResolve (C,x )

The abstract operation PromiseResolve takes argumentsC (an Object) andx (anECMAScript language value) and returns either anormal completion containing anECMAScript language value or athrow completion. It returns a new promise resolved withx. It performs the following steps when called:

  1. IfIsPromise(x) istrue, then
    1. LetxConstructor be ? Get(x,"constructor").
    2. IfSameValue(xConstructor,C) istrue, returnx.
  2. LetpromiseCapability be ? NewPromiseCapability(C).
  3. Perform ? Call(promiseCapability.[[Resolve]],undefined, «x »).
  4. ReturnpromiseCapability.[[Promise]].

27.2.4.8 Promise.try (callback, ...args )

This function performs the following steps when called:

  1. LetC be thethis value.
  2. IfCis not an Object, throw aTypeError exception.
  3. LetpromiseCapability be ? NewPromiseCapability(C).
  4. Letstatus beCompletion(Call(callback,undefined,args)).
  5. Ifstatus is anabrupt completion, then
    1. Perform ? Call(promiseCapability.[[Reject]],undefined, «status.[[Value]] »).
  6. Else,
    1. Perform ? Call(promiseCapability.[[Resolve]],undefined, «status.[[Value]] »).
  7. ReturnpromiseCapability.[[Promise]].
Note

This function expects itsthis value to be aconstructor function that supports the parameter conventions of the Promiseconstructor.

27.2.4.9 Promise.withResolvers ( )

This function returns an object with three properties: a new promise together with theresolve andreject functions associated with it.

  1. LetC be thethis value.
  2. LetpromiseCapability be ? NewPromiseCapability(C).
  3. Letobj beOrdinaryObjectCreate(%Object.prototype%).
  4. Perform ! CreateDataPropertyOrThrow(obj,"promise",promiseCapability.[[Promise]]).
  5. Perform ! CreateDataPropertyOrThrow(obj,"resolve",promiseCapability.[[Resolve]]).
  6. Perform ! CreateDataPropertyOrThrow(obj,"reject",promiseCapability.[[Reject]]).
  7. Returnobj.

27.2.4.10 get Promise [ %Symbol.species% ]

Promise[%Symbol.species%] is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. Return thethis value.

The value of the"name" property of this function is"get [Symbol.species]".

Note

Promise prototype methods normally use theirthis value'sconstructor to create a derived object. However, a subclassconstructor may over-ride that default behaviour by redefining its%Symbol.species% property.

27.2.5 Properties of the Promise Prototype Object

ThePromise prototype object:

  • is%Promise.prototype%.
  • has a[[Prototype]] internal slot whose value is%Object.prototype%.
  • is anordinary object.
  • does not have a[[PromiseState]] internal slot or any of the other internal slots of Promise instances.

27.2.5.1 Promise.prototype.catch (onRejected )

This method performs the following steps when called:

  1. Letpromise be thethis value.
  2. Return ? Invoke(promise,"then", «undefined,onRejected »).

27.2.5.2 Promise.prototype.constructor

The initial value ofPromise.prototype.constructor is%Promise%.

27.2.5.3 Promise.prototype.finally (onFinally )

This method performs the following steps when called:

  1. Letpromise be thethis value.
  2. Ifpromiseis not an Object, throw aTypeError exception.
  3. LetC be ? SpeciesConstructor(promise,%Promise%).
  4. Assert:IsConstructor(C) istrue.
  5. IfIsCallable(onFinally) isfalse, then
    1. LetthenFinally beonFinally.
    2. LetcatchFinally beonFinally.
  6. Else,
    1. LetthenFinallyClosure be a newAbstract Closure with parameters (value) that capturesonFinally andC and performs the following steps when called:
      1. Letresult be ? Call(onFinally,undefined).
      2. Letp be ? PromiseResolve(C,result).
      3. LetreturnValue be a newAbstract Closure with no parameters that capturesvalue and performs the following steps when called:
        1. ReturnNormalCompletion(value).
      4. LetvalueThunk beCreateBuiltinFunction(returnValue, 0,"", « »).
      5. Return ? Invoke(p,"then", «valueThunk »).
    2. LetthenFinally beCreateBuiltinFunction(thenFinallyClosure, 1,"", « »).
    3. LetcatchFinallyClosure be a newAbstract Closure with parameters (reason) that capturesonFinally andC and performs the following steps when called:
      1. Letresult be ? Call(onFinally,undefined).
      2. Letp be ? PromiseResolve(C,result).
      3. LetthrowReason be a newAbstract Closure with no parameters that capturesreason and performs the following steps when called:
        1. ReturnThrowCompletion(reason).
      4. Letthrower beCreateBuiltinFunction(throwReason, 0,"", « »).
      5. Return ? Invoke(p,"then", «thrower »).
    4. LetcatchFinally beCreateBuiltinFunction(catchFinallyClosure, 1,"", « »).
  7. Return ? Invoke(promise,"then", «thenFinally,catchFinally »).

27.2.5.4 Promise.prototype.then (onFulfilled,onRejected )

This method performs the following steps when called:

  1. Letpromise be thethis value.
  2. IfIsPromise(promise) isfalse, throw aTypeError exception.
  3. LetC be ? SpeciesConstructor(promise,%Promise%).
  4. LetresultCapability be ? NewPromiseCapability(C).
  5. ReturnPerformPromiseThen(promise,onFulfilled,onRejected,resultCapability).

27.2.5.4.1 PerformPromiseThen (promise,onFulfilled,onRejected [ ,resultCapability ] )

The abstract operation PerformPromiseThen takes argumentspromise (a Promise),onFulfilled (anECMAScript language value), andonRejected (anECMAScript language value) and optional argumentresultCapability (aPromiseCapability Record) and returns anECMAScript language value. It performs the “then” operation onpromise usingonFulfilled andonRejected as its settlement actions. IfresultCapability is passed, the result is stored by updatingresultCapability's promise. If it is not passed, then PerformPromiseThen is being called by a specification-internal operation where the result does not matter. It performs the following steps when called:

  1. Assert:IsPromise(promise) istrue.
  2. IfresultCapability is not present, then
    1. SetresultCapability toundefined.
  3. IfIsCallable(onFulfilled) isfalse, then
    1. LetonFulfilledJobCallback beempty.
  4. Else,
    1. LetonFulfilledJobCallback beHostMakeJobCallback(onFulfilled).
  5. IfIsCallable(onRejected) isfalse, then
    1. LetonRejectedJobCallback beempty.
  6. Else,
    1. LetonRejectedJobCallback beHostMakeJobCallback(onRejected).
  7. LetfulfillReaction be thePromiseReaction Record {[[Capability]]:resultCapability,[[Type]]:fulfill,[[Handler]]:onFulfilledJobCallback }.
  8. LetrejectReaction be thePromiseReaction Record {[[Capability]]:resultCapability,[[Type]]:reject,[[Handler]]:onRejectedJobCallback }.
  9. Ifpromise.[[PromiseState]] ispending, then
    1. AppendfulfillReaction topromise.[[PromiseFulfillReactions]].
    2. AppendrejectReaction topromise.[[PromiseRejectReactions]].
  10. Else ifpromise.[[PromiseState]] isfulfilled, then
    1. Letvalue bepromise.[[PromiseResult]].
    2. LetfulfillJob beNewPromiseReactionJob(fulfillReaction,value).
    3. PerformHostEnqueuePromiseJob(fulfillJob.[[Job]],fulfillJob.[[Realm]]).
  11. Else,
    1. Assert:promise.[[PromiseState]] isrejected.
    2. Letreason bepromise.[[PromiseResult]].
    3. Ifpromise.[[PromiseIsHandled]] isfalse, performHostPromiseRejectionTracker(promise,"handle").
    4. LetrejectJob beNewPromiseReactionJob(rejectReaction,reason).
    5. PerformHostEnqueuePromiseJob(rejectJob.[[Job]],rejectJob.[[Realm]]).
  12. Setpromise.[[PromiseIsHandled]] totrue.
  13. IfresultCapability isundefined, then
    1. Returnundefined.
  14. Else,
    1. ReturnresultCapability.[[Promise]].

27.2.5.5 Promise.prototype [ %Symbol.toStringTag% ]

The initial value of the%Symbol.toStringTag% property is the String value"Promise".

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.2.6 Properties of Promise Instances

Promise instances areordinary objects that inherit properties from thePromise prototype object (the intrinsic,%Promise.prototype%). Promise instances are initially created with the internal slots described inTable 92.

Table 92: Internal Slots of Promise Instances
Internal Slot Type Description
[[PromiseState]]pending,fulfilled, orrejected Governs how a promise will react to incoming calls to itsthen method.
[[PromiseResult]] anECMAScript language value orempty The value with which the promise has been fulfilled or rejected, if any.empty if and only if the[[PromiseState]] ispending.
[[PromiseFulfillReactions]] aList ofPromiseReaction RecordsRecords to be processed when/if the promise transitions from thepending state to thefulfilled state.
[[PromiseRejectReactions]] aList ofPromiseReaction RecordsRecords to be processed when/if the promise transitions from thepending state to therejected state.
[[PromiseIsHandled]] a Boolean Indicates whether the promise has ever had a fulfillment or rejection handler; used in unhandled rejection tracking.

27.3 GeneratorFunction Objects

GeneratorFunctions are functions that are usually created by evaluatingGeneratorDeclarations,GeneratorExpressions, andGeneratorMethods. They may also be created by calling the%GeneratorFunction% intrinsic.

Figure 6 (Informative): Generator Objects Relationships
A staggering variety of boxes and arrows.

27.3.1 The GeneratorFunction Constructor

The GeneratorFunctionconstructor:

  • is%GeneratorFunction%.
  • is a subclass ofFunction.
  • creates and initializes a new GeneratorFunction when called as a function rather than as aconstructor. Thus the function callGeneratorFunction (…) is equivalent to the object creation expressionnew GeneratorFunction (…) with the same arguments.
  • may be used as the value of anextends clause of a class definition. Subclassconstructors that intend to inherit the specified GeneratorFunction behaviour must include asuper call to the GeneratorFunctionconstructor to create and initialize subclass instances with the internal slots necessary for built-in GeneratorFunction behaviour. All ECMAScript syntactic forms for defining generatorfunction objects create direct instances of GeneratorFunction. There is no syntactic means to create instances of GeneratorFunction subclasses.

27.3.1.1 GeneratorFunction ( ...parameterArgs,bodyArg )

The last argument (if any) specifies the body (executable code) of a generator function; any preceding arguments specify formal parameters.

This function performs the following steps when called:

  1. LetC be theactive function object.
  2. IfbodyArg is not present, setbodyArg to the empty String.
  3. Return ? CreateDynamicFunction(C, NewTarget,generator,parameterArgs,bodyArg).
Note

See NOTE for20.2.1.1.

27.3.2 Properties of the GeneratorFunction Constructor

The GeneratorFunctionconstructor:

  • is a standard built-infunction object that inherits from the Functionconstructor.
  • has a[[Prototype]] internal slot whose value is%Function%.
  • has a"length" property whose value is1𝔽.
  • has a"name" property whose value is"GeneratorFunction".
  • has the following properties:

27.3.2.1 GeneratorFunction.prototype

The initial value ofGeneratorFunction.prototype is theGeneratorFunction prototype object.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false }.

27.3.3 Properties of the GeneratorFunction Prototype Object

TheGeneratorFunction prototype object:

27.3.3.1 GeneratorFunction.prototype.constructor

The initial value ofGeneratorFunction.prototype.constructor is%GeneratorFunction%.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.3.3.2 GeneratorFunction.prototype.prototype

The initial value ofGeneratorFunction.prototype.prototype is%GeneratorPrototype%.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.3.3.3 GeneratorFunction.prototype [ %Symbol.toStringTag% ]

The initial value of the%Symbol.toStringTag% property is the String value"GeneratorFunction".

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.3.4 GeneratorFunction Instances

Every GeneratorFunction instance is an ECMAScriptfunction object and has the internal slots listed inTable 30. The value of the[[IsClassConstructor]] internal slot for all such instances isfalse.

Each GeneratorFunction instance has the following own properties:

27.3.4.1 length

The specification for the"length" property of Function instances given in20.2.4.1 also applies to GeneratorFunction instances.

27.3.4.2 name

The specification for the"name" property of Function instances given in20.2.4.2 also applies to GeneratorFunction instances.

27.3.4.3 prototype

Whenever a GeneratorFunction instance is created anotherordinary object is also created and is the initial value of the generator function's"prototype" property. The value of the prototype property is used to initialize the[[Prototype]] internal slot of a newly created Generator when the generatorfunction object is invoked using[[Call]].

This property has the attributes {[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }.

Note

Unlike Function instances, the object that is the value of a GeneratorFunction's"prototype" property does not have a"constructor" property whose value is the GeneratorFunction instance.

27.4 AsyncGeneratorFunction Objects

AsyncGeneratorFunctions are functions that are usually created by evaluatingAsyncGeneratorDeclaration,AsyncGeneratorExpression, andAsyncGeneratorMethod syntactic productions. They may also be created by calling the%AsyncGeneratorFunction% intrinsic.

27.4.1 The AsyncGeneratorFunction Constructor

The AsyncGeneratorFunctionconstructor:

  • is%AsyncGeneratorFunction%.
  • is a subclass ofFunction.
  • creates and initializes a new AsyncGeneratorFunction when called as a function rather than as aconstructor. Thus the function callAsyncGeneratorFunction (...) is equivalent to the object creation expressionnew AsyncGeneratorFunction (...) with the same arguments.
  • may be used as the value of anextends clause of a class definition. Subclassconstructors that intend to inherit the specified AsyncGeneratorFunction behaviour must include asuper call to the AsyncGeneratorFunctionconstructor to create and initialize subclass instances with the internal slots necessary for built-in AsyncGeneratorFunction behaviour. All ECMAScript syntactic forms for defining async generatorfunction objects create direct instances of AsyncGeneratorFunction. There is no syntactic means to create instances of AsyncGeneratorFunction subclasses.

27.4.1.1 AsyncGeneratorFunction ( ...parameterArgs,bodyArg )

The last argument (if any) specifies the body (executable code) of an async generator function; any preceding arguments specify formal parameters.

This function performs the following steps when called:

  1. LetC be theactive function object.
  2. IfbodyArg is not present, setbodyArg to the empty String.
  3. Return ? CreateDynamicFunction(C, NewTarget,async-generator,parameterArgs,bodyArg).
Note

See NOTE for20.2.1.1.

27.4.2 Properties of the AsyncGeneratorFunction Constructor

The AsyncGeneratorFunctionconstructor:

  • is a standard built-infunction object that inherits from the Functionconstructor.
  • has a[[Prototype]] internal slot whose value is%Function%.
  • has a"length" property whose value is1𝔽.
  • has a"name" property whose value is"AsyncGeneratorFunction".
  • has the following properties:

27.4.2.1 AsyncGeneratorFunction.prototype

The initial value ofAsyncGeneratorFunction.prototype is theAsyncGeneratorFunction prototype object.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false }.

27.4.3 Properties of the AsyncGeneratorFunction Prototype Object

TheAsyncGeneratorFunction prototype object:

27.4.3.1 AsyncGeneratorFunction.prototype.constructor

The initial value ofAsyncGeneratorFunction.prototype.constructor is%AsyncGeneratorFunction%.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.4.3.2 AsyncGeneratorFunction.prototype.prototype

The initial value ofAsyncGeneratorFunction.prototype.prototype is%AsyncGeneratorPrototype%.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.4.3.3 AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]

The initial value of the%Symbol.toStringTag% property is the String value"AsyncGeneratorFunction".

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.4.4 AsyncGeneratorFunction Instances

Every AsyncGeneratorFunction instance is an ECMAScriptfunction object and has the internal slots listed inTable 30. The value of the[[IsClassConstructor]] internal slot for all such instances isfalse.

Each AsyncGeneratorFunction instance has the following own properties:

27.4.4.1 length

The value of the"length" property is anintegral Number that indicates the typical number of arguments expected by the AsyncGeneratorFunction. However, the language permits the function to be invoked with some other number of arguments. The behaviour of an AsyncGeneratorFunction when invoked on a number of arguments other than the number specified by its"length" property depends on the function.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.4.4.2 name

The specification for the"name" property of Function instances given in20.2.4.2 also applies to AsyncGeneratorFunction instances.

27.4.4.3 prototype

Whenever an AsyncGeneratorFunction instance is created, anotherordinary object is also created and is the initial value of the async generator function's"prototype" property. The value of the prototype property is used to initialize the[[Prototype]] internal slot of a newly created AsyncGenerator when the generatorfunction object is invoked using[[Call]].

This property has the attributes {[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false }.

Note

Unlike function instances, the object that is the value of an AsyncGeneratorFunction's"prototype" property does not have a"constructor" property whose value is the AsyncGeneratorFunction instance.

27.5 Generator Objects

A Generator is created by calling a generator function and conforms to both theiterator interface and theiterable interface.

Generator instances directly inherit properties from the initial value of the"prototype" property of the generator function that created the instance. Generator instances indirectly inherit properties from%GeneratorPrototype%.

27.5.1 The %GeneratorPrototype% Object

The%GeneratorPrototype% object:

  • is%GeneratorFunction.prototype.prototype%.
  • is anordinary object.
  • is not a Generator instance and does not have a[[GeneratorState]] internal slot.
  • has a[[Prototype]] internal slot whose value is%Iterator.prototype%.
  • has properties that are indirectly inherited by all Generator instances.

27.5.1.1 %GeneratorPrototype%.constructor

The initial value of%GeneratorPrototype%.constructor is%GeneratorFunction.prototype%.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.5.1.2 %GeneratorPrototype%.next (value )

  1. Return ? GeneratorResume(this value,value,empty).

27.5.1.3 %GeneratorPrototype%.return (value )

This method performs the following steps when called:

  1. Letg be thethis value.
  2. LetC beReturnCompletion(value).
  3. Return ? GeneratorResumeAbrupt(g,C,empty).

27.5.1.4 %GeneratorPrototype%.throw (exception )

This method performs the following steps when called:

  1. Letg be thethis value.
  2. LetC beThrowCompletion(exception).
  3. Return ? GeneratorResumeAbrupt(g,C,empty).

27.5.1.5 %GeneratorPrototype% [ %Symbol.toStringTag% ]

The initial value of the%Symbol.toStringTag% property is the String value"Generator".

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.5.2 Properties of Generator Instances

Generator instances are initially created with the internal slots described inTable 93.

Table 93: Internal Slots of Generator Instances
Internal Slot Type Description
[[GeneratorState]]suspended-start,suspended-yield,executing, orcompleted The current execution state of the generator.
[[GeneratorContext]] anexecution context Theexecution context that is used when executing the code of this generator.
[[GeneratorBrand]] a String orempty A brand used to distinguish different kinds of generators. The[[GeneratorBrand]] of generators declared byECMAScript source text is alwaysempty.

27.5.3 Generator Abstract Operations

27.5.3.1 GeneratorStart (generator,generatorBody )

The abstract operation GeneratorStart takes argumentsgenerator (a Generator) andgeneratorBody (aFunctionBodyParse Node or anAbstract Closure with no parameters) and returnsunused. It performs the following steps when called:

  1. Assert:generator.[[GeneratorState]] issuspended-start.
  2. LetgenContext be therunning execution context.
  3. Set the Generator component ofgenContext togenerator.
  4. Letclosure be a newAbstract Closure with no parameters that capturesgeneratorBody and performs the following steps when called:
    1. LetacGenContext be therunning execution context.
    2. LetacGenerator be the Generator component ofacGenContext.
    3. IfgeneratorBody is aParse Node, then
      1. Letresult beCompletion(Evaluation ofgeneratorBody).
    4. Else,
      1. Assert:generatorBody is anAbstract Closure with no parameters.
      2. Letresult beCompletion(generatorBody()).
    5. Assert: If we return here, the generator either threw an exception or performed either an implicit or explicit return.
    6. RemoveacGenContext from theexecution context stack and restore theexecution context that is at the top of theexecution context stack as therunning execution context.
    7. SetacGenerator.[[GeneratorState]] tocompleted.
    8. NOTE: Once a generator enters thecompleted state it never leaves it and its associatedexecution context is never resumed. Any execution state associated withacGenerator can be discarded at this point.
    9. Ifresult is anormal completion, then
      1. LetresultValue beundefined.
    10. Else ifresult is areturn completion, then
      1. LetresultValue beresult.[[Value]].
    11. Else,
      1. Assert:result is athrow completion.
      2. Return ? result.
    12. ReturnNormalCompletion(CreateIteratorResultObject(resultValue,true)).
  5. Set the code evaluation state ofgenContext such that when evaluation is resumed for thatexecution context,closure will be called with no arguments.
  6. Setgenerator.[[GeneratorContext]] togenContext.
  7. Returnunused.

27.5.3.2 GeneratorValidate (generator,generatorBrand )

The abstract operation GeneratorValidate takes argumentsgenerator (anECMAScript language value) andgeneratorBrand (a String orempty) and returns either anormal completion containing one ofsuspended-start,suspended-yield, orcompleted, or athrow completion. It performs the following steps when called:

  1. Perform ? RequireInternalSlot(generator,[[GeneratorState]]).
  2. Perform ? RequireInternalSlot(generator,[[GeneratorBrand]]).
  3. Ifgenerator.[[GeneratorBrand]] is notgeneratorBrand, throw aTypeError exception.
  4. Assert:generator also has a[[GeneratorContext]] internal slot.
  5. Letstate begenerator.[[GeneratorState]].
  6. Ifstate isexecuting, throw aTypeError exception.
  7. Returnstate.

27.5.3.3 GeneratorResume (generator,value,generatorBrand )

The abstract operation GeneratorResume takes argumentsgenerator (anECMAScript language value),value (anECMAScript language value orempty), andgeneratorBrand (a String orempty) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Letstate be ? GeneratorValidate(generator,generatorBrand).
  2. Ifstate iscompleted, returnCreateIteratorResultObject(undefined,true).
  3. Assert:state is eithersuspended-start orsuspended-yield.
  4. LetgenContext begenerator.[[GeneratorContext]].
  5. LetmethodContext be therunning execution context.
  6. SuspendmethodContext.
  7. Setgenerator.[[GeneratorState]] toexecuting.
  8. PushgenContext onto theexecution context stack;genContext is now therunning execution context.
  9. Resume the suspended evaluation ofgenContext usingNormalCompletion(value) as the result of the operation that suspended it. Letresult be the value returned by the resumed computation.
  10. Assert: When we return here,genContext has already been removed from theexecution context stack andmethodContext is the currentlyrunning execution context.
  11. Return ? result.

27.5.3.4 GeneratorResumeAbrupt (generator,abruptCompletion,generatorBrand )

The abstract operation GeneratorResumeAbrupt takes argumentsgenerator (anECMAScript language value),abruptCompletion (areturn completion or athrow completion), andgeneratorBrand (a String orempty) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Letstate be ? GeneratorValidate(generator,generatorBrand).
  2. Ifstate issuspended-start, then
    1. Setgenerator.[[GeneratorState]] tocompleted.
    2. NOTE: Once a generator enters thecompleted state it never leaves it and its associatedexecution context is never resumed. Any execution state associated withgenerator can be discarded at this point.
    3. Setstate tocompleted.
  3. Ifstate iscompleted, then
    1. IfabruptCompletion is areturn completion, then
      1. ReturnCreateIteratorResultObject(abruptCompletion.[[Value]],true).
    2. Return ? abruptCompletion.
  4. Assert:state issuspended-yield.
  5. LetgenContext begenerator.[[GeneratorContext]].
  6. LetmethodContext be therunning execution context.
  7. SuspendmethodContext.
  8. Setgenerator.[[GeneratorState]] toexecuting.
  9. PushgenContext onto theexecution context stack;genContext is now therunning execution context.
  10. Resume the suspended evaluation ofgenContext usingabruptCompletion as the result of the operation that suspended it. Letresult be theCompletion Record returned by the resumed computation.
  11. Assert: When we return here,genContext has already been removed from theexecution context stack andmethodContext is the currentlyrunning execution context.
  12. Return ? result.

27.5.3.5 GetGeneratorKind ( )

The abstract operation GetGeneratorKind takes no arguments and returnsnon-generator,sync, orasync. It performs the following steps when called:

  1. LetgenContext be therunning execution context.
  2. IfgenContext does not have a Generator component, returnnon-generator.
  3. Letgenerator be the Generator component ofgenContext.
  4. Ifgenerator has an[[AsyncGeneratorState]] internal slot, returnasync.
  5. Else, returnsync.

27.5.3.6 GeneratorYield (iteratorResult )

The abstract operation GeneratorYield takes argumentiteratorResult (an Object that conforms to theIteratorResult interface) and returns either anormal completion containing anECMAScript language value or anabrupt completion. It performs the following steps when called:

  1. LetgenContext be therunning execution context.
  2. Assert:genContext is theexecution context of a generator.
  3. Letgenerator be the value of the Generator component ofgenContext.
  4. Assert:GetGeneratorKind() issync.
  5. Setgenerator.[[GeneratorState]] tosuspended-yield.
  6. RemovegenContext from theexecution context stack and restore theexecution context that is at the top of theexecution context stack as therunning execution context.
  7. LetcallerContext be therunning execution context.
  8. ResumecallerContext passingNormalCompletion(iteratorResult). IfgenContext is ever resumed again, letresumptionValue be theCompletion Record with which it is resumed.
  9. Assert: If control reaches here, thengenContext is therunning execution context again.
  10. ReturnresumptionValue.

27.5.3.7 Yield (value )

The abstract operation Yield takes argumentvalue (anECMAScript language value) and returns either anormal completion containing anECMAScript language value or anabrupt completion. It performs the following steps when called:

  1. LetgeneratorKind beGetGeneratorKind().
  2. IfgeneratorKind isasync, return ? AsyncGeneratorYield(?Await(value)).
  3. Otherwise, return ? GeneratorYield(CreateIteratorResultObject(value,false)).

27.5.3.8 CreateIteratorFromClosure (closure,generatorBrand,generatorPrototype [ ,extraSlots ] )

The abstract operation CreateIteratorFromClosure takes argumentsclosure (anAbstract Closure with no parameters),generatorBrand (a String orempty), andgeneratorPrototype (an Object) and optional argumentextraSlots (aList of names of internal slots) and returns a Generator. It performs the following steps when called:

  1. NOTE:closure can contain uses of theYield operation to yield anIteratorResult object.
  2. IfextraSlots is not present, setextraSlots to a new emptyList.
  3. LetinternalSlotsList be thelist-concatenation ofextraSlots and «[[GeneratorState]],[[GeneratorContext]],[[GeneratorBrand]] ».
  4. Letgenerator beOrdinaryObjectCreate(generatorPrototype,internalSlotsList).
  5. Setgenerator.[[GeneratorBrand]] togeneratorBrand.
  6. Setgenerator.[[GeneratorState]] tosuspended-start.
  7. LetcallerContext be therunning execution context.
  8. LetcalleeContext be a newexecution context.
  9. Set the Function ofcalleeContext tonull.
  10. Set theRealm ofcalleeContext tothe current Realm Record.
  11. Set the ScriptOrModule ofcalleeContext tocallerContext's ScriptOrModule.
  12. IfcallerContext is not already suspended, suspendcallerContext.
  13. PushcalleeContext onto theexecution context stack;calleeContext is now therunning execution context.
  14. PerformGeneratorStart(generator,closure).
  15. RemovecalleeContext from theexecution context stack and restorecallerContext as therunning execution context.
  16. Returngenerator.

27.6 AsyncGenerator Objects

An AsyncGenerator is created by calling an async generator function and conforms to both theasync iterator interface and theasync iterable interface.

AsyncGenerator instances directly inherit properties from the initial value of the"prototype" property of the async generator function that created the instance. AsyncGenerator instances indirectly inherit properties from%AsyncGeneratorPrototype%.

27.6.1 The %AsyncGeneratorPrototype% Object

The%AsyncGeneratorPrototype% object:

  • is%AsyncGeneratorFunction.prototype.prototype%.
  • is anordinary object.
  • is not an AsyncGenerator instance and does not have an[[AsyncGeneratorState]] internal slot.
  • has a[[Prototype]] internal slot whose value is%AsyncIteratorPrototype%.
  • has properties that are indirectly inherited by all AsyncGenerator instances.

27.6.1.1 %AsyncGeneratorPrototype%.constructor

The initial value of%AsyncGeneratorPrototype%.constructor is%AsyncGeneratorFunction.prototype%.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.6.1.2 %AsyncGeneratorPrototype%.next (value )

  1. Letgenerator be thethis value.
  2. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  3. Letresult beCompletion(AsyncGeneratorValidate(generator,empty)).
  4. IfAbruptRejectPromise(result,promiseCapability).
  5. Letstate begenerator.[[AsyncGeneratorState]].
  6. Ifstate iscompleted, then
    1. LetiteratorResult beCreateIteratorResultObject(undefined,true).
    2. Perform ! Call(promiseCapability.[[Resolve]],undefined, «iteratorResult »).
    3. ReturnpromiseCapability.[[Promise]].
  7. Letcompletion beNormalCompletion(value).
  8. PerformAsyncGeneratorEnqueue(generator,completion,promiseCapability).
  9. Ifstate is eithersuspended-start orsuspended-yield, then
    1. PerformAsyncGeneratorResume(generator,completion).
  10. Else,
    1. Assert:state is eitherexecuting ordraining-queue.
  11. ReturnpromiseCapability.[[Promise]].

27.6.1.3 %AsyncGeneratorPrototype%.return (value )

  1. Letgenerator be thethis value.
  2. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  3. Letresult beCompletion(AsyncGeneratorValidate(generator,empty)).
  4. IfAbruptRejectPromise(result,promiseCapability).
  5. Letcompletion beReturnCompletion(value).
  6. PerformAsyncGeneratorEnqueue(generator,completion,promiseCapability).
  7. Letstate begenerator.[[AsyncGeneratorState]].
  8. Ifstate is eithersuspended-start orcompleted, then
    1. Setgenerator.[[AsyncGeneratorState]] todraining-queue.
    2. PerformAsyncGeneratorAwaitReturn(generator).
  9. Else ifstate issuspended-yield, then
    1. PerformAsyncGeneratorResume(generator,completion).
  10. Else,
    1. Assert:state is eitherexecuting ordraining-queue.
  11. ReturnpromiseCapability.[[Promise]].

27.6.1.4 %AsyncGeneratorPrototype%.throw (exception )

  1. Letgenerator be thethis value.
  2. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
  3. Letresult beCompletion(AsyncGeneratorValidate(generator,empty)).
  4. IfAbruptRejectPromise(result,promiseCapability).
  5. Letstate begenerator.[[AsyncGeneratorState]].
  6. Ifstate issuspended-start, then
    1. Setgenerator.[[AsyncGeneratorState]] tocompleted.
    2. Setstate tocompleted.
  7. Ifstate iscompleted, then
    1. Perform ! Call(promiseCapability.[[Reject]],undefined, «exception »).
    2. ReturnpromiseCapability.[[Promise]].
  8. Letcompletion beThrowCompletion(exception).
  9. PerformAsyncGeneratorEnqueue(generator,completion,promiseCapability).
  10. Ifstate issuspended-yield, then
    1. PerformAsyncGeneratorResume(generator,completion).
  11. Else,
    1. Assert:state is eitherexecuting ordraining-queue.
  12. ReturnpromiseCapability.[[Promise]].

27.6.1.5 %AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]

The initial value of the%Symbol.toStringTag% property is the String value"AsyncGenerator".

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.6.2 Properties of AsyncGenerator Instances

AsyncGenerator instances are initially created with the internal slots described below:

Table 94: Internal Slots of AsyncGenerator Instances
Internal SlotTypeDescription
[[AsyncGeneratorState]]suspended-start,suspended-yield,executing,draining-queue, orcompletedThe current execution state of the async generator.
[[AsyncGeneratorContext]]anexecution contextTheexecution context that is used when executing the code of this async generator.
[[AsyncGeneratorQueue]]aList ofAsyncGeneratorRequestRecordsRecords which represent requests to resume the async generator. Except during state transitions, it is non-empty if and only if[[AsyncGeneratorState]] is eitherexecuting ordraining-queue.
[[GeneratorBrand]]a String oremptyA brand used to distinguish different kinds of async generators. The[[GeneratorBrand]] of async generators declared byECMAScript source text is alwaysempty.

27.6.3 AsyncGenerator Abstract Operations

27.6.3.1 AsyncGeneratorRequest Records

AnAsyncGeneratorRequest is aRecord value used to store information about how an async generator should be resumed and contains capabilities for fulfilling or rejecting the corresponding promise.

They have the following fields:

Table 95: AsyncGeneratorRequestRecord Fields
Field NameValueMeaning
[[Completion]]aCompletion RecordTheCompletion Record which should be used to resume the async generator.
[[Capability]]aPromiseCapability RecordThe promise capabilities associated with this request.

27.6.3.2 AsyncGeneratorStart (generator,generatorBody )

The abstract operation AsyncGeneratorStart takes argumentsgenerator (an AsyncGenerator) andgeneratorBody (aFunctionBodyParse Node or anAbstract Closure with no parameters) and returnsunused. It performs the following steps when called:

  1. Assert:generator.[[AsyncGeneratorState]] issuspended-start.
  2. LetgenContext be therunning execution context.
  3. Set the Generator component ofgenContext togenerator.
  4. Letclosure be a newAbstract Closure with no parameters that capturesgeneratorBody and performs the following steps when called:
    1. LetacGenContext be therunning execution context.
    2. LetacGenerator be the Generator component ofacGenContext.
    3. IfgeneratorBody is aParse Node, then
      1. Letresult beCompletion(Evaluation ofgeneratorBody).
    4. Else,
      1. Assert:generatorBody is anAbstract Closure with no parameters.
      2. Letresult beCompletion(generatorBody()).
    5. Assert: If we return here, the async generator either threw an exception or performed either an implicit or explicit return.
    6. RemoveacGenContext from theexecution context stack and restore theexecution context that is at the top of theexecution context stack as therunning execution context.
    7. SetacGenerator.[[AsyncGeneratorState]] todraining-queue.
    8. Ifresult is anormal completion, setresult toNormalCompletion(undefined).
    9. Ifresult is areturn completion, setresult toNormalCompletion(result.[[Value]]).
    10. PerformAsyncGeneratorCompleteStep(acGenerator,result,true).
    11. PerformAsyncGeneratorDrainQueue(acGenerator).
    12. ReturnNormalCompletion(undefined).
  5. Set the code evaluation state ofgenContext such that when evaluation is resumed for thatexecution context,closure will be called with no arguments.
  6. Setgenerator.[[AsyncGeneratorContext]] togenContext.
  7. Setgenerator.[[AsyncGeneratorQueue]] to a new emptyList.
  8. Returnunused.

27.6.3.3 AsyncGeneratorValidate (generator,generatorBrand )

The abstract operation AsyncGeneratorValidate takes argumentsgenerator (anECMAScript language value) andgeneratorBrand (a String orempty) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. Perform ? RequireInternalSlot(generator,[[AsyncGeneratorContext]]).
  2. Perform ? RequireInternalSlot(generator,[[AsyncGeneratorState]]).
  3. Perform ? RequireInternalSlot(generator,[[AsyncGeneratorQueue]]).
  4. Ifgenerator.[[GeneratorBrand]] is notgeneratorBrand, throw aTypeError exception.
  5. Returnunused.

27.6.3.4 AsyncGeneratorEnqueue (generator,completion,promiseCapability )

The abstract operation AsyncGeneratorEnqueue takes argumentsgenerator (an AsyncGenerator),completion (aCompletion Record), andpromiseCapability (aPromiseCapability Record) and returnsunused. It performs the following steps when called:

  1. Letrequest beAsyncGeneratorRequest {[[Completion]]:completion,[[Capability]]:promiseCapability }.
  2. Appendrequest togenerator.[[AsyncGeneratorQueue]].
  3. Returnunused.

27.6.3.5 AsyncGeneratorCompleteStep (generator,completion,done [ ,realm ] )

The abstract operation AsyncGeneratorCompleteStep takes argumentsgenerator (an AsyncGenerator),completion (aCompletion Record), anddone (a Boolean) and optional argumentrealm (aRealm Record) and returnsunused. It performs the following steps when called:

  1. Assert:generator.[[AsyncGeneratorQueue]] is not empty.
  2. Letnext be the first element ofgenerator.[[AsyncGeneratorQueue]].
  3. Remove the first element fromgenerator.[[AsyncGeneratorQueue]].
  4. LetpromiseCapability benext.[[Capability]].
  5. Letvalue becompletion.[[Value]].
  6. Ifcompletion is athrow completion, then
    1. Perform ! Call(promiseCapability.[[Reject]],undefined, «value »).
  7. Else,
    1. Assert:completion is anormal completion.
    2. Ifrealm is present, then
      1. LetoldRealm be therunning execution context'sRealm.
      2. Set therunning execution context'sRealm torealm.
      3. LetiteratorResult beCreateIteratorResultObject(value,done).
      4. Set therunning execution context'sRealm tooldRealm.
    3. Else,
      1. LetiteratorResult beCreateIteratorResultObject(value,done).
    4. Perform ! Call(promiseCapability.[[Resolve]],undefined, «iteratorResult »).
  8. Returnunused.

27.6.3.6 AsyncGeneratorResume (generator,completion )

The abstract operation AsyncGeneratorResume takes argumentsgenerator (an AsyncGenerator) andcompletion (aCompletion Record) and returnsunused. It performs the following steps when called:

  1. Assert:generator.[[AsyncGeneratorState]] is eithersuspended-start orsuspended-yield.
  2. LetgenContext begenerator.[[AsyncGeneratorContext]].
  3. LetcallerContext be therunning execution context.
  4. SuspendcallerContext.
  5. Setgenerator.[[AsyncGeneratorState]] toexecuting.
  6. PushgenContext onto theexecution context stack;genContext is now therunning execution context.
  7. Resume the suspended evaluation ofgenContext usingcompletion as the result of the operation that suspended it. Letresult be theCompletion Record returned by the resumed computation.
  8. Assert:result is never anabrupt completion.
  9. Assert: When we return here,genContext has already been removed from theexecution context stack andcallerContext is the currentlyrunning execution context.
  10. Returnunused.

27.6.3.7 AsyncGeneratorUnwrapYieldResumption (resumptionValue )

The abstract operation AsyncGeneratorUnwrapYieldResumption takes argumentresumptionValue (aCompletion Record) and returns either anormal completion containing anECMAScript language value or anabrupt completion. It performs the following steps when called:

  1. IfresumptionValue is not areturn completion, return ? resumptionValue.
  2. Letawaited beCompletion(Await(resumptionValue.[[Value]])).
  3. Ifawaited is athrow completion, return ? awaited.
  4. Assert:awaited is anormal completion.
  5. ReturnReturnCompletion(awaited.[[Value]]).

27.6.3.8 AsyncGeneratorYield (value )

The abstract operation AsyncGeneratorYield takes argumentvalue (anECMAScript language value) and returns either anormal completion containing anECMAScript language value or anabrupt completion. It performs the following steps when called:

  1. LetgenContext be therunning execution context.
  2. Assert:genContext is theexecution context of a generator.
  3. Letgenerator be the value of the Generator component ofgenContext.
  4. Assert:GetGeneratorKind() isasync.
  5. Letcompletion beNormalCompletion(value).
  6. Assert: Theexecution context stack has at least two elements.
  7. LetpreviousContext be the second to top element of theexecution context stack.
  8. LetpreviousRealm bepreviousContext'sRealm.
  9. PerformAsyncGeneratorCompleteStep(generator,completion,false,previousRealm).
  10. Letqueue begenerator.[[AsyncGeneratorQueue]].
  11. Ifqueue is not empty, then
    1. NOTE: Execution continues without suspending the generator.
    2. LettoYield be the first element ofqueue.
    3. LetresumptionValue beCompletion(toYield.[[Completion]]).
    4. Return ? AsyncGeneratorUnwrapYieldResumption(resumptionValue).
  12. Else,
    1. Setgenerator.[[AsyncGeneratorState]] tosuspended-yield.
    2. RemovegenContext from theexecution context stack and restore theexecution context that is at the top of theexecution context stack as therunning execution context.
    3. LetcallerContext be therunning execution context.
    4. ResumecallerContext passingundefined. IfgenContext is ever resumed again, letresumptionValue be theCompletion Record with which it is resumed.
    5. Assert: If control reaches here, thengenContext is therunning execution context again.
    6. Return ? AsyncGeneratorUnwrapYieldResumption(resumptionValue).

27.6.3.9 AsyncGeneratorAwaitReturn (generator )

The abstract operation AsyncGeneratorAwaitReturn takes argumentgenerator (an AsyncGenerator) and returnsunused. It performs the following steps when called:

  1. Assert:generator.[[AsyncGeneratorState]] isdraining-queue.
  2. Letqueue begenerator.[[AsyncGeneratorQueue]].
  3. Assert:queue is not empty.
  4. Letnext be the first element ofqueue.
  5. Letcompletion beCompletion(next.[[Completion]]).
  6. Assert:completion is areturn completion.
  7. LetpromiseCompletion beCompletion(PromiseResolve(%Promise%,completion.[[Value]])).
  8. IfpromiseCompletion is anabrupt completion, then
    1. PerformAsyncGeneratorCompleteStep(generator,promiseCompletion,true).
    2. PerformAsyncGeneratorDrainQueue(generator).
    3. Returnunused.
  9. Assert:promiseCompletion is anormal completion.
  10. Letpromise bepromiseCompletion.[[Value]].
  11. LetfulfilledClosure be a newAbstract Closure with parameters (value) that capturesgenerator and performs the following steps when called:
    1. Assert:generator.[[AsyncGeneratorState]] isdraining-queue.
    2. Letresult beNormalCompletion(value).
    3. PerformAsyncGeneratorCompleteStep(generator,result,true).
    4. PerformAsyncGeneratorDrainQueue(generator).
    5. ReturnNormalCompletion(undefined).
  12. LetonFulfilled beCreateBuiltinFunction(fulfilledClosure, 1,"", « »).
  13. LetrejectedClosure be a newAbstract Closure with parameters (reason) that capturesgenerator and performs the following steps when called:
    1. Assert:generator.[[AsyncGeneratorState]] isdraining-queue.
    2. Letresult beThrowCompletion(reason).
    3. PerformAsyncGeneratorCompleteStep(generator,result,true).
    4. PerformAsyncGeneratorDrainQueue(generator).
    5. ReturnNormalCompletion(undefined).
  14. LetonRejected beCreateBuiltinFunction(rejectedClosure, 1,"", « »).
  15. PerformPerformPromiseThen(promise,onFulfilled,onRejected).
  16. Returnunused.

27.6.3.10 AsyncGeneratorDrainQueue (generator )

The abstract operation AsyncGeneratorDrainQueue takes argumentgenerator (an AsyncGenerator) and returnsunused. It drains the generator's AsyncGeneratorQueue until it encounters anAsyncGeneratorRequest which holds areturn completion. It performs the following steps when called:

  1. Assert:generator.[[AsyncGeneratorState]] isdraining-queue.
  2. Letqueue begenerator.[[AsyncGeneratorQueue]].
  3. Repeat, whilequeue is not empty,
    1. Letnext be the first element ofqueue.
    2. Letcompletion beCompletion(next.[[Completion]]).
    3. Ifcompletion is areturn completion, then
      1. PerformAsyncGeneratorAwaitReturn(generator).
      2. Returnunused.
    4. Else,
      1. Ifcompletion is anormal completion, then
        1. Setcompletion toNormalCompletion(undefined).
      2. PerformAsyncGeneratorCompleteStep(generator,completion,true).
  4. Setgenerator.[[AsyncGeneratorState]] tocompleted.
  5. Returnunused.

27.6.3.11 CreateAsyncIteratorFromClosure (closure,generatorBrand,generatorPrototype )

The abstract operation CreateAsyncIteratorFromClosure takes argumentsclosure (anAbstract Closure with no parameters),generatorBrand (a String orempty), andgeneratorPrototype (an Object) and returns an AsyncGenerator. It performs the following steps when called:

  1. NOTE:closure can contain uses of theAwait operation and uses of theYield operation to yield anIteratorResult object.
  2. LetinternalSlotsList be «[[AsyncGeneratorState]],[[AsyncGeneratorContext]],[[AsyncGeneratorQueue]],[[GeneratorBrand]] ».
  3. Letgenerator beOrdinaryObjectCreate(generatorPrototype,internalSlotsList).
  4. Setgenerator.[[GeneratorBrand]] togeneratorBrand.
  5. Setgenerator.[[AsyncGeneratorState]] tosuspended-start.
  6. LetcallerContext be therunning execution context.
  7. LetcalleeContext be a newexecution context.
  8. Set the Function ofcalleeContext tonull.
  9. Set theRealm ofcalleeContext tothe current Realm Record.
  10. Set the ScriptOrModule ofcalleeContext tocallerContext's ScriptOrModule.
  11. IfcallerContext is not already suspended, suspendcallerContext.
  12. PushcalleeContext onto theexecution context stack;calleeContext is now therunning execution context.
  13. PerformAsyncGeneratorStart(generator,closure).
  14. RemovecalleeContext from theexecution context stack and restorecallerContext as therunning execution context.
  15. Returngenerator.

27.7 AsyncFunction Objects

AsyncFunctions are functions that are usually created by evaluatingAsyncFunctionDeclarations,AsyncFunctionExpressions,AsyncMethods, andAsyncArrowFunctions. They may also be created by calling the%AsyncFunction% intrinsic.

27.7.1 The AsyncFunction Constructor

The AsyncFunctionconstructor:

  • is%AsyncFunction%.
  • is a subclass ofFunction.
  • creates and initializes a new AsyncFunction when called as a function rather than as aconstructor. Thus the function callAsyncFunction(…) is equivalent to the object creation expressionnew AsyncFunction(…) with the same arguments.
  • may be used as the value of anextends clause of a class definition. Subclassconstructors that intend to inherit the specified AsyncFunction behaviour must include asuper call to the AsyncFunctionconstructor to create and initialize a subclass instance with the internal slots necessary for built-in async function behaviour. All ECMAScript syntactic forms for defining asyncfunction objects create direct instances of AsyncFunction. There is no syntactic means to create instances of AsyncFunction subclasses.

27.7.1.1 AsyncFunction ( ...parameterArgs,bodyArg )

The last argument (if any) specifies the body (executable code) of an async function. Any preceding arguments specify formal parameters.

This function performs the following steps when called:

  1. LetC be theactive function object.
  2. IfbodyArg is not present, setbodyArg to the empty String.
  3. Return ? CreateDynamicFunction(C, NewTarget,async,parameterArgs,bodyArg).
Note
See NOTE for20.2.1.1.

27.7.2 Properties of the AsyncFunction Constructor

The AsyncFunctionconstructor:

  • is a standard built-infunction object that inherits from the Functionconstructor.
  • has a[[Prototype]] internal slot whose value is%Function%.
  • has a"length" property whose value is1𝔽.
  • has a"name" property whose value is"AsyncFunction".
  • has the following properties:

27.7.2.1 AsyncFunction.prototype

The initial value ofAsyncFunction.prototype is theAsyncFunction prototype object.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false }.

27.7.3 Properties of the AsyncFunction Prototype Object

TheAsyncFunction prototype object:

27.7.3.1 AsyncFunction.prototype.constructor

The initial value ofAsyncFunction.prototype.constructor is%AsyncFunction%.

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.7.3.2 AsyncFunction.prototype [ %Symbol.toStringTag% ]

The initial value of the%Symbol.toStringTag% property is the String value"AsyncFunction".

This property has the attributes {[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true }.

27.7.4 AsyncFunction Instances

Every AsyncFunction instance is an ECMAScriptfunction object and has the internal slots listed inTable 30. The value of the[[IsClassConstructor]] internal slot for all such instances isfalse. AsyncFunction instances are notconstructors and do not have a[[Construct]] internal method. AsyncFunction instances do not have a prototype property as they are not constructable.

Each AsyncFunction instance has the following own properties:

27.7.4.1 length

The specification for the"length" property of Function instances given in20.2.4.1 also applies to AsyncFunction instances.

27.7.4.2 name

The specification for the"name" property of Function instances given in20.2.4.2 also applies to AsyncFunction instances.

27.7.5 Async Functions Abstract Operations

27.7.5.1 AsyncFunctionStart (promiseCapability,asyncFunctionBody )

The abstract operation AsyncFunctionStart takes argumentspromiseCapability (aPromiseCapability Record) andasyncFunctionBody (aFunctionBodyParse Node, anExpressionBodyParse Node, or anAbstract Closure with no parameters) and returnsunused. It performs the following steps when called:

  1. LetrunningContext be therunning execution context.
  2. LetasyncContext be a copy ofrunningContext.
  3. NOTE: Copying the execution state is required forAsyncBlockStart to resume its execution. It is ill-defined to resume a currently executing context.
  4. PerformAsyncBlockStart(promiseCapability,asyncFunctionBody,asyncContext).
  5. Returnunused.

27.7.5.2 AsyncBlockStart (promiseCapability,asyncBody,asyncContext )

The abstract operation AsyncBlockStart takes argumentspromiseCapability (aPromiseCapability Record),asyncBody (aParse Node or anAbstract Closure with no parameters), andasyncContext (anexecution context) and returnsunused. It performs the following steps when called:

  1. LetrunningContext be therunning execution context.
  2. Letclosure be a newAbstract Closure with no parameters that capturespromiseCapability andasyncBody and performs the following steps when called:
    1. LetacAsyncContext be therunning execution context.
    2. IfasyncBody is aParse Node, then
      1. Letresult beCompletion(Evaluation ofasyncBody).
    3. Else,
      1. Assert:asyncBody is anAbstract Closure with no parameters.
      2. Letresult beCompletion(asyncBody()).
    4. Assert: If we return here, the async function either threw an exception or performed an implicit or explicit return; all awaiting is done.
    5. RemoveacAsyncContext from theexecution context stack and restore theexecution context that is at the top of theexecution context stack as therunning execution context.
    6. Ifresult is anormal completion, then
      1. Perform ! Call(promiseCapability.[[Resolve]],undefined, «undefined »).
    7. Else ifresult is areturn completion, then
      1. Perform ! Call(promiseCapability.[[Resolve]],undefined, «result.[[Value]] »).
    8. Else,
      1. Assert:result is athrow completion.
      2. Perform ! Call(promiseCapability.[[Reject]],undefined, «result.[[Value]] »).
    9. ReturnNormalCompletion(unused).
  3. Set the code evaluation state ofasyncContext such that when evaluation is resumed for thatexecution context,closure will be called with no arguments.
  4. PushasyncContext onto theexecution context stack;asyncContext is now therunning execution context.
  5. Resume the suspended evaluation ofasyncContext. Letresult be the value returned by the resumed computation.
  6. Assert: When we return here,asyncContext has already been removed from theexecution context stack andrunningContext is the currentlyrunning execution context.
  7. Assert:result is anormal completion with a value ofunused. The possible sources of this value areAwait or, if the async function doesn't await anything, step2.i above.
  8. Returnunused.

27.7.5.3 Await (value )

The abstract operation Await takes argumentvalue (anECMAScript language value) and returns either anormal completion containing either anECMAScript language value orempty, or athrow completion. It performs the following steps when called:

  1. LetasyncContext be therunning execution context.
  2. Letpromise be ? PromiseResolve(%Promise%,value).
  3. LetfulfilledClosure be a newAbstract Closure with parameters (v) that capturesasyncContext and performs the following steps when called:
    1. LetprevContext be therunning execution context.
    2. SuspendprevContext.
    3. PushasyncContext onto theexecution context stack;asyncContext is now therunning execution context.
    4. Resume the suspended evaluation ofasyncContext usingNormalCompletion(v) as the result of the operation that suspended it.
    5. Assert: When we reach this step,asyncContext has already been removed from theexecution context stack andprevContext is the currentlyrunning execution context.
    6. ReturnNormalCompletion(undefined).
  4. LetonFulfilled beCreateBuiltinFunction(fulfilledClosure, 1,"", « »).
  5. LetrejectedClosure be a newAbstract Closure with parameters (reason) that capturesasyncContext and performs the following steps when called:
    1. LetprevContext be therunning execution context.
    2. SuspendprevContext.
    3. PushasyncContext onto theexecution context stack;asyncContext is now therunning execution context.
    4. Resume the suspended evaluation ofasyncContext usingThrowCompletion(reason) as the result of the operation that suspended it.
    5. Assert: When we reach this step,asyncContext has already been removed from theexecution context stack andprevContext is the currentlyrunning execution context.
    6. ReturnNormalCompletion(undefined).
  6. LetonRejected beCreateBuiltinFunction(rejectedClosure, 1,"", « »).
  7. PerformPerformPromiseThen(promise,onFulfilled,onRejected).
  8. RemoveasyncContext from theexecution context stack and restore theexecution context that is at the top of theexecution context stack as therunning execution context.
  9. LetcallerContext be therunning execution context.
  10. ResumecallerContext passingempty. IfasyncContext is ever resumed again, letcompletion be theCompletion Record with which it is resumed.
  11. Assert: If control reaches here, thenasyncContext is therunning execution context again.
  12. Returncompletion.

[8]ページ先頭

©2009-2025 Movatter.jp