什么是Await的运算符优先级?

时间:2018-01-12 02:31:14

标签: javascript async-await operator-precedence

在Javascript中,某些运算符先于其他运算符处理:

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 ===

MDN有full breakdown of all operators及其优先级......除了await

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

有人可以解释在等待之前/之后处理哪些运营商?

现在我觉得我必须添加一些可能不必要的括号,因为我不确定在await之前/之后会处理什么。虽然我知道我应该能够看到这一点,即使是MDN(文件恕我直言的黄金标准)也没有答案。

1 个答案:

答案 0 :(得分:16)

AwaitExpressionUnaryExpression,其优先级与deletevoidtypeof+,{{1}相同},-~,绑定比任何二元运算符更强。

这与!不同,yield的优先级低于逗号运算符以外的任何其他值。由于yield a+bawait a + await b被视为比(yield a) + (yield b)await (a + b)更常见,因此制作了design decision