Afs*_*ani 8 javascript operators bitwise-operators logical-operators
考虑这种情况:
(true & true & false & false & true) == true //returns: false
Run Code Online (Sandbox Code Playgroud)
如您所见,按位AND行为与逻辑AND完全相同:
(true && true && false && false && true) == true //returns: false
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我应该在按位运算与逻辑运算相同时使用逻辑运算.
注意:请不要因为性能问题而回答这个问题,因为它在Mozilla Firefox中要快得多,请参阅此jsPerf:http://jsperf.com/bitwise-logical-and
Den*_*ret 21
使用逻辑运算符进行短路评估的最常见用途不是性能,而是避免错误.看到这个:
if (a && a.length)
Run Code Online (Sandbox Code Playgroud)
你不能简单地&在这里使用.
请注意,当您不处理布尔值时,使用&而不是&&无法完成.例如&on 2(01二进制)和4(10二进制)是0.
另请注意,除了if测试之外,还使用&&(就像||),因为它返回一个操作数:
"a" & "b" => 0
"a" && "b" => "b"
Run Code Online (Sandbox Code Playgroud)
更一般&地,&&通常可以使用代替.就像;在你的javascript代码中省略大多数一样.但它会迫使你思考超过必要的(或者会不时给你带来奇怪的错误).
Ber*_*rgi 11
按位运算行为相同?
不,这不对.按位运算符处理整数,而逻辑运算符具有不同的语义.仅在使用纯布尔时,结果可能类似.
您已经可以在结果类型中看到这种差异:
(true & true & false & false & true) === 0
(true && true && false && false && true) === false
Run Code Online (Sandbox Code Playgroud)
不,他们不这样做.不同之处是:
// sample functions
function a() { console.log("a()"); return false; }
function b() { console.log("b()"); return true; }
Run Code Online (Sandbox Code Playgroud)
a() && b();
// LOG: "a()"
// RET: false
Run Code Online (Sandbox Code Playgroud)
a() & b();
// LOG: "a()"
// LOG: "b()"
// RET: 0
Run Code Online (Sandbox Code Playgroud)