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.
It stands for Parentheses, Exponents, Multiplication/Division, Addition/Subtraction. PEMDAS is often expanded to the mnemonic "Please Excuse My Dear Aunt Sally" in schools.
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-- .
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.
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)
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With