如果语句没有if

时间:2015-06-14 17:19:49

标签: javascript

我正在阅读一个代码,该代码展示了如何使用逻辑&&运营商制作“if”声明。

someBoolean && (someStatement = 10);

等于:

if(someBoolean) {
someStatement = 10;}

我知道如何&&作品。但我无法理解它在这个例子中是如何工作的。

&安培;&安培;运算符的工作方式如下:如果第一个值为false,则返回它,否则它将搜索,直到找到false值。如果不是,则返回最后一个值。

在此示例中,如果someBoolean为false,则返回“someBoolean”!否则将返回“(someStatement = 10)”部分。

但它恰恰与“如果”相反。不是吗?

4 个答案:

答案 0 :(得分:5)

  

但它恰恰与“如果”相反。不是吗?

不,结果与if语句具有相同的效果。

如果第一个操作数(someBoolean)为false,则该值用于整个表达式,第二个操作数(someStatement = 10)不计算,因为它不需要。

如果第一个操作数为true,则必须计算第二个操作数以确定整个表达式的值。

答案 1 :(得分:4)

使用逻辑语句的关键是理解Short-circuit Evaluation(您在问题中提到的)。确切地说,没有任何“返回” - 但我认为你的意思是“被评估” - 但由于结果没有被捕获,这个评估将会丢失。

但这种对“if”的方法对最终结果不感兴趣,它只是使用短路评估,以便在第一部分为真时有条件地评估表达式的第二部分。

所以,举个例子:

  • x && (y = 10):如果x为真,则仅为y指定10
  • x || (y = 10):如果x为假,则仅为y指定10
  • !x || (y = 10):如果x为真,则仅为y指定10

这种风格当然难以阅读,所以一般不建议使用源代码。虽然我经常在缩小的代码中看到它,因为它可以保存几个字符。

答案 2 :(得分:2)

在第一个表达式求值为true,第二个表达式被评估之后,它就像if一样。与此相反,如果第一个exprssion的计算结果为false,则不会计算第二个表达式。在下面的示例中,b的值从未分配,因为第二个if以false&&开头。您将在第二个警报中看到“未定义”。

var a;
if(true && (a = 10))
    alert(a) //alerts 10

var b;
if(false && (b = 5))
    alert(b) //never alerts b/c of the false above
        
alert(b); //alerts undefined b/c (b = 5) is never evaluated

答案 3 :(得分:1)

如果someBoolean为真,则表达式的其余部分将进行评估,即(someStatement = 10)

if语句不会“返回”值,而是评估

此方法忽略表达式的结果,这很好。

我不会用它;这是一个更多的认知开销。不过,这只是一种意见。