Может кто-нибудь объяснить мне, почему «приоритет оператора» применяется к логическим операторам, таким как «||», «&&» в javaScript - PullRequest
2 голосов
/ 20 апреля 2020

Может кто-нибудь объяснить мне, почему приоритет оператора применяется к логическим операторам, таким как || и && в JavaScript? Что это означает в такой операции, как:

true || false && false

false && false вычисляется первым, потому что оператор && имеет более высокий приоритет перед оператором || в JavaScript. в соответствии с тем, насколько я знаю, false && false не оценивается двигателем JavaScript, потому что до || у оператора есть литерал true, а когда что-то true перед оператором ||, то вещь после оператора || не будет оценена, это называется "коротким замыканием логических операторов" в JavaScript, другом примере будет:

true || alert ()

вызов функции никогда не происходит, даже если вызов функции имеет более высокий приоритет, чем оператор || и другой Например,

true || x = 7

, если в JavaScript допустимо короткое замыкание логических операторов, то приведенный выше код не должен выдавать ошибку, поскольку x = 7 не вычисляется, поскольку перед оператором || существует литерал true.

1 Ответ

7 голосов
/ 20 апреля 2020

Приоритет оператора просто определяет группировку, а не фактический порядок оценки: { ссылка }

  • true || false && false становится true || (false && false), но все равно оценивается слева направо .

  • true || alert() оценивается как true || (alert()), а НЕ (true || alert)()

  • true || x = 7 оценивается как (true || x) = 7 и вызывает ошибка, НЕ true || (x = 7)

...