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
  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

7 Abstract Operations

These operations are not a part of the ECMAScript language; they are defined here solely to aid the specification of the semantics of the ECMAScript language. Other, more specializedabstract operations are defined throughout this specification.

7.1 Type Conversion

The ECMAScript language implicitly performs automatic type conversion as needed. To clarify the semantics of certain constructs it is useful to define a set of conversionabstract operations. The conversionabstract operations are polymorphic; they can accept a value of anyECMAScript language type. But no other specification types are used with these operations.

TheBigInt type has no implicit conversions in the ECMAScript language; programmers must call BigInt explicitly to convert values from other types.

7.1.1 ToPrimitive (input [ ,preferredType ] )

The abstract operation ToPrimitive takes argumentinput (anECMAScript language value) and optional argumentpreferredType (string ornumber) and returns either anormal completion containing anECMAScript language value or athrow completion. It converts itsinput argument to a non-Object type. If an object is capable of converting to more than one primitive type, it may use the optional hintpreferredType to favour that type. It performs the following steps when called:

  1. Ifinputis an Object, then
    1. LetexoticToPrim be ? GetMethod(input,%Symbol.toPrimitive%).
    2. IfexoticToPrim is notundefined, then
      1. IfpreferredType is not present, then
        1. Lethint be"default".
      2. Else ifpreferredType isstring, then
        1. Lethint be"string".
      3. Else,
        1. Assert:preferredType isnumber.
        2. Lethint be"number".
      4. Letresult be ? Call(exoticToPrim,input, «hint »).
      5. Ifresultis not an Object, returnresult.
      6. Throw aTypeError exception.
    3. IfpreferredType is not present, letpreferredType benumber.
    4. Return ? OrdinaryToPrimitive(input,preferredType).
  2. Returninput.
Note

When ToPrimitive is called without a hint, then it generally behaves as if the hint werenumber. However, objects may over-ride this behaviour by defining a%Symbol.toPrimitive% method. Of the objects defined in this specification only Dates (see21.4.4.45) and Symbol objects (see20.4.3.5) over-ride the default ToPrimitive behaviour. Dates treat the absence of a hint as if the hint werestring.

7.1.1.1 OrdinaryToPrimitive (O,hint )

The abstract operation OrdinaryToPrimitive takes argumentsO (an Object) andhint (string ornumber) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Ifhint isstring, then
    1. LetmethodNames be «"toString","valueOf" ».
  2. Else,
    1. LetmethodNames be «"valueOf","toString" ».
  3. For each elementname ofmethodNames, do
    1. Letmethod be ? Get(O,name).
    2. IfIsCallable(method) istrue, then
      1. Letresult be ? Call(method,O).
      2. Ifresultis not an Object, returnresult.
  4. Throw aTypeError exception.

7.1.2 ToBoolean (argument )

The abstract operation ToBoolean takes argumentargument (anECMAScript language value) and returns a Boolean. It convertsargument to a value of type Boolean. It performs the following steps when called:

  1. Ifargumentis a Boolean, returnargument.
  2. Ifargument is one ofundefined,null,+0𝔽,-0𝔽,NaN,0, or the empty String, returnfalse.
  3. NOTE: This step is replaced in sectionB.3.6.1.
  4. Returntrue.

7.1.3 ToNumeric (value )

The abstract operation ToNumeric takes argumentvalue (anECMAScript language value) and returns either anormal completion containing either a Number or a BigInt, or athrow completion. It returnsvalue converted to a Number or a BigInt. It performs the following steps when called:

  1. LetprimValue be ? ToPrimitive(value,number).
  2. IfprimValueis a BigInt, returnprimValue.
  3. Return ? ToNumber(primValue).

7.1.4 ToNumber (argument )

The abstract operation ToNumber takes argumentargument (anECMAScript language value) and returns either anormal completion containing a Number or athrow completion. It convertsargument to a value of type Number. It performs the following steps when called:

  1. Ifargumentis a Number, returnargument.
  2. Ifargument is either a Symbol or a BigInt, throw aTypeError exception.
  3. Ifargument isundefined, returnNaN.
  4. Ifargument is eithernull orfalse, return+0𝔽.
  5. Ifargument istrue, return1𝔽.
  6. Ifargumentis a String, returnStringToNumber(argument).
  7. Assert:argumentis an Object.
  8. LetprimValue be ? ToPrimitive(argument,number).
  9. Assert:primValueis not an Object.
  10. Return ? ToNumber(primValue).

7.1.4.1 ToNumber Applied to the String Type

The abstract operationStringToNumber specifies how to convert a String value to a Number value, using the following grammar.

Syntax

StringNumericLiteral:::StrWhiteSpaceoptStrWhiteSpaceoptStrNumericLiteralStrWhiteSpaceoptStrWhiteSpace:::StrWhiteSpaceCharStrWhiteSpaceoptStrWhiteSpaceChar:::WhiteSpaceLineTerminatorStrNumericLiteral:::StrDecimalLiteralNonDecimalIntegerLiteral[~Sep]StrDecimalLiteral:::StrUnsignedDecimalLiteral+StrUnsignedDecimalLiteral-StrUnsignedDecimalLiteralStrUnsignedDecimalLiteral:::InfinityDecimalDigits[~Sep].DecimalDigits[~Sep]optExponentPart[~Sep]opt.DecimalDigits[~Sep]ExponentPart[~Sep]optDecimalDigits[~Sep]ExponentPart[~Sep]opt

All grammar symbols not explicitly defined above have the definitions used in the Lexical Grammar for numeric literals (12.9.3)

Note

Some differences should be noted between the syntax of aStringNumericLiteral and aNumericLiteral:

7.1.4.1.1 StringToNumber (str )

The abstract operation StringToNumber takes argumentstr (a String) and returns a Number. It performs the following steps when called:

  1. Letliteral beParseText(str,StringNumericLiteral).
  2. Ifliteral is aList of errors, returnNaN.
  3. Return theStringNumericValue ofliteral.

7.1.4.1.2 Runtime Semantics: StringNumericValue

Thesyntax-directed operation StringNumericValue takes no arguments and returns a Number.

Note

The conversion of aStringNumericLiteral to a Number value is similar overall to the determination of theNumericValue of aNumericLiteral (see12.9.3), but some of the details are different.

It is defined piecewise over the following productions:

StringNumericLiteral:::StrWhiteSpaceopt
  1. Return+0𝔽.
StringNumericLiteral:::StrWhiteSpaceoptStrNumericLiteralStrWhiteSpaceopt
  1. Return theStringNumericValue ofStrNumericLiteral.
StrNumericLiteral:::NonDecimalIntegerLiteral
  1. Return𝔽(MV ofNonDecimalIntegerLiteral).
StrDecimalLiteral:::-StrUnsignedDecimalLiteral
  1. Leta be theStringNumericValue ofStrUnsignedDecimalLiteral.
  2. Ifa is+0𝔽, return-0𝔽.
  3. Return -a.
StrUnsignedDecimalLiteral:::Infinity
  1. Return+∞𝔽.
StrUnsignedDecimalLiteral:::DecimalDigits.DecimalDigitsoptExponentPartopt
  1. Leta be the MV of the firstDecimalDigits.
  2. If the secondDecimalDigits is present, then
    1. Letb be the MV of the secondDecimalDigits.
    2. Letn be the number of code points in the secondDecimalDigits.
  3. Else,
    1. Letb be 0.
    2. Letn be 0.
  4. IfExponentPart is present, lete be the MV ofExponentPart. Otherwise, lete be 0.
  5. ReturnRoundMVResult((a + (b × 10-n)) × 10e).
StrUnsignedDecimalLiteral:::.DecimalDigitsExponentPartopt
  1. Letb be the MV ofDecimalDigits.
  2. IfExponentPart is present, lete be the MV ofExponentPart. Otherwise, lete be 0.
  3. Letn be the number of code points inDecimalDigits.
  4. ReturnRoundMVResult(b × 10e -n).
StrUnsignedDecimalLiteral:::DecimalDigitsExponentPartopt
  1. Leta be the MV ofDecimalDigits.
  2. IfExponentPart is present, lete be the MV ofExponentPart. Otherwise, lete be 0.
  3. ReturnRoundMVResult(a × 10e).

7.1.4.1.3 RoundMVResult (n )

The abstract operation RoundMVResult takes argumentn (amathematical value) and returns a Number. It convertsn to a Number in animplementation-defined manner. For the purposes of this abstract operation, a digit is significant if it is not zero or there is a non-zero digit to its left and there is a non-zero digit to its right. For the purposes of this abstract operation, "themathematical value denoted by" a representation of amathematical value is the inverse of "the decimal representation of" amathematical value. It performs the following steps when called:

  1. If the decimal representation ofn has 20 or fewer significant digits, return𝔽(n).
  2. Letoption1 be themathematical value denoted by the result of replacing each significant digit in the decimal representation ofn after the 20th with a 0 digit.
  3. Letoption2 be themathematical value denoted by the result of replacing each significant digit in the decimal representation ofn after the 20th with a 0 digit and then incrementing it at the 20th position (with carrying as necessary).
  4. Letchosen be animplementation-defined choice of eitheroption1 oroption2.
  5. Return𝔽(chosen).

7.1.5 ToIntegerOrInfinity (argument )

The abstract operation ToIntegerOrInfinity takes argumentargument (anECMAScript language value) and returns either anormal completion containing either aninteger, +∞, or -∞, or athrow completion. It convertsargument to aninteger representing its Number value with fractional part truncated, or to +∞ or -∞ when that Number value is infinite. It performs the following steps when called:

  1. Letnumber be ? ToNumber(argument).
  2. Ifnumber is one ofNaN,+0𝔽, or-0𝔽, return 0.
  3. Ifnumber is+∞𝔽, return +∞.
  4. Ifnumber is-∞𝔽, return -∞.
  5. Returntruncate((number)).
Note
𝔽(ToIntegerOrInfinity(x)) never returns-0𝔽 for any value ofx. The truncation of the fractional part is performed after convertingx to amathematical value.

7.1.6 ToInt32 (argument )

The abstract operation ToInt32 takes argumentargument (anECMAScript language value) and returns either anormal completion containing anintegral Number or athrow completion. It convertsargument to one of 232integral Number values in theinclusive interval from𝔽(-231) to𝔽(231 - 1). It performs the following steps when called:

  1. Letnumber be ? ToNumber(argument).
  2. Ifnumber is notfinite ornumber is either+0𝔽 or-0𝔽, return+0𝔽.
  3. Letint betruncate((number)).
  4. Letint32bit beintmodulo 232.
  5. Ifint32bit ≥ 231, return𝔽(int32bit - 232); otherwise return𝔽(int32bit).
Note

Given the above definition of ToInt32:

  • The ToInt32 abstract operation is idempotent: if applied to a result that it produced, the second application leaves that value unchanged.
  • ToInt32(ToUint32(x)) is the same value as ToInt32(x) for all values ofx. (It is to preserve this latter property that+∞𝔽 and-∞𝔽 are mapped to+0𝔽.)
  • ToInt32 maps-0𝔽 to+0𝔽.

7.1.7 ToUint32 (argument )

The abstract operation ToUint32 takes argumentargument (anECMAScript language value) and returns either anormal completion containing anintegral Number or athrow completion. It convertsargument to one of 232integral Number values in theinclusive interval from+0𝔽 to𝔽(232 - 1). It performs the following steps when called:

  1. Letnumber be ? ToNumber(argument).
  2. Ifnumber is notfinite ornumber is either+0𝔽 or-0𝔽, return+0𝔽.
  3. Letint betruncate((number)).
  4. Letint32bit beintmodulo 232.
  5. Return𝔽(int32bit).
Note

Given the above definition of ToUint32:

  • Step5 is the only difference between ToUint32 andToInt32.
  • The ToUint32 abstract operation is idempotent: if applied to a result that it produced, the second application leaves that value unchanged.
  • ToUint32(ToInt32(x)) is the same value as ToUint32(x) for all values ofx. (It is to preserve this latter property that+∞𝔽 and-∞𝔽 are mapped to+0𝔽.)
  • ToUint32 maps-0𝔽 to+0𝔽.

7.1.8 ToInt16 (argument )

The abstract operation ToInt16 takes argumentargument (anECMAScript language value) and returns either anormal completion containing anintegral Number or athrow completion. It convertsargument to one of 216integral Number values in theinclusive interval from𝔽(-215) to𝔽(215 - 1). It performs the following steps when called:

  1. Letnumber be ? ToNumber(argument).
  2. Ifnumber is notfinite ornumber is either+0𝔽 or-0𝔽, return+0𝔽.
  3. Letint betruncate((number)).
  4. Letint16bit beintmodulo 216.
  5. Ifint16bit ≥ 215, return𝔽(int16bit - 216); otherwise return𝔽(int16bit).

7.1.9 ToUint16 (argument )

The abstract operation ToUint16 takes argumentargument (anECMAScript language value) and returns either anormal completion containing anintegral Number or athrow completion. It convertsargument to one of 216integral Number values in theinclusive interval from+0𝔽 to𝔽(216 - 1). It performs the following steps when called:

  1. Letnumber be ? ToNumber(argument).
  2. Ifnumber is notfinite ornumber is either+0𝔽 or-0𝔽, return+0𝔽.
  3. Letint betruncate((number)).
  4. Letint16bit beintmodulo 216.
  5. Return𝔽(int16bit).
Note

Given the above definition of ToUint16:

  • The substitution of 216 for 232 in step4 is the only difference betweenToUint32 and ToUint16.
  • ToUint16 maps-0𝔽 to+0𝔽.

7.1.10 ToInt8 (argument )

The abstract operation ToInt8 takes argumentargument (anECMAScript language value) and returns either anormal completion containing anintegral Number or athrow completion. It convertsargument to one of 28integral Number values in theinclusive interval from-128𝔽 to127𝔽. It performs the following steps when called:

  1. Letnumber be ? ToNumber(argument).
  2. Ifnumber is notfinite ornumber is either+0𝔽 or-0𝔽, return+0𝔽.
  3. Letint betruncate((number)).
  4. Letint8bit beintmodulo 28.
  5. Ifint8bit ≥ 27, return𝔽(int8bit - 28); otherwise return𝔽(int8bit).

7.1.11 ToUint8 (argument )

The abstract operation ToUint8 takes argumentargument (anECMAScript language value) and returns either anormal completion containing anintegral Number or athrow completion. It convertsargument to one of 28integral Number values in theinclusive interval from+0𝔽 to255𝔽. It performs the following steps when called:

  1. Letnumber be ? ToNumber(argument).
  2. Ifnumber is notfinite ornumber is either+0𝔽 or-0𝔽, return+0𝔽.
  3. Letint betruncate((number)).
  4. Letint8bit beintmodulo 28.
  5. Return𝔽(int8bit).

7.1.12 ToUint8Clamp (argument )

The abstract operation ToUint8Clamp takes argumentargument (anECMAScript language value) and returns either anormal completion containing anintegral Number or athrow completion. It clamps and roundsargument to one of 28integral Number values in theinclusive interval from+0𝔽 to255𝔽. It performs the following steps when called:

  1. Letnumber be ? ToNumber(argument).
  2. Ifnumber isNaN, return+0𝔽.
  3. Letmv be theextended mathematical value ofnumber.
  4. Letclamped be the result ofclampingmv between 0 and 255.
  5. Letf befloor(clamped).
  6. Ifclamped <f + 0.5, return𝔽(f).
  7. Ifclamped >f + 0.5, return𝔽(f + 1).
  8. Iff is even, return𝔽(f). Otherwise, return𝔽(f + 1).
Note

Unlike most other ECMAScriptinteger conversion operations, ToUint8Clamp rounds rather than truncates non-integral values. It also uses “round half to even” tie-breaking, which differs from the “round half up” tie-breaking ofMath.round.

7.1.13 ToBigInt (argument )

The abstract operation ToBigInt takes argumentargument (anECMAScript language value) and returns either anormal completion containing a BigInt or athrow completion. It convertsargument to a BigInt value, or throws if an implicit conversion from Number would be required. It performs the following steps when called:

  1. Letprim be ? ToPrimitive(argument,number).
  2. Return the value thatprim corresponds to inTable 12.
Table 12: BigInt Conversions
Argument Type Result
Undefined Throw aTypeError exception.
Null Throw aTypeError exception.
Boolean Return1n ifprim istrue and0n ifprim isfalse.
BigInt Returnprim.
Number Throw aTypeError exception.
String
  1. Letn beStringToBigInt(prim).
  2. Ifn isundefined, throw aSyntaxError exception.
  3. Returnn.
Symbol Throw aTypeError exception.

7.1.14 StringToBigInt (str )

The abstract operation StringToBigInt takes argumentstr (a String) and returns a BigInt orundefined. It performs the following steps when called:

  1. Letliteral beParseText(str,StringIntegerLiteral).
  2. Ifliteral is aList of errors, returnundefined.
  3. Letmv be the MV ofliteral.
  4. Assert:mv is aninteger.
  5. Return(mv).

7.1.14.1 StringIntegerLiteral Grammar

StringToBigInt uses the following grammar.

Syntax

StringIntegerLiteral:::StrWhiteSpaceoptStrWhiteSpaceoptStrIntegerLiteralStrWhiteSpaceoptStrIntegerLiteral:::SignedInteger[~Sep]NonDecimalIntegerLiteral[~Sep]

7.1.14.2 Runtime Semantics: MV

7.1.15 ToBigInt64 (argument )

The abstract operation ToBigInt64 takes argumentargument (anECMAScript language value) and returns either anormal completion containing a BigInt or athrow completion. It convertsargument to one of 264 BigInt values in theinclusive interval from(-263) to(263 - 1). It performs the following steps when called:

  1. Letn be ? ToBigInt(argument).
  2. Letint64bit be(n)modulo 264.
  3. Ifint64bit ≥ 263, return(int64bit - 264); otherwise return(int64bit).

7.1.16 ToBigUint64 (argument )

The abstract operation ToBigUint64 takes argumentargument (anECMAScript language value) and returns either anormal completion containing a BigInt or athrow completion. It convertsargument to one of 264 BigInt values in theinclusive interval from0 to(264 - 1). It performs the following steps when called:

  1. Letn be ? ToBigInt(argument).
  2. Letint64bit be(n)modulo 264.
  3. Return(int64bit).

7.1.17 ToString (argument )

The abstract operation ToString takes argumentargument (anECMAScript language value) and returns either anormal completion containing a String or athrow completion. It convertsargument to a value of type String. It performs the following steps when called:

  1. Ifargumentis a String, returnargument.
  2. Ifargumentis a Symbol, throw aTypeError exception.
  3. Ifargument isundefined, return"undefined".
  4. Ifargument isnull, return"null".
  5. Ifargument istrue, return"true".
  6. Ifargument isfalse, return"false".
  7. Ifargumentis a Number, returnNumber::toString(argument, 10).
  8. Ifargumentis a BigInt, returnBigInt::toString(argument, 10).
  9. Assert:argumentis an Object.
  10. LetprimValue be ? ToPrimitive(argument,string).
  11. Assert:primValueis not an Object.
  12. Return ? ToString(primValue).

7.1.18 ToObject (argument )

The abstract operation ToObject takes argumentargument (anECMAScript language value) and returns either anormal completion containing an Object or athrow completion. It convertsargument to a value of type Object according toTable 13:

Table 13:ToObject Conversions
Argument Type Result
Undefined Throw aTypeError exception.
Null Throw aTypeError exception.
Boolean Return a new Boolean object whose[[BooleanData]] internal slot is set toargument. See20.3 for a description of Boolean objects.
Number Return a new Number object whose[[NumberData]] internal slot is set toargument. See21.1 for a description of Number objects.
String Return a new String object whose[[StringData]] internal slot is set toargument. See22.1 for a description of String objects.
Symbol Return a new Symbol object whose[[SymbolData]] internal slot is set toargument. See20.4 for a description of Symbol objects.
BigInt Return a new BigInt object whose[[BigIntData]] internal slot is set toargument. See21.2 for a description of BigInt objects.
Object Returnargument.

7.1.19 ToPropertyKey (argument )

The abstract operation ToPropertyKey takes argumentargument (anECMAScript language value) and returns either anormal completion containing aproperty key or athrow completion. It convertsargument to a value that can be used as aproperty key. It performs the following steps when called:

  1. Letkey be ? ToPrimitive(argument,string).
  2. Ifkeyis a Symbol, then
    1. Returnkey.
  3. Return ! ToString(key).

7.1.20 ToLength (argument )

The abstract operation ToLength takes argumentargument (anECMAScript language value) and returns either anormal completion containing a non-negativeintegral Number or athrow completion. It clamps and truncatesargument to a non-negativeintegral Number suitable for use as the length of anarray-like object. It performs the following steps when called:

  1. Letlen be ? ToIntegerOrInfinity(argument).
  2. Iflen ≤ 0, return+0𝔽.
  3. Return𝔽(min(len, 253 - 1)).

7.1.21 CanonicalNumericIndexString (argument )

The abstract operation CanonicalNumericIndexString takes argumentargument (a String) and returns a Number orundefined. Ifargument is either"-0" or exactly matchesToString(n) for some Number valuen, it returns the respective Number value. Otherwise, it returnsundefined. It performs the following steps when called:

  1. Ifargument is"-0", return-0𝔽.
  2. Letn be ! ToNumber(argument).
  3. If ! ToString(n) isargument, returnn.
  4. Returnundefined.

Acanonical numeric string is any String for which the CanonicalNumericIndexString abstract operation does not returnundefined.

7.1.22 ToIndex (value )

The abstract operation ToIndex takes argumentvalue (anECMAScript language value) and returns either anormal completion containing a non-negativeinteger or athrow completion. It convertsvalue to aninteger and returns thatinteger if it is non-negative and corresponds with aninteger index. Otherwise, it throws an exception. It performs the following steps when called:

  1. Letinteger be ? ToIntegerOrInfinity(value).
  2. Ifinteger is not in theinclusive interval from 0 to 253 - 1, throw aRangeError exception.
  3. Returninteger.

7.2 Testing and Comparison Operations

7.2.1 RequireObjectCoercible (argument )

The abstract operation RequireObjectCoercible takes argumentargument (anECMAScript language value) and returns either anormal completion containing anECMAScript language value or athrow completion. It throws an error ifargument is a value that cannot be converted to an Object usingToObject. It is defined byTable 14:

Table 14:RequireObjectCoercible Results
Argument Type Result
Undefined Throw aTypeError exception.
Null Throw aTypeError exception.
Boolean Returnargument.
Number Returnargument.
String Returnargument.
Symbol Returnargument.
BigInt Returnargument.
Object Returnargument.

7.2.2 IsArray (argument )

The abstract operation IsArray takes argumentargument (anECMAScript language value) and returns either anormal completion containing a Boolean or athrow completion. It performs the following steps when called:

  1. Ifargumentis not an Object, returnfalse.
  2. Ifargument is anArray exotic object, returntrue.
  3. Ifargument is aProxy exotic object, then
    1. Perform ? ValidateNonRevokedProxy(argument).
    2. LetproxyTarget beargument.[[ProxyTarget]].
    3. Return ? IsArray(proxyTarget).
  4. Returnfalse.

7.2.3 IsCallable (argument )

The abstract operation IsCallable takes argumentargument (anECMAScript language value) and returns a Boolean. It determines ifargument is a callable function with a[[Call]] internal method. It performs the following steps when called:

  1. Ifargumentis not an Object, returnfalse.
  2. Ifargument has a[[Call]] internal method, returntrue.
  3. Returnfalse.

7.2.4 IsConstructor (argument )

The abstract operation IsConstructor takes argumentargument (anECMAScript language value) and returns a Boolean. It determines ifargument is afunction object with a[[Construct]] internal method. It performs the following steps when called:

  1. Ifargumentis not an Object, returnfalse.
  2. Ifargument has a[[Construct]] internal method, returntrue.
  3. Returnfalse.

7.2.5 IsExtensible (O )

The abstract operation IsExtensible takes argumentO (an Object) and returns either anormal completion containing a Boolean or athrow completion. It is used to determine whether additional properties can be added toO. It performs the following steps when called:

  1. Return ? O.[[IsExtensible]]().

7.2.6 IsRegExp (argument )

The abstract operation IsRegExp takes argumentargument (anECMAScript language value) and returns either anormal completion containing a Boolean or athrow completion. It performs the following steps when called:

  1. Ifargumentis not an Object, returnfalse.
  2. Letmatcher be ? Get(argument,%Symbol.match%).
  3. Ifmatcher is notundefined, returnToBoolean(matcher).
  4. Ifargument has a[[RegExpMatcher]] internal slot, returntrue.
  5. Returnfalse.

7.2.7 Static Semantics: IsStringWellFormedUnicode (string )

The abstract operation IsStringWellFormedUnicode takes argumentstring (a String) and returns a Boolean. It interpretsstring as a sequence of UTF-16 encoded code points, as described in6.1.4, and determines whether it is awell formed UTF-16 sequence. It performs the following steps when called:

  1. Letlen be the length ofstring.
  2. Letk be 0.
  3. Repeat, whilek <len,
    1. Letcp beCodePointAt(string,k).
    2. Ifcp.[[IsUnpairedSurrogate]] istrue, returnfalse.
    3. Setk tok +cp.[[CodeUnitCount]].
  4. Returntrue.

7.2.8 SameType (x,y )

The abstract operation SameType takes argumentsx (anECMAScript language value) andy (anECMAScript language value) and returns a Boolean. It determines whether or not the two arguments are the same type. It performs the following steps when called:

  1. Ifx isundefined andy isundefined, returntrue.
  2. Ifx isnull andy isnull, returntrue.
  3. Ifxis a Boolean andyis a Boolean, returntrue.
  4. Ifxis a Number andyis a Number, returntrue.
  5. Ifxis a BigInt andyis a BigInt, returntrue.
  6. Ifxis a Symbol andyis a Symbol, returntrue.
  7. Ifxis a String andyis a String, returntrue.
  8. Ifxis an Object andyis an Object, returntrue.
  9. Returnfalse.

7.2.9 SameValue (x,y )

The abstract operation SameValue takes argumentsx (anECMAScript language value) andy (anECMAScript language value) and returns a Boolean. It determines whether or not the two arguments are the same value. It performs the following steps when called:

  1. IfSameType(x,y) isfalse, returnfalse.
  2. Ifxis a Number, then
    1. ReturnNumber::sameValue(x,y).
  3. ReturnSameValueNonNumber(x,y).
Note

This algorithm differs from theIsStrictlyEqual Algorithm by treating allNaN values as equivalent and by differentiating+0𝔽 from-0𝔽.

7.2.10 SameValueZero (x,y )

The abstract operation SameValueZero takes argumentsx (anECMAScript language value) andy (anECMAScript language value) and returns a Boolean. It determines whether or not the two arguments are the same value (ignoring the difference between+0𝔽 and-0𝔽). It performs the following steps when called:

  1. IfSameType(x,y) isfalse, returnfalse.
  2. Ifxis a Number, then
    1. ReturnNumber::sameValueZero(x,y).
  3. ReturnSameValueNonNumber(x,y).
Note

SameValueZero differs fromSameValue only in that it treats+0𝔽 and-0𝔽 as equivalent.

7.2.11 SameValueNonNumber (x,y )

The abstract operation SameValueNonNumber takes argumentsx (anECMAScript language value, but not a Number) andy (anECMAScript language value, but not a Number) and returns a Boolean. It performs the following steps when called:

  1. Assert:SameType(x,y) istrue.
  2. Ifx is eithernull orundefined, returntrue.
  3. Ifxis a BigInt, then
    1. ReturnBigInt::equal(x,y).
  4. Ifxis a String, then
    1. Ifx andy have the same length and the same code units in the same positions, returntrue; otherwise, returnfalse.
  5. Ifxis a Boolean, then
    1. Ifx andy are bothtrue or bothfalse, returntrue; otherwise, returnfalse.
  6. NOTE: All otherECMAScript language values are compared by identity.
  7. Ifx isy, returntrue; otherwise, returnfalse.
Note 1
For expository purposes, some cases are handled separately within this algorithm even if it is unnecessary to do so.
Note 2
The specifics of what "x isy" means are detailed in5.2.7.

7.2.12 IsLessThan (x,y,LeftFirst )

The abstract operation IsLessThan takes argumentsx (anECMAScript language value),y (anECMAScript language value), andLeftFirst (a Boolean) and returns either anormal completion containing either a Boolean orundefined, or athrow completion. It provides the semantics for the comparisonx <y, returningtrue,false, orundefined (which indicates that at least one operand isNaN). TheLeftFirst flag is used to control the order in which operations with potentially visible side-effects are performed uponx andy. It is necessary because ECMAScript specifies left to right evaluation of expressions. IfLeftFirst istrue, thex parameter corresponds to an expression that occurs to the left of they parameter's corresponding expression. IfLeftFirst isfalse, the reverse is the case and operations must be performed upony beforex. It performs the following steps when called:

  1. IfLeftFirst istrue, then
    1. Letpx be ? ToPrimitive(x,number).
    2. Letpy be ? ToPrimitive(y,number).
  2. Else,
    1. NOTE: The order of evaluation needs to be reversed to preserve left to right evaluation.
    2. Letpy be ? ToPrimitive(y,number).
    3. Letpx be ? ToPrimitive(x,number).
  3. Ifpxis a String andpyis a String, then
    1. Letlx be the length ofpx.
    2. Letly be the length ofpy.
    3. For eachintegeri such that 0 ≤i <min(lx,ly), in ascending order, do
      1. Letcx be the numeric value of the code unit at indexi withinpx.
      2. Letcy be the numeric value of the code unit at indexi withinpy.
      3. Ifcx <cy, returntrue.
      4. Ifcx >cy, returnfalse.
    4. Iflx <ly, returntrue. Otherwise, returnfalse.
  4. Else,
    1. Ifpxis a BigInt andpyis a String, then
      1. Letny beStringToBigInt(py).
      2. Ifny isundefined, returnundefined.
      3. ReturnBigInt::lessThan(px,ny).
    2. Ifpxis a String andpyis a BigInt, then
      1. Letnx beStringToBigInt(px).
      2. Ifnx isundefined, returnundefined.
      3. ReturnBigInt::lessThan(nx,py).
    3. NOTE: Becausepx andpy are primitive values, evaluation order is not important.
    4. Letnx be ? ToNumeric(px).
    5. Letny be ? ToNumeric(py).
    6. IfSameType(nx,ny) istrue, then
      1. Ifnxis a Number, then
        1. ReturnNumber::lessThan(nx,ny).
      2. Else,
        1. Assert:nxis a BigInt.
        2. ReturnBigInt::lessThan(nx,ny).
    7. Assert:nxis a BigInt andnyis a Number, ornxis a Number andnyis a BigInt.
    8. Ifnx orny isNaN, returnundefined.
    9. Ifnx is-∞𝔽 orny is+∞𝔽, returntrue.
    10. Ifnx is+∞𝔽 orny is-∞𝔽, returnfalse.
    11. If(nx) <(ny), returntrue; otherwise returnfalse.
Note 1

Step3 differs from step1.c in the algorithm that handles the addition operator+ (13.15.3) by using the logical-and operation instead of the logical-or operation.

Note 2

The comparison of Strings uses a simple lexicographic ordering on sequences of UTF-16 code unit values. There is no attempt to use the more complex, semantically oriented definitions of character or string equality and collating order defined in the Unicode specification. Therefore String values that are canonically equal according to the Unicode Standard but not in the same normalization form could test as unequal. Also note that lexicographic ordering bycode unit differs from ordering bycode point for Strings containingsurrogate pairs.

7.2.13 IsLooselyEqual (x,y )

The abstract operation IsLooselyEqual takes argumentsx (anECMAScript language value) andy (anECMAScript language value) and returns either anormal completion containing a Boolean or athrow completion. It provides the semantics for the== operator. It performs the following steps when called:

  1. IfSameType(x,y) istrue, then
    1. ReturnIsStrictlyEqual(x,y).
  2. Ifx isnull andy isundefined, returntrue.
  3. Ifx isundefined andy isnull, returntrue.
  4. NOTE: This step is replaced in sectionB.3.6.2.
  5. Ifxis a Number andyis a String, return ! IsLooselyEqual(x, ! ToNumber(y)).
  6. Ifxis a String andyis a Number, return ! IsLooselyEqual(!ToNumber(x),y).
  7. Ifxis a BigInt andyis a String, then
    1. Letn beStringToBigInt(y).
    2. Ifn isundefined, returnfalse.
    3. Return ! IsLooselyEqual(x,n).
  8. Ifxis a String andyis a BigInt, return ! IsLooselyEqual(y,x).
  9. Ifxis a Boolean, return ! IsLooselyEqual(!ToNumber(x),y).
  10. Ifyis a Boolean, return ! IsLooselyEqual(x, ! ToNumber(y)).
  11. Ifx is either a String, a Number, a BigInt, or a Symbol andyis an Object, return ! IsLooselyEqual(x, ? ToPrimitive(y)).
  12. Ifxis an Object andy is either a String, a Number, a BigInt, or a Symbol, return ! IsLooselyEqual(?ToPrimitive(x),y).
  13. Ifxis a BigInt andyis a Number, or ifxis a Number andyis a BigInt, then
    1. Ifx is notfinite ory is notfinite, returnfalse.
    2. If(x) =(y), returntrue; otherwise returnfalse.
  14. Returnfalse.

7.2.14 IsStrictlyEqual (x,y )

The abstract operation IsStrictlyEqual takes argumentsx (anECMAScript language value) andy (anECMAScript language value) and returns a Boolean. It provides the semantics for the=== operator. It performs the following steps when called:

  1. IfSameType(x,y) isfalse, returnfalse.
  2. Ifxis a Number, then
    1. ReturnNumber::equal(x,y).
  3. ReturnSameValueNonNumber(x,y).
Note

This algorithm differs from theSameValue Algorithm in its treatment of signed zeroes and NaNs.

7.3 Operations on Objects

7.3.1 MakeBasicObject (internalSlotsList )

The abstract operation MakeBasicObject takes argumentinternalSlotsList (aList of internal slot names) and returns an Object. It is the source of all ECMAScript objects that are created algorithmically, including bothordinary objects andexotic objects. It factors out common steps used in creating all objects, and centralizes object creation. It performs the following steps when called:

  1. SetinternalSlotsList to thelist-concatenation ofinternalSlotsList and «[[PrivateElements]] ».
  2. Letobj be a newly created object with an internal slot for each name ininternalSlotsList.
  3. NOTE: As described inObject Internal Methods and Internal Slots, the initial value of each such internal slot isundefined unless specified otherwise.
  4. Setobj.[[PrivateElements]] to a new emptyList.
  5. Setobj's essential internal methods to the defaultordinary object definitions specified in10.1.
  6. Assert: If the caller will not be overriding bothobj's[[GetPrototypeOf]] and[[SetPrototypeOf]] essential internal methods, theninternalSlotsList contains[[Prototype]].
  7. Assert: If the caller will not be overriding all ofobj's[[SetPrototypeOf]],[[IsExtensible]], and[[PreventExtensions]] essential internal methods, theninternalSlotsList contains[[Extensible]].
  8. IfinternalSlotsList contains[[Extensible]], setobj.[[Extensible]] totrue.
  9. Returnobj.
Note

Within this specification,exotic objects are created inabstract operations such asArrayCreate andBoundFunctionCreate by first calling MakeBasicObject to obtain a basic, foundational object, and then overriding some or all of that object's internal methods. In order to encapsulateexotic object creation, the object's essential internal methods are never modified outside those operations.

7.3.2 Get (O,P )

The abstract operation Get takes argumentsO (an Object) andP (aproperty key) and returns either anormal completion containing anECMAScript language value or athrow completion. It is used to retrieve the value of a specific property of an object. It performs the following steps when called:

  1. Return ? O.[[Get]](P,O).

7.3.3 GetV (V,P )

The abstract operation GetV takes argumentsV (anECMAScript language value) andP (aproperty key) and returns either anormal completion containing anECMAScript language value or athrow completion. It is used to retrieve the value of a specific property of anECMAScript language value. If the value is not an object, the property lookup is performed using a wrapper object appropriate for the type of the value. It performs the following steps when called:

  1. LetO be ? ToObject(V).
  2. Return ? O.[[Get]](P,V).

7.3.4 Set (O,P,V,Throw )

The abstract operation Set takes argumentsO (an Object),P (aproperty key),V (anECMAScript language value), andThrow (a Boolean) and returns either anormal completion containingunused or athrow completion. It is used to set the value of a specific property of an object.V is the new value for the property. It performs the following steps when called:

  1. Letsuccess be ? O.[[Set]](P,V,O).
  2. Ifsuccess isfalse andThrow istrue, throw aTypeError exception.
  3. Returnunused.

7.3.5 CreateDataProperty (O,P,V )

The abstract operation CreateDataProperty takes argumentsO (an Object),P (aproperty key), andV (anECMAScript language value) and returns either anormal completion containing a Boolean or athrow completion. It is used to create a new own property of an object. It performs the following steps when called:

  1. LetnewDesc be the PropertyDescriptor {[[Value]]:V,[[Writable]]:true,[[Enumerable]]:true,[[Configurable]]:true }.
  2. Return ? O.[[DefineOwnProperty]](P,newDesc).
Note

This abstract operation creates a property whose attributes are set to the same defaults used for properties created by the ECMAScript language assignment operator. Normally, the property will not already exist. If it does exist and is not configurable or ifO is not extensible,[[DefineOwnProperty]] will returnfalse.

7.3.6 CreateDataPropertyOrThrow (O,P,V )

The abstract operation CreateDataPropertyOrThrow takes argumentsO (an Object),P (aproperty key), andV (anECMAScript language value) and returns either anormal completion containingunused or athrow completion. It is used to create a new own property of an object. It throws aTypeError exception if the requested property update cannot be performed. It performs the following steps when called:

  1. Letsuccess be ? CreateDataProperty(O,P,V).
  2. Ifsuccess isfalse, throw aTypeError exception.
  3. Returnunused.
Note

This abstract operation creates a property whose attributes are set to the same defaults used for properties created by the ECMAScript language assignment operator. Normally, the property will not already exist. If it does exist and is not configurable or ifO is not extensible,[[DefineOwnProperty]] will returnfalse causing this operation to throw aTypeError exception.

7.3.7 CreateNonEnumerableDataPropertyOrThrow (O,P,V )

The abstract operation CreateNonEnumerableDataPropertyOrThrow takes argumentsO (an Object),P (aproperty key), andV (anECMAScript language value) and returnsunused. It is used to create a new non-enumerable own property of anordinary object. It performs the following steps when called:

  1. Assert:O is an ordinary, extensible object with no non-configurable properties.
  2. LetnewDesc be the PropertyDescriptor {[[Value]]:V,[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:true }.
  3. Perform ! DefinePropertyOrThrow(O,P,newDesc).
  4. Returnunused.
Note

This abstract operation creates a property whose attributes are set to the same defaults used for properties created by the ECMAScript language assignment operator except it is not enumerable. Normally, the property will not already exist. If it does exist,DefinePropertyOrThrow is guaranteed to complete normally.

7.3.8 DefinePropertyOrThrow (O,P,desc )

The abstract operation DefinePropertyOrThrow takes argumentsO (an Object),P (aproperty key), anddesc (aProperty Descriptor) and returns either anormal completion containingunused or athrow completion. It is used to call the[[DefineOwnProperty]] internal method of an object in a manner that will throw aTypeError exception if the requested property update cannot be performed. It performs the following steps when called:

  1. Letsuccess be ? O.[[DefineOwnProperty]](P,desc).
  2. Ifsuccess isfalse, throw aTypeError exception.
  3. Returnunused.

7.3.9 DeletePropertyOrThrow (O,P )

The abstract operation DeletePropertyOrThrow takes argumentsO (an Object) andP (aproperty key) and returns either anormal completion containingunused or athrow completion. It is used to remove a specific own property of an object. It throws an exception if the property is not configurable. It performs the following steps when called:

  1. Letsuccess be ? O.[[Delete]](P).
  2. Ifsuccess isfalse, throw aTypeError exception.
  3. Returnunused.

7.3.10 GetMethod (V,P )

The abstract operation GetMethod takes argumentsV (anECMAScript language value) andP (aproperty key) and returns either anormal completion containing either afunction object orundefined, or athrow completion. It is used to get the value of a specific property of anECMAScript language value when the value of the property is expected to be a function. It performs the following steps when called:

  1. Letfunc be ? GetV(V,P).
  2. Iffunc is eitherundefined ornull, returnundefined.
  3. IfIsCallable(func) isfalse, throw aTypeError exception.
  4. Returnfunc.

7.3.11 HasProperty (O,P )

The abstract operation HasProperty takes argumentsO (an Object) andP (aproperty key) and returns either anormal completion containing a Boolean or athrow completion. It is used to determine whether an object has a property with the specifiedproperty key. The property may be either own or inherited. It performs the following steps when called:

  1. Return ? O.[[HasProperty]](P).

7.3.12 HasOwnProperty (O,P )

The abstract operation HasOwnProperty takes argumentsO (an Object) andP (aproperty key) and returns either anormal completion containing a Boolean or athrow completion. It is used to determine whether an object has an own property with the specifiedproperty key. It performs the following steps when called:

  1. Letdesc be ? O.[[GetOwnProperty]](P).
  2. Ifdesc isundefined, returnfalse.
  3. Returntrue.

7.3.13 Call (F,V [ ,argumentsList ] )

The abstract operation Call takes argumentsF (anECMAScript language value) andV (anECMAScript language value) and optional argumentargumentsList (aList ofECMAScript language values) and returns either anormal completion containing anECMAScript language value or athrow completion. It is used to call the[[Call]] internal method of afunction object.F is thefunction object,V is anECMAScript language value that is thethis value of the[[Call]], andargumentsList is the value passed to the corresponding argument of the internal method. IfargumentsList is not present, a new emptyList is used as its value. It performs the following steps when called:

  1. IfargumentsList is not present, setargumentsList to a new emptyList.
  2. IfIsCallable(F) isfalse, throw aTypeError exception.
  3. Return ? F.[[Call]](V,argumentsList).

7.3.14 Construct (F [ ,argumentsList [ ,newTarget ] ] )

The abstract operation Construct takes argumentF (aconstructor) and optional argumentsargumentsList (aList ofECMAScript language values) andnewTarget (aconstructor) and returns either anormal completion containing an Object or athrow completion. It is used to call the[[Construct]] internal method of afunction object.argumentsList andnewTarget are the values to be passed as the corresponding arguments of the internal method. IfargumentsList is not present, a new emptyList is used as its value. IfnewTarget is not present,F is used as its value. It performs the following steps when called:

  1. IfnewTarget is not present, setnewTarget toF.
  2. IfargumentsList is not present, setargumentsList to a new emptyList.
  3. Return ? F.[[Construct]](argumentsList,newTarget).
Note

IfnewTarget is not present, this operation is equivalent to:new F(...argumentsList)

7.3.15 SetIntegrityLevel (O,level )

The abstract operation SetIntegrityLevel takes argumentsO (an Object) andlevel (sealed orfrozen) and returns either anormal completion containing a Boolean or athrow completion. It is used to fix the set of own properties of an object. It performs the following steps when called:

  1. Letstatus be ? O.[[PreventExtensions]]().
  2. Ifstatus isfalse, returnfalse.
  3. Letkeys be ? O.[[OwnPropertyKeys]]().
  4. Iflevel issealed, then
    1. For each elementk ofkeys, do
      1. Perform ? DefinePropertyOrThrow(O,k, PropertyDescriptor {[[Configurable]]:false }).
  5. Else,
    1. Assert:level isfrozen.
    2. For each elementk ofkeys, do
      1. LetcurrentDesc be ? O.[[GetOwnProperty]](k).
      2. IfcurrentDesc is notundefined, then
        1. IfIsAccessorDescriptor(currentDesc) istrue, then
          1. Letdesc be the PropertyDescriptor {[[Configurable]]:false }.
        2. Else,
          1. Letdesc be the PropertyDescriptor {[[Configurable]]:false,[[Writable]]:false }.
        3. Perform ? DefinePropertyOrThrow(O,k,desc).
  6. Returntrue.

7.3.16 TestIntegrityLevel (O,level )

The abstract operation TestIntegrityLevel takes argumentsO (an Object) andlevel (sealed orfrozen) and returns either anormal completion containing a Boolean or athrow completion. It is used to determine if the set of own properties of an object are fixed. It performs the following steps when called:

  1. Letextensible be ? IsExtensible(O).
  2. Ifextensible istrue, returnfalse.
  3. NOTE: If the object is extensible, none of its properties are examined.
  4. Letkeys be ? O.[[OwnPropertyKeys]]().
  5. For each elementk ofkeys, do
    1. LetcurrentDesc be ? O.[[GetOwnProperty]](k).
    2. IfcurrentDesc is notundefined, then
      1. IfcurrentDesc.[[Configurable]] istrue, returnfalse.
      2. Iflevel isfrozen andIsDataDescriptor(currentDesc) istrue, then
        1. IfcurrentDesc.[[Writable]] istrue, returnfalse.
  6. Returntrue.

7.3.17 CreateArrayFromList (elements )

The abstract operation CreateArrayFromList takes argumentelements (aList ofECMAScript language values) and returns an Array. It is used to create an Array whose elements are provided byelements. It performs the following steps when called:

  1. Letarray be ! ArrayCreate(0).
  2. Letn be 0.
  3. For each elemente ofelements, do
    1. Perform ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(n)),e).
    2. Setn ton + 1.
  4. Returnarray.

7.3.18 LengthOfArrayLike (obj )

The abstract operation LengthOfArrayLike takes argumentobj (an Object) and returns either anormal completion containing a non-negativeinteger or athrow completion. It returns the value of the"length" property of an array-like object. It performs the following steps when called:

  1. Return(?ToLength(?Get(obj,"length"))).

Anarray-like object is any object for which this operation returns anormal completion.

Note 1
Typically, an array-like object would also have some properties withinteger index names. However, that is not a requirement of this definition.
Note 2
Arrays and String objects are examples of array-like objects.

7.3.19 CreateListFromArrayLike (obj [ ,validElementTypes ] )

The abstract operation CreateListFromArrayLike takes argumentobj (anECMAScript language value) and optional argumentvalidElementTypes (all orproperty-key) and returns either anormal completion containing aList ofECMAScript language values or athrow completion. It is used to create aList value whose elements are provided by the indexed properties ofobj.validElementTypes indicates the types of values that are allowed as elements. It performs the following steps when called:

  1. IfvalidElementTypes is not present, setvalidElementTypes toall.
  2. Ifobjis not an Object, throw aTypeError exception.
  3. Letlen be ? LengthOfArrayLike(obj).
  4. Letlist be a new emptyList.
  5. Letindex be 0.
  6. Repeat, whileindex <len,
    1. LetindexName be ! ToString(𝔽(index)).
    2. Letnext be ? Get(obj,indexName).
    3. IfvalidElementTypes isproperty-key andnext is not aproperty key, throw aTypeError exception.
    4. Appendnext tolist.
    5. Setindex toindex + 1.
  7. Returnlist.

7.3.20 Invoke (V,P [ ,argumentsList ] )

The abstract operation Invoke takes argumentsV (anECMAScript language value) andP (aproperty key) and optional argumentargumentsList (aList ofECMAScript language values) and returns either anormal completion containing anECMAScript language value or athrow completion. It is used to call a method property of anECMAScript language value.V serves as both the lookup point for the property and thethis value of the call.argumentsList is the list of arguments values passed to the method. IfargumentsList is not present, a new emptyList is used as its value. It performs the following steps when called:

  1. IfargumentsList is not present, setargumentsList to a new emptyList.
  2. Letfunc be ? GetV(V,P).
  3. Return ? Call(func,V,argumentsList).

7.3.21 OrdinaryHasInstance (C,O )

The abstract operation OrdinaryHasInstance takes argumentsC (anECMAScript language value) andO (anECMAScript language value) and returns either anormal completion containing a Boolean or athrow completion. It implements the default algorithm for determining ifO inherits from the instance object inheritance path provided byC. It performs the following steps when called:

  1. IfIsCallable(C) isfalse, returnfalse.
  2. IfC has a[[BoundTargetFunction]] internal slot, then
    1. LetBC beC.[[BoundTargetFunction]].
    2. Return ? InstanceofOperator(O,BC).
  3. IfOis not an Object, returnfalse.
  4. LetP be ? Get(C,"prototype").
  5. IfPis not an Object, throw aTypeError exception.
  6. Repeat,
    1. SetO to ? O.[[GetPrototypeOf]]().
    2. IfO isnull, returnfalse.
    3. IfSameValue(P,O) istrue, returntrue.

7.3.22 SpeciesConstructor (O,defaultConstructor )

The abstract operation SpeciesConstructor takes argumentsO (an Object) anddefaultConstructor (aconstructor) and returns either anormal completion containing aconstructor or athrow completion. It is used to retrieve theconstructor that should be used to create new objects that are derived fromO.defaultConstructor is theconstructor to use if aconstructor%Symbol.species% property cannot be found starting fromO. It performs the following steps when called:

  1. LetC be ? Get(O,"constructor").
  2. IfC isundefined, returndefaultConstructor.
  3. IfCis not an Object, throw aTypeError exception.
  4. LetS be ? Get(C,%Symbol.species%).
  5. IfS is eitherundefined ornull, returndefaultConstructor.
  6. IfIsConstructor(S) istrue, returnS.
  7. Throw aTypeError exception.

7.3.23 EnumerableOwnProperties (O,kind )

The abstract operation EnumerableOwnProperties takes argumentsO (an Object) andkind (key,value, orkey+value) and returns either anormal completion containing aList ofECMAScript language values or athrow completion. It performs the following steps when called:

  1. LetownKeys be ? O.[[OwnPropertyKeys]]().
  2. Letresults be a new emptyList.
  3. For each elementkey ofownKeys, do
    1. Ifkeyis a String, then
      1. Letdesc be ? O.[[GetOwnProperty]](key).
      2. Ifdesc is notundefined anddesc.[[Enumerable]] istrue, then
        1. Ifkind iskey, then
          1. Appendkey toresults.
        2. Else,
          1. Letvalue be ? Get(O,key).
          2. Ifkind isvalue, then
            1. Appendvalue toresults.
          3. Else,
            1. Assert:kind iskey+value.
            2. Letentry beCreateArrayFromListkey,value »).
            3. Appendentry toresults.
  4. Returnresults.

7.3.24 GetFunctionRealm (obj )

The abstract operation GetFunctionRealm takes argumentobj (afunction object) and returns either anormal completion containing aRealm Record or athrow completion. It performs the following steps when called:

  1. Ifobj has a[[Realm]] internal slot, then
    1. Returnobj.[[Realm]].
  2. Ifobj is abound function exotic object, then
    1. LetboundTargetFunction beobj.[[BoundTargetFunction]].
    2. Return ? GetFunctionRealm(boundTargetFunction).
  3. Ifobj is aProxy exotic object, then
    1. Perform ? ValidateNonRevokedProxy(obj).
    2. LetproxyTarget beobj.[[ProxyTarget]].
    3. Assert:proxyTarget is afunction object.
    4. Return ? GetFunctionRealm(proxyTarget).
  4. Returnthe current Realm Record.
Note

Step4 will only be reached ifobj is a non-standard functionexotic object that does not have a[[Realm]] internal slot.

7.3.25 CopyDataProperties (target,source,excludedItems )

The abstract operation CopyDataProperties takes argumentstarget (an Object),source (anECMAScript language value), andexcludedItems (aList ofproperty keys) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. Ifsource is eitherundefined ornull, returnunused.
  2. Letfrom be ! ToObject(source).
  3. Letkeys be ? from.[[OwnPropertyKeys]]().
  4. For each elementnextKey ofkeys, do
    1. Letexcluded befalse.
    2. For each elemente ofexcludedItems, do
      1. IfSameValue(e,nextKey) istrue, then
        1. Setexcluded totrue.
    3. Ifexcluded isfalse, then
      1. Letdesc be ? from.[[GetOwnProperty]](nextKey).
      2. Ifdesc is notundefined anddesc.[[Enumerable]] istrue, then
        1. LetpropValue be ? Get(from,nextKey).
        2. Perform ! CreateDataPropertyOrThrow(target,nextKey,propValue).
  5. Returnunused.
Note

The target passed in here is always a newly created object which is not directly accessible in case of an error being thrown.

7.3.26 PrivateElementFind (O,P )

The abstract operation PrivateElementFind takes argumentsO (an Object) andP (aPrivate Name) and returns aPrivateElement orempty. It performs the following steps when called:

  1. IfO.[[PrivateElements]] contains aPrivateElementpe such thatpe.[[Key]] isP, then
    1. Returnpe.
  2. Returnempty.

7.3.27 PrivateFieldAdd (O,P,value )

The abstract operation PrivateFieldAdd takes argumentsO (an Object),P (aPrivate Name), andvalue (anECMAScript language value) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. If thehost is a web browser, then
    1. Perform ? HostEnsureCanAddPrivateElement(O).
  2. Letentry bePrivateElementFind(O,P).
  3. Ifentry is notempty, throw aTypeError exception.
  4. AppendPrivateElement {[[Key]]:P,[[Kind]]:field,[[Value]]:value } toO.[[PrivateElements]].
  5. Returnunused.

7.3.28 PrivateMethodOrAccessorAdd (O,method )

The abstract operation PrivateMethodOrAccessorAdd takes argumentsO (an Object) andmethod (aPrivateElement) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. Assert:method.[[Kind]] is eithermethod oraccessor.
  2. If thehost is a web browser, then
    1. Perform ? HostEnsureCanAddPrivateElement(O).
  3. Letentry bePrivateElementFind(O,method.[[Key]]).
  4. Ifentry is notempty, throw aTypeError exception.
  5. Appendmethod toO.[[PrivateElements]].
  6. Returnunused.
Note

The values for private methods and accessors are shared across instances. This operation does not create a new copy of the method or accessor.

7.3.29 HostEnsureCanAddPrivateElement (O )

Thehost-defined abstract operation HostEnsureCanAddPrivateElement takes argumentO (an Object) and returns either anormal completion containingunused or athrow completion. It allowshost environments to prevent the addition of private elements to particularhost-definedexotic objects.

An implementation of HostEnsureCanAddPrivateElement must conform to the following requirements:

The default implementation of HostEnsureCanAddPrivateElement is to returnNormalCompletion(unused).

This abstract operation is only invoked by ECMAScripthosts that are web browsers.

7.3.30 PrivateGet (O,P )

The abstract operation PrivateGet takes argumentsO (an Object) andP (aPrivate Name) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Letentry bePrivateElementFind(O,P).
  2. Ifentry isempty, throw aTypeError exception.
  3. Ifentry.[[Kind]] is eitherfield ormethod, then
    1. Returnentry.[[Value]].
  4. Assert:entry.[[Kind]] isaccessor.
  5. Ifentry.[[Get]] isundefined, throw aTypeError exception.
  6. Letgetter beentry.[[Get]].
  7. Return ? Call(getter,O).

7.3.31 PrivateSet (O,P,value )

The abstract operation PrivateSet takes argumentsO (an Object),P (aPrivate Name), andvalue (anECMAScript language value) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. Letentry bePrivateElementFind(O,P).
  2. Ifentry isempty, throw aTypeError exception.
  3. Ifentry.[[Kind]] isfield, then
    1. Setentry.[[Value]] tovalue.
  4. Else ifentry.[[Kind]] ismethod, then
    1. Throw aTypeError exception.
  5. Else,
    1. Assert:entry.[[Kind]] isaccessor.
    2. Ifentry.[[Set]] isundefined, throw aTypeError exception.
    3. Letsetter beentry.[[Set]].
    4. Perform ? Call(setter,O, «value »).
  6. Returnunused.

7.3.32 DefineField (receiver,fieldRecord )

The abstract operation DefineField takes argumentsreceiver (an Object) andfieldRecord (aClassFieldDefinition Record) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. LetfieldName befieldRecord.[[Name]].
  2. Letinitializer befieldRecord.[[Initializer]].
  3. Ifinitializer is notempty, then
    1. LetinitValue be ? Call(initializer,receiver).
  4. Else,
    1. LetinitValue beundefined.
  5. IffieldName is aPrivate Name, then
    1. Perform ? PrivateFieldAdd(receiver,fieldName,initValue).
  6. Else,
    1. Assert:fieldName is aproperty key.
    2. Perform ? CreateDataPropertyOrThrow(receiver,fieldName,initValue).
  7. Returnunused.

7.3.33 InitializeInstanceElements (O,constructor )

The abstract operation InitializeInstanceElements takes argumentsO (an Object) andconstructor (an ECMAScriptfunction object) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. Letmethods be the value ofconstructor.[[PrivateMethods]].
  2. For eachPrivateElementmethod ofmethods, do
    1. Perform ? PrivateMethodOrAccessorAdd(O,method).
  3. Letfields be the value ofconstructor.[[Fields]].
  4. For each elementfieldRecord offields, do
    1. Perform ? DefineField(O,fieldRecord).
  5. Returnunused.

7.3.34 AddValueToKeyedGroup (groups,key,value )

The abstract operation AddValueToKeyedGroup takes argumentsgroups (aList ofRecords with fields[[Key]] (anECMAScript language value) and[[Elements]] (aList ofECMAScript language values)),key (anECMAScript language value), andvalue (anECMAScript language value) and returnsunused. It performs the following steps when called:

  1. For eachRecord {[[Key]],[[Elements]] }g ofgroups, do
    1. IfSameValue(g.[[Key]],key) istrue, then
      1. Assert: Exactly one element ofgroups meets this criterion.
      2. Appendvalue tog.[[Elements]].
      3. Returnunused.
  2. Letgroup be theRecord {[[Key]]:key,[[Elements]]: «value » }.
  3. Appendgroup togroups.
  4. Returnunused.

7.3.35 GroupBy (items,callback,keyCoercion )

The abstract operation GroupBy takes argumentsitems (anECMAScript language value),callback (anECMAScript language value), andkeyCoercion (property orcollection) and returns either anormal completion containing aList ofRecords with fields[[Key]] (anECMAScript language value) and[[Elements]] (aList ofECMAScript language values), or athrow completion. It performs the following steps when called:

  1. Perform ? RequireObjectCoercible(items).
  2. IfIsCallable(callback) isfalse, throw aTypeError exception.
  3. Letgroups be a new emptyList.
  4. LetiteratorRecord be ? GetIterator(items,sync).
  5. Letk be 0.
  6. Repeat,
    1. Ifk ≥ 253 - 1, then
      1. Leterror beThrowCompletion(a newly createdTypeError object).
      2. Return ? IteratorClose(iteratorRecord,error).
    2. Letnext be ? IteratorStepValue(iteratorRecord).
    3. Ifnext isdone, then
      1. Returngroups.
    4. Letvalue benext.
    5. Letkey beCompletion(Call(callback,undefined, «value,𝔽(k) »)).
    6. IfAbruptCloseIterator(key,iteratorRecord).
    7. IfkeyCoercion isproperty, then
      1. Setkey toCompletion(ToPropertyKey(key)).
      2. IfAbruptCloseIterator(key,iteratorRecord).
    8. Else,
      1. Assert:keyCoercion iscollection.
      2. Setkey toCanonicalizeKeyedCollectionKey(key).
    9. PerformAddValueToKeyedGroup(groups,key,value).
    10. Setk tok + 1.

7.3.36 SetterThatIgnoresPrototypeProperties (thisValue,home,p,v )

The abstract operation SetterThatIgnoresPrototypeProperties takes argumentsthisValue (anECMAScript language value),home (an Object),p (aproperty key), andv (anECMAScript language value) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. IfthisValueis not an Object, then
    1. Throw aTypeError exception.
  2. IfSameValue(thisValue,home) istrue, then
    1. NOTE: Throwing here emulates assignment to a non-writabledata property on thehome object instrict mode code.
    2. Throw aTypeError exception.
  3. Letdesc be ? thisValue.[[GetOwnProperty]](p).
  4. Ifdesc isundefined, then
    1. Perform ? CreateDataPropertyOrThrow(thisValue,p,v).
  5. Else,
    1. Perform ? Set(thisValue,p,v,true).
  6. Returnunused.

7.4 Operations on Iterator Objects

See Common Iteration Interfaces (27.1).

7.4.1 Iterator Records

AnIterator Record is aRecord value used to encapsulate aniterator orasync iterator along with thenext method.

Iterator Records have the fields listed inTable 15.

Table 15:Iterator Record Fields
Field Name Value Meaning
[[Iterator]] an Object An object that conforms to theiterator interface or theasync iterator interface.
[[NextMethod]] anECMAScript language value Thenext method of the[[Iterator]] object.
[[Done]] a Boolean Whether theiterator has completed or been closed.

7.4.2 GetIteratorDirect (obj )

The abstract operation GetIteratorDirect takes argumentobj (an Object) and returns either anormal completion containing anIterator Record or athrow completion. It performs the following steps when called:

  1. LetnextMethod be ? Get(obj,"next").
  2. LetiteratorRecord be theIterator Record {[[Iterator]]:obj,[[NextMethod]]:nextMethod,[[Done]]:false }.
  3. ReturniteratorRecord.

7.4.3 GetIteratorFromMethod (obj,method )

The abstract operation GetIteratorFromMethod takes argumentsobj (anECMAScript language value) andmethod (afunction object) and returns either anormal completion containing anIterator Record or athrow completion. It performs the following steps when called:

  1. Letiterator be ? Call(method,obj).
  2. Ifiteratoris not an Object, throw aTypeError exception.
  3. Return ? GetIteratorDirect(iterator).

7.4.4 GetIterator (obj,kind )

The abstract operation GetIterator takes argumentsobj (anECMAScript language value) andkind (sync orasync) and returns either anormal completion containing anIterator Record or athrow completion. It performs the following steps when called:

  1. Ifkind isasync, then
    1. Letmethod be ? GetMethod(obj,%Symbol.asyncIterator%).
    2. Ifmethod isundefined, then
      1. LetsyncMethod be ? GetMethod(obj,%Symbol.iterator%).
      2. IfsyncMethod isundefined, throw aTypeError exception.
      3. LetsyncIteratorRecord be ? GetIteratorFromMethod(obj,syncMethod).
      4. ReturnCreateAsyncFromSyncIterator(syncIteratorRecord).
  2. Else,
    1. Letmethod be ? GetMethod(obj,%Symbol.iterator%).
  3. Ifmethod isundefined, throw aTypeError exception.
  4. Return ? GetIteratorFromMethod(obj,method).

7.4.5 GetIteratorFlattenable (obj,primitiveHandling )

The abstract operation GetIteratorFlattenable takes argumentsobj (anECMAScript language value) andprimitiveHandling (iterate-string-primitives orreject-primitives) and returns either anormal completion containing anIterator Record or athrow completion. It performs the following steps when called:

  1. Ifobjis not an Object, then
    1. IfprimitiveHandling isreject-primitives, throw aTypeError exception.
    2. Assert:primitiveHandling isiterate-string-primitives.
    3. Ifobjis not a String, throw aTypeError exception.
  2. Letmethod be ? GetMethod(obj,%Symbol.iterator%).
  3. Ifmethod isundefined, then
    1. Letiterator beobj.
  4. Else,
    1. Letiterator be ? Call(method,obj).
  5. Ifiteratoris not an Object, throw aTypeError exception.
  6. Return ? GetIteratorDirect(iterator).

7.4.6 IteratorNext (iteratorRecord [ ,value ] )

The abstract operation IteratorNext takes argumentiteratorRecord (anIterator Record) and optional argumentvalue (anECMAScript language value) and returns either anormal completion containing an Object or athrow completion. It performs the following steps when called:

  1. Ifvalue is not present, then
    1. Letresult beCompletion(Call(iteratorRecord.[[NextMethod]],iteratorRecord.[[Iterator]])).
  2. Else,
    1. Letresult beCompletion(Call(iteratorRecord.[[NextMethod]],iteratorRecord.[[Iterator]], «value »)).
  3. Ifresult is athrow completion, then
    1. SetiteratorRecord.[[Done]] totrue.
    2. Return ? result.
  4. Setresult to ! result.
  5. Ifresultis not an Object, then
    1. SetiteratorRecord.[[Done]] totrue.
    2. Throw aTypeError exception.
  6. Returnresult.

7.4.7 IteratorComplete (iteratorResult )

The abstract operation IteratorComplete takes argumentiteratorResult (an Object) and returns either anormal completion containing a Boolean or athrow completion. It performs the following steps when called:

  1. ReturnToBoolean(?Get(iteratorResult,"done")).

7.4.8 IteratorValue (iteratorResult )

The abstract operation IteratorValue takes argumentiteratorResult (an Object) and returns either anormal completion containing anECMAScript language value or athrow completion. It performs the following steps when called:

  1. Return ? Get(iteratorResult,"value").

7.4.9 IteratorStep (iteratorRecord )

The abstract operation IteratorStep takes argumentiteratorRecord (anIterator Record) and returns either anormal completion containing either an Object ordone, or athrow completion. It requests the next value fromiteratorRecord.[[Iterator]] by callingiteratorRecord.[[NextMethod]] and returns eitherdone indicating that theiterator has reached its end or theIteratorResult object if a next value is available. It performs the following steps when called:

  1. Letresult be ? IteratorNext(iteratorRecord).
  2. Letdone beCompletion(IteratorComplete(result)).
  3. Ifdone is athrow completion, then
    1. SetiteratorRecord.[[Done]] totrue.
    2. Return ? done.
  4. Setdone to ! done.
  5. Ifdone istrue, then
    1. SetiteratorRecord.[[Done]] totrue.
    2. Returndone.
  6. Returnresult.

7.4.10 IteratorStepValue (iteratorRecord )

The abstract operation IteratorStepValue takes argumentiteratorRecord (anIterator Record) and returns either anormal completion containing either anECMAScript language value ordone, or athrow completion. It requests the next value fromiteratorRecord.[[Iterator]] by callingiteratorRecord.[[NextMethod]] and returns eitherdone indicating that theiterator has reached its end or the value from theIteratorResult object if a next value is available. It performs the following steps when called:

  1. Letresult be ? IteratorStep(iteratorRecord).
  2. Ifresult isdone, then
    1. Returndone.
  3. Letvalue beCompletion(IteratorValue(result)).
  4. Ifvalue is athrow completion, then
    1. SetiteratorRecord.[[Done]] totrue.
  5. Return ? value.

7.4.11 IteratorClose (iteratorRecord,completion )

The abstract operation IteratorClose takes argumentsiteratorRecord (anIterator Record) andcompletion (aCompletion Record) and returns aCompletion Record. It is used to notify aniterator that it should perform any actions it would normally perform when it has reached its completed state. It performs the following steps when called:

  1. Assert:iteratorRecord.[[Iterator]]is an Object.
  2. Letiterator beiteratorRecord.[[Iterator]].
  3. LetinnerResult beCompletion(GetMethod(iterator,"return")).
  4. IfinnerResult is anormal completion, then
    1. Letreturn beinnerResult.[[Value]].
    2. Ifreturn isundefined, return ? completion.
    3. SetinnerResult toCompletion(Call(return,iterator)).
  5. Ifcompletion is athrow completion, return ? completion.
  6. IfinnerResult is athrow completion, return ? innerResult.
  7. IfinnerResult.[[Value]]is not an Object, throw aTypeError exception.
  8. Return ? completion.

7.4.12 IfAbruptCloseIterator (value,iteratorRecord )

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

  1. IfAbruptCloseIterator(value,iteratorRecord).

means the same thing as:

  1. Assert:value is aCompletion Record.
  2. Ifvalue is anabrupt completion, return ? IteratorClose(iteratorRecord,value).
  3. Else, setvalue to ! value.

7.4.13 AsyncIteratorClose (iteratorRecord,completion )

The abstract operation AsyncIteratorClose takes argumentsiteratorRecord (anIterator Record) andcompletion (aCompletion Record) and returns aCompletion Record. It is used to notify anasync iterator that it should perform any actions it would normally perform when it has reached its completed state. It performs the following steps when called:

  1. Assert:iteratorRecord.[[Iterator]]is an Object.
  2. Letiterator beiteratorRecord.[[Iterator]].
  3. LetinnerResult beCompletion(GetMethod(iterator,"return")).
  4. IfinnerResult is anormal completion, then
    1. Letreturn beinnerResult.[[Value]].
    2. Ifreturn isundefined, return ? completion.
    3. SetinnerResult toCompletion(Call(return,iterator)).
    4. IfinnerResult is anormal completion, setinnerResult toCompletion(Await(innerResult.[[Value]])).
  5. Ifcompletion is athrow completion, return ? completion.
  6. IfinnerResult is athrow completion, return ? innerResult.
  7. IfinnerResult.[[Value]]is not an Object, throw aTypeError exception.
  8. Return ? completion.

7.4.14 CreateIteratorResultObject (value,done )

The abstract operation CreateIteratorResultObject takes argumentsvalue (anECMAScript language value) anddone (a Boolean) and returns an Object that conforms to theIteratorResult interface. It creates an object that conforms to theIteratorResult interface. It performs the following steps when called:

  1. Letobj beOrdinaryObjectCreate(%Object.prototype%).
  2. Perform ! CreateDataPropertyOrThrow(obj,"value",value).
  3. Perform ! CreateDataPropertyOrThrow(obj,"done",done).
  4. Returnobj.

7.4.15 CreateListIteratorRecord (list )

The abstract operation CreateListIteratorRecord takes argumentlist (aList ofECMAScript language values) and returns anIterator Record. It creates anIterator Record whose[[NextMethod]] returns the successive elements oflist. It performs the following steps when called:

  1. Letclosure be a newAbstract Closure with no parameters that captureslist and performs the following steps when called:
    1. For each elementE oflist, do
      1. Perform ? GeneratorYield(CreateIteratorResultObject(E,false)).
    2. ReturnNormalCompletion(undefined).
  2. Letiterator beCreateIteratorFromClosure(closure,empty,%Iterator.prototype%).
  3. Return theIterator Record {[[Iterator]]:iterator,[[NextMethod]]: %GeneratorPrototype.next%,[[Done]]:false }.
Note

The listiterator object is never directly accessible to ECMAScript code.

7.4.16 IteratorToList (iteratorRecord )

The abstract operation IteratorToList takes argumentiteratorRecord (anIterator Record) and returns either anormal completion containing aList ofECMAScript language values or athrow completion. It performs the following steps when called:

  1. Letvalues be a new emptyList.
  2. Repeat,
    1. Letnext be ? IteratorStepValue(iteratorRecord).
    2. Ifnext isdone, then
      1. Returnvalues.
    3. Appendnext tovalues.

[8]ページ先頭

©2009-2025 Movatter.jp