我在underscore.js源代码中看到了这段代码:
if ((!a && b) || (a && !b)) return false;
这相当于以下几点吗?
if (a ^ b) return false;
答案 0 :(得分:6)
严格来说,没有。 &&
和||
是逻辑运算符,而^
是逐位运算符。
但是如果你的输入是布尔值(或者集合{0,1}中的整数),那么语义将基本相同。如果您不能保证这些输入,您仍然可以确保相同的语义:
if (!a ^ !b) return false;
(当然,假设a
和b
是纯变量,而不是带有副作用的复杂表达式。)
答案 1 :(得分:0)
这两个不一样,因为a ^ b
是一个按位xor函数而不是逻辑xor函数。因此,如果a = 1
和b = 2
,那么a ^ b=3
,但您需要一个假值,因为a
和b
都是真实的。