приоритет оператора в JavaScript: Может кто-нибудь объяснить, почему условие if имеет значение true для всех значений браузера - PullRequest
0 голосов
/ 25 марта 2020
if (browser == ‘chrome’||’firefox’||’safari’||’opera’)

Может кто-нибудь объяснить, почему условие if имеет значение true для всех значений браузера?

1 Ответ

2 голосов
/ 25 марта 2020

Сначала удалите фигурные кавычки - они вызовут ошибку SyntaxError. Вместо этого используйте прямые кавычки.

== имеет более высокий приоритет оператора, чем ||, а || оценивает слева направо, поэтому исправляя кавычки, ваш код эквивалентен:

if ((((browser == 'chrome') ||'firefox') ||'safari') ||'opera')

Если браузер chrome, это приводит к

if ((((true) ||'firefox') ||'safari') ||'opera')
if (true)

В противном случае это приводит к

if ((((false) || 'firefox') ||'safari') ||'opera')
if (((false || 'firefox') ||'safari') ||'opera')

Если левая часть || является ложной , он будет оцениваться по значению с правой стороны. В противном случае, если левая часть || верна, она будет соответствовать значению с левой стороны. Таким образом, он разрешается следующим образом:

if (((false || 'firefox') ||'safari') ||'opera')
if ((('firefox') ||'safari') ||'opera')
if ('firefox')

И 'firefox' - это правда, поэтому if всегда будет работать.

Для того, что вы пытаетесь сделать, используйте .includes вместо :

if (['chrome', 'firefox', 'safari', 'opera'].includes(browser))
...