"if(foo)bar();"之间的区别 和"foo && bar();"

Phi*_*l K 5 javascript

以下两个片段之间是否存在任何差异,或者是否有任何理由使用其中一个?

if (foo) {
    bar();
}
Run Code Online (Sandbox Code Playgroud)

 

foo && bar();
Run Code Online (Sandbox Code Playgroud)

Bou*_*uke 12

第二种形式称为短路评估,其结果与第一种形式完全相同.但是,第一种形式更具可读性,应该是可维护性的首选.

这种类型的短路评估经常出现在if语句中,其中右手是有条件评估的.见下面的例子; 只有当foo的计算结果为true时,才会计算bar.

if (foo && bar()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)