Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the Operator Precedence of Await?

In Javascript certain operators are processed before others:

1 + 2 * 3 // 1 + (2 * 3) // 7 because * has higher precedence than +  1 === 0 + 1 // 1 === (0 + 1) // true because + has a higher precedence than === 

The MDN has a full breakdown of all operators and their precedence ... except await.

await getFoo() * 2; // await (getFoo() * 2) or (await getFoo()) * 2? await getFoo() === 5; // await (getFoo() === 5) or (await getFoo()) === 5? 

Can anyone explain which operators are processed before/after await?

Right now I feel like I have to add a bunch of parenthesis that are probably unnecessary because I'm not sure what will get handled before/after await. And while I know I should just be able to look this up, even MDN (the gold standard of documentation IMHO) doesn't have the answer.

like image 581
machineghost Avatar asked Jan 12 '18 02:01

machineghost


People also ask

What is the order of precedence of operators?

It stands for Parentheses, Exponents, Multiplication/Division, Addition/Subtraction. PEMDAS is often expanded to the mnemonic "Please Excuse My Dear Aunt Sally" in schools.

Which operator (* or has higher precedence?

The logical-AND operator ( && ) has higher precedence than the logical-OR operator ( || ), so q && r is grouped as an operand. Since the logical operators guarantee evaluation of operands from left to right, q && r is evaluated before s-- .

What is operator precedence in C++?

Operator precedence specifies the order of operations in expressions that contain more than one operator. Operator associativity specifies whether, in an expression that contains multiple operators with the same precedence, an operand is grouped with the one on its left or the one on its right.


Video Answer


1 Answers

An AwaitExpression is a UnaryExpression and has the same precedence as delete, void, typeof, +, -, ~, and !, binding stronger than any binary operator.

This is unlike yield which has a precedence lower than anything else except the comma operator. This design decision was made because both yield a+b and await a + await b are scenarios thought to be more common than (yield a) + (yield b) and await (a + b).

like image 178
Bergi Avatar answered Oct 04 '22 18:10

Bergi