Может кто-нибудь объяснить мне, как область действия логического оператора «ИЛИ» работает в Javascript? - PullRequest
0 голосов
/ 07 февраля 2020

вот мой код.

function getVowelCount(str) {
 let array = str.split("");
 let vowelCount = array.reduce((acc, curr) => {
   if (curr === 'a' || curr === 'e' || curr === 'i' || curr === 'o' || curr === 'u') {
     acc++
   } return acc
 }, 0);
 return vowelCount
}

Я новичок в кодировании, и я начал с Javascript. Может ли кто-нибудь так любезно объяснить, почему я не могу использовать "(curr === 'a' ||'e' || 'i' || 'o' || 'u')" в своем утверждении if? Я думал, что это будет обработано как; "Если текущее значение равно 'a' ИЛИ ​​'e' ИЛИ ​​'i' и т. Д. c ...

Спасибо.

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Так же, как есть порядок операций для математики (умножение / деление перед сложением / вычитанием), операторы 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')
1 голос
/ 07 февраля 2020

=== имеет более высокий порядок операций, чем ||. Операторы одинакового порядка оцениваются слева направо.

(см. mdn для полного заказа).

То есть curr === 'a' ||'e' || 'i' || 'o' || 'u' эквивалентно

(((((curr === 'a') ||'e') || 'i') || 'o') || 'u')

Что может быть уменьшенным до curr === 'a' ? true : 'e'.

...