Await 的运算符优先级是什么?
What is the Operator Precedence of Await?
在 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?
谁能解释一下处理了哪些运算符before/after等待?
现在我觉得我必须添加一堆可能不必要的括号,因为我不确定会处理什么 before/after await
。虽然我知道我应该能够查到这个,但即使是 MDN(文档恕我直言的黄金标准)也没有答案。
一个AwaitExpression is a UnaryExpression并且与delete
、void
、typeof
、+
、-
、[=15具有相同的优先级=] 和 !
,绑定比任何二元运算符都强。
这与 yield
不同,后者的优先级低于逗号运算符以外的任何其他内容。这个design decision是因为yield a+b
和await a + await b
都是被认为比(yield a) + (yield b)
和await (a + b)
更常见的场景。
在 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?
谁能解释一下处理了哪些运算符before/after等待?
现在我觉得我必须添加一堆可能不必要的括号,因为我不确定会处理什么 before/after await
。虽然我知道我应该能够查到这个,但即使是 MDN(文档恕我直言的黄金标准)也没有答案。
一个AwaitExpression is a UnaryExpression并且与delete
、void
、typeof
、+
、-
、[=15具有相同的优先级=] 和 !
,绑定比任何二元运算符都强。
这与 yield
不同,后者的优先级低于逗号运算符以外的任何其他内容。这个design decision是因为yield a+b
和await a + await b
都是被认为比(yield a) + (yield b)
和await (a + b)
更常见的场景。