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))
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))