ser*_*0ne 2 javascript conditional logical-operators
我最近发现了一条javascript正在评估null/undefined,如下所示:
// The single & is on purpose!
if(x !== null & x !== undefined) {
// Do this...
}
Run Code Online (Sandbox Code Playgroud)
这看起来对我来说是一种非常糟糕的做法,但似乎有效.
据我所知,这些操作符应该执行两个不同的任务:
var x = 3; x &= 6; // No syntax errors.
var x = 3; x &&= 6; // Syntax error.
if(x == null && x == undefined) // No syntax errors.
if(x == null & x == undefined) // No syntax errors, but wrong operator usage?
Run Code Online (Sandbox Code Playgroud)
有人可以对此有所了解吗?
当像这样使用时,运算符&和&&逻辑运算符都起作用(即使&运算符实际上不是逻辑运算符).实际的区别在于&&使用短路评估,而&不是.
使用&运算符没有问题,只要即使第一个操作数的计算结果为false,也可以计算第二个操作数.
该&&操作员可以被用于保持第二个操作数从被评估,当第一操作数确定第二操作数是可能评价.例如:
if (x != null && x.prop == 42) { ... }
Run Code Online (Sandbox Code Playgroud)
这比检查一个,然后另一个更短:
if (x != null) {
if (x.prop == 42) { ... }
}
Run Code Online (Sandbox Code Playgroud)
没有&&=操作员,因为在这种情况下使用短路评估没有意义.