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

Rah*_*oni 0 javascript

根据https://developer.mozilla.org/zh-CN/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
}
Run Code Online (Sandbox Code Playgroud)

这种&&行为打败了我,对我来说似乎很难理解。

expr1 && expr2-返回expr1是否可以将其转换为false;否则,返回expr2

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

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

&&有时称为警卫队。

变量=指标&&值

仅当指标为真时,才可以使用它来设置值。

我的问题是,“有人可以帮助我理解这一点,并提出一些&&有用的用例。” 我不知道这个问题的哪一部分很难理解。我举了一个例子,我发现||。有用,上面的原因也充分说明了&&也可以有用的原因。是的,我不熟悉JavaScript,是的,我不像你们所有人那么聪明。但是有点友善会帮助我到达那里。和平!

Min*_*our 5

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

var a = {
   prop : {
     nestedProp : {
        hello : 'hello'
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

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

你不能说:

if(a.prop.nestedProp.hello === 'hello')
Run Code Online (Sandbox Code Playgroud)

因为propnestedProp可能未定义,如果您尝试执行该检查,则会得到TypeError

所以你这样做:

if(a.prop &&.prop.nestedProp && a.prop.nestedProp.hello === 'hello')
Run Code Online (Sandbox Code Playgroud)

尝试分配hello道具是同一回事:

var hello = a.prop && a.prop.nestedProp && a.prop.nestedProp.hello;
Run Code Online (Sandbox Code Playgroud)

如果a.prop未定义,它将在此处停止并返回未定义。如果它是一个真实的值,它将进行评估a.prop.nestedProp;如果它是一个虚假的值,则将返回它,否则返回a.prop.nestedProp.hello