JTA*_*pps 48 javascript logic if-statement operator-precedence
所以,我正在考虑在if-else语句中用逻辑运算符编写稍微复杂的操作.我知道我可以做括号,我知道这是更好的方法,但我已经好奇了,所以我会问.如果我做这样的事情:
if (firstRun == true || selectedCategory != undefined && selectedState != undefined) {
//Do something
} else {
//Do something else
}
Run Code Online (Sandbox Code Playgroud)
如何在不使用括号的情况下进行操作?我知道逻辑运算符有一个操作顺序,类似于PEMDAS,对吗?我很好奇它是否会像这样运行:
firstRun == true || (selectedCategory != undefined && selectedState != undefined)
Run Code Online (Sandbox Code Playgroud)
或者,如果'OR'运算符优先,它最终会像:
(firstRun == true || selectedCategory != undefined) && selectedState != undefined
Run Code Online (Sandbox Code Playgroud)
如果你能在某个地方找到完整列表,那么这个操作的顺序就会很好.谢谢!
Chr*_*oph 68
我的经验法则基本上涵盖了条件语句的所有用例的99%:
(). or [...]!< , >= , === , !=, ...&&||MDN为您提供详尽的细分:Javascript运算符优先级
所以对你的例子:
(firstRun == true || selectedCategory != undefined && selectedState != undefined)
Run Code Online (Sandbox Code Playgroud)
等于
(firstRun == true) || ((selectedCategory != undefined) && (selectedState != undefined))
Run Code Online (Sandbox Code Playgroud)
对于比上述情况更复杂的任何事情,我会考虑重构代码以获得可读性!
Mic*_*zyk 21
对此有一个很好的经验法则.将这些运算符视为数学运算符:
AND是乘法(例如0 * 1 = 0 => FALSE)OR正在添加(例如0 + 1 = 1 => TRUE)当你记住这一点时,你必须知道的是乘法总是在加法之前.
请参阅此图表以获取优先顺序.
我不打算解释会发生什么,因为下一个阅读你代码的人会想:"WTF?它能做到它应该做的吗?"
因此,更好的解决方案是将术语括在括号中,即使您知道优先级,正确应用它并且代码有效
这遵循了一种古老的智慧,即你不应该做所有事情,因为你可以做到.始终关注后果.
| 归档时间: |
|
| 查看次数: |
18700 次 |
| 最近记录: |