javascript逻辑“与”和逻辑“或”

egdjgwm8  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(293)

我试图理解此代码,但无法编写代码:

"i" != e &&  "I" != e || ( console.log("inc"),fw -= 10)
console.log("------------------")
true && console.log("1 &&");
false || console.log("1 ||");

console.log("------------------")
false && console.log("2 &&");
true || console.log("2 ||");

以“i”为例

// "i" != e &&
// "i" != e == false 
// the rest of the code should not be executed 

// "I" != e ||    
// "I" != e == true
// the rest of the code should not be executed 
"i" != e &&  "I" != e || ( console.log("inc"),fw -= 10)

但在这两种情况下,它都是用“i”或“i”执行的(console.log(“inc”),fw-=10)
我的问题是为什么会发生这种行为?

zpf6vheq

zpf6vheq1#

它之所以有效是因为 && 被执行之前 || . 这不是因为运算符顺序,而是因为它具有更高的优先级值(有关更多信息,请参见mdn)
例如,假设 e = "i"fw = 0 : "i" != e && "I" != e || (console.log("inc"),fw -= 10) false && || (console.log("inc"),fw -= 10) false || (console.log("inc"),fw -= 10) false || -10 -10 什么时候 e = "I" 事情是这样的: "i" != e && "I" != e || (console.log("inc"),fw -= 10) true && false || (console.log("inc"),fw -= 10) false || (console.log("inc"),fw -= 10) false || -10 -10 你也可以写 ("i" != e && "I" != e) || (console.log("inc"),fw -= 10) 让它更清楚,但结果将保持不变。

2uluyalo

2uluyalo2#

这也是为什么圆括号对于清晰度如此重要的一个例子!还有,“为什么应该使用好的ol'if语句?”。
在这种情况下,程序员要么试图变得聪明,要么就是懒惰。结果是,他的前任被一些本应该写得很清楚的东西弄糊涂了,不得不去在线论坛寻求帮助。
请:“努力使你的源代码变得明显。”比如这个伪代码

if (not ((e == "i") or (e == "I"))) {
   console.log("inc");
   fw -= 10;
}

这将同样迅速地产生相同的结果,但任何人都会立即明白它的意图。最初的代码虽然“更短”,但需要花费时间、挫折感和金钱“清晰”是一种美德。请让你的源代码“简单愚蠢”。

相关问题