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

25 Structured Data

25.1 ArrayBuffer Objects

25.1.1 Notation

The descriptions below in this section,25.4, and29 use the read-modify-write modification function internal data structure.

Aread-modify-write modification function is a mathematical function that is represented as an abstract closure that takes twoLists ofbyte values as arguments and returns aList ofbyte values. These abstract closures satisfy all of the following properties:

  • They perform all their algorithm steps atomically.
  • Their individual algorithm steps are not observable.
Note

To aid verifying that a read-modify-write modification function's algorithm steps constitute a pure, mathematical function, the following editorial conventions are recommended:

25.1.2 Fixed-length and Resizable ArrayBuffer Objects

Afixed-length ArrayBuffer is an ArrayBuffer whose byte length cannot change after creation.

Aresizable ArrayBuffer is an ArrayBuffer whose byte length may change after creation via calls toArrayBuffer.prototype.resize (newLength ).

The kind of ArrayBuffer object that is created depends on the arguments passed toArrayBuffer (length [ ,options ] ).

25.1.3 Abstract Operations For ArrayBuffer Objects

25.1.3.1 AllocateArrayBuffer (constructor,byteLength [ ,maxByteLength ] )

The abstract operation AllocateArrayBuffer takes argumentsconstructor (aconstructor) andbyteLength (a non-negativeinteger) and optional argumentmaxByteLength (a non-negativeinteger orempty) and returns either anormal completion containing an ArrayBuffer or athrow completion. It is used to create an ArrayBuffer. It performs the following steps when called:

  1. Letslots be «[[ArrayBufferData]],[[ArrayBufferByteLength]],[[ArrayBufferDetachKey]] ».
  2. IfmaxByteLength is present andmaxByteLength is notempty, letallocatingResizableBuffer betrue; otherwise letallocatingResizableBuffer befalse.
  3. IfallocatingResizableBuffer istrue, then
    1. IfbyteLength >maxByteLength, throw aRangeError exception.
    2. Append[[ArrayBufferMaxByteLength]] toslots.
  4. Letobj be ? OrdinaryCreateFromConstructor(constructor,"%ArrayBuffer.prototype%",slots).
  5. Letblock be ? CreateByteDataBlock(byteLength).
  6. Setobj.[[ArrayBufferData]] toblock.
  7. Setobj.[[ArrayBufferByteLength]] tobyteLength.
  8. IfallocatingResizableBuffer istrue, then
    1. If it is not possible to create aData Blockblock consisting ofmaxByteLength bytes, throw aRangeError exception.
    2. NOTE: Resizable ArrayBuffers are designed to be implementable with in-place growth. Implementations may throw if, for example, virtual memory cannot be reserved up front.
    3. Setobj.[[ArrayBufferMaxByteLength]] tomaxByteLength.
  9. Returnobj.

25.1.3.2 ArrayBufferByteLength (arrayBuffer,order )

The abstract operation ArrayBufferByteLength takes argumentsarrayBuffer (an ArrayBuffer or SharedArrayBuffer) andorder (seq-cst orunordered) and returns a non-negativeinteger. It performs the following steps when called:

  1. IfIsSharedArrayBuffer(arrayBuffer) istrue andarrayBuffer has an[[ArrayBufferByteLengthData]] internal slot, then
    1. LetbufferByteLengthBlock bearrayBuffer.[[ArrayBufferByteLengthData]].
    2. LetrawLength beGetRawBytesFromSharedBlock(bufferByteLengthBlock, 0,biguint64,true,order).
    3. LetisLittleEndian be the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record.
    4. Return(RawBytesToNumeric(biguint64,rawLength,isLittleEndian)).
  2. Assert:IsDetachedBuffer(arrayBuffer) isfalse.
  3. ReturnarrayBuffer.[[ArrayBufferByteLength]].

25.1.3.3 ArrayBufferCopyAndDetach (arrayBuffer,newLength,preserveResizability )

The abstract operation ArrayBufferCopyAndDetach takes argumentsarrayBuffer (anECMAScript language value),newLength (anECMAScript language value), andpreserveResizability (preserve-resizability orfixed-length) and returns either anormal completion containing an ArrayBuffer or athrow completion. It performs the following steps when called:

  1. Perform ? RequireInternalSlot(arrayBuffer,[[ArrayBufferData]]).
  2. IfIsSharedArrayBuffer(arrayBuffer) istrue, throw aTypeError exception.
  3. IfnewLength isundefined, then
    1. LetnewByteLength bearrayBuffer.[[ArrayBufferByteLength]].
  4. Else,
    1. LetnewByteLength be ? ToIndex(newLength).
  5. IfIsDetachedBuffer(arrayBuffer) istrue, throw aTypeError exception.
  6. IfpreserveResizability ispreserve-resizability andIsFixedLengthArrayBuffer(arrayBuffer) isfalse, then
    1. LetnewMaxByteLength bearrayBuffer.[[ArrayBufferMaxByteLength]].
  7. Else,
    1. LetnewMaxByteLength beempty.
  8. IfarrayBuffer.[[ArrayBufferDetachKey]] is notundefined, throw aTypeError exception.
  9. LetnewBuffer be ? AllocateArrayBuffer(%ArrayBuffer%,newByteLength,newMaxByteLength).
  10. LetcopyLength bemin(newByteLength,arrayBuffer.[[ArrayBufferByteLength]]).
  11. LetfromBlock bearrayBuffer.[[ArrayBufferData]].
  12. LettoBlock benewBuffer.[[ArrayBufferData]].
  13. PerformCopyDataBlockBytes(toBlock, 0,fromBlock, 0,copyLength).
  14. NOTE: Neither creation of the newData Block nor copying from the oldData Block are observable. Implementations may implement this method as a zero-copy move or arealloc.
  15. Perform ! DetachArrayBuffer(arrayBuffer).
  16. ReturnnewBuffer.

25.1.3.4 IsDetachedBuffer (arrayBuffer )

The abstract operation IsDetachedBuffer takes argumentarrayBuffer (an ArrayBuffer or a SharedArrayBuffer) and returns a Boolean. It performs the following steps when called:

  1. IfarrayBuffer.[[ArrayBufferData]] isnull, returntrue.
  2. Returnfalse.

25.1.3.5 DetachArrayBuffer (arrayBuffer [ ,key ] )

The abstract operation DetachArrayBuffer takes argumentarrayBuffer (an ArrayBuffer) and optional argumentkey (anything) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. Assert:IsSharedArrayBuffer(arrayBuffer) isfalse.
  2. Ifkey is not present, setkey toundefined.
  3. IfarrayBuffer.[[ArrayBufferDetachKey]] is notkey, throw aTypeError exception.
  4. SetarrayBuffer.[[ArrayBufferData]] tonull.
  5. SetarrayBuffer.[[ArrayBufferByteLength]] to 0.
  6. Returnunused.
Note

Detaching an ArrayBuffer instance disassociates theData Block used as its backing store from the instance and sets the byte length of the buffer to 0.

25.1.3.6 CloneArrayBuffer (srcBuffer,srcByteOffset,srcLength )

The abstract operation CloneArrayBuffer takes argumentssrcBuffer (an ArrayBuffer or a SharedArrayBuffer),srcByteOffset (a non-negativeinteger), andsrcLength (a non-negativeinteger) and returns either anormal completion containing an ArrayBuffer or athrow completion. It creates a new ArrayBuffer whose data is a copy ofsrcBuffer's data over the range starting atsrcByteOffset and continuing forsrcLength bytes. It performs the following steps when called:

  1. Assert:IsDetachedBuffer(srcBuffer) isfalse.
  2. LettargetBuffer be ? AllocateArrayBuffer(%ArrayBuffer%,srcLength).
  3. LetsrcBlock besrcBuffer.[[ArrayBufferData]].
  4. LettargetBlock betargetBuffer.[[ArrayBufferData]].
  5. PerformCopyDataBlockBytes(targetBlock, 0,srcBlock,srcByteOffset,srcLength).
  6. ReturntargetBuffer.

25.1.3.7 GetArrayBufferMaxByteLengthOption (options )

The abstract operation GetArrayBufferMaxByteLengthOption takes argumentoptions (anECMAScript language value) and returns either anormal completion containing either a non-negativeinteger orempty, or athrow completion. It performs the following steps when called:

  1. Ifoptionsis not an Object, returnempty.
  2. LetmaxByteLength be ? Get(options,"maxByteLength").
  3. IfmaxByteLength isundefined, returnempty.
  4. Return ? ToIndex(maxByteLength).

25.1.3.8 HostResizeArrayBuffer (buffer,newByteLength )

Thehost-defined abstract operation HostResizeArrayBuffer takes argumentsbuffer (an ArrayBuffer) andnewByteLength (a non-negativeinteger) and returns either anormal completion containing eitherhandled orunhandled, or athrow completion. It gives thehost an opportunity to performimplementation-defined resizing ofbuffer. If thehost chooses not to handle resizing ofbuffer, it may returnunhandled for the default behaviour.

The implementation of HostResizeArrayBuffer must conform to the following requirements:

  • The abstract operation does not detachbuffer.
  • If the abstract operation completes normally withhandled,buffer.[[ArrayBufferByteLength]] isnewByteLength.

The default implementation of HostResizeArrayBuffer is to returnNormalCompletion(unhandled).

25.1.3.9 IsFixedLengthArrayBuffer (arrayBuffer )

The abstract operation IsFixedLengthArrayBuffer takes argumentarrayBuffer (an ArrayBuffer or a SharedArrayBuffer) and returns a Boolean. It performs the following steps when called:

  1. IfarrayBuffer has an[[ArrayBufferMaxByteLength]] internal slot, returnfalse.
  2. Returntrue.

25.1.3.10 IsUnsignedElementType (type )

The abstract operation IsUnsignedElementType takes argumenttype (aTypedArray element type) and returns a Boolean. It verifies if the argumenttype is an unsignedTypedArray element type. It performs the following steps when called:

  1. Iftype is one ofuint8,uint8clamped,uint16,uint32, orbiguint64, returntrue.
  2. Returnfalse.

25.1.3.11 IsUnclampedIntegerElementType (type )

The abstract operation IsUnclampedIntegerElementType takes argumenttype (aTypedArray element type) and returns a Boolean. It verifies if the argumenttype is anIntegerTypedArray element type not includinguint8clamped. It performs the following steps when called:

  1. Iftype is one ofint8,uint8,int16,uint16,int32, oruint32, returntrue.
  2. Returnfalse.

25.1.3.12 IsBigIntElementType (type )

The abstract operation IsBigIntElementType takes argumenttype (aTypedArray element type) and returns a Boolean. It verifies if the argumenttypeis a BigIntTypedArray element type. It performs the following steps when called:

  1. Iftype is eitherbiguint64 orbigint64, returntrue.
  2. Returnfalse.

25.1.3.13 IsNoTearConfiguration (type,order )

The abstract operation IsNoTearConfiguration takes argumentstype (aTypedArray element type) andorder (seq-cst,unordered, orinit) and returns a Boolean. It performs the following steps when called:

  1. IfIsUnclampedIntegerElementType(type) istrue, returntrue.
  2. IfIsBigIntElementType(type) istrue andorder is neitherinit norunordered, returntrue.
  3. Returnfalse.

25.1.3.14 RawBytesToNumeric (type,rawBytes,isLittleEndian )

The abstract operation RawBytesToNumeric takes argumentstype (aTypedArray element type),rawBytes (aList ofbyte values), andisLittleEndian (a Boolean) and returns a Number or a BigInt. It performs the following steps when called:

  1. LetelementSize be the Element Size value specified inTable 75 for Element Typetype.
  2. IfisLittleEndian isfalse, reverse the order of the elements ofrawBytes.
  3. Iftype isfloat16, then
    1. Letvalue be the byte elements ofrawBytes concatenated and interpreted as a little-endian bit string encoding of anIEEE 754-2019 binary16 value.
    2. Ifvalue is a NaN, returnNaN.
    3. Return the Number value that corresponds tovalue.
  4. Iftype isfloat32, then
    1. Letvalue be the byte elements ofrawBytes concatenated and interpreted as a little-endian bit string encoding of anIEEE 754-2019 binary32 value.
    2. Ifvalue is a NaN, returnNaN.
    3. Return the Number value that corresponds tovalue.
  5. Iftype isfloat64, then
    1. Letvalue be the byte elements ofrawBytes concatenated and interpreted as a little-endian bit string encoding of anIEEE 754-2019 binary64 value.
    2. Ifvalue is a NaN, returnNaN.
    3. Return the Number value that corresponds tovalue.
  6. IfIsUnsignedElementType(type) istrue, then
    1. LetintValue be the byte elements ofrawBytes concatenated and interpreted as a bit string encoding of an unsigned little-endian binary number.
  7. Else,
    1. LetintValue be the byte elements ofrawBytes concatenated and interpreted as a bit string encoding of a binary little-endian two's complement number of bit lengthelementSize × 8.
  8. IfIsBigIntElementType(type) istrue, return the BigInt value that corresponds tointValue.
  9. Otherwise, return the Number value that corresponds tointValue.

25.1.3.15 GetRawBytesFromSharedBlock (block,byteIndex,type,isTypedArray,order )

The abstract operation GetRawBytesFromSharedBlock takes argumentsblock (aShared Data Block),byteIndex (a non-negativeinteger),type (aTypedArray element type),isTypedArray (a Boolean), andorder (seq-cst orunordered) and returns aList ofbyte values. It performs the following steps when called:

  1. LetelementSize be the Element Size value specified inTable 75 for Element Typetype.
  2. Letexecution be the[[CandidateExecution]] field of thesurrounding agent'sAgent Record.
  3. LeteventsRecord be theAgent Events Record ofexecution.[[EventsRecords]] whose[[AgentSignifier]] isAgentSignifier().
  4. IfisTypedArray istrue andIsNoTearConfiguration(type,order) istrue, letnoTear betrue; otherwise letnoTear befalse.
  5. LetrawValue be aList of lengthelementSize whose elements are nondeterministically chosenbyte values.
  6. NOTE: In implementations,rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of thememory model to describe observable behaviour of hardware with weak consistency.
  7. LetreadEvent beReadSharedMemory {[[Order]]:order,[[NoTear]]:noTear,[[Block]]:block,[[ByteIndex]]:byteIndex,[[ElementSize]]:elementSize }.
  8. AppendreadEvent toeventsRecord.[[EventList]].
  9. AppendChosen Value Record {[[Event]]:readEvent,[[ChosenValue]]:rawValue } toexecution.[[ChosenValues]].
  10. ReturnrawValue.

25.1.3.16 GetValueFromBuffer (arrayBuffer,byteIndex,type,isTypedArray,order [ ,isLittleEndian ] )

The abstract operation GetValueFromBuffer takes argumentsarrayBuffer (an ArrayBuffer or SharedArrayBuffer),byteIndex (a non-negativeinteger),type (aTypedArray element type),isTypedArray (a Boolean), andorder (seq-cst orunordered) and optional argumentisLittleEndian (a Boolean) and returns a Number or a BigInt. It performs the following steps when called:

  1. Assert:IsDetachedBuffer(arrayBuffer) isfalse.
  2. Assert: There are sufficient bytes inarrayBuffer starting atbyteIndex to represent a value oftype.
  3. Letblock bearrayBuffer.[[ArrayBufferData]].
  4. LetelementSize be the Element Size value specified inTable 75 for Element Typetype.
  5. IfIsSharedArrayBuffer(arrayBuffer) istrue, then
    1. Assert:block is aShared Data Block.
    2. LetrawValue beGetRawBytesFromSharedBlock(block,byteIndex,type,isTypedArray,order).
  6. Else,
    1. LetrawValue be aList whose elements are bytes fromblock at indices in theinterval frombyteIndex (inclusive) tobyteIndex +elementSize (exclusive).
  7. Assert: The number of elements inrawValue iselementSize.
  8. IfisLittleEndian is not present, setisLittleEndian to the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record.
  9. ReturnRawBytesToNumeric(type,rawValue,isLittleEndian).

25.1.3.17 NumericToRawBytes (type,value,isLittleEndian )

The abstract operation NumericToRawBytes takes argumentstype (aTypedArray element type),value (a Number or a BigInt), andisLittleEndian (a Boolean) and returns aList ofbyte values. It performs the following steps when called:

  1. Iftype isfloat16, then
    1. LetrawBytes be aList whose elements are the 2 bytes that are the result of convertingvalue toIEEE 754-2019 binary16 format using roundTiesToEven mode. The bytes are arranged in little endian order. Ifvalue isNaN,rawBytes may be set to any implementation chosenIEEE 754-2019 binary16 format NaN encoding. An implementation must always choose the same encoding for each implementation distinguishableNaN value.
  2. Else iftype isfloat32, then
    1. LetrawBytes be aList whose elements are the 4 bytes that are the result of convertingvalue toIEEE 754-2019 binary32 format using roundTiesToEven mode. The bytes are arranged in little endian order. Ifvalue isNaN,rawBytes may be set to any implementation chosenIEEE 754-2019 binary32 format NaN encoding. An implementation must always choose the same encoding for each implementation distinguishableNaN value.
  3. Else iftype isfloat64, then
    1. LetrawBytes be aList whose elements are the 8 bytes that are theIEEE 754-2019 binary64 format encoding ofvalue. The bytes are arranged in little endian order. Ifvalue isNaN,rawBytes may be set to any implementation chosenIEEE 754-2019 binary64 format NaN encoding. An implementation must always choose the same encoding for each implementation distinguishableNaN value.
  4. Else,
    1. Letn be the Element Size value specified inTable 75 for Element Typetype.
    2. LetconversionOperation be the abstract operation named in the Conversion Operation column inTable 75 for Element Typetype.
    3. LetintValue be(!conversionOperation(value)).
    4. IfintValue ≥ 0, then
      1. LetrawBytes be aList whose elements are then-byte binary encoding ofintValue. The bytes are ordered in little endian order.
    5. Else,
      1. LetrawBytes be aList whose elements are then-byte binary two's complement encoding ofintValue. The bytes are ordered in little endian order.
  5. IfisLittleEndian isfalse, reverse the order of the elements ofrawBytes.
  6. ReturnrawBytes.

25.1.3.18 SetValueInBuffer (arrayBuffer,byteIndex,type,value,isTypedArray,order [ ,isLittleEndian ] )

The abstract operation SetValueInBuffer takes argumentsarrayBuffer (an ArrayBuffer or SharedArrayBuffer),byteIndex (a non-negativeinteger),type (aTypedArray element type),value (a Number or a BigInt),isTypedArray (a Boolean), andorder (seq-cst,unordered, orinit) and optional argumentisLittleEndian (a Boolean) and returnsunused. It performs the following steps when called:

  1. Assert:IsDetachedBuffer(arrayBuffer) isfalse.
  2. Assert: There are sufficient bytes inarrayBuffer starting atbyteIndex to represent a value oftype.
  3. Assert:valueis a BigInt ifIsBigIntElementType(type) istrue; otherwise,valueis a Number.
  4. Letblock bearrayBuffer.[[ArrayBufferData]].
  5. LetelementSize be the Element Size value specified inTable 75 for Element Typetype.
  6. IfisLittleEndian is not present, setisLittleEndian to the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record.
  7. LetrawBytes beNumericToRawBytes(type,value,isLittleEndian).
  8. IfIsSharedArrayBuffer(arrayBuffer) istrue, then
    1. Letexecution be the[[CandidateExecution]] field of thesurrounding agent'sAgent Record.
    2. LeteventsRecord be theAgent Events Record ofexecution.[[EventsRecords]] whose[[AgentSignifier]] isAgentSignifier().
    3. IfisTypedArray istrue andIsNoTearConfiguration(type,order) istrue, letnoTear betrue; otherwise letnoTear befalse.
    4. AppendWriteSharedMemory {[[Order]]:order,[[NoTear]]:noTear,[[Block]]:block,[[ByteIndex]]:byteIndex,[[ElementSize]]:elementSize,[[Payload]]:rawBytes } toeventsRecord.[[EventList]].
  9. Else,
    1. Store the individual bytes ofrawBytes intoblock, starting atblock[byteIndex].
  10. Returnunused.

25.1.3.19 GetModifySetValueInBuffer (arrayBuffer,byteIndex,type,value,op )

The abstract operation GetModifySetValueInBuffer takes argumentsarrayBuffer (an ArrayBuffer or a SharedArrayBuffer),byteIndex (a non-negativeinteger),type (aTypedArray element type),value (a Number or a BigInt), andop (aread-modify-write modification function) and returns a Number or a BigInt. It performs the following steps when called:

  1. Assert:IsDetachedBuffer(arrayBuffer) isfalse.
  2. Assert: There are sufficient bytes inarrayBuffer starting atbyteIndex to represent a value oftype.
  3. Assert:valueis a BigInt ifIsBigIntElementType(type) istrue; otherwise,valueis a Number.
  4. Letblock bearrayBuffer.[[ArrayBufferData]].
  5. LetelementSize be the Element Size value specified inTable 75 for Element Typetype.
  6. LetisLittleEndian be the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record.
  7. LetrawBytes beNumericToRawBytes(type,value,isLittleEndian).
  8. IfIsSharedArrayBuffer(arrayBuffer) istrue, then
    1. Letexecution be the[[CandidateExecution]] field of thesurrounding agent'sAgent Record.
    2. LeteventsRecord be theAgent Events Record ofexecution.[[EventsRecords]] whose[[AgentSignifier]] isAgentSignifier().
    3. LetrawBytesRead be aList of lengthelementSize whose elements are nondeterministically chosenbyte values.
    4. NOTE: In implementations,rawBytesRead is the result of a load-link, of a load-exclusive, or of an operand of a read-modify-write instruction on the underlying hardware. The nondeterminism is a semantic prescription of thememory model to describe observable behaviour of hardware with weak consistency.
    5. LetrmwEvent beReadModifyWriteSharedMemory {[[Order]]:seq-cst,[[NoTear]]:true,[[Block]]:block,[[ByteIndex]]:byteIndex,[[ElementSize]]:elementSize,[[Payload]]:rawBytes,[[ModifyOp]]:op }.
    6. AppendrmwEvent toeventsRecord.[[EventList]].
    7. AppendChosen Value Record {[[Event]]:rmwEvent,[[ChosenValue]]:rawBytesRead } toexecution.[[ChosenValues]].
  9. Else,
    1. LetrawBytesRead be aList of lengthelementSize whose elements are the sequence ofelementSize bytes starting withblock[byteIndex].
    2. LetrawBytesModified beop(rawBytesRead,rawBytes).
    3. Store the individual bytes ofrawBytesModified intoblock, starting atblock[byteIndex].
  10. ReturnRawBytesToNumeric(type,rawBytesRead,isLittleEndian).

25.1.4 The ArrayBuffer Constructor

The ArrayBufferconstructor:

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

25.1.4.1 ArrayBuffer (length [ ,options ] )

This function performs the following steps when called:

  1. If NewTarget isundefined, throw aTypeError exception.
  2. LetbyteLength be ? ToIndex(length).
  3. LetrequestedMaxByteLength be ? GetArrayBufferMaxByteLengthOption(options).
  4. Return ? AllocateArrayBuffer(NewTarget,byteLength,requestedMaxByteLength).

25.1.5 Properties of the ArrayBuffer Constructor

The ArrayBufferconstructor:

25.1.5.1 ArrayBuffer.isView (arg )

This function performs the following steps when called:

  1. Ifargis not an Object, returnfalse.
  2. Ifarg has a[[ViewedArrayBuffer]] internal slot, returntrue.
  3. Returnfalse.

25.1.5.2 ArrayBuffer.prototype

The initial value ofArrayBuffer.prototype is theArrayBuffer prototype object.

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

25.1.5.3 get ArrayBuffer [ %Symbol.species% ]

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

  1. Return thethis value.

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

Note

ArrayBuffer.prototype.slice (start,end ) normally uses itsthis value'sconstructor to create a derived object. However, a subclassconstructor may over-ride that default behaviour for theArrayBuffer.prototype.slice (start,end ) method by redefining its%Symbol.species% property.

25.1.6 Properties of the ArrayBuffer Prototype Object

TheArrayBuffer prototype object:

  • is%ArrayBuffer.prototype%.
  • has a[[Prototype]] internal slot whose value is%Object.prototype%.
  • is anordinary object.
  • does not have an[[ArrayBufferData]] or[[ArrayBufferByteLength]] internal slot.

25.1.6.1 get ArrayBuffer.prototype.byteLength

ArrayBuffer.prototype.byteLength is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) istrue, throw aTypeError exception.
  4. IfIsDetachedBuffer(O) istrue, return+0𝔽.
  5. Letlength beO.[[ArrayBufferByteLength]].
  6. Return𝔽(length).

25.1.6.2 ArrayBuffer.prototype.constructor

The initial value ofArrayBuffer.prototype.constructor is%ArrayBuffer%.

25.1.6.3 get ArrayBuffer.prototype.detached

ArrayBuffer.prototype.detached is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) istrue, throw aTypeError exception.
  4. ReturnIsDetachedBuffer(O).

25.1.6.4 get ArrayBuffer.prototype.maxByteLength

ArrayBuffer.prototype.maxByteLength is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) istrue, throw aTypeError exception.
  4. IfIsDetachedBuffer(O) istrue, return+0𝔽.
  5. IfIsFixedLengthArrayBuffer(O) istrue, then
    1. Letlength beO.[[ArrayBufferByteLength]].
  6. Else,
    1. Letlength beO.[[ArrayBufferMaxByteLength]].
  7. Return𝔽(length).

25.1.6.5 get ArrayBuffer.prototype.resizable

ArrayBuffer.prototype.resizable is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) istrue, throw aTypeError exception.
  4. IfIsFixedLengthArrayBuffer(O) isfalse, returntrue; otherwise returnfalse.

25.1.6.6 ArrayBuffer.prototype.resize (newLength )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferMaxByteLength]]).
  3. IfIsSharedArrayBuffer(O) istrue, throw aTypeError exception.
  4. LetnewByteLength be ? ToIndex(newLength).
  5. IfIsDetachedBuffer(O) istrue, throw aTypeError exception.
  6. IfnewByteLength >O.[[ArrayBufferMaxByteLength]], throw aRangeError exception.
  7. LethostHandled be ? HostResizeArrayBuffer(O,newByteLength).
  8. IfhostHandled ishandled, returnundefined.
  9. LetoldBlock beO.[[ArrayBufferData]].
  10. LetnewBlock be ? CreateByteDataBlock(newByteLength).
  11. LetcopyLength bemin(newByteLength,O.[[ArrayBufferByteLength]]).
  12. PerformCopyDataBlockBytes(newBlock, 0,oldBlock, 0,copyLength).
  13. NOTE: Neither creation of the newData Block nor copying from the oldData Block are observable. Implementations may implement this method as in-place growth or shrinkage.
  14. SetO.[[ArrayBufferData]] tonewBlock.
  15. SetO.[[ArrayBufferByteLength]] tonewByteLength.
  16. Returnundefined.

25.1.6.7 ArrayBuffer.prototype.slice (start,end )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) istrue, throw aTypeError exception.
  4. IfIsDetachedBuffer(O) istrue, throw aTypeError exception.
  5. Letlen beO.[[ArrayBufferByteLength]].
  6. LetrelativeStart be ? ToIntegerOrInfinity(start).
  7. IfrelativeStart = -∞, letfirst be 0.
  8. Else ifrelativeStart < 0, letfirst bemax(len +relativeStart, 0).
  9. Else, letfirst bemin(relativeStart,len).
  10. Ifend isundefined, letrelativeEnd belen; else letrelativeEnd be ? ToIntegerOrInfinity(end).
  11. IfrelativeEnd = -∞, letfinal be 0.
  12. Else ifrelativeEnd < 0, letfinal bemax(len +relativeEnd, 0).
  13. Else, letfinal bemin(relativeEnd,len).
  14. LetnewLen bemax(final -first, 0).
  15. Letctor be ? SpeciesConstructor(O,%ArrayBuffer%).
  16. Letnew be ? Construct(ctor, «𝔽(newLen) »).
  17. Perform ? RequireInternalSlot(new,[[ArrayBufferData]]).
  18. IfIsSharedArrayBuffer(new) istrue, throw aTypeError exception.
  19. IfIsDetachedBuffer(new) istrue, throw aTypeError exception.
  20. IfSameValue(new,O) istrue, throw aTypeError exception.
  21. Ifnew.[[ArrayBufferByteLength]] <newLen, throw aTypeError exception.
  22. NOTE: Side-effects of the above steps may have detached or resizedO.
  23. IfIsDetachedBuffer(O) istrue, throw aTypeError exception.
  24. LetfromBuf beO.[[ArrayBufferData]].
  25. LettoBuf benew.[[ArrayBufferData]].
  26. LetcurrentLen beO.[[ArrayBufferByteLength]].
  27. Iffirst <currentLen, then
    1. Letcount bemin(newLen,currentLen -first).
    2. PerformCopyDataBlockBytes(toBuf, 0,fromBuf,first,count).
  28. Returnnew.

25.1.6.8 ArrayBuffer.prototype.transfer ( [newLength ] )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. Return ? ArrayBufferCopyAndDetach(O,newLength,preserve-resizability).

25.1.6.9 ArrayBuffer.prototype.transferToFixedLength ( [newLength ] )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. Return ? ArrayBufferCopyAndDetach(O,newLength,fixed-length).

25.1.6.10 ArrayBuffer.prototype [ %Symbol.toStringTag% ]

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

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

25.1.7 Properties of ArrayBuffer Instances

ArrayBuffer instances inherit properties from theArrayBuffer prototype object. ArrayBuffer instances each have an[[ArrayBufferData]] internal slot, an[[ArrayBufferByteLength]] internal slot, and an[[ArrayBufferDetachKey]] internal slot. ArrayBuffer instances which are resizable each have an[[ArrayBufferMaxByteLength]] internal slot.

ArrayBuffer instances whose[[ArrayBufferData]] isnull are considered to be detached and all operators to access or modify data contained in the ArrayBuffer instance will fail.

ArrayBuffer instances whose[[ArrayBufferDetachKey]] is set to a value other thanundefined need to have allDetachArrayBuffer calls passing that same "detach key" as an argument, otherwise a TypeError will result. This internal slot is only ever set by certain embedding environments, not by algorithms in this specification.

25.1.8 Resizable ArrayBuffer Guidelines

Note 1

The following are guidelines for ECMAScript programmers working withresizable ArrayBuffer.

We recommend that programs be tested in their deployment environments where possible. The amount of available physical memory differs greatly between hardware devices. Similarly, virtual memory subsystems also differ greatly between hardware devices as well as operating systems. An application that runs without out-of-memory errors on a 64-bit desktop web browser could run out of memory on a 32-bit mobile web browser.

When choosing a value for the"maxByteLength" option forresizable ArrayBuffer, we recommend that the smallest possible size for the application be chosen. We recommend that"maxByteLength" does not exceed 1,073,741,824 (230 bytes or 1GiB).

Please note that successfully constructing aresizable ArrayBuffer for a particular maximum size does not guarantee that future resizes will succeed.

Note 2

The following are guidelines for ECMAScript implementers implementingresizable ArrayBuffer.

Resizable ArrayBuffer can be implemented as copying upon resize, as in-place growth via reserving virtual memory up front, or as a combination of both for different values of theconstructor's"maxByteLength" option.

If ahost is multi-tenanted (i.e. it runs many ECMAScript applications simultaneously), such as a web browser, and its implementations choose to implement in-place growth by reserving virtual memory, we recommend that both 32-bit and 64-bit implementations throw for values of"maxByteLength" ≥ 1GiB to 1.5GiB. This is to reduce the likelihood a single application can exhaust the virtual memory address space and to reduce interoperability risk.

If ahost does not have virtual memory, such as those running on embedded devices without an MMU, or if ahost only implements resizing by copying, it may accept anyNumber value for the"maxByteLength" option. However, we recommend aRangeError be thrown if a memory block of the requested size can never be allocated. For example, if the requested size is greater than the maximum amount of usable memory on the device.

25.2 SharedArrayBuffer Objects

25.2.1 Fixed-length and Growable SharedArrayBuffer Objects

Afixed-length SharedArrayBuffer is a SharedArrayBuffer whose byte length cannot change after creation.

Agrowable SharedArrayBuffer is a SharedArrayBuffer whose byte length may increase after creation via calls toSharedArrayBuffer.prototype.grow (newLength ).

The kind of SharedArrayBuffer object that is created depends on the arguments passed toSharedArrayBuffer (length [ ,options ] ).

25.2.2 Abstract Operations for SharedArrayBuffer Objects

25.2.2.1 AllocateSharedArrayBuffer (constructor,byteLength [ ,maxByteLength ] )

The abstract operation AllocateSharedArrayBuffer takes argumentsconstructor (aconstructor) andbyteLength (a non-negativeinteger) and optional argumentmaxByteLength (a non-negativeinteger orempty) and returns either anormal completion containing a SharedArrayBuffer or athrow completion. It is used to create a SharedArrayBuffer. It performs the following steps when called:

  1. Letslots be «[[ArrayBufferData]] ».
  2. IfmaxByteLength is present andmaxByteLength is notempty, letallocatingGrowableBuffer betrue; otherwise letallocatingGrowableBuffer befalse.
  3. IfallocatingGrowableBuffer istrue, then
    1. IfbyteLength >maxByteLength, throw aRangeError exception.
    2. Append[[ArrayBufferByteLengthData]] and[[ArrayBufferMaxByteLength]] toslots.
  4. Else,
    1. Append[[ArrayBufferByteLength]] toslots.
  5. Letobj be ? OrdinaryCreateFromConstructor(constructor,"%SharedArrayBuffer.prototype%",slots).
  6. IfallocatingGrowableBuffer istrue, letallocLength bemaxByteLength; otherwise letallocLength bebyteLength.
  7. Letblock be ? CreateSharedByteDataBlock(allocLength).
  8. Setobj.[[ArrayBufferData]] toblock.
  9. IfallocatingGrowableBuffer istrue, then
    1. Assert:byteLengthmaxByteLength.
    2. LetbyteLengthBlock be ? CreateSharedByteDataBlock(8).
    3. PerformSetValueInBuffer(byteLengthBlock, 0,biguint64,(byteLength),true,seq-cst).
    4. Setobj.[[ArrayBufferByteLengthData]] tobyteLengthBlock.
    5. Setobj.[[ArrayBufferMaxByteLength]] tomaxByteLength.
  10. Else,
    1. Setobj.[[ArrayBufferByteLength]] tobyteLength.
  11. Returnobj.

25.2.2.2 IsSharedArrayBuffer (obj )

The abstract operation IsSharedArrayBuffer takes argumentobj (an ArrayBuffer or a SharedArrayBuffer) and returns a Boolean. It tests whether an object is an ArrayBuffer, a SharedArrayBuffer, or a subtype of either. It performs the following steps when called:

  1. LetbufferData beobj.[[ArrayBufferData]].
  2. IfbufferData isnull, returnfalse.
  3. IfbufferData is aData Block, returnfalse.
  4. Assert:bufferData is aShared Data Block.
  5. Returntrue.

25.2.2.3 HostGrowSharedArrayBuffer (buffer,newByteLength )

Thehost-defined abstract operation HostGrowSharedArrayBuffer takes argumentsbuffer (a SharedArrayBuffer) andnewByteLength (a non-negativeinteger) and returns either anormal completion containing eitherhandled orunhandled, or athrow completion. It gives thehost an opportunity to performimplementation-defined growing ofbuffer. If thehost chooses not to handle growing ofbuffer, it may returnunhandled for the default behaviour.

The implementation of HostGrowSharedArrayBuffer must conform to the following requirements:

  • If the abstract operation does not complete normally withunhandled, andnewByteLength < the current byte length of thebuffer ornewByteLength >buffer.[[ArrayBufferMaxByteLength]], throw aRangeError exception.
  • LetisLittleEndian be the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record. If the abstract operation completes normally withhandled, aWriteSharedMemory orReadModifyWriteSharedMemory event whose[[Order]] isseq-cst,[[Payload]] isNumericToRawBytes(biguint64,newByteLength,isLittleEndian),[[Block]] isbuffer.[[ArrayBufferByteLengthData]],[[ByteIndex]] is 0, and[[ElementSize]] is 8 is added to thesurrounding agent'scandidate execution such that racing calls toSharedArrayBuffer.prototype.grow are not "lost", i.e. silently do nothing.
Note

The second requirement above is intentionally vague about how or when the current byte length ofbuffer is read. Because the byte length must be updated via an atomic read-modify-write operation on the underlying hardware, architectures that use load-link/store-conditional or load-exclusive/store-exclusive instruction pairs may wish to keep the paired instructions close in the instruction stream. As such, SharedArrayBuffer.prototype.grow itself does not perform bounds checking onnewByteLength before calling HostGrowSharedArrayBuffer, nor is there a requirement on when the current byte length is read.

This is in contrast withHostResizeArrayBuffer, which is guaranteed that the value ofnewByteLength is ≥ 0 and ≤buffer.[[ArrayBufferMaxByteLength]].

The default implementation of HostGrowSharedArrayBuffer is to returnNormalCompletion(unhandled).

25.2.3 The SharedArrayBuffer Constructor

The SharedArrayBufferconstructor:

  • is%SharedArrayBuffer%.
  • is the initial value of the"SharedArrayBuffer" property of theglobal object, if that property is present (see below).
  • creates and initializes a new SharedArrayBuffer when called as aconstructor.
  • is not intended to be called as a function and will throw an exception when called in that manner.
  • may be used as the value of anextends clause of a class definition. Subclassconstructors that intend to inherit the specified SharedArrayBuffer behaviour must include asuper call to the SharedArrayBufferconstructor to create and initialize subclass instances with the internal state necessary to support theSharedArrayBuffer.prototype built-in methods.

Whenever ahost does not provide concurrent access to SharedArrayBuffers it may omit the"SharedArrayBuffer" property of theglobal object.

Note

Unlike anArrayBuffer, aSharedArrayBuffer cannot become detached, and its internal[[ArrayBufferData]] slot is nevernull.

25.2.3.1 SharedArrayBuffer (length [ ,options ] )

This function performs the following steps when called:

  1. If NewTarget isundefined, throw aTypeError exception.
  2. LetbyteLength be ? ToIndex(length).
  3. LetrequestedMaxByteLength be ? GetArrayBufferMaxByteLengthOption(options).
  4. Return ? AllocateSharedArrayBuffer(NewTarget,byteLength,requestedMaxByteLength).

25.2.4 Properties of the SharedArrayBuffer Constructor

The SharedArrayBufferconstructor:

25.2.4.1 SharedArrayBuffer.prototype

The initial value ofSharedArrayBuffer.prototype is theSharedArrayBuffer prototype object.

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

25.2.4.2 get SharedArrayBuffer [ %Symbol.species% ]

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

  1. Return thethis value.

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

25.2.5 Properties of the SharedArrayBuffer Prototype Object

TheSharedArrayBuffer prototype object:

  • is%SharedArrayBuffer.prototype%.
  • has a[[Prototype]] internal slot whose value is%Object.prototype%.
  • is anordinary object.
  • does not have an[[ArrayBufferData]] or[[ArrayBufferByteLength]] internal slot.

25.2.5.1 get SharedArrayBuffer.prototype.byteLength

SharedArrayBuffer.prototype.byteLength is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) isfalse, throw aTypeError exception.
  4. Letlength beArrayBufferByteLength(O,seq-cst).
  5. Return𝔽(length).

25.2.5.2 SharedArrayBuffer.prototype.constructor

The initial value ofSharedArrayBuffer.prototype.constructor is%SharedArrayBuffer%.

25.2.5.3 SharedArrayBuffer.prototype.grow (newLength )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferMaxByteLength]]).
  3. IfIsSharedArrayBuffer(O) isfalse, throw aTypeError exception.
  4. LetnewByteLength be ? ToIndex(newLength).
  5. LethostHandled be ? HostGrowSharedArrayBuffer(O,newByteLength).
  6. IfhostHandled ishandled, returnundefined.
  7. LetisLittleEndian be the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record.
  8. LetbyteLengthBlock beO.[[ArrayBufferByteLengthData]].
  9. LetcurrentByteLengthRawBytes beGetRawBytesFromSharedBlock(byteLengthBlock, 0,biguint64,true,seq-cst).
  10. LetnewByteLengthRawBytes beNumericToRawBytes(biguint64,(newByteLength),isLittleEndian).
  11. Repeat,
    1. NOTE: This is a compare-and-exchange loop to ensure that parallel, racing grows of the same buffer are totally ordered, are not lost, and do not silently do nothing. The loop exits if it was able to attempt to grow uncontended.
    2. LetcurrentByteLength be(RawBytesToNumeric(biguint64,currentByteLengthRawBytes,isLittleEndian)).
    3. IfnewByteLength =currentByteLength, returnundefined.
    4. IfnewByteLength <currentByteLength ornewByteLength >O.[[ArrayBufferMaxByteLength]], throw aRangeError exception.
    5. LetbyteLengthDelta benewByteLength -currentByteLength.
    6. If it is impossible to create a newShared Data Block value consisting ofbyteLengthDelta bytes, throw aRangeError exception.
    7. NOTE: No newShared Data Block is constructed and used here. The observable behaviour of growable SharedArrayBuffers is specified by allocating amax-sizedShared Data Block at construction time, and this step captures the requirement that implementations that run out of memory must throw aRangeError.
    8. LetreadByteLengthRawBytes beAtomicCompareExchangeInSharedBlock(byteLengthBlock, 0, 8,currentByteLengthRawBytes,newByteLengthRawBytes).
    9. IfByteListEqual(readByteLengthRawBytes,currentByteLengthRawBytes) istrue, returnundefined.
    10. SetcurrentByteLengthRawBytes toreadByteLengthRawBytes.
Note

Spurious failures of the compare-exchange to update the length are prohibited. If the bounds checking for the new length passes and the implementation is not out of memory, aReadModifyWriteSharedMemory event (i.e. a successful compare-exchange) is always added into thecandidate execution.

Parallel calls to SharedArrayBuffer.prototype.grow are totally ordered. For example, consider two racing calls:sab.grow(10) andsab.grow(20). One of the two calls is guaranteed to win the race. The call tosab.grow(10) will never shrinksab even ifsab.grow(20) happened first; in that case it will instead throw a RangeError.

25.2.5.4 get SharedArrayBuffer.prototype.growable

SharedArrayBuffer.prototype.growable is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) isfalse, throw aTypeError exception.
  4. IfIsFixedLengthArrayBuffer(O) isfalse, returntrue; otherwise returnfalse.

25.2.5.5 get SharedArrayBuffer.prototype.maxByteLength

SharedArrayBuffer.prototype.maxByteLength is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) isfalse, throw aTypeError exception.
  4. IfIsFixedLengthArrayBuffer(O) istrue, then
    1. Letlength beO.[[ArrayBufferByteLength]].
  5. Else,
    1. Letlength beO.[[ArrayBufferMaxByteLength]].
  6. Return𝔽(length).

25.2.5.6 SharedArrayBuffer.prototype.slice (start,end )

This method performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[ArrayBufferData]]).
  3. IfIsSharedArrayBuffer(O) isfalse, throw aTypeError exception.
  4. Letlen beArrayBufferByteLength(O,seq-cst).
  5. LetrelativeStart be ? ToIntegerOrInfinity(start).
  6. IfrelativeStart = -∞, letfirst be 0.
  7. Else ifrelativeStart < 0, letfirst bemax(len +relativeStart, 0).
  8. Else, letfirst bemin(relativeStart,len).
  9. Ifend isundefined, letrelativeEnd belen; else letrelativeEnd be ? ToIntegerOrInfinity(end).
  10. IfrelativeEnd = -∞, letfinal be 0.
  11. Else ifrelativeEnd < 0, letfinal bemax(len +relativeEnd, 0).
  12. Else, letfinal bemin(relativeEnd,len).
  13. LetnewLen bemax(final -first, 0).
  14. Letctor be ? SpeciesConstructor(O,%SharedArrayBuffer%).
  15. Letnew be ? Construct(ctor, «𝔽(newLen) »).
  16. Perform ? RequireInternalSlot(new,[[ArrayBufferData]]).
  17. IfIsSharedArrayBuffer(new) isfalse, throw aTypeError exception.
  18. Ifnew.[[ArrayBufferData]] isO.[[ArrayBufferData]], throw aTypeError exception.
  19. IfArrayBufferByteLength(new,seq-cst) <newLen, throw aTypeError exception.
  20. LetfromBuf beO.[[ArrayBufferData]].
  21. LettoBuf benew.[[ArrayBufferData]].
  22. PerformCopyDataBlockBytes(toBuf, 0,fromBuf,first,newLen).
  23. Returnnew.

25.2.5.7 SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]

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

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

25.2.6 Properties of SharedArrayBuffer Instances

SharedArrayBuffer instances inherit properties from theSharedArrayBuffer prototype object. SharedArrayBuffer instances each have an[[ArrayBufferData]] internal slot. SharedArrayBuffer instances which are not growable each have an[[ArrayBufferByteLength]] internal slot. SharedArrayBuffer instances which are growable each have an[[ArrayBufferByteLengthData]] internal slot and an[[ArrayBufferMaxByteLength]] internal slot.

Note

SharedArrayBuffer instances, unlike ArrayBuffer instances, are never detached.

25.2.7 Growable SharedArrayBuffer Guidelines

Note 1

The following are guidelines for ECMAScript programmers working withgrowable SharedArrayBuffer.

We recommend that programs be tested in their deployment environments where possible. The amount of available physical memory differ greatly between hardware devices. Similarly, virtual memory subsystems also differ greatly between hardware devices as well as operating systems. An application that runs without out-of-memory errors on a 64-bit desktop web browser could run out of memory on a 32-bit mobile web browser.

When choosing a value for the"maxByteLength" option forgrowable SharedArrayBuffer, we recommend that the smallest possible size for the application be chosen. We recommend that"maxByteLength" does not exceed 1073741824, or 1GiB.

Please note that successfully constructing agrowable SharedArrayBuffer for a particular maximum size does not guarantee that future grows will succeed.

Not all loads of agrowable SharedArrayBuffer's length are synchronizingseq-cst loads. Loads of the length that are for bounds-checking of aninteger-indexed property access, e.g.u8[idx], are not synchronizing. In general, in the absence of explicit synchronization, one property access being in-bound does not imply a subsequent property access in the sameagent is also in-bound. In contrast, explicit loads of the length via thelength andbyteLength getters on SharedArrayBuffer,%TypedArray%.prototype, and DataView.prototype are synchronizing. Loads of the length that are performed by built-in methods to check if aTypedArray is entirely out-of-bounds are also synchronizing.

Note 2

The following are guidelines for ECMAScript implementers implementinggrowable SharedArrayBuffer.

We recommendgrowable SharedArrayBuffer be implemented as in-place growth via reserving virtual memory up front.

Because grow operations can happen in parallel with memory accesses on agrowable SharedArrayBuffer, the constraints of thememory model require that even unordered accesses do not "tear" (bits of their values will not be mixed). In practice, this means the underlying data block of agrowable SharedArrayBuffer cannot be grown by being copied without stopping the world. We do not recommend stopping the world as an implementation strategy because it introduces a serialization point and is slow.

Grown memory must appear zeroed from the moment of its creation, including to any racy accesses in parallel. This can be accomplished via zero-filled-on-demand virtual memory pages, or careful synchronization if manually zeroing memory.

Integer-indexed property access onTypedArray views of growable SharedArrayBuffers is intended to be optimizable similarly to access onTypedArray views of non-growable SharedArrayBuffers, becauseinteger-indexed property loads on are not synchronizing on the underlying buffer's length (see programmer guidelines above). For example, bounds checks for property accesses may still be hoisted out of loops.

In practice it is difficult to implementgrowable SharedArrayBuffer by copying onhosts that do not have virtual memory, such as those running on embedded devices without an MMU. Memory usage behaviour of growable SharedArrayBuffers on suchhosts may significantly differ from that ofhosts with virtual memory. Suchhosts should clearly communicate memory usage expectations to users.

25.3 DataView Objects

25.3.1 Abstract Operations For DataView Objects

25.3.1.1 DataView With Buffer Witness Records

ADataView With Buffer Witness Record is aRecord value used to encapsulate a DataView along with a cached byte length of the viewed buffer. It is used to help ensure there is a single shared memory read event of the byte length data block when the viewed buffer is a growable SharedArrayBuffers.

DataView With Buffer Witness Records have the fields listed inTable 77.

Table 77:DataView With Buffer Witness Record Fields
Field Name Value Meaning
[[Object]] a DataView The DataView object whose buffer's byte length is loaded.
[[CachedBufferByteLength]] a non-negativeinteger ordetached The byte length of the object's[[ViewedArrayBuffer]] when theRecord was created.

25.3.1.2 MakeDataViewWithBufferWitnessRecord (obj,order )

The abstract operation MakeDataViewWithBufferWitnessRecord takes argumentsobj (a DataView) andorder (seq-cst orunordered) and returns aDataView With Buffer Witness Record. It performs the following steps when called:

  1. Letbuffer beobj.[[ViewedArrayBuffer]].
  2. IfIsDetachedBuffer(buffer) istrue, then
    1. LetbyteLength bedetached.
  3. Else,
    1. LetbyteLength beArrayBufferByteLength(buffer,order).
  4. Return theDataView With Buffer Witness Record {[[Object]]:obj,[[CachedBufferByteLength]]:byteLength }.

25.3.1.3 GetViewByteLength (viewRecord )

The abstract operation GetViewByteLength takes argumentviewRecord (aDataView With Buffer Witness Record) and returns a non-negativeinteger. It performs the following steps when called:

  1. Assert:IsViewOutOfBounds(viewRecord) isfalse.
  2. Letview beviewRecord.[[Object]].
  3. Ifview.[[ByteLength]] is notauto, returnview.[[ByteLength]].
  4. Assert:IsFixedLengthArrayBuffer(view.[[ViewedArrayBuffer]]) isfalse.
  5. LetbyteOffset beview.[[ByteOffset]].
  6. LetbyteLength beviewRecord.[[CachedBufferByteLength]].
  7. Assert:byteLength is notdetached.
  8. ReturnbyteLength -byteOffset.

25.3.1.4 IsViewOutOfBounds (viewRecord )

The abstract operation IsViewOutOfBounds takes argumentviewRecord (aDataView With Buffer Witness Record) and returns a Boolean. It performs the following steps when called:

  1. Letview beviewRecord.[[Object]].
  2. LetbufferByteLength beviewRecord.[[CachedBufferByteLength]].
  3. Assert:IsDetachedBuffer(view.[[ViewedArrayBuffer]]) istrue if and only ifbufferByteLength isdetached.
  4. IfbufferByteLength isdetached, returntrue.
  5. LetbyteOffsetStart beview.[[ByteOffset]].
  6. Ifview.[[ByteLength]] isauto, then
    1. LetbyteOffsetEnd bebufferByteLength.
  7. Else,
    1. LetbyteOffsetEnd bebyteOffsetStart +view.[[ByteLength]].
  8. IfbyteOffsetStart >bufferByteLength orbyteOffsetEnd >bufferByteLength, returntrue.
  9. NOTE: 0-length DataViews are not considered out-of-bounds.
  10. Returnfalse.

25.3.1.5 GetViewValue (view,requestIndex,isLittleEndian,type )

The abstract operation GetViewValue takes argumentsview (anECMAScript language value),requestIndex (anECMAScript language value),isLittleEndian (anECMAScript language value), andtype (aTypedArray element type) and returns either anormal completion containing either a Number or a BigInt, or athrow completion. It is used by functions on DataView instances to retrieve values from the view's buffer. It performs the following steps when called:

  1. Perform ? RequireInternalSlot(view,[[DataView]]).
  2. Assert:view has a[[ViewedArrayBuffer]] internal slot.
  3. LetgetIndex be ? ToIndex(requestIndex).
  4. SetisLittleEndian toToBoolean(isLittleEndian).
  5. LetviewOffset beview.[[ByteOffset]].
  6. LetviewRecord beMakeDataViewWithBufferWitnessRecord(view,unordered).
  7. NOTE: Bounds checking is not a synchronizing operation whenview's backing buffer is agrowable SharedArrayBuffer.
  8. IfIsViewOutOfBounds(viewRecord) istrue, throw aTypeError exception.
  9. LetviewSize beGetViewByteLength(viewRecord).
  10. LetelementSize be the Element Size value specified inTable 75 for Element Typetype.
  11. IfgetIndex +elementSize >viewSize, throw aRangeError exception.
  12. LetbufferIndex begetIndex +viewOffset.
  13. ReturnGetValueFromBuffer(view.[[ViewedArrayBuffer]],bufferIndex,type,false,unordered,isLittleEndian).

25.3.1.6 SetViewValue (view,requestIndex,isLittleEndian,type,value )

The abstract operation SetViewValue takes argumentsview (anECMAScript language value),requestIndex (anECMAScript language value),isLittleEndian (anECMAScript language value),type (aTypedArray element type), andvalue (anECMAScript language value) and returns either anormal completion containingundefined or athrow completion. It is used by functions on DataView instances to store values into the view's buffer. It performs the following steps when called:

  1. Perform ? RequireInternalSlot(view,[[DataView]]).
  2. Assert:view has a[[ViewedArrayBuffer]] internal slot.
  3. LetgetIndex be ? ToIndex(requestIndex).
  4. IfIsBigIntElementType(type) istrue, letnumberValue be ? ToBigInt(value).
  5. Otherwise, letnumberValue be ? ToNumber(value).
  6. SetisLittleEndian toToBoolean(isLittleEndian).
  7. LetviewOffset beview.[[ByteOffset]].
  8. LetviewRecord beMakeDataViewWithBufferWitnessRecord(view,unordered).
  9. NOTE: Bounds checking is not a synchronizing operation whenview's backing buffer is agrowable SharedArrayBuffer.
  10. IfIsViewOutOfBounds(viewRecord) istrue, throw aTypeError exception.
  11. LetviewSize beGetViewByteLength(viewRecord).
  12. LetelementSize be the Element Size value specified inTable 75 for Element Typetype.
  13. IfgetIndex +elementSize >viewSize, throw aRangeError exception.
  14. LetbufferIndex begetIndex +viewOffset.
  15. PerformSetValueInBuffer(view.[[ViewedArrayBuffer]],bufferIndex,type,numberValue,false,unordered,isLittleEndian).
  16. Returnundefined.

25.3.2 The DataView Constructor

The DataViewconstructor:

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

25.3.2.1 DataView (buffer [ ,byteOffset [ ,byteLength ] ] )

This function performs the following steps when called:

  1. If NewTarget isundefined, throw aTypeError exception.
  2. Perform ? RequireInternalSlot(buffer,[[ArrayBufferData]]).
  3. Letoffset be ? ToIndex(byteOffset).
  4. IfIsDetachedBuffer(buffer) istrue, throw aTypeError exception.
  5. LetbufferByteLength beArrayBufferByteLength(buffer,seq-cst).
  6. Ifoffset >bufferByteLength, throw aRangeError exception.
  7. LetbufferIsFixedLength beIsFixedLengthArrayBuffer(buffer).
  8. IfbyteLength isundefined, then
    1. IfbufferIsFixedLength istrue, then
      1. LetviewByteLength bebufferByteLength -offset.
    2. Else,
      1. LetviewByteLength beauto.
  9. Else,
    1. LetviewByteLength be ? ToIndex(byteLength).
    2. Ifoffset +viewByteLength >bufferByteLength, throw aRangeError exception.
  10. LetO be ? OrdinaryCreateFromConstructor(NewTarget,"%DataView.prototype%", «[[DataView]],[[ViewedArrayBuffer]],[[ByteLength]],[[ByteOffset]] »).
  11. IfIsDetachedBuffer(buffer) istrue, throw aTypeError exception.
  12. SetbufferByteLength toArrayBufferByteLength(buffer,seq-cst).
  13. Ifoffset >bufferByteLength, throw aRangeError exception.
  14. IfbyteLength is notundefined, then
    1. Ifoffset +viewByteLength >bufferByteLength, throw aRangeError exception.
  15. SetO.[[ViewedArrayBuffer]] tobuffer.
  16. SetO.[[ByteLength]] toviewByteLength.
  17. SetO.[[ByteOffset]] tooffset.
  18. ReturnO.

25.3.3 Properties of the DataView Constructor

The DataViewconstructor:

25.3.3.1 DataView.prototype

The initial value ofDataView.prototype is theDataView prototype object.

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

25.3.4 Properties of the DataView Prototype Object

TheDataView prototype object:

  • is%DataView.prototype%.
  • has a[[Prototype]] internal slot whose value is%Object.prototype%.
  • is anordinary object.
  • does not have a[[DataView]],[[ViewedArrayBuffer]],[[ByteLength]], or[[ByteOffset]] internal slot.

25.3.4.1 get DataView.prototype.buffer

DataView.prototype.buffer is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[DataView]]).
  3. Assert:O has a[[ViewedArrayBuffer]] internal slot.
  4. Letbuffer beO.[[ViewedArrayBuffer]].
  5. Returnbuffer.

25.3.4.2 get DataView.prototype.byteLength

DataView.prototype.byteLength is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[DataView]]).
  3. Assert:O has a[[ViewedArrayBuffer]] internal slot.
  4. LetviewRecord beMakeDataViewWithBufferWitnessRecord(O,seq-cst).
  5. IfIsViewOutOfBounds(viewRecord) istrue, throw aTypeError exception.
  6. Letsize beGetViewByteLength(viewRecord).
  7. Return𝔽(size).

25.3.4.3 get DataView.prototype.byteOffset

DataView.prototype.byteOffset is anaccessor property whose set accessor function isundefined. Its get accessor function performs the following steps when called:

  1. LetO be thethis value.
  2. Perform ? RequireInternalSlot(O,[[DataView]]).
  3. Assert:O has a[[ViewedArrayBuffer]] internal slot.
  4. LetviewRecord beMakeDataViewWithBufferWitnessRecord(O,seq-cst).
  5. IfIsViewOutOfBounds(viewRecord) istrue, throw aTypeError exception.
  6. Letoffset beO.[[ByteOffset]].
  7. Return𝔽(offset).

25.3.4.4 DataView.prototype.constructor

The initial value ofDataView.prototype.constructor is%DataView%.

25.3.4.5 DataView.prototype.getBigInt64 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. Return ? GetViewValue(view,byteOffset,littleEndian,bigint64).

25.3.4.6 DataView.prototype.getBigUint64 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. Return ? GetViewValue(view,byteOffset,littleEndian,biguint64).

25.3.4.7 DataView.prototype.getFloat16 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? GetViewValue(view,byteOffset,littleEndian,float16).

25.3.4.8 DataView.prototype.getFloat32 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? GetViewValue(view,byteOffset,littleEndian,float32).

25.3.4.9 DataView.prototype.getFloat64 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? GetViewValue(view,byteOffset,littleEndian,float64).

25.3.4.10 DataView.prototype.getInt8 (byteOffset )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. Return ? GetViewValue(view,byteOffset,true,int8).

25.3.4.11 DataView.prototype.getInt16 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? GetViewValue(view,byteOffset,littleEndian,int16).

25.3.4.12 DataView.prototype.getInt32 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? GetViewValue(view,byteOffset,littleEndian,int32).

25.3.4.13 DataView.prototype.getUint8 (byteOffset )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. Return ? GetViewValue(view,byteOffset,true,uint8).

25.3.4.14 DataView.prototype.getUint16 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? GetViewValue(view,byteOffset,littleEndian,uint16).

25.3.4.15 DataView.prototype.getUint32 (byteOffset [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? GetViewValue(view,byteOffset,littleEndian,uint32).

25.3.4.16 DataView.prototype.setBigInt64 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. Return ? SetViewValue(view,byteOffset,littleEndian,bigint64,value).

25.3.4.17 DataView.prototype.setBigUint64 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. Return ? SetViewValue(view,byteOffset,littleEndian,biguint64,value).

25.3.4.18 DataView.prototype.setFloat16 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? SetViewValue(view,byteOffset,littleEndian,float16,value).

25.3.4.19 DataView.prototype.setFloat32 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? SetViewValue(view,byteOffset,littleEndian,float32,value).

25.3.4.20 DataView.prototype.setFloat64 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? SetViewValue(view,byteOffset,littleEndian,float64,value).

25.3.4.21 DataView.prototype.setInt8 (byteOffset,value )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. Return ? SetViewValue(view,byteOffset,true,int8,value).

25.3.4.22 DataView.prototype.setInt16 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? SetViewValue(view,byteOffset,littleEndian,int16,value).

25.3.4.23 DataView.prototype.setInt32 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? SetViewValue(view,byteOffset,littleEndian,int32,value).

25.3.4.24 DataView.prototype.setUint8 (byteOffset,value )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. Return ? SetViewValue(view,byteOffset,true,uint8,value).

25.3.4.25 DataView.prototype.setUint16 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? SetViewValue(view,byteOffset,littleEndian,uint16,value).

25.3.4.26 DataView.prototype.setUint32 (byteOffset,value [ ,littleEndian ] )

This method performs the following steps when called:

  1. Letview be thethis value.
  2. IflittleEndian is not present, setlittleEndian tofalse.
  3. Return ? SetViewValue(view,byteOffset,littleEndian,uint32,value).

25.3.4.27 DataView.prototype [ %Symbol.toStringTag% ]

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

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

25.3.5 Properties of DataView Instances

DataView instances areordinary objects that inherit properties from theDataView prototype object. DataView instances each have[[DataView]],[[ViewedArrayBuffer]],[[ByteLength]], and[[ByteOffset]] internal slots.

Note

The value of the[[DataView]] internal slot is not used within this specification. The simple presence of that internal slot is used within the specification to identify objects created using the DataViewconstructor.

25.4 The Atomics Object

The Atomics object:

  • is%Atomics%.
  • is the initial value of the"Atomics" property of theglobal object.
  • is anordinary object.
  • has a[[Prototype]] internal slot whose value is%Object.prototype%.
  • does not have a[[Construct]] internal method; it cannot be used as aconstructor with thenew operator.
  • does not have a[[Call]] internal method; it cannot be invoked as a function.

The Atomics object provides functions that operate indivisibly (atomically) on shared memory array cells as well as functions that letagents wait for and dispatch primitive events. When used with discipline, the Atomics functions allow multi-agent programs that communicate through shared memory to execute in a well-understood order even on parallel CPUs. The rules that govern shared-memory communication are provided by thememory model, defined below.

Note

For informative guidelines for programming and implementing shared memory in ECMAScript, please see the notes at the end of thememory model section.

25.4.1 Waiter Record

AWaiter Record is aRecord value used to denote a particular call toAtomics.wait orAtomics.waitAsync.

A Waiter Record has fields listed inTable 78.

Table 78:Waiter Record Fields
Field Name Value Meaning
[[AgentSignifier]] anagent signifier Theagent that calledAtomics.wait orAtomics.waitAsync.
[[PromiseCapability]] aPromiseCapability Record orblocking If denoting a call toAtomics.waitAsync, the resulting promise, otherwiseblocking.
[[TimeoutTime]] a non-negativeextended mathematical value The earliest time by which timeout may be triggered; computed usingtime values.
[[Result]]"ok" or"timed-out" The return value of the call.

25.4.2 WaiterList Records

AWaiterList Record is used to explain waiting and notification ofagents viaAtomics.wait,Atomics.waitAsync, andAtomics.notify.

A WaiterList Record has fields listed inTable 79.

Table 79:WaiterList Record Fields
Field Name Value Meaning
[[Waiters]] aList ofWaiter Records The calls toAtomics.wait orAtomics.waitAsync that are waiting on the location with which this WaiterList is associated.
[[MostRecentLeaveEvent]] aSynchronize event orempty The event of the most recent leaving of itscritical section, orempty if itscritical section has never been entered.

There can be multipleWaiter Records in a WaiterList with the sameagent signifier.

Theagent cluster has a store of WaiterList Records; the store is indexed by (block,i), whereblock is aShared Data Block andi a byte offset into the memory ofblock. WaiterList Records areagent-independent: a lookup in the store of WaiterList Records by (block,i) will result in the same WaiterList Record in anyagent in theagent cluster.

Each WaiterList Record has acritical section that controls exclusive access to that WaiterList Record during evaluation. Only a singleagent may enter a WaiterList Record's critical section at one time. Entering and leaving a WaiterList Record's critical section is controlled by theabstract operationsEnterCriticalSection andLeaveCriticalSection. Operations on a WaiterList Record—adding and removing waitingagents, traversing the list ofagents, suspending and notifyingagents on the list, setting and retrieving theSynchronize event—may only be performed byagents that have entered the WaiterList Record's critical section.

25.4.3 Abstract Operations for Atomics

25.4.3.1 ValidateIntegerTypedArray (typedArray,waitable )

The abstract operation ValidateIntegerTypedArray takes argumentstypedArray (anECMAScript language value) andwaitable (a Boolean) and returns either anormal completion containing aTypedArray With Buffer Witness Record, or athrow completion. It performs the following steps when called:

  1. LettaRecord be ? ValidateTypedArray(typedArray,unordered).
  2. NOTE: Bounds checking is not a synchronizing operation whentypedArray's backing buffer is agrowable SharedArrayBuffer.
  3. Ifwaitable istrue, then
    1. IftypedArray.[[TypedArrayName]] is neither"Int32Array" nor"BigInt64Array", throw aTypeError exception.
  4. Else,
    1. Lettype beTypedArrayElementType(typedArray).
    2. IfIsUnclampedIntegerElementType(type) isfalse andIsBigIntElementType(type) isfalse, throw aTypeError exception.
  5. ReturntaRecord.

25.4.3.2 ValidateAtomicAccess (taRecord,requestIndex )

The abstract operation ValidateAtomicAccess takes argumentstaRecord (aTypedArray With Buffer Witness Record) andrequestIndex (anECMAScript language value) and returns either anormal completion containing aninteger or athrow completion. It performs the following steps when called:

  1. Letlength beTypedArrayLength(taRecord).
  2. LetaccessIndex be ? ToIndex(requestIndex).
  3. Assert:accessIndex ≥ 0.
  4. IfaccessIndexlength, throw aRangeError exception.
  5. LettypedArray betaRecord.[[Object]].
  6. LetelementSize beTypedArrayElementSize(typedArray).
  7. Letoffset betypedArray.[[ByteOffset]].
  8. Return (accessIndex ×elementSize) +offset.

25.4.3.3 ValidateAtomicAccessOnIntegerTypedArray (typedArray,requestIndex )

The abstract operation ValidateAtomicAccessOnIntegerTypedArray takes argumentstypedArray (anECMAScript language value) andrequestIndex (anECMAScript language value) and returns either anormal completion containing aninteger or athrow completion. It performs the following steps when called:

  1. LettaRecord be ? ValidateIntegerTypedArray(typedArray,false).
  2. Return ? ValidateAtomicAccess(taRecord,requestIndex).

25.4.3.4 RevalidateAtomicAccess (typedArray,byteIndexInBuffer )

The abstract operation RevalidateAtomicAccess takes argumentstypedArray (aTypedArray) andbyteIndexInBuffer (aninteger) and returns either anormal completion containingunused or athrow completion. This operation revalidates the index within the backing buffer for atomic operations after all argument coercions are performed in Atomics methods, as argument coercions can have arbitrary side effects, which could cause the buffer to become out of bounds. This operation does not throw whentypedArray's backing buffer is a SharedArrayBuffer. It performs the following steps when called:

  1. LettaRecord beMakeTypedArrayWithBufferWitnessRecord(typedArray,unordered).
  2. NOTE: Bounds checking is not a synchronizing operation whentypedArray's backing buffer is agrowable SharedArrayBuffer.
  3. IfIsTypedArrayOutOfBounds(taRecord) istrue, throw aTypeError exception.
  4. Assert:byteIndexInBuffertypedArray.[[ByteOffset]].
  5. IfbyteIndexInBuffertaRecord.[[CachedBufferByteLength]], throw aRangeError exception.
  6. Returnunused.

25.4.3.5 GetWaiterList (block,i )

The abstract operation GetWaiterList takes argumentsblock (aShared Data Block) andi (a non-negativeinteger that is evenly divisible by 4) and returns aWaiterList Record. It performs the following steps when called:

  1. Assert:i andi + 3 are valid byte offsets within the memory ofblock.
  2. Return theWaiterList Record that is referenced by the pair (block,i).

25.4.3.6 EnterCriticalSection (WL )

The abstract operation EnterCriticalSection takes argumentWL (aWaiterList Record) and returnsunused. It performs the following steps when called:

  1. Assert: Thesurrounding agent is not in thecritical section for anyWaiterList Record.
  2. Wait until noagent is in thecritical section forWL, then enter thecritical section forWL (without allowing any otheragent to enter).
  3. IfWL.[[MostRecentLeaveEvent]] is notempty, then
    1. NOTE: AWL whosecritical section has been entered at least once has aSynchronize event set byLeaveCriticalSection.
    2. Letexecution be the[[CandidateExecution]] field of thesurrounding agent'sAgent Record.
    3. LeteventsRecord be theAgent Events Record ofexecution.[[EventsRecords]] whose[[AgentSignifier]] isAgentSignifier().
    4. LetenterEvent be a newSynchronize event.
    5. AppendenterEvent toeventsRecord.[[EventList]].
    6. Append (WL.[[MostRecentLeaveEvent]],enterEvent) toeventsRecord.[[AgentSynchronizesWith]].
  4. Returnunused.

EnterCriticalSection hascontention when anagent attempting to enter thecritical section must wait for anotheragent to leave it. When there is no contention, FIFO order of EnterCriticalSection calls is observable. When there is contention, an implementation may choose an arbitrary order but may not cause anagent to wait indefinitely.

25.4.3.7 LeaveCriticalSection (WL )

The abstract operation LeaveCriticalSection takes argumentWL (aWaiterList Record) and returnsunused. It performs the following steps when called:

  1. Assert: Thesurrounding agent is in thecritical section forWL.
  2. Letexecution be the[[CandidateExecution]] field of thesurrounding agent'sAgent Record.
  3. LeteventsRecord be theAgent Events Record ofexecution.[[EventsRecords]] whose[[AgentSignifier]] isAgentSignifier().
  4. LetleaveEvent be a newSynchronize event.
  5. AppendleaveEvent toeventsRecord.[[EventList]].
  6. SetWL.[[MostRecentLeaveEvent]] toleaveEvent.
  7. Leave thecritical section forWL.
  8. Returnunused.

25.4.3.8 AddWaiter (WL,waiterRecord )

The abstract operation AddWaiter takes argumentsWL (aWaiterList Record) andwaiterRecord (aWaiter Record) and returnsunused. It performs the following steps when called:

  1. Assert: Thesurrounding agent is in thecritical section forWL.
  2. Assert: There is noWaiter Record inWL.[[Waiters]] whose[[PromiseCapability]] field iswaiterRecord.[[PromiseCapability]] and whose[[AgentSignifier]] field iswaiterRecord.[[AgentSignifier]].
  3. AppendwaiterRecord toWL.[[Waiters]].
  4. Returnunused.

25.4.3.9 RemoveWaiter (WL,waiterRecord )

The abstract operation RemoveWaiter takes argumentsWL (aWaiterList Record) andwaiterRecord (aWaiter Record) and returnsunused. It performs the following steps when called:

  1. Assert: Thesurrounding agent is in thecritical section forWL.
  2. Assert:WL.[[Waiters]] containswaiterRecord.
  3. RemovewaiterRecord fromWL.[[Waiters]].
  4. Returnunused.

25.4.3.10 RemoveWaiters (WL,c )

The abstract operation RemoveWaiters takes argumentsWL (aWaiterList Record) andc (a non-negativeinteger or +∞) and returns aList ofWaiter Records. It performs the following steps when called:

  1. Assert: Thesurrounding agent is in thecritical section forWL.
  2. Letlen be the number of elements inWL.[[Waiters]].
  3. Letn bemin(c,len).
  4. LetL be aList whose elements are the firstn elements ofWL.[[Waiters]].
  5. Remove the firstn elements ofWL.[[Waiters]].
  6. ReturnL.

25.4.3.11 SuspendThisAgent (WL,waiterRecord )

The abstract operation SuspendThisAgent takes argumentsWL (aWaiterList Record) andwaiterRecord (aWaiter Record) and returnsunused. It performs the following steps when called:

  1. Assert: Thesurrounding agent is in thecritical section forWL.
  2. Assert:WL.[[Waiters]] containswaiterRecord.
  3. LetthisAgent beAgentSignifier().
  4. Assert:waiterRecord.[[AgentSignifier]] isthisAgent.
  5. Assert:waiterRecord.[[PromiseCapability]] isblocking.
  6. Assert:AgentCanSuspend() istrue.
  7. PerformLeaveCriticalSection(WL) and suspend thesurrounding agent until the time iswaiterRecord.[[TimeoutTime]], performing the combined operation in such a way that a notification that arrives after thecritical section is exited but before the suspension takes effect is not lost. Thesurrounding agent can only wake from suspension due to a timeout or due to anotheragent callingNotifyWaiter with argumentsWL andthisAgent (i.e. via a call toAtomics.notify).
  8. PerformEnterCriticalSection(WL).
  9. Returnunused.

25.4.3.12 NotifyWaiter (WL,waiterRecord )

The abstract operation NotifyWaiter takes argumentsWL (aWaiterList Record) andwaiterRecord (aWaiter Record) and returnsunused. It performs the following steps when called:

  1. Assert: Thesurrounding agent is in thecritical section forWL.
  2. IfwaiterRecord.[[PromiseCapability]] isblocking, then
    1. Wake theagent whose signifier iswaiterRecord.[[AgentSignifier]] from suspension.
    2. NOTE: This causes theagent to resume execution inSuspendThisAgent.
  3. Else ifAgentSignifier() iswaiterRecord.[[AgentSignifier]], then
    1. LetpromiseCapability bewaiterRecord.[[PromiseCapability]].
    2. Perform ! Call(promiseCapability.[[Resolve]],undefined, «waiterRecord.[[Result]] »).
  4. Else,
    1. PerformEnqueueResolveInAgentJob(waiterRecord.[[AgentSignifier]],waiterRecord.[[PromiseCapability]],waiterRecord.[[Result]]).
  5. Returnunused.
Note

Anagent must not access anotheragent's promise capability in any capacity beyond passing it to thehost.

25.4.3.13 EnqueueResolveInAgentJob (agentSignifier,promiseCapability,resolution )

The abstract operation EnqueueResolveInAgentJob takes argumentsagentSignifier (anagent signifier),promiseCapability (aPromiseCapability Record), andresolution ("ok" or"timed-out") and returnsunused. It performs the following steps when called:

  1. LetresolveJob be a newJobAbstract Closure with no parameters that capturesagentSignifier,promiseCapability, andresolution and performs the following steps when called:
    1. Assert:AgentSignifier() isagentSignifier.
    2. Perform ! Call(promiseCapability.[[Resolve]],undefined, «resolution »).
    3. Returnunused.
  2. LetrealmInTargetAgent be ! GetFunctionRealm(promiseCapability.[[Resolve]]).
  3. Assert:agentSignifier isrealmInTargetAgent.[[AgentSignifier]].
  4. PerformHostEnqueueGenericJob(resolveJob,realmInTargetAgent).
  5. Returnunused.

25.4.3.14 DoWait (mode,typedArray,index,value,timeout )

The abstract operation DoWait takes argumentsmode (sync orasync),typedArray (anECMAScript language value),index (anECMAScript language value),value (anECMAScript language value), andtimeout (anECMAScript language value) and returns either anormal completion containing either an Object,"not-equal","timed-out", or"ok", or athrow completion. It performs the following steps when called:

  1. LettaRecord be ? ValidateIntegerTypedArray(typedArray,true).
  2. Letbuffer betaRecord.[[Object]].[[ViewedArrayBuffer]].
  3. IfIsSharedArrayBuffer(buffer) isfalse, throw aTypeError exception.
  4. Leti be ? ValidateAtomicAccess(taRecord,index).
  5. LetarrayTypeName betypedArray.[[TypedArrayName]].
  6. IfarrayTypeName is"BigInt64Array", letv be ? ToBigInt64(value).
  7. Else, letv be ? ToInt32(value).
  8. Letq be ? ToNumber(timeout).
  9. Ifq is eitherNaN or+∞𝔽, lett be +∞; else ifq is-∞𝔽, lett be 0; else lett bemax((q), 0).
  10. Ifmode issync andAgentCanSuspend() isfalse, throw aTypeError exception.
  11. Letblock bebuffer.[[ArrayBufferData]].
  12. Letoffset betypedArray.[[ByteOffset]].
  13. LetbyteIndexInBuffer be (i × 4) +offset.
  14. LetWL beGetWaiterList(block,byteIndexInBuffer).
  15. Ifmode issync, then
    1. LetpromiseCapability beblocking.
    2. LetresultObject beundefined.
  16. Else,
    1. LetpromiseCapability be ! NewPromiseCapability(%Promise%).
    2. LetresultObject beOrdinaryObjectCreate(%Object.prototype%).
  17. PerformEnterCriticalSection(WL).
  18. LetelementType beTypedArrayElementType(typedArray).
  19. Letw beGetValueFromBuffer(buffer,byteIndexInBuffer,elementType,true,seq-cst).
  20. Ifvw, then
    1. PerformLeaveCriticalSection(WL).
    2. Ifmode issync, return"not-equal".
    3. Perform ! CreateDataPropertyOrThrow(resultObject,"async",false).
    4. Perform ! CreateDataPropertyOrThrow(resultObject,"value","not-equal").
    5. ReturnresultObject.
  21. Ift = 0 andmode isasync, then
    1. NOTE: There is no special handling of synchronous immediate timeouts. Asynchronous immediate timeouts have special handling in order to fail fast and avoid unnecessary Promise jobs.
    2. PerformLeaveCriticalSection(WL).
    3. Perform ! CreateDataPropertyOrThrow(resultObject,"async",false).
    4. Perform ! CreateDataPropertyOrThrow(resultObject,"value","timed-out").
    5. ReturnresultObject.
  22. LetthisAgent beAgentSignifier().
  23. Letnow be thetime value (UTC) identifying the current time.
  24. LetadditionalTimeout be animplementation-defined non-negativemathematical value.
  25. LettimeoutTime be(now) +t +additionalTimeout.
  26. NOTE: Whent is +∞,timeoutTime is also +∞.
  27. LetwaiterRecord be a newWaiter Record {[[AgentSignifier]]:thisAgent,[[PromiseCapability]]:promiseCapability,[[TimeoutTime]]:timeoutTime,[[Result]]:"ok" }.
  28. PerformAddWaiter(WL,waiterRecord).
  29. Ifmode issync, then
    1. PerformSuspendThisAgent(WL,waiterRecord).
  30. Else iftimeoutTime isfinite, then
    1. PerformEnqueueAtomicsWaitAsyncTimeoutJob(WL,waiterRecord).
  31. PerformLeaveCriticalSection(WL).
  32. Ifmode issync, returnwaiterRecord.[[Result]].
  33. Perform ! CreateDataPropertyOrThrow(resultObject,"async",true).
  34. Perform ! CreateDataPropertyOrThrow(resultObject,"value",promiseCapability.[[Promise]]).
  35. ReturnresultObject.
Note

additionalTimeout allows implementations to pad timeouts as necessary, such as for reducing power consumption or coarsening timer resolution to mitigate timing attacks. This value may differ from call to call of DoWait.

25.4.3.15 EnqueueAtomicsWaitAsyncTimeoutJob (WL,waiterRecord )

The abstract operation EnqueueAtomicsWaitAsyncTimeoutJob takes argumentsWL (aWaiterList Record) andwaiterRecord (aWaiter Record) and returnsunused. It performs the following steps when called:

  1. LettimeoutJob be a newJobAbstract Closure with no parameters that capturesWL andwaiterRecord and performs the following steps when called:
    1. PerformEnterCriticalSection(WL).
    2. IfWL.[[Waiters]] containswaiterRecord, then
      1. LettimeOfJobExecution be thetime value (UTC) identifying the current time.
      2. Assert:(timeOfJobExecution) ≥waiterRecord.[[TimeoutTime]] (ignoring potential non-monotonicity oftime values).
      3. SetwaiterRecord.[[Result]] to"timed-out".
      4. PerformRemoveWaiter(WL,waiterRecord).
      5. PerformNotifyWaiter(WL,waiterRecord).
    3. PerformLeaveCriticalSection(WL).
    4. Returnunused.
  2. Letnow be thetime value (UTC) identifying the current time.
  3. LetcurrentRealm bethe current Realm Record.
  4. PerformHostEnqueueTimeoutJob(timeoutJob,currentRealm,𝔽(waiterRecord.[[TimeoutTime]]) -now).
  5. Returnunused.

25.4.3.16 AtomicCompareExchangeInSharedBlock (block,byteIndexInBuffer,elementSize,expectedBytes,replacementBytes )

The abstract operation AtomicCompareExchangeInSharedBlock takes argumentsblock (aShared Data Block),byteIndexInBuffer (aninteger),elementSize (a non-negativeinteger),expectedBytes (aList ofbyte values), andreplacementBytes (aList ofbyte values) and returns aList ofbyte values. It performs the following steps when called:

  1. Letexecution be the[[CandidateExecution]] field of thesurrounding agent'sAgent Record.
  2. LeteventsRecord be theAgent Events Record ofexecution.[[EventsRecords]] whose[[AgentSignifier]] isAgentSignifier().
  3. LetrawBytesRead be aList of lengthelementSize whose elements are nondeterministically chosenbyte values.
  4. NOTE: In implementations,rawBytesRead is the result of a load-link, of a load-exclusive, or of an operand of a read-modify-write instruction on the underlying hardware. The nondeterminism is a semantic prescription of thememory model to describe observable behaviour of hardware with weak consistency.
  5. NOTE: The comparison of the expected value and the read value is performed outside of theread-modify-write modification function to avoid needlessly strong synchronization when the expected value is not equal to the read value.
  6. IfByteListEqual(rawBytesRead,expectedBytes) istrue, then
    1. Letsecond be a newread-modify-write modification function with parameters (oldBytes,newBytes) that captures nothing and performs the following steps atomically when called:
      1. ReturnnewBytes.
    2. Letevent beReadModifyWriteSharedMemory {[[Order]]:seq-cst,[[NoTear]]:true,[[Block]]:block,[[ByteIndex]]:byteIndexInBuffer,[[ElementSize]]:elementSize,[[Payload]]:replacementBytes,[[ModifyOp]]:second }.
  7. Else,
    1. Letevent beReadSharedMemory {[[Order]]:seq-cst,[[NoTear]]:true,[[Block]]:block,[[ByteIndex]]:byteIndexInBuffer,[[ElementSize]]:elementSize }.
  8. Appendevent toeventsRecord.[[EventList]].
  9. AppendChosen Value Record {[[Event]]:event,[[ChosenValue]]:rawBytesRead } toexecution.[[ChosenValues]].
  10. ReturnrawBytesRead.

25.4.3.17 AtomicReadModifyWrite (typedArray,index,value,op )

The abstract operation AtomicReadModifyWrite takes argumentstypedArray (anECMAScript language value),index (anECMAScript language value),value (anECMAScript language value), andop (aread-modify-write modification function) and returns either anormal completion containing either a Number or a BigInt, or athrow completion.op takes twoList ofbyte values arguments and returns aList ofbyte values. This operation atomically loads a value, combines it with another value, and stores the combination. It returns the loaded value. It performs the following steps when called:

  1. LetbyteIndexInBuffer be ? ValidateAtomicAccessOnIntegerTypedArray(typedArray,index).
  2. IftypedArray.[[ContentType]] isbigint, letv be ? ToBigInt(value).
  3. Otherwise, letv be𝔽(?ToIntegerOrInfinity(value)).
  4. Perform ? RevalidateAtomicAccess(typedArray,byteIndexInBuffer).
  5. Letbuffer betypedArray.[[ViewedArrayBuffer]].
  6. LetelementType beTypedArrayElementType(typedArray).
  7. ReturnGetModifySetValueInBuffer(buffer,byteIndexInBuffer,elementType,v,op).

25.4.3.18 ByteListBitwiseOp (op,xBytes,yBytes )

The abstract operation ByteListBitwiseOp takes argumentsop (&,^, or|),xBytes (aList ofbyte values), andyBytes (aList ofbyte values) and returns aList ofbyte values. The operation atomically performs a bitwise operation on allbyte values of the arguments and returns aList ofbyte values. It performs the following steps when called:

  1. Assert:xBytes andyBytes have the same number of elements.
  2. Letresult be a new emptyList.
  3. Leti be 0.
  4. For each elementxByte ofxBytes, do
    1. LetyByte beyBytes[i].
    2. Ifop is&, then
      1. LetresultByte be the result of applying the bitwise AND operation toxByte andyByte.
    3. Else ifop is^, then
      1. LetresultByte be the result of applying the bitwise exclusive OR (XOR) operation toxByte andyByte.
    4. Else,
      1. Assert:op is|.
      2. LetresultByte be the result of applying the bitwise inclusive OR operation toxByte andyByte.
    5. Seti toi + 1.
    6. AppendresultByte toresult.
  5. Returnresult.

25.4.3.19 ByteListEqual (xBytes,yBytes )

The abstract operation ByteListEqual takes argumentsxBytes (aList ofbyte values) andyBytes (aList ofbyte values) and returns a Boolean. It performs the following steps when called:

  1. IfxBytes andyBytes do not have the same number of elements, returnfalse.
  2. Leti be 0.
  3. For each elementxByte ofxBytes, do
    1. LetyByte beyBytes[i].
    2. IfxByteyByte, returnfalse.
    3. Seti toi + 1.
  4. Returntrue.

25.4.4 Atomics.add (typedArray,index,value )

This function performs the following steps when called:

  1. Letadd be a newread-modify-write modification function with parameters (xBytes,yBytes) that capturestypedArray and performs the following steps atomically when called:
    1. Lettype beTypedArrayElementType(typedArray).
    2. LetisLittleEndian be the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record.
    3. Letx beRawBytesToNumeric(type,xBytes,isLittleEndian).
    4. Lety beRawBytesToNumeric(type,yBytes,isLittleEndian).
    5. Ifxis a Number, then
      1. Letsum beNumber::add(x,y).
    6. Else,
      1. Assert:xis a BigInt.
      2. Letsum beBigInt::add(x,y).
    7. LetsumBytes beNumericToRawBytes(type,sum,isLittleEndian).
    8. Assert:sumBytes,xBytes, andyBytes have the same number of elements.
    9. ReturnsumBytes.
  2. Return ? AtomicReadModifyWrite(typedArray,index,value,add).

25.4.5 Atomics.and (typedArray,index,value )

This function performs the following steps when called:

  1. Letand be a newread-modify-write modification function with parameters (xBytes,yBytes) that captures nothing and performs the following steps atomically when called:
    1. ReturnByteListBitwiseOp(&,xBytes,yBytes).
  2. Return ? AtomicReadModifyWrite(typedArray,index,value,and).

25.4.6 Atomics.compareExchange (typedArray,index,expectedValue,replacementValue )

This function performs the following steps when called:

  1. LetbyteIndexInBuffer be ? ValidateAtomicAccessOnIntegerTypedArray(typedArray,index).
  2. Letbuffer betypedArray.[[ViewedArrayBuffer]].
  3. Letblock bebuffer.[[ArrayBufferData]].
  4. IftypedArray.[[ContentType]] isbigint, then
    1. Letexpected be ? ToBigInt(expectedValue).
    2. Letreplacement be ? ToBigInt(replacementValue).
  5. Else,
    1. Letexpected be𝔽(?ToIntegerOrInfinity(expectedValue)).
    2. Letreplacement be𝔽(?ToIntegerOrInfinity(replacementValue)).
  6. Perform ? RevalidateAtomicAccess(typedArray,byteIndexInBuffer).
  7. LetelementType beTypedArrayElementType(typedArray).
  8. LetelementSize beTypedArrayElementSize(typedArray).
  9. LetisLittleEndian be the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record.
  10. LetexpectedBytes beNumericToRawBytes(elementType,expected,isLittleEndian).
  11. LetreplacementBytes beNumericToRawBytes(elementType,replacement,isLittleEndian).
  12. IfIsSharedArrayBuffer(buffer) istrue, then
    1. LetrawBytesRead beAtomicCompareExchangeInSharedBlock(block,byteIndexInBuffer,elementSize,expectedBytes,replacementBytes).
  13. Else,
    1. LetrawBytesRead be aList of lengthelementSize whose elements are the sequence ofelementSize bytes starting withblock[byteIndexInBuffer].
    2. IfByteListEqual(rawBytesRead,expectedBytes) istrue, then
      1. Store the individual bytes ofreplacementBytes intoblock, starting atblock[byteIndexInBuffer].
  14. ReturnRawBytesToNumeric(elementType,rawBytesRead,isLittleEndian).

25.4.7 Atomics.exchange (typedArray,index,value )

This function performs the following steps when called:

  1. Letsecond be a newread-modify-write modification function with parameters (oldBytes,newBytes) that captures nothing and performs the following steps atomically when called:
    1. ReturnnewBytes.
  2. Return ? AtomicReadModifyWrite(typedArray,index,value,second).

25.4.8 Atomics.isLockFree (size )

This function performs the following steps when called:

  1. Letn be ? ToIntegerOrInfinity(size).
  2. LetAR be theAgent Record of thesurrounding agent.
  3. Ifn = 1, returnAR.[[IsLockFree1]].
  4. Ifn = 2, returnAR.[[IsLockFree2]].
  5. Ifn = 4, returntrue.
  6. Ifn = 8, returnAR.[[IsLockFree8]].
  7. Returnfalse.
Note

This function is an optimization primitive. The intuition is that if the atomic step of an atomic primitive (compareExchange,load,store,add,sub,and,or,xor, orexchange) on a datum of sizen bytes will be performed without thesurrounding agent acquiring a lock outside then bytes comprising the datum, thenAtomics.isLockFree(n) will returntrue. High-performance algorithms will use this function to determine whether to use locks or atomic operations incritical sections. If an atomic primitive is not lock-free then it is often more efficient for an algorithm to provide its own locking.

Atomics.isLockFree(4) always returnstrue as that can be supported on all known relevant hardware. Being able to assume this will generally simplify programs.

Regardless of the value returned by this function, all atomic operations are guaranteed to be atomic. For example, they will never have a visible operation take place in the middle of the operation (e.g., "tearing").

25.4.9 Atomics.load (typedArray,index )

This function performs the following steps when called:

  1. LetbyteIndexInBuffer be ? ValidateAtomicAccessOnIntegerTypedArray(typedArray,index).
  2. Perform ? RevalidateAtomicAccess(typedArray,byteIndexInBuffer).
  3. Letbuffer betypedArray.[[ViewedArrayBuffer]].
  4. LetelementType beTypedArrayElementType(typedArray).
  5. ReturnGetValueFromBuffer(buffer,byteIndexInBuffer,elementType,true,seq-cst).

25.4.10 Atomics.or (typedArray,index,value )

This function performs the following steps when called:

  1. Letor be a newread-modify-write modification function with parameters (xBytes,yBytes) that captures nothing and performs the following steps atomically when called:
    1. ReturnByteListBitwiseOp(|,xBytes,yBytes).
  2. Return ? AtomicReadModifyWrite(typedArray,index,value,or).

25.4.11 Atomics.store (typedArray,index,value )

This function performs the following steps when called:

  1. LetbyteIndexInBuffer be ? ValidateAtomicAccessOnIntegerTypedArray(typedArray,index).
  2. IftypedArray.[[ContentType]] isbigint, letv be ? ToBigInt(value).
  3. Otherwise, letv be𝔽(?ToIntegerOrInfinity(value)).
  4. Perform ? RevalidateAtomicAccess(typedArray,byteIndexInBuffer).
  5. Letbuffer betypedArray.[[ViewedArrayBuffer]].
  6. LetelementType beTypedArrayElementType(typedArray).
  7. PerformSetValueInBuffer(buffer,byteIndexInBuffer,elementType,v,true,seq-cst).
  8. Returnv.

25.4.12 Atomics.sub (typedArray,index,value )

This function performs the following steps when called:

  1. Letsubtract be a newread-modify-write modification function with parameters (xBytes,yBytes) that capturestypedArray and performs the following steps atomically when called:
    1. Lettype beTypedArrayElementType(typedArray).
    2. LetisLittleEndian be the value of the[[LittleEndian]] field of thesurrounding agent'sAgent Record.
    3. Letx beRawBytesToNumeric(type,xBytes,isLittleEndian).
    4. Lety beRawBytesToNumeric(type,yBytes,isLittleEndian).
    5. Ifxis a Number, then
      1. Letdifference beNumber::subtract(x,y).
    6. Else,
      1. Assert:xis a BigInt.
      2. Letdifference beBigInt::subtract(x,y).
    7. LetdifferenceBytes beNumericToRawBytes(type,difference,isLittleEndian).
    8. Assert:differenceBytes,xBytes, andyBytes have the same number of elements.
    9. ReturndifferenceBytes.
  2. Return ? AtomicReadModifyWrite(typedArray,index,value,subtract).

25.4.13 Atomics.wait (typedArray,index,value,timeout )

This function puts thesurrounding agent in a wait queue and suspends it until notified or until the wait times out, returning a String differentiating those cases.

It performs the following steps when called:

  1. Return ? DoWait(sync,typedArray,index,value,timeout).

25.4.14 Atomics.waitAsync (typedArray,index,value,timeout )

This function returns a Promise that is resolved when the callingagent is notified or the timeout is reached.

It performs the following steps when called:

  1. Return ? DoWait(async,typedArray,index,value,timeout).

25.4.15 Atomics.notify (typedArray,index,count )

This function notifies someagents that are sleeping in the wait queue.

It performs the following steps when called:

  1. LettaRecord be ? ValidateIntegerTypedArray(typedArray,true).
  2. LetbyteIndexInBuffer be ? ValidateAtomicAccess(taRecord,index).
  3. Ifcount isundefined, then
    1. Letc be +∞.
  4. Else,
    1. LetintCount be ? ToIntegerOrInfinity(count).
    2. Letc bemax(intCount, 0).
  5. Letbuffer betypedArray.[[ViewedArrayBuffer]].
  6. Letblock bebuffer.[[ArrayBufferData]].
  7. IfIsSharedArrayBuffer(buffer) isfalse, return+0𝔽.
  8. LetWL beGetWaiterList(block,byteIndexInBuffer).
  9. PerformEnterCriticalSection(WL).
  10. LetS beRemoveWaiters(WL,c).
  11. For each elementW ofS, do
    1. PerformNotifyWaiter(WL,W).
  12. PerformLeaveCriticalSection(WL).
  13. Letn be the number of elements inS.
  14. Return𝔽(n).

25.4.16 Atomics.xor (typedArray,index,value )

This function performs the following steps when called:

  1. Letxor be a newread-modify-write modification function with parameters (xBytes,yBytes) that captures nothing and performs the following steps atomically when called:
    1. ReturnByteListBitwiseOp(^,xBytes,yBytes).
  2. Return ? AtomicReadModifyWrite(typedArray,index,value,xor).

25.4.17 Atomics [ %Symbol.toStringTag% ]

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

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

25.5 The JSON Object

The JSON object:

  • is%JSON%.
  • is the initial value of the"JSON" property of theglobal object.
  • is anordinary object.
  • contains two functions,parse andstringify, that are used to parse and construct JSON texts.
  • has a[[Prototype]] internal slot whose value is%Object.prototype%.
  • does not have a[[Construct]] internal method; it cannot be used as aconstructor with thenew operator.
  • does not have a[[Call]] internal method; it cannot be invoked as a function.

The JSON Data Interchange Format is defined in ECMA-404. The JSON interchange format used in this specification is exactly that described by ECMA-404. Conforming implementations ofJSON.parse andJSON.stringify must support the exact interchange format described in the ECMA-404 specification without any deletions or extensions to the format.

25.5.1 JSON.parse (text [ ,reviver ] )

This function parses a JSON text (a JSON-formatted String) and produces anECMAScript language value. The JSON format represents literals, arrays, and objects with a syntax similar to the syntax for ECMAScript literals, Array Initializers, and Object Initializers. After parsing, JSON objects are realized as ECMAScript objects. JSON arrays are realized as ECMAScript Array instances. JSON strings, numbers, booleans, and null are realized as ECMAScript Strings, Numbers, Booleans, andnull.

The optionalreviver parameter is a function that takes two parameters,key andvalue. It can filter and transform the results. It is called with each of thekey/value pairs produced by the parse, and its return value is used instead of the original value. If it returns what it received, the structure is not modified. If it returnsundefined then the property is deleted from the result.

  1. LetjsonString be ? ToString(text).
  2. Letunfiltered be ? ParseJSON(jsonString).
  3. IfIsCallable(reviver) istrue, then
    1. Letroot beOrdinaryObjectCreate(%Object.prototype%).
    2. LetrootName be the empty String.
    3. Perform ! CreateDataPropertyOrThrow(root,rootName,unfiltered).
    4. Return ? InternalizeJSONProperty(root,rootName,reviver).
  4. Else,
    1. Returnunfiltered.

The"length" property of this function is2𝔽.

25.5.1.1 ParseJSON (text )

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

  1. IfStringToCodePoints(text) is not a valid JSON text as specified in ECMA-404, throw aSyntaxError exception.
  2. LetscriptString be thestring-concatenation of"(",text, and");".
  3. Letscript beParseText(scriptString,Script).
  4. NOTE: Theearly error rules defined in13.2.5.1 have special handling for the above invocation ofParseText.
  5. Assert:script is aParse Node.
  6. Letresult be ! Evaluation ofscript.
  7. NOTE: ThePropertyDefinitionEvaluation semantics defined in13.2.5.5 have special handling for the above evaluation.
  8. Assert:result is either a String, a Number, a Boolean, an Object that is defined by either anArrayLiteral or anObjectLiteral, ornull.
  9. Returnresult.

It is not permitted for a conforming implementation ofJSON.parse to extend the JSON grammars. If an implementation wishes to support a modified or extended JSON interchange format it must do so by defining a different parse function.

Note 1

Valid JSON text is a subset of the ECMAScriptPrimaryExpression syntax. Step1 verifies thatjsonString conforms to that subset, and step8 asserts that evaluation returns a value of an appropriate type.

However, because13.2.5.5 behaves differently during ParseJSON, the same source text can produce different results when evaluated as aPrimaryExpression rather than as JSON. Furthermore, the Early Error for duplicate"__proto__" properties in object literals, which likewise does not apply during ParseJSON, means that not all texts accepted by ParseJSON are valid as aPrimaryExpression, despite matching the grammar.

Note 2

In the case where there are duplicate name Strings within an object, lexically preceding values for the same key shall be overwritten.

25.5.1.2 InternalizeJSONProperty (holder,name,reviver )

The abstract operation InternalizeJSONProperty takes argumentsholder (an Object),name (a String), andreviver (afunction object) and returns either anormal completion containing anECMAScript language value or athrow completion.

Note

This algorithm intentionally does not throw an exception if either[[Delete]] orCreateDataProperty returnfalse.

It performs the following steps when called:

  1. Letval be ? Get(holder,name).
  2. Ifvalis an Object, then
    1. LetisArray be ? IsArray(val).
    2. IfisArray istrue, then
      1. Letlen be ? LengthOfArrayLike(val).
      2. LetI be 0.
      3. Repeat, whileI <len,
        1. Letprop be ! ToString(𝔽(I)).
        2. LetnewElement be ? InternalizeJSONProperty(val,prop,reviver).
        3. IfnewElement isundefined, then
          1. Perform ? val.[[Delete]](prop).
        4. Else,
          1. Perform ? CreateDataProperty(val,prop,newElement).
        5. SetI toI + 1.
    3. Else,
      1. Letkeys be ? EnumerableOwnProperties(val,key).
      2. For each StringP ofkeys, do
        1. LetnewElement be ? InternalizeJSONProperty(val,P,reviver).
        2. IfnewElement isundefined, then
          1. Perform ? val.[[Delete]](P).
        3. Else,
          1. Perform ? CreateDataProperty(val,P,newElement).
  3. Return ? Call(reviver,holder, «name,val »).

25.5.2 JSON.stringify (value [ ,replacer [ ,space ] ] )

This function returns a String in UTF-16 encoded JSON format representing anECMAScript language value, orundefined. It can take three parameters. Thevalue parameter is anECMAScript language value, which is usually an object or array, although it can also be a String, Boolean, Number ornull. The optionalreplacer parameter is either a function that alters the way objects and arrays are stringified, or an array of Strings and Numbers that acts as an inclusion list for selecting the object properties that will be stringified. The optionalspace parameteris a String or Number that allows the result to have white space injected into it to improve human readability.

It performs the following steps when called:

  1. Letstack be a new emptyList.
  2. Letindent be the empty String.
  3. LetPropertyList beundefined.
  4. LetReplacerFunction beundefined.
  5. Ifreplaceris an Object, then
    1. IfIsCallable(replacer) istrue, then
      1. SetReplacerFunction toreplacer.
    2. Else,
      1. LetisArray be ? IsArray(replacer).
      2. IfisArray istrue, then
        1. SetPropertyList to a new emptyList.
        2. Letlen be ? LengthOfArrayLike(replacer).
        3. Letk be 0.
        4. Repeat, whilek <len,
          1. Letprop be ! ToString(𝔽(k)).
          2. Letv be ? Get(replacer,prop).
          3. Letitem beundefined.
          4. Ifvis a String, then
            1. Setitem tov.
          5. Else ifvis a Number, then
            1. Setitem to ! ToString(v).
          6. Else ifvis an Object, then
            1. Ifv has a[[StringData]] or[[NumberData]] internal slot, setitem to ? ToString(v).
          7. Ifitem is notundefined andPropertyList does not containitem, then
            1. Appenditem toPropertyList.
          8. Setk tok + 1.
  6. Ifspaceis an Object, then
    1. Ifspace has a[[NumberData]] internal slot, then
      1. Setspace to ? ToNumber(space).
    2. Else ifspace has a[[StringData]] internal slot, then
      1. Setspace to ? ToString(space).
  7. Ifspaceis a Number, then
    1. LetspaceMV be ! ToIntegerOrInfinity(space).
    2. SetspaceMV tomin(10,spaceMV).
    3. IfspaceMV < 1, letgap be the empty String; otherwise letgap be the String value containingspaceMV occurrences of the code unit 0x0020 (SPACE).
  8. Else ifspaceis a String, then
    1. If the length ofspace ≤ 10, letgap bespace; otherwise letgap be thesubstring ofspace from 0 to 10.
  9. Else,
    1. Letgap be the empty String.
  10. Letwrapper beOrdinaryObjectCreate(%Object.prototype%).
  11. Perform ! CreateDataPropertyOrThrow(wrapper, the empty String,value).
  12. Letstate be theJSON Serialization Record {[[ReplacerFunction]]:ReplacerFunction,[[Stack]]:stack,[[Indent]]:indent,[[Gap]]:gap,[[PropertyList]]:PropertyList }.
  13. Return ? SerializeJSONProperty(state, the empty String,wrapper).

The"length" property of this function is3𝔽.

Note 1

JSON structures are allowed to be nested to any depth, but they must be acyclic. Ifvalue is or contains a cyclic structure, then this function must throw aTypeError exception. This is an example of a value that cannot be stringified:

a = [];a[0] = a;my_text =JSON.stringify(a);// This must throw a TypeError.
Note 2

Symbolic primitive values are rendered as follows:

  • Thenull value is rendered in JSON text as the String value"null".
  • Theundefined value is not rendered.
  • Thetrue value is rendered in JSON text as the String value"true".
  • Thefalse value is rendered in JSON text as the String value"false".
Note 3

String values are wrapped in QUOTATION MARK (") code units. The code units" and\ are escaped with\ prefixes. Control characters code units are replaced with escape sequences\uHHHH, or with the shorter forms,\b (BACKSPACE),\f (FORM FEED),\n (LINE FEED),\r (CARRIAGE RETURN),\t (CHARACTER TABULATION).

Note 4

Finite numbers are stringified as if by callingToString(number).NaN andInfinity regardless of sign are represented as the String value"null".

Note 5

Values that do not have a JSON representation (such asundefined and functions) do not produce a String. Instead they produce theundefined value. In arrays these values are represented as the String value"null". In objects an unrepresentable value causes the property to be excluded from stringification.

Note 6

An object is rendered as U+007B (LEFT CURLY BRACKET) followed by zero or more properties, separated with a U+002C (COMMA), closed with a U+007D (RIGHT CURLY BRACKET). A property is a quoted String representing theproperty name, a U+003A (COLON), and then the stringified property value. An array is rendered as an opening U+005B (LEFT SQUARE BRACKET) followed by zero or more values, separated with a U+002C (COMMA), closed with a U+005D (RIGHT SQUARE BRACKET).

25.5.2.1 JSON Serialization Record

AJSON Serialization Record is aRecord value used to enable serialization to the JSON format.

JSON Serialization Records have the fields listed inTable 80.

Table 80:JSON Serialization Record Fields
Field NameValueMeaning
[[ReplacerFunction]]afunction object orundefinedA function that can supply replacement values for object properties (from JSON.stringify'sreplacer parameter).
[[PropertyList]]either aList of Strings orundefinedThe names of properties to include when serializing a non-array object (from JSON.stringify'sreplacer parameter).
[[Gap]]a StringThe unit of indentation (from JSON.stringify'sspace parameter).
[[Stack]]aList of ObjectsThe set of nested objects that are in the process of being serialized. Used to detect cyclic structures.
[[Indent]]a StringThe current indentation.

25.5.2.2 SerializeJSONProperty (state,key,holder )

The abstract operation SerializeJSONProperty takes argumentsstate (aJSON Serialization Record),key (a String), andholder (an Object) and returns either anormal completion containing either a String orundefined, or athrow completion. It performs the following steps when called:

  1. Letvalue be ? Get(holder,key).
  2. Ifvalueis an Object orvalueis a BigInt, then
    1. LettoJSON be ? GetV(value,"toJSON").
    2. IfIsCallable(toJSON) istrue, then
      1. Setvalue to ? Call(toJSON,value, «key »).
  3. Ifstate.[[ReplacerFunction]] is notundefined, then
    1. Setvalue to ? Call(state.[[ReplacerFunction]],holder, «key,value »).
  4. Ifvalueis an Object, then
    1. Ifvalue has a[[NumberData]] internal slot, then
      1. Setvalue to ? ToNumber(value).
    2. Else ifvalue has a[[StringData]] internal slot, then
      1. Setvalue to ? ToString(value).
    3. Else ifvalue has a[[BooleanData]] internal slot, then
      1. Setvalue tovalue.[[BooleanData]].
    4. Else ifvalue has a[[BigIntData]] internal slot, then
      1. Setvalue tovalue.[[BigIntData]].
  5. Ifvalue isnull, return"null".
  6. Ifvalue istrue, return"true".
  7. Ifvalue isfalse, return"false".
  8. Ifvalueis a String, returnQuoteJSONString(value).
  9. Ifvalueis a Number, then
    1. Ifvalue isfinite, return ! ToString(value).
    2. Return"null".
  10. Ifvalueis a BigInt, throw aTypeError exception.
  11. Ifvalueis an Object andIsCallable(value) isfalse, then
    1. LetisArray be ? IsArray(value).
    2. IfisArray istrue, return ? SerializeJSONArray(state,value).
    3. Return ? SerializeJSONObject(state,value).
  12. Returnundefined.

25.5.2.3 QuoteJSONString (value )

The abstract operation QuoteJSONString takes argumentvalue (a String) and returns a String. It wrapsvalue in 0x0022 (QUOTATION MARK) code units and escapes certain other code units within it. This operation interpretsvalue as a sequence of UTF-16 encoded code points, as described in6.1.4. It performs the following steps when called:

  1. Letproduct be the String value consisting solely of the code unit 0x0022 (QUOTATION MARK).
  2. For each code pointC ofStringToCodePoints(value), do
    1. IfC is listed in the “Code Point” column ofTable 81, then
      1. Setproduct to thestring-concatenation ofproduct and the escape sequence forC as specified in the “Escape Sequence” column of the corresponding row.
    2. Else ifC has a numeric value less than 0x0020 (SPACE) orC has the same numeric value as aleading surrogate ortrailing surrogate, then
      1. Letunit be the code unit whose numeric value is the numeric value ofC.
      2. Setproduct to thestring-concatenation ofproduct andUnicodeEscape(unit).
    3. Else,
      1. Setproduct to thestring-concatenation ofproduct andUTF16EncodeCodePoint(C).
  3. Setproduct to thestring-concatenation ofproduct and the code unit 0x0022 (QUOTATION MARK).
  4. Returnproduct.
Table 81: JSON Single Character Escape Sequences
Code Point Unicode Character Name Escape Sequence
U+0008 BACKSPACE\b
U+0009 CHARACTER TABULATION\t
U+000A LINE FEED (LF)\n
U+000C FORM FEED (FF)\f
U+000D CARRIAGE RETURN (CR)\r
U+0022 QUOTATION MARK\"
U+005C REVERSE SOLIDUS\\

25.5.2.4 UnicodeEscape (C )

The abstract operation UnicodeEscape takes argumentC (a code unit) and returns a String. It representsC as a Unicode escape sequence. It performs the following steps when called:

  1. Letn be the numeric value ofC.
  2. Assert:n ≤ 0xFFFF.
  3. Lethex be the String representation ofn, formatted as a lowercase hexadecimal number.
  4. Return thestring-concatenation of the code unit 0x005C (REVERSE SOLIDUS),"u", andStringPad(hex, 4,"0",start).

25.5.2.5 SerializeJSONObject (state,value )

The abstract operation SerializeJSONObject takes argumentsstate (aJSON Serialization Record) andvalue (an Object) and returns either anormal completion containing a String or athrow completion. It serializes an object. It performs the following steps when called:

  1. Ifstate.[[Stack]] containsvalue, throw aTypeError exception because the structure is cyclical.
  2. Appendvalue tostate.[[Stack]].
  3. LetstepBack bestate.[[Indent]].
  4. Setstate.[[Indent]] to thestring-concatenation ofstate.[[Indent]] andstate.[[Gap]].
  5. Ifstate.[[PropertyList]] is notundefined, then
    1. LetK bestate.[[PropertyList]].
  6. Else,
    1. LetK be ? EnumerableOwnProperties(value,key).
  7. Letpartial be a new emptyList.
  8. For each elementP ofK, do
    1. LetstrP be ? SerializeJSONProperty(state,P,value).
    2. IfstrP is notundefined, then
      1. Letmember beQuoteJSONString(P).
      2. Setmember to thestring-concatenation ofmember and":".
      3. Ifstate.[[Gap]] is not the empty String, then
        1. Setmember to thestring-concatenation ofmember and the code unit 0x0020 (SPACE).
      4. Setmember to thestring-concatenation ofmember andstrP.
      5. Appendmember topartial.
  9. Ifpartial is empty, then
    1. Letfinal be"{}".
  10. Else,
    1. Ifstate.[[Gap]] is the empty String, then
      1. Letproperties be the String value formed by concatenating all the element Strings ofpartial with each adjacent pair of Strings separated with the code unit 0x002C (COMMA). A comma is not inserted either before the first String or after the last String.
      2. Letfinal be thestring-concatenation of"{",properties, and"}".
    2. Else,
      1. Letseparator be thestring-concatenation of the code unit 0x002C (COMMA), the code unit 0x000A (LINE FEED), andstate.[[Indent]].
      2. Letproperties be the String value formed by concatenating all the element Strings ofpartial with each adjacent pair of Strings separated withseparator. Theseparator String is not inserted either before the first String or after the last String.
      3. Letfinal be thestring-concatenation of"{", the code unit 0x000A (LINE FEED),state.[[Indent]],properties, the code unit 0x000A (LINE FEED),stepBack, and"}".
  11. Remove the last element ofstate.[[Stack]].
  12. Setstate.[[Indent]] tostepBack.
  13. Returnfinal.

25.5.2.6 SerializeJSONArray (state,value )

The abstract operation SerializeJSONArray takes argumentsstate (aJSON Serialization Record) andvalue (anECMAScript language value) and returns either anormal completion containing a String or athrow completion. It serializes an array. It performs the following steps when called:

  1. Ifstate.[[Stack]] containsvalue, throw aTypeError exception because the structure is cyclical.
  2. Appendvalue tostate.[[Stack]].
  3. LetstepBack bestate.[[Indent]].
  4. Setstate.[[Indent]] to thestring-concatenation ofstate.[[Indent]] andstate.[[Gap]].
  5. Letpartial be a new emptyList.
  6. Letlen be ? LengthOfArrayLike(value).
  7. Letindex be 0.
  8. Repeat, whileindex <len,
    1. LetstrP be ? SerializeJSONProperty(state, ! ToString(𝔽(index)),value).
    2. IfstrP isundefined, then
      1. Append"null" topartial.
    3. Else,
      1. AppendstrP topartial.
    4. Setindex toindex + 1.
  9. Ifpartial is empty, then
    1. Letfinal be"[]".
  10. Else,
    1. Ifstate.[[Gap]] is the empty String, then
      1. Letproperties be the String value formed by concatenating all the element Strings ofpartial with each adjacent pair of Strings separated with the code unit 0x002C (COMMA). A comma is not inserted either before the first String or after the last String.
      2. Letfinal be thestring-concatenation of"[",properties, and"]".
    2. Else,
      1. Letseparator be thestring-concatenation of the code unit 0x002C (COMMA), the code unit 0x000A (LINE FEED), andstate.[[Indent]].
      2. Letproperties be the String value formed by concatenating all the element Strings ofpartial with each adjacent pair of Strings separated withseparator. Theseparator String is not inserted either before the first String or after the last String.
      3. Letfinal be thestring-concatenation of"[", the code unit 0x000A (LINE FEED),state.[[Indent]],properties, the code unit 0x000A (LINE FEED),stepBack, and"]".
  11. Remove the last element ofstate.[[Stack]].
  12. Setstate.[[Indent]] tostepBack.
  13. Returnfinal.
Note

The representation of arrays includes only the elements in theinterval from+0𝔽 (inclusive) toarray.length (exclusive). Properties whose keys are notarray indices are excluded from the stringification. An array is stringified as an opening LEFT SQUARE BRACKET, elements separated by COMMA, and a closing RIGHT SQUARE BRACKET.

25.5.3 JSON [ %Symbol.toStringTag% ]

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

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


[8]ページ先頭

©2009-2025 Movatter.jp