为何JavaScript&&运算符返回第二个表达式?

时间:2015-11-03 12:09:14

标签: javascript

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators

expr1 || expr2对我有意义。它使表达式短路并返回第一个表达式,这是有道理的。我经常使用它来选择传递的变量与默认变量。对于前。

var default_connection = 'localhost:27017/task_master';

function setdb(connection){
    var conn_str = connection || default_connection;
    //Do something here
}

&&行为只是打败了我,对我来说显得非常难以理解。

expr1 && expr2 - 如果可以转换为false,则返回expr1;否则,返回expr2

有人可以帮助我理解这一点并提出一些&&可能有用的用例。

编辑:从建议的原始问题中找到它。这给了我足够的理由来使用它。

  

&安培;&安培;有时被称为守卫操作员。

     

变量=指标&&值

     

只有当指标真实时,它才可用于设置值。

我的问题是,“有人可以帮助我理解这一点并提出一些&&可能有用的用例。”我不知道这个问题的哪一部分很难理解。我给出了一个如何找到||的例子有用的,上面的原因给出了一个足够好的理由&&也很有用。是的,我是JavaScript新手,是的,我并不像你们一样聪明。但是有点善意会帮助我实现目标。和平!

3 个答案:

答案 0 :(得分:4)

它停在假值并返回最后一个值(我认为这样更清楚)。它对嵌套对象非常有用。假设您可能有这样的对象,但prop或nestedProp可能不存在:

var a = {
   prop : {
     nestedProp : {
        hello : 'hello'
     }
   }
}

现在,如果我们需要检查nestedProp

中的字符串,该怎么办?

你不能说:

if(a.prop.nestedProp.hello === 'hello')

由于可能未定义propnestedProp,如果您尝试检查,则会获得TypeError

所以你这样做:

if(a.prop &&.prop.nestedProp && a.prop.nestedProp.hello === 'hello')

尝试分配hello道具是同样的事情:

var hello = a.prop && a.prop.nestedProp && a.prop.nestedProp.hello;

如果a.prop未定义,它将停在那里并返回undefined。如果它是一个真值,那么它将评估a.prop.nestedProp,如果它是一个假值,那么它将返回,否则它将返回a.prop.nestedProp.hello

答案 1 :(得分:0)

短路性质次要且不太重要 - 首先||代表逻辑or,而&代表逻辑and

由于两者都是懒惰的,因此在结果清除后它们可以停止评估,这是次要行为的来源。当or的第一个值为true时,不需要评估第二个值。当and的第一个值为false时,无需评估第二个值。

答案 2 :(得分:0)

让我们看一下a && bab的所有值的可能结果。

如果a = false b = false那么 a && b = false等于a
如果a = false b = true那么 a && b = false等于a
如果a = true b = false那么 a && b = false等于b
如果a = true b = true那么 a && b = true等于b

因此,当afalse时,表达式a && b将按其性质返回false。如果a如果false我们只需要退回它。

atrue时,表达式a && b将仅取决于b的值,即true b = truefalse b = false如果a。 这意味着在true b上,我们只需要返回textarea

的值