哪个逻辑运算符优先

新手上路,请多包涵

因此,我正在考虑在 if-else 语句中使用逻辑运算符编写稍微复杂的操作。我知道我可以做括号,我知道这是更好的方法,但我很好奇,所以我要问。如果我要做这样的事情:

 if (firstRun == true || selectedCategory != undefined && selectedState != undefined) {
//Do something
} else {
//Do something else
}

如果不使用括号,将如何操作?我知道逻辑运算符有一个操作顺序,类似于 PEMDAS,对吧?我很好奇它是否会像这样运行:

 firstRun == true || (selectedCategory != undefined && selectedState != undefined)

或者如果“或”运算符优先,它最终会像这样:

 (firstRun == true || selectedCategory != undefined) && selectedState != undefined

如果你能在某处找到它的操作顺序的完整列表会很好。谢谢!

原文由 Jtaylorapps 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 453
2 个回答

我的经验法则(基本上涵盖了条件语句所有用例的 99%)是:

  1. 分组: ()
  2. 会员权限 . or [...]
  3. 不是: !
  4. 比较,例如 < , >= , === , !=, ...
  5. 逻辑与 &&
  6. 逻辑或 ||

MDN 为您提供了详尽的分类: JavaScript 运算符优先级

所以对于你的例子:

 (firstRun == true || selectedCategory != undefined && selectedState != undefined)

等于

(firstRun == true) || ((selectedCategory != undefined) && (selectedState != undefined))

对于比上述情况更复杂的任何事情,为了可读性,我无论如何都会考虑重构代码!

原文由 Christoph 发布,翻译遵循 CC BY-SA 4.0 许可协议

这有一个很好的经验法则。将这些运算符视为数学运算符:

  • AND 是乘法(例如 0 * 1 = 0 => FALSE
  • OR 正在添加(例如 0 + 1 = 1 => TRUE

当你记住这一点时,你只需要知道乘法总是在加法 _之前_。

原文由 Michal Leszczyk 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题