是<布尔expression式> &&语句()与if(<布尔expression式>)语句()相同?

这两个相同吗?

假设你有:

var x = true; 

然后你有以下其中一个:

 x && doSomething(); 

要么

 if(x) doSomething(); 

两种语法之间有什么不同? 我绊倒了一点糖吗?

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

不,他们不一样。 而if是一个语句AND运算符就是一个expression式

这意味着你可以在其他expression式中使用它的结果,你不能用if语句:

 var result = x && doSomething(); 

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

简短的回答: 不。

很长的回答:

由@Steve x && doSomething()是一个expression式

if(x) doSomething(); 是一个声明

正如@Daniel Li和@Bergi所build议的那样,

  • 计算一个expression式 (应该在这里返回一个值)。

  • 声明声明( 应该在这里返回一个值,认为副作用 )。

为什么会令人困惑?

  • JS允许我们写( thatExpression );
  • JS允许我们写thatExpression;

同时假设某种doNothingWithValueOf语句。

如何select?

你使用:

  • doSomething()作为一个
    • expression式,认为IsMyObjectWhatever()MyObjectComputedValue()
    • 或者作为一个声明,认为ModifyMyObject()

然后:你用x && doSomething()作为expression式吗?

你最终会想到像这样的thisStatement( thatExpression ); 到处都是这样想:

  • ()expression式,
  • ; 声明。

那我为什么要select?

  • 显而易见的是“它有效”。 不代表“是对的”。
  • 如果不太明显的是何时会有所作为:

    • ()(()())()(); 可以的(;) 错的
    • 检查@wwaawaw Javascript:语句和expression式之间的区别?
    • 或由Axel Rauschmayer发布的expression式-vs-语句

总而言之,这两个陈述是不相等的,尽pipe在具体情况下你所呈现的结果是一样的。

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

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

我已经把这个小提琴演示(稍作修改)。