是<布尔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()
- expression式,认为
然后:你用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语句的范围。
我已经把这个小提琴演示(稍作修改)。