是<boolean expression =“”>&amp;&amp; statement()与if(<boolean expression =“”>)statement()相同?</boolean> </boolean>

时间:2012-09-30 19:16:52

标签: javascript syntax if-statement boolean syntactic-sugar

两者是否相同?

假设你有:

var x = true;

然后你有其中一个:

x && doSomething();

if(x) doSomething();

两种语法之间有什么不同之处吗?我偶然发现了一点糖吗?

4 个答案:

答案 0 :(得分:6)

严格来说,他们会产生相同的结果,但如果你使用前一种情况作为其他事情的条件,你会得到不同的结果。这是因为在x && doSomething()的情况下,doSomething()会返回一个值来表示其成功。

答案 1 :(得分:6)

不,他们并不完全相同。虽然if语句,但AND运算符是表达式

这意味着您可以在其他表达式中使用其结果,而不能使用if语句:

var result = x && doSomething();

然而,在你的情况下,两者都有相同的效果。使用更易读的,更好地代表您的程序结构;我推荐if语句。

答案 2 :(得分:1)

总而言之,这两个陈述并不相等,但在特定情况下,您所呈现的结果是相同的。

x && doSomething();是一个表达式,首先评估x,因为这是一个AND,因为x为真,所以第二个参数(doSomething())会被评估。在这种情况下,这意味着执行该方法。如果x为false,那么doSomething()将不会被执行,因为表达式的结果不能为真。

if(x) doSomething();是一个声明。检查x的值,如果为true,则执行if语句的范围。

我已将这个fiddle放在一起进行演示(稍加修改)。

答案 3 :(得分:0)

让我们扮演侦探。

我们将第一种方法称为 Conditional Arrow Invocation (有条件的箭头调用),而将第二种方法称为 Tifraditional If Else

我们将在jsperf中创建两个单独的案例,以评估这两种方法的公平性。

有条件的箭头调用

const VALUE = true;
const TEST = false;

//test 1
VALUE && !TEST && (() => {
    console.log('print me!');
})();

运/秒结果:

  1. FireFox:65,152
  2. Chrome:129,045

如果不是传统的话

const VALUE = true;
const TEST = false;

//test 2
if(VALUE && !TEST) {
    console.log('print me!');
}

运/秒结果:

  1. FireFox:65,967
  2. Chrome:130,499

结论

如您所见,在性能上并没有太大的区别,但是在大多数情况下,传统如果不是其他在条件箭头调用方面的优势很小。这可能与动态创建隐式函数有关。

我还意识到Chrome的JavaScript比FireFox的JavaScript执行速度快得多。

这里是jsperf链接,您可以运行该链接自己进行评估。

https://jsperf.com/conditional-methods-vs-traditional-if-else/1