mac*_*ost 20 javascript operator-precedence async-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 ===
Run Code Online (Sandbox Code Playgroud)
MDN具有所有运营商及其优先级的完整细分 ......除外await
.
await getFoo() * 2; // await (getFoo() * 2) or (await getFoo()) * 2?
await getFoo() === 5; // await (getFoo() === 5) or (await getFoo()) === 5?
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释在等待之前/之后处理哪些运营商?
现在我觉得我必须添加一些可能不必要的括号,因为我不确定在之前/之后会处理什么await
.虽然我知道我应该能够看到这一点,即使是MDN(文件IMHO的黄金标准)也没有答案.
Ber*_*rgi 18
一个AwaitExpression是UnaryExpression并且具有相同的优先级delete
,void
,typeof
,+
,-
,~
,和!
,结合比任何二进制运算符更强.
这与yield
其他除了逗号运算符之外的优先级低的优先级不同.这种设计决策作出,因为这两个yield a+b
和await a + await b
被认为是超过常见的情况(yield a) + (yield b)
和await (a + b)
.