What is the Operator Precedence of Await?

时光毁灭记忆、已成空白 提交于 2019-12-18 03:04:38

问题


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.


回答1:


An AwaitExpression is an 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).



来源:https://stackoverflow.com/questions/48218744/what-is-the-operator-precedence-of-await

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!