为什么JavaScript允许条件语句中的&&(逻辑)和&(按位)?

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)

有人可以对此有所了解吗?

Guf*_*ffa 8

当像这样使用时,运算符&&&逻辑运算符都起作用(即使&运算符实际上不是逻辑运算符).实际的区别在于&&使用短路评估,而&不是.

使用&运算符没有问题,只要即使第一个操作数的计算结果为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)

没有&&=操作员,因为在这种情况下使用短路评估没有意义.

  • `true&true === 1`,而不是'true&true === true` (2认同)