ECMA-262 (12th Edition) ECMAScript 2021 Language Specification - page 38

 

  Главная      Manuals     ECMA-262 (12th Edition) ECMAScript 2021 Language Specification

 

Search            copyright infringement  

 

 

 

 

 

 

 

 

 

 

 

Content      ..     36      37      38      39     ..

 

 

 

ECMA-262 (12th Edition) ECMAScript 2021 Language Specification - page 38

 

 

LeftHandSideExpression

[?Yield, ?Await]

 

??=

 

AssignmentExpression

[?In, ?Yield, ?Await]

AssignmentOperator

 

:

 

one of

*=

 

/=

 

%=

 

+=

 

-=

 

<<=

 

>>=

 

>>>=

 

&=

 

^=

 

|=

 

**=

In certain circumstances when processing an instance of the production 

AssignmentExpression

[In, Yield, Await]

 

:

 

LeftHandSideExpression

[?Yield, ?Await]

 

=

AssignmentExpression

[?In, ?Yield, ?Await]

 

the interpretation of 

LeftHandSideExpression

 is refined using the following grammar:

AssignmentPattern

[Yield, Await]

 

:

ObjectAssignmentPattern

[?Yield, ?Await]

ArrayAssignmentPattern

[?Yield, ?Await]

ObjectAssignmentPattern

[Yield, Await]

 

:

{

 

}

{

 

AssignmentRestProperty

[?Yield, ?Await]

 

}

{

 

AssignmentPropertyList

[?Yield, ?Await]

 

}

{

 

AssignmentPropertyList

[?Yield, ?Await]

 

,

 

AssignmentRestProperty

[?Yield, ?Await]

opt

 

}

ArrayAssignmentPattern

[Yield, Await]

 

:

[

 

Elision

opt

 

AssignmentRestElement

[?Yield, ?Await]

opt

 

]

[

 

AssignmentElementList

[?Yield, ?Await]

 

]

[

 

AssignmentElementList

[?Yield, ?Await]

 

,

 

Elision

opt

 

AssignmentRestElement

[?Yield, ?Await]

opt

 

]

AssignmentRestProperty

[Yield, Await]

 

:

...

 

DestructuringAssignmentTarget

[?Yield, ?Await]

AssignmentPropertyList

[Yield, Await]

 

:

AssignmentProperty

[?Yield, ?Await]

AssignmentPropertyList

[?Yield, ?Await]

 

,

 

AssignmentProperty

[?Yield, ?Await]

AssignmentElementList

[Yield, Await]

 

:

AssignmentElisionElement

[?Yield, ?Await]

AssignmentElementList

[?Yield, ?Await]

 

,

 

AssignmentElisionElement

[?Yield, ?Await]

AssignmentElisionElement

[Yield, Await]

 

:

Elision

opt

 

AssignmentElement

[?Yield, ?Await]

AssignmentProperty

[Yield, Await]

 

:

IdentifierReference

[?Yield, ?Await]

 

Initializer

[+In, ?Yield, ?Await]

opt

PropertyName

[?Yield, ?Await]

 

:

 

AssignmentElement

[?Yield, ?Await]

AssignmentElement

[Yield, Await]

 

:

DestructuringAssignmentTarget

[?Yield, ?Await]

 

Initializer

[+In, ?Yield, ?Await]

opt

AssignmentRestElement

[Yield, Await]

 

:

...

 

DestructuringAssignmentTarget

[?Yield, ?Await]

DestructuringAssignmentTarget

[Yield, Await]

 

:

LeftHandSideExpression

[?Yield, ?Await]

 

826

Expression

[In, Yield, Await]

 

:

AssignmentExpression

[?In, ?Yield, ?Await]

Expression

[?In, ?Yield, ?Await]

 

,

 

AssignmentExpression

[?In, ?Yield, ?Await]

Statement

[Yield, Await, Return]

 

:

BlockStatement

[?Yield, ?Await, ?Return]

VariableStatement

[?Yield, ?Await]

EmptyStatement
ExpressionStatement

[?Yield, ?Await]

IfStatement

[?Yield, ?Await, ?Return]

BreakableStatement

[?Yield, ?Await, ?Return]

ContinueStatement

[?Yield, ?Await]

BreakStatement

[?Yield, ?Await]

[+Return]

ReturnStatement

[?Yield, ?Await]

WithStatement

[?Yield, ?Await, ?Return]

LabelledStatement

[?Yield, ?Await, ?Return]

ThrowStatement

[?Yield, ?Await]

TryStatement

[?Yield, ?Await, ?Return]

DebuggerStatement

Declaration

[Yield, Await]

 

:

HoistableDeclaration

[?Yield, ?Await, ~Default]

ClassDeclaration

[?Yield, ?Await, ~Default]

LexicalDeclaration

[+In, ?Yield, ?Await]

HoistableDeclaration

[Yield, Await, Default]

 

:

FunctionDeclaration

[?Yield, ?Await, ?Default]

GeneratorDeclaration

[?Yield, ?Await, ?Default]

AsyncFunctionDeclaration

[?Yield, ?Await, ?Default]

AsyncGeneratorDeclaration

[?Yield, ?Await, ?Default]

BreakableStatement

[Yield, Await, Return]

 

:

IterationStatement

[?Yield, ?Await, ?Return]

SwitchStatement

[?Yield, ?Await, ?Return]

BlockStatement

[Yield, Await, Return]

 

:

Block

[?Yield, ?Await, ?Return]

Block

[Yield, Await, Return]

 

:

{

 

StatementList

[?Yield, ?Await, ?Return]

opt

 

}

StatementList

[Yield, Await, Return]

 

:

StatementListItem

[?Yield, ?Await, ?Return]

StatementList

[?Yield, ?Await, ?Return]

 

StatementListItem

[?Yield, ?Await, ?Return]

StatementListItem

[Yield, Await, Return]

 

:

A.3  Statements

827

Statement

[?Yield, ?Await, ?Return]

Declaration

[?Yield, ?Await]

LexicalDeclaration

[In, Yield, Await]

 

:

LetOrConst

 

BindingList

[?In, ?Yield, ?Await]

 

;

LetOrConst

 

:

let

const

BindingList

[In, Yield, Await]

 

:

LexicalBinding

[?In, ?Yield, ?Await]

BindingList

[?In, ?Yield, ?Await]

 

,

 

LexicalBinding

[?In, ?Yield, ?Await]

LexicalBinding

[In, Yield, Await]

 

:

BindingIdentifier

[?Yield, ?Await]

 

Initializer

[?In, ?Yield, ?Await]

opt

BindingPattern

[?Yield, ?Await]

 

Initializer

[?In, ?Yield, ?Await]

VariableStatement

[Yield, Await]

 

:

var

 

VariableDeclarationList

[+In, ?Yield, ?Await]

 

;

VariableDeclarationList

[In, Yield, Await]

 

:

VariableDeclaration

[?In, ?Yield, ?Await]

VariableDeclarationList

[?In, ?Yield, ?Await]

 

,

 

VariableDeclaration

[?In, ?Yield, ?Await]

VariableDeclaration

[In, Yield, Await]

 

:

BindingIdentifier

[?Yield, ?Await]

 

Initializer

[?In, ?Yield, ?Await]

opt

BindingPattern

[?Yield, ?Await]

 

Initializer

[?In, ?Yield, ?Await]

BindingPattern

[Yield, Await]

 

:

ObjectBindingPattern

[?Yield, ?Await]

ArrayBindingPattern

[?Yield, ?Await]

ObjectBindingPattern

[Yield, Await]

 

:

{

 

}

{

 

BindingRestProperty

[?Yield, ?Await]

 

}

{

 

BindingPropertyList

[?Yield, ?Await]

 

}

{

 

BindingPropertyList

[?Yield, ?Await]

 

,

 

BindingRestProperty

[?Yield, ?Await]

opt

 

}

ArrayBindingPattern

[Yield, Await]

 

:

[

 

Elision

opt

 

BindingRestElement

[?Yield, ?Await]

opt

 

]

[

 

BindingElementList

[?Yield, ?Await]

 

]

[

 

BindingElementList

[?Yield, ?Await]

 

,

 

Elision

opt

 

BindingRestElement

[?Yield, ?Await]

opt

 

]

BindingRestProperty

[Yield, Await]

 

:

...

 

BindingIdentifier

[?Yield, ?Await]

BindingPropertyList

[Yield, Await]

 

:

BindingProperty

[?Yield, ?Await]

BindingPropertyList

[?Yield, ?Await]

 

,

 

BindingProperty

[?Yield, ?Await]

BindingElementList

[Yield, Await]

 

:

BindingElisionElement

[?Yield, ?Await]

BindingElementList

[?Yield, ?Await]

 

,

 

BindingElisionElement

[?Yield, ?Await]

828

BindingElisionElement

[Yield, Await]

 

:

Elision

opt

 

BindingElement

[?Yield, ?Await]

BindingProperty

[Yield, Await]

 

:

SingleNameBinding

[?Yield, ?Await]

PropertyName

[?Yield, ?Await]

 

:

 

BindingElement

[?Yield, ?Await]

BindingElement

[Yield, Await]

 

:

SingleNameBinding

[?Yield, ?Await]

BindingPattern

[?Yield, ?Await]

 

Initializer

[+In, ?Yield, ?Await]

opt

SingleNameBinding

[Yield, Await]

 

:

BindingIdentifier

[?Yield, ?Await]

 

Initializer

[+In, ?Yield, ?Await]

opt

BindingRestElement

[Yield, Await]

 

:

...

 

BindingIdentifier

[?Yield, ?Await]

...

 

BindingPattern

[?Yield, ?Await]

EmptyStatement

 

:

;

ExpressionStatement

[Yield, Await]

 

:

[lookahead 

 { 

{

function

async

 [no 

LineTerminator

 here]  

function

class

let

 

[

 }]

Expression

[+In, ?Yield, ?Await]

 

;

IfStatement

[Yield, Await, Return]

 

:

if

 

(

 

Expression

[+In, ?Yield, ?Await]

 

)

 

Statement

[?Yield, ?Await, ?Return]

 

else

Statement

[?Yield, ?Await, ?Return]

if

 

(

 

Expression

[+In, ?Yield, ?Await]

 

)

 

Statement

[?Yield, ?Await, ?Return]

 [lookahead 

 

else

]

IterationStatement

[Yield, Await, Return]

 

:

DoWhileStatement

[?Yield, ?Await, ?Return]

WhileStatement

[?Yield, ?Await, ?Return]

ForStatement

[?Yield, ?Await, ?Return]

ForInOfStatement

[?Yield, ?Await, ?Return]

DoWhileStatement

[Yield, Await, Return]

 

:

do

 

Statement

[?Yield, ?Await, ?Return]

 

while

 

(

 

Expression

[+In, ?Yield, ?Await]

 

)

 

;

WhileStatement

[Yield, Await, Return]

 

:

while

 

(

 

Expression

[+In, ?Yield, ?Await]

 

)

 

Statement

[?Yield, ?Await, ?Return]

ForStatement

[Yield, Await, Return]

 

:

for

 

(

 [lookahead 

 

let

 

[

]  

Expression

[~In, ?Yield, ?Await]

opt

 

;

 

Expression

[+In, ?Yield, ?Await]

opt

 

;

Expression

[+In, ?Yield, ?Await]

opt

 

)

 

Statement

[?Yield, ?Await, ?Return]

for

 

(

 

var

 

VariableDeclarationList

[~In, ?Yield, ?Await]

 

;

 

Expression

[+In, ?Yield, ?Await]

opt

 

;

Expression

[+In, ?Yield, ?Await]

opt

 

)

 

Statement

[?Yield, ?Await, ?Return]

for

 

(

 

LexicalDeclaration

[~In, ?Yield, ?Await]

 

Expression

[+In, ?Yield, ?Await]

opt

 

;

Expression

[+In, ?Yield, ?Await]

opt

 

)

 

Statement

[?Yield, ?Await, ?Return]

ForInOfStatement

[Yield, Await, Return]

 

:

for

 

(

 [lookahead 

 

let

 

[

]  

LeftHandSideExpression

[?Yield, ?Await]

 

in

 

Expression

[+In, ?Yield, ?Await]

 

)

Statement

[?Yield, ?Await, ?Return]

829

for

 

(

 

var

 

ForBinding

[?Yield, ?Await]

 

in

 

Expression

[+In, ?Yield, ?Await]

 

)

Statement

[?Yield, ?Await, ?Return]

for

 

(

 

ForDeclaration

[?Yield, ?Await]

 

in

 

Expression

[+In, ?Yield, ?Await]

 

)

 

Statement

[?Yield, ?Await, ?Return]

for

 

(

 [lookahead 

 { 

let

async

 

of

 }]  

LeftHandSideExpression

[?Yield, ?Await]

 

of

AssignmentExpression

[+In, ?Yield, ?Await]

 

)

 

Statement

[?Yield, ?Await, ?Return]

for

 

(

 

var

 

ForBinding

[?Yield, ?Await]

 

of

 

AssignmentExpression

[+In, ?Yield, ?Await]

 

)

Statement

[?Yield, ?Await, ?Return]

for

 

(

 

ForDeclaration

[?Yield, ?Await]

 

of

 

AssignmentExpression

[+In, ?Yield, ?Await]

 

)

Statement

[?Yield, ?Await, ?Return]

[+Await]

 

for

 

await

 

(

 [lookahead 

 

let

]  

LeftHandSideExpression

[?Yield, ?Await]

 

of

AssignmentExpression

[+In, ?Yield, ?Await]

 

)

 

Statement

[?Yield, ?Await, ?Return]

[+Await]

 

for

 

await

 

(

 

var

 

ForBinding

[?Yield, ?Await]

 

of

 

AssignmentExpression

[+In, ?Yield, ?Await]

 

)

Statement

[?Yield, ?Await, ?Return]

[+Await]

 

for

 

await

 

(

 

ForDeclaration

[?Yield, ?Await]

 

of

 

AssignmentExpression

[+In, ?Yield, ?Await]

 

)

Statement

[?Yield, ?Await, ?Return]

ForDeclaration

[Yield, Await]

 

:

LetOrConst

 

ForBinding

[?Yield, ?Await]

ForBinding

[Yield, Await]

 

:

BindingIdentifier

[?Yield, ?Await]

BindingPattern

[?Yield, ?Await]

ContinueStatement

[Yield, Await]

 

:

continue

 

;

continue

 [no 

LineTerminator

 here]  

LabelIdentifier

[?Yield, ?Await]

 

;

BreakStatement

[Yield, Await]

 

:

break

 

;

break

 [no 

LineTerminator

 here]  

LabelIdentifier

[?Yield, ?Await]

 

;

ReturnStatement

[Yield, Await]

 

:

return

 

;

return

 [no 

LineTerminator

 here]  

Expression

[+In, ?Yield, ?Await]

 

;

WithStatement

[Yield, Await, Return]

 

:

with

 

(

 

Expression

[+In, ?Yield, ?Await]

 

)

 

Statement

[?Yield, ?Await, ?Return]

SwitchStatement

[Yield, Await, Return]

 

:

switch

 

(

 

Expression

[+In, ?Yield, ?Await]

 

)

 

CaseBlock

[?Yield, ?Await, ?Return]

CaseBlock

[Yield, Await, Return]

 

:

{

 

CaseClauses

[?Yield, ?Await, ?Return]

opt

 

}

{

 

CaseClauses

[?Yield, ?Await, ?Return]

opt

 

DefaultClause

[?Yield, ?Await, ?Return]

CaseClauses

[?Yield, ?Await, ?Return]

opt

 

}

CaseClauses

[Yield, Await, Return]

 

:

CaseClause

[?Yield, ?Await, ?Return]

CaseClauses

[?Yield, ?Await, ?Return]

 

CaseClause

[?Yield, ?Await, ?Return]

CaseClause

[Yield, Await, Return]

 

:

830

case

 

Expression

[+In, ?Yield, ?Await]

 

:

 

StatementList

[?Yield, ?Await, ?Return]

opt

DefaultClause

[Yield, Await, Return]

 

:

default

 

:

 

StatementList

[?Yield, ?Await, ?Return]

opt

LabelledStatement

[Yield, Await, Return]

 

:

LabelIdentifier

[?Yield, ?Await]

 

:

 

LabelledItem

[?Yield, ?Await, ?Return]

LabelledItem

[Yield, Await, Return]

 

:

Statement

[?Yield, ?Await, ?Return]

FunctionDeclaration

[?Yield, ?Await, ~Default]

ThrowStatement

[Yield, Await]

 

:

throw

 [no 

LineTerminator

 here]  

Expression

[+In, ?Yield, ?Await]

 

;

TryStatement

[Yield, Await, Return]

 

:

try

 

Block

[?Yield, ?Await, ?Return]

 

Catch

[?Yield, ?Await, ?Return]

try

 

Block

[?Yield, ?Await, ?Return]

 

Finally

[?Yield, ?Await, ?Return]

try

 

Block

[?Yield, ?Await, ?Return]

 

Catch

[?Yield, ?Await, ?Return]

 

Finally

[?Yield, ?Await, ?Return]

Catch

[Yield, Await, Return]

 

:

catch

 

(

 

CatchParameter

[?Yield, ?Await]

 

)

 

Block

[?Yield, ?Await, ?Return]

catch

 

Block

[?Yield, ?Await, ?Return]

Finally

[Yield, Await, Return]

 

:

finally

 

Block

[?Yield, ?Await, ?Return]

CatchParameter

[Yield, Await]

 

:

BindingIdentifier

[?Yield, ?Await]

BindingPattern

[?Yield, ?Await]

DebuggerStatement

 

:

debugger

 

;

UniqueFormalParameters

[Yield, Await]

 

:

FormalParameters

[?Yield, ?Await]

FormalParameters

[Yield, Await]

 

:

[empty]

FunctionRestParameter

[?Yield, ?Await]

FormalParameterList

[?Yield, ?Await]

FormalParameterList

[?Yield, ?Await]

 

,

FormalParameterList

[?Yield, ?Await]

 

,

 

FunctionRestParameter

[?Yield, ?Await]

FormalParameterList

[Yield, Await]

 

:

FormalParameter

[?Yield, ?Await]

FormalParameterList

[?Yield, ?Await]

 

,

 

FormalParameter

[?Yield, ?Await]

FunctionRestParameter

[Yield, Await]

 

:

BindingRestElement

[?Yield, ?Await]

FormalParameter

[Yield, Await]

 

:

A.4  Functions and Classes

831

BindingElement

[?Yield, ?Await]

FunctionDeclaration

[Yield, Await, Default]

 

:

function

 

BindingIdentifier

[?Yield, ?Await]

 

(

 

FormalParameters

[~Yield, ~Await]

 

)

 

{

FunctionBody

[~Yield, ~Await]

 

}

[+Default]

 

function

 

(

 

FormalParameters

[~Yield, ~Await]

 

)

 

{

 

FunctionBody

[~Yield, ~Await]

 

}

FunctionExpression

 

:

function

 

BindingIdentifier

[~Yield, ~Await]

opt

 

(

 

FormalParameters

[~Yield, ~Await]

 

)

 

{

FunctionBody

[~Yield, ~Await]

 

}

FunctionBody

[Yield, Await]

 

:

FunctionStatementList

[?Yield, ?Await]

FunctionStatementList

[Yield, Await]

 

:

StatementList

[?Yield, ?Await, +Return]

opt

ArrowFunction

[In, Yield, Await]

 

:

ArrowParameters

[?Yield, ?Await]

 [no 

LineTerminator

 here]  

=>

 

ConciseBody

[?In]

ArrowParameters

[Yield, Await]

 

:

BindingIdentifier

[?Yield, ?Await]

CoverParenthesizedExpressionAndArrowParameterList

[?Yield, ?Await]

ConciseBody

[In]

 

:

[lookahead 

 

{

]  

ExpressionBody

[?In, ~Await]

{

 

FunctionBody

[~Yield, ~Await]

 

}

ExpressionBody

[In, Await]

 

:

AssignmentExpression

[?In, ~Yield, ?Await]

When processing an instance of the production 

ArrowParameters

[Yield, Await]

 

:

 

CoverParenthesizedExpressionAndArrowParameterList

[?Yield, ?Await]

 

the interpretation of 

CoverParenthesizedExpressionAndArrowParameterList

 is refined using the following grammar:

ArrowFormalParameters

[Yield, Await]

 

:

(

 

UniqueFormalParameters

[?Yield, ?Await]

 

)

 

AsyncArrowFunction

[In, Yield, Await]

 

:

async

 [no 

LineTerminator

 here]  

AsyncArrowBindingIdentifier

[?Yield]

 [no 

LineTerminator

 here]  

=>

AsyncConciseBody

[?In]

CoverCallExpressionAndAsyncArrowHead

[?Yield, ?Await]

 [no 

LineTerminator

 here]  

=>

 

AsyncConciseBody

[?In]

AsyncConciseBody

[In]

 

:

[lookahead 

 

{

]  

ExpressionBody

[?In, +Await]

{

 

AsyncFunctionBody

 

}

AsyncArrowBindingIdentifier

[Yield]

 

:

BindingIdentifier

[?Yield, +Await]

CoverCallExpressionAndAsyncArrowHead

[Yield, Await]

 

:

MemberExpression

[?Yield, ?Await]

 

Arguments

[?Yield, ?Await]

832

When processing an instance of the production 

AsyncArrowFunction

[In, Yield, Await]

 

:

 

CoverCallExpressionAndAsyncArrowHead

[?Yield, ?Await]

 [no 

LineTerminator

here]  

=>

 

AsyncConciseBody

[?In]

 

the interpretation of 

CoverCallExpressionAndAsyncArrowHead

 is refined using the following grammar:

AsyncArrowHead

 

:

async

 [no 

LineTerminator

 here]  

ArrowFormalParameters

[~Yield, +Await]

 

MethodDefinition

[Yield, Await]

 

:

PropertyName

[?Yield, ?Await]

 

(

 

UniqueFormalParameters

[~Yield, ~Await]

 

)

 

{

 

FunctionBody

[~Yield, ~Await]

 

}

GeneratorMethod

[?Yield, ?Await]

AsyncMethod

[?Yield, ?Await]

AsyncGeneratorMethod

[?Yield, ?Await]

get

 

PropertyName

[?Yield, ?Await]

 

(

 

)

 

{

 

FunctionBody

[~Yield, ~Await]

 

}

set

 

PropertyName

[?Yield, ?Await]

 

(

 

PropertySetParameterList

 

)

 

{

 

FunctionBody

[~Yield, ~Await]

 

}

PropertySetParameterList

 

:

FormalParameter

[~Yield, ~Await]

GeneratorMethod

[Yield, Await]

 

:

*

 

PropertyName

[?Yield, ?Await]

 

(

 

UniqueFormalParameters

[+Yield, ~Await]

 

)

 

{

 

GeneratorBody

 

}

GeneratorDeclaration

[Yield, Await, Default]

 

:

function

 

*

 

BindingIdentifier

[?Yield, ?Await]

 

(

 

FormalParameters

[+Yield, ~Await]

 

)

 

{

 

GeneratorBody

 

}

[+Default]

 

function

 

*

 

(

 

FormalParameters

[+Yield, ~Await]

 

)

 

{

 

GeneratorBody

 

}

GeneratorExpression

 

:

function

 

*

 

BindingIdentifier

[+Yield, ~Await]

opt

 

(

 

FormalParameters

[+Yield, ~Await]

 

)

 

{

 

GeneratorBody

 

}

GeneratorBody

 

:

FunctionBody

[+Yield, ~Await]

YieldExpression

[In, Await]

 

:

yield

yield

 [no 

LineTerminator

 here]  

AssignmentExpression

[?In, +Yield, ?Await]

yield

 [no 

LineTerminator

 here]  

*

 

AssignmentExpression

[?In, +Yield, ?Await]

AsyncGeneratorMethod

[Yield, Await]

 

:

async

 [no 

LineTerminator

 here]  

*

 

PropertyName

[?Yield, ?Await]

 

(

 

UniqueFormalParameters

[+Yield, +Await]

 

)

{

 

AsyncGeneratorBody

 

}

AsyncGeneratorDeclaration

[Yield, Await, Default]

 

:

async

 [no 

LineTerminator

 here]  

function

 

*

 

BindingIdentifier

[?Yield, ?Await]

 

(

FormalParameters

[+Yield, +Await]

 

)

 

{

 

AsyncGeneratorBody

 

}

[+Default]

 

async

 [no 

LineTerminator

 here]  

function

 

*

 

(

 

FormalParameters

[+Yield, +Await]

 

)

 

{

AsyncGeneratorBody

 

}

AsyncGeneratorExpression

 

:

async

 [no 

LineTerminator

 here]  

function

 

*

 

BindingIdentifier

[+Yield, +Await]

opt

 

(

FormalParameters

[+Yield, +Await]

 

)

 

{

 

AsyncGeneratorBody

 

}

AsyncGeneratorBody

 

:

833

FunctionBody

[+Yield, +Await]

AsyncFunctionDeclaration

[Yield, Await, Default]

 

:

async

 [no 

LineTerminator

 here]  

function

 

BindingIdentifier

[?Yield, ?Await]

 

(

 

FormalParameters

[~Yield, +Await]

)

 

{

 

AsyncFunctionBody

 

}

[+Default]

 

async

 [no 

LineTerminator

 here]  

function

 

(

 

FormalParameters

[~Yield, +Await]

 

)

 

{

 

AsyncFunctionBody

}

AsyncFunctionExpression

 

:

async

 [no 

LineTerminator

 here]  

function

 

BindingIdentifier

[~Yield, +Await]

opt

 

(

FormalParameters

[~Yield, +Await]

 

)

 

{

 

AsyncFunctionBody

 

}

AsyncMethod

[Yield, Await]

 

:

async

 [no 

LineTerminator

 here]  

PropertyName

[?Yield, ?Await]

 

(

 

UniqueFormalParameters

[~Yield, +Await]

 

)

 

{

AsyncFunctionBody

 

}

AsyncFunctionBody

 

:

FunctionBody

[~Yield, +Await]

AwaitExpression

[Yield]

 

:

await

 

UnaryExpression

[?Yield, +Await]

ClassDeclaration

[Yield, Await, Default]

 

:

class

 

BindingIdentifier

[?Yield, ?Await]

 

ClassTail

[?Yield, ?Await]

[+Default]

 

class

 

ClassTail

[?Yield, ?Await]

ClassExpression

[Yield, Await]

 

:

class

 

BindingIdentifier

[?Yield, ?Await]

opt

 

ClassTail

[?Yield, ?Await]

ClassTail

[Yield, Await]

 

:

ClassHeritage

[?Yield, ?Await]

opt

 

{

 

ClassBody

[?Yield, ?Await]

opt

 

}

ClassHeritage

[Yield, Await]

 

:

extends

 

LeftHandSideExpression

[?Yield, ?Await]

ClassBody

[Yield, Await]

 

:

ClassElementList

[?Yield, ?Await]

ClassElementList

[Yield, Await]

 

:

ClassElement

[?Yield, ?Await]

ClassElementList

[?Yield, ?Await]

 

ClassElement

[?Yield, ?Await]

ClassElement

[Yield, Await]

 

:

MethodDefinition

[?Yield, ?Await]

static

 

MethodDefinition

[?Yield, ?Await]

;

Script

 

:

ScriptBody

opt

ScriptBody

 

:

StatementList

[~Yield, ~Await, ~Return]

Module

 

:

A.5  Scripts and Modules

834

uri

 

:::

uriCharacters

opt

uriCharacters

 

:::

uriCharacter

 

uriCharacters

opt

uriCharacter

 

:::

uriReserved
uriUnescaped
uriEscaped

uriReserved

 

:::

 

one of

;

 

/

 

?

 

:

 

@

 

&

 

=

 

+

 

$

 

,

uriUnescaped

 

:::

uriAlpha
DecimalDigit
uriMark

uriEscaped

 

:::

%

 

HexDigit

 

HexDigit

uriAlpha

 

:::

 

one of

a

 

b

 

c

 

d

 

e

 

f

 

g

 

h

 

i

 

j

 

k

 

l

 

m

 

n

 

o

 

p

 

q

 

r

 

s

 

t

 

u

 

v

 

w

 

x

 

y

 

z

 

A

 

B

 

C

 

D

 

E

 

F

 

G

 

H

 

I

 

J

 

K

 

L

 

M

 

N

 

O

 

P

 

Q

 

R

 

S

 

T

 

U

 

V

 

W

 

X

 

Y

 

Z

uriMark

 

:::

 

one of

-

 

_

 

.

 

!

 

~

 

*

 

'

 

(

 

)

Pattern

[U, N]

 

::

Disjunction

[?U, ?N]

Disjunction

[U, N]

 

::

Alternative

[?U, ?N]

Alternative

[?U, ?N]

 

|

 

Disjunction

[?U, ?N]

Alternative

[U, N]

 

::

[empty]

Alternative

[?U, ?N]

 

Term

[?U, ?N]

Term

[U, N]

 

::

Assertion

[?U, ?N]

Atom

[?U, ?N]

Atom

[?U, ?N]

 

Quantifier

Assertion

[U, N]

 

::

^

$

\

 

b

\

 

B

(

 

?

 

=

 

Disjunction

[?U, ?N]

 

)

(

 

?

 

!

 

Disjunction

[?U, ?N]

 

)

A.7  Universal Resource Identifier Character Classes

A.8  Regular Expressions

837

(

 

?

 

<=

 

Disjunction

[?U, ?N]

 

)

(

 

?

 

<!

 

Disjunction

[?U, ?N]

 

)

Quantifier

 

::

QuantifierPrefix
QuantifierPrefix

 

?

QuantifierPrefix

 

::

*

+

?

{

 

DecimalDigits

[~Sep]

 

}

{

 

DecimalDigits

[~Sep]

 

,

 

}

{

 

DecimalDigits

[~Sep]

 

,

 

DecimalDigits

[~Sep]

 

}

Atom

[U, N]

 

::

PatternCharacter

.

\

 

AtomEscape

[?U, ?N]

CharacterClass

[?U]

(

 

GroupSpecifier

[?U]

 

Disjunction

[?U, ?N]

 

)

(

 

?

 

:

 

Disjunction

[?U, ?N]

 

)

SyntaxCharacter

 

::

 

one of

^

 

$

 

\

 

.

 

*

 

+

 

?

 

(

 

)

 

[

 

]

 

{

 

}

 

|

PatternCharacter

 

::

SourceCharacter

 but not 

SyntaxCharacter

AtomEscape

[U, N]

 

::

DecimalEscape
CharacterClassEscape

[?U]

CharacterEscape

[?U]

[+N]

 

k

 

GroupName

[?U]

CharacterEscape

[U]

 

::

ControlEscape

c

 

ControlLetter

0

 [lookahead 

 

DecimalDigit

]

HexEscapeSequence
RegExpUnicodeEscapeSequence

[?U]

IdentityEscape

[?U]

ControlEscape

 

::

 

one of

f

 

n

 

r

 

t

 

v

ControlLetter

 

::

 

one of

a

 

b

 

c

 

d

 

e

 

f

 

g

 

h

 

i

 

j

 

k

 

l

 

m

 

n

 

o

 

p

 

q

 

r

 

s

 

t

 

u

 

v

 

w

 

x

 

y

 

z

 

A

 

B

 

C

 

D

 

E

 

F

 

G

 

H

 

I

 

J

 

K

 

L

 

M

 

N

 

O

 

P

 

Q

 

R

 

S

 

T

 

U

 

V

 

W

 

X

 

Y

 

Z

GroupSpecifier

[U]

 

::

[empty]

?

 

GroupName

[?U]

838

GroupName

[U]

 

::

<

 

RegExpIdentifierName

[?U]

 

>

RegExpIdentifierName

[U]

 

::

RegExpIdentifierStart

[?U]

RegExpIdentifierName

[?U]

 

RegExpIdentifierPart

[?U]

RegExpIdentifierStart

[U]

 

::

UnicodeIDStart

$

_

\

 

RegExpUnicodeEscapeSequence

[+U]

[~U]

 

UnicodeLeadSurrogate

 

UnicodeTrailSurrogate

RegExpIdentifierPart

[U]

 

::

UnicodeIDContinue

$

\

 

RegExpUnicodeEscapeSequence

[+U]

[~U]

 

UnicodeLeadSurrogate

 

UnicodeTrailSurrogate

<ZWNJ>

<ZWJ>

RegExpUnicodeEscapeSequence

[U]

 

::

[+U]

 

u

 

HexLeadSurrogate

 

\u

 

HexTrailSurrogate

[+U]

 

u

 

HexLeadSurrogate

[+U]

 

u

 

HexTrailSurrogate

[+U]

 

u

 

HexNonSurrogate

[~U]

 

u

 

Hex4Digits

[+U]

 

u{

 

CodePoint

 

}

UnicodeLeadSurrogate

 

::

any Unicode code point in the inclusive range 0xD800 to 0xDBFF

UnicodeTrailSurrogate

 

::

any Unicode code point in the inclusive range 0xDC00 to 0xDFFF

Each 

\u

\u

 

HexTrailSurrogate

 for which the choice of associated 

uu

 

HexLeadSurrogate

 is ambiguous shall be associated with

the nearest possible 

uu

 

HexLeadSurrogate

 that would otherwise have no corresponding 

\u

\u

 

HexTrailSurrogate

.

 

HexLeadSurrogate

 

::

Hex4Digits

 but only if the MV of 

Hex4Digits

 is in the inclusive range 0xD800 to 0xDBFF

HexTrailSurrogate

 

::

Hex4Digits

 but only if the MV of 

Hex4Digits

 is in the inclusive range 0xDC00 to 0xDFFF

HexNonSurrogate

 

::

Hex4Digits

 but only if the MV of 

Hex4Digits

 is not in the inclusive range 0xD800 to 0xDFFF

IdentityEscape

[U]

 

::

[+U]

SyntaxCharacter

[+U]

/

[~U]

SourceCharacter

 but not 

UnicodeIDContinue

839

ClassAtomNoDash

[?U]

 

-

 

ClassAtom

[?U]

 

ClassRanges

[?U]

ClassAtom

[U]

 

::

-

ClassAtomNoDash

[?U]

ClassAtomNoDash

[U]

 

::

SourceCharacter

 but not one of 

\

 or 

]

 or 

-

\

 

ClassEscape

[?U]

ClassEscape

[U]

 

::

b

[+U]

-

CharacterClassEscape

[?U]

CharacterEscape

[?U]

The ECMAScript language syntax and semantics defined in this annex are required when the ECMAScript 

host

 is a

web browser. The content of this annex is normative but optional if the ECMAScript 

host

 is not a web browser.

NOTE

The syntax and semantics of 

12.8.3

 is extended as follows except that this extension is not allowed for 

strict mode

code

:

NumericLiteral

 

::

DecimalLiteral
DecimalBigIntegerLiteral

This annex describes various legacy features and other characteristics of web browser
ECMAScript hosts. All of the language features and behaviours specified in this annex have one
or more undesirable characteristics and in the absence of legacy usage would be removed from
this specification. However, the usage of these features by large numbers of existing web pages
means that web browsers must continue to support them. The specifications in this annex define
the requirements for interoperable implementations of these legacy features.

These features are not considered part of the core ECMAScript language. Programmers should
not use or assume the existence of these features and behaviours when writing new ECMAScript
code. ECMAScript implementations are discouraged from implementing these features unless
the implementation is part of a web browser or is required to run the same legacy ECMAScript
code that web browsers encounter.

B  Additional ECMAScript Features for Web Browsers

B.1  Additional Syntax

B.1.1  Numeric Literals

Syntax

841

 

 

 

 

 

 

 

Content      ..     36      37      38      39     ..