JavaScript 中的运算符优先级:有人可以解释为什么 if 条件对于浏览器的所有值都计算为 true

operator precedence in JavaScript : Can someone please explain why the if condition evaluates to true for all values of browser

if (browser == ‘chrome’||’firefox’||’safari’||’opera’)

有人可以解释为什么 if 条件对于浏览器的所有值都计算为真吗?

首先删除弯引号 - 那些会导致 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))