为什么JavaScript&&运算符返回第二个表达式
Why does JavaScript && operator return the second expression?
根据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')
因为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
未定义,它将停止并返回未定义。如果它是真值,则它将计算a.prop.nestedProp
,如果它是假值,则返回该值,否则返回a.prop.nestedProp.hello
。
短路性质是次要的,不那么重要——首先||
代表逻辑or
,而&CCD_ 17代表逻辑CCD_。
由于两者本质上都是懒惰的,它们可以在结果清除后停止评估,这就是次要行为的来源。当or
的第一个值为真时,无需评估第二个值。当and
的第一个值为false时,不需要评估第二个值。
让我们看看a && b
对于a
和b
的所有值的可能结果。
如果CCD_ 24 b = false
a && b = false
等于a
如果CCD_ 28 b = true
a && b = false
等于a
如果CCD_ 32 CCD_a && b = false
等于b
如果a = true
b = true
a && b = true
等于b
因此,当a
是false
时,表达式a && b
将根据其性质返回false
。所以如果是a
,如果是false
,我们只需要返回它。
当a
是true
时,表达式a && b
将仅取决于b
的值,即如果b = true
,则为true
,如果b = false
,则为false
。这意味着在a
是true
的情况下,我们只需要返回b
的值
- 下拉选择可自动更改第二个下拉选择
- 为什么不'在JQuery中找到第二个css选择器的工作
- 当单击第一个李时,它显示内容一,当单击第二个李时,它显示内容二
- CORS-重定向到第二个GET正在接收的页面
- 正则表达式与数字中的第二个点匹配
- 如何在react js中移动第二个组件
- 使用Javascript,如何显示<tr>在另一<tr>悬停时,隐藏第二个<tr>
- 关闭第二个事件源上的第一个事件源's onopen方法
- D3从嵌套的JSON中绘制第二个圆环图
- IE11中的第二个调用取消了第一个Fetch API调用
- 第一个字第一个字符第二个字第二个字符,一直到数组结束
- 角度指令:指向第二个元素
- 时间选择器:如何通过更改第一个值来更改第二个值
- 我如何从字符串中选出第一个单词的第一个字母,然后再选出第二个单词
- 与网络界面相比,谷歌搜索API有时会重复第一个结果,有时会重复第二个结果
- 第二个存在条件不起作用
- 从第一个日期选择器定义第二个日期选择器的开始日期
- 如果未选择第一个下拉列表,则禁用第二个下拉列表
- PHP&JavaScript:不工作的第二个脚本
- 为什么JavaScript&&运算符返回第二个表达式