我看到其他地方说:
x && foo();
等于
if(x){ foo(); }
我测试了一下,他们确实做了同样的事情。但为什么?到底是x && foo()什么?
x && foo()
AND和OR运算符都可以捷径。
因此,&&仅在第一个表达式为true时才尝试第二个表达式(更确切地说,是类似事实的表达式)。第二个操作确实起作用(无论其内容如何foo())的事实无关紧要,因为除非第一个表达式的计算结果为真,否则它不会执行。如果是事实,则将执行它以尝试第二次测试。
&&
foo()
相反,如果||语句中的第一个表达式为true,则第二个表达式不会被触动。这样做是因为整个语句已经可以求值,无论第二个表达式的结果如何,该语句都会为true,因此它将被忽略并保持未执行状态。
||
当然,使用此类快捷方式时要注意的情况是使用运算符的情况,其中定义的变量仍会计算为伪造的值(例如0)和真实的值(例如'zero')。
0
'zero'