根据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新手,是的,我并不像你们一样聪明。但是有点善意会帮助我实现目标。和平!
答案 0 :(得分:4)
它停在假值并返回最后一个值(我认为这样更清楚)。它对嵌套对象非常有用。假设您可能有这样的对象,但prop或nestedProp可能不存在:
var a = {
prop : {
nestedProp : {
hello : 'hello'
}
}
}
现在,如果我们需要检查nestedProp
你不能说:
if(a.prop.nestedProp.hello === 'hello')
由于可能未定义prop
和nestedProp
,如果您尝试检查,则会获得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 && b
对a
和b
的所有值的可能结果。
如果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
因此,当a
为false
时,表达式a && b
将按其性质返回false
。如果a
如果false
我们只需要退回它。
当a
为true
时,表达式a && b
将仅取决于b
的值,即true
b = true
和false
b = false
如果a
。
这意味着在true
b
上,我们只需要返回textarea