为什么JavaScript&&运算符返回第二个表达式

Why does JavaScript && operator return the second expression?

本文关键字:amp 第二个 表达式 返回 JavaScript 为什么 运算符      更新时间:2023-09-26

根据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的新手,也是的,我没有你们那么聪明。但做一个善良的人会帮助我达到目的。和平

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

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未定义,它将停止并返回未定义。如果它是真值,则它将计算a.prop.nestedProp,如果它是假值,则返回该值,否则返回a.prop.nestedProp.hello

短路性质是次要的,不那么重要——首先||代表逻辑or,而&CCD_ 17代表逻辑CCD_。

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

让我们看看a && b对于ab的所有值的可能结果。

如果CCD_ 24 b = falsea && b = false等于a
如果CCD_ 28 b = truea && b = false等于a
如果CCD_ 32 CCD_a && b = false等于b
如果a = true b = truea && b = true等于b

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

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