我试图理解此代码,但无法编写代码:
"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)
我的问题是为什么会发生这种行为?
2条答案
按热度按时间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)
让它更清楚,但结果将保持不变。2uluyalo2#
这也是为什么圆括号对于清晰度如此重要的一个例子!还有,“为什么应该使用好的ol'if语句?”。
在这种情况下,程序员要么试图变得聪明,要么就是懒惰。结果是,他的前任被一些本应该写得很清楚的东西弄糊涂了,不得不去在线论坛寻求帮助。
请:“努力使你的源代码变得明显。”比如这个伪代码
这将同样迅速地产生相同的结果,但任何人都会立即明白它的意图。最初的代码虽然“更短”,但需要花费时间、挫折感和金钱“清晰”是一种美德。请让你的源代码“简单愚蠢”。