Подтвердить что ты не робот

Что такое приоритет оператора в ожидании?

В 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) не имеет ответа.

4b9b3361

Ответ 1

AwaitExpression является UnaryExpression и имеет тот же приоритет, что и delete, void, typeof, +, -, ~ и ! , связывающий сильнее любого двоичного оператора.

Это не похоже на yield которая имеет приоритет ниже, чем все остальное, кроме оператора запятой. Это конструктивное решение было принято потому, что оба yield a+b и await a + await b - сценарии, которые считаются более распространенными, чем (yield a) + (yield b) и await (a + b).