Так же, как есть порядок операций для математики (умножение / деление перед сложением / вычитанием), операторы javascript имеют порядок . В (curr === 'a' ||'e' || 'i' || 'o' || 'u')
наивысшим приоритетом является ===
, поэтому он начинается со сравнения curr === 'a'
. Это приведет либо к true
, либо к false
. Давайте предположим, false
.
Далее есть все ||
. Это делается слева направо, поэтому сравнивается false || 'e'
. Каждая строка, за исключением пустой строки, является "правдивой", поэтому false || 'e'
также является правдивой.
Она будет продолжать двигаться вправо, за исключением того, что логические операторы ИЛИ будут закорачиваться после гарантированного результата. Таким образом, все выражение правдиво.
Даже если бы ||
имел более высокий приоритет, это не сработало бы. С 'a' || 'e'
оба они являются "правдивыми", поэтому он просто принимает первое истинное значение, которое является a
. И это будет повторяться, означая, что 'a' || 'e' || 'i' || 'o' || 'u'
- сложный способ сказать 'a'
.
console.log('a' || 'e' || 'i' || 'o' || 'u')