Что такое приоритет оператора в ожидании?
В 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 имеет полную разбивку всех операторов и их приоритет... кроме await
.
await getFoo() * 2; // await (getFoo() * 2) or (await getFoo()) * 2?
await getFoo() === 5; // await (getFoo() === 5) or (await getFoo()) === 5?
Может ли кто-нибудь объяснить, какие операторы обрабатываются до/после ожидания?
Сейчас я чувствую, что мне нужно добавить кучу круглых скобок, которые, вероятно, не нужны, потому что я не уверен, что будет обрабатываться до и после await
. И хотя я знаю, что мне просто нужно это посмотреть, даже MDN (золотой стандарт документации IMHO) не имеет ответа.
Ответы
Ответ 1
AwaitExpression является UnaryExpression и имеет тот же приоритет, что и delete
, void
, typeof
, +
, -
, ~
и !
, связывающий сильнее любого двоичного оператора.
Это не похоже на yield
которая имеет приоритет ниже, чем все остальное, кроме оператора запятой. Это конструктивное решение было принято потому, что оба yield a+b
и await a + await b
- сценарии, которые считаются более распространенными, чем (yield a) + (yield b)
и await (a + b)
.