或操作(||)和与操作(&&)的执行顺序以及返回结果
2017-12-05 12:13
411 查看
逻辑与(&&)
var result = true && false;
(一)逻辑与的真值表(有假即假)
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
(二)逻辑与操作可以应用于任何类型的操作数。在有一个操作数不是布尔值的情况,逻辑与操作就不一定返回布尔值,此时,它遵循下列规则:
1.如果第一个操作数是对象,则返回第二个操作数;2.如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该对象;
3.如果两个操作数都是对象,则返回第二个操作数;
4.如果有一个操作数是 null,则返回 null;
5.如果有一个操作数是 NaN,则返回 undefined;
6.如果有一个操作数是 undefined, 则返回 undefined。
(三)&& 属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。对于 && 而言,如果第一个操作数是 false ,则无论第二个操作数是什么值,结果都不能再可能是 true 了。
错误示例代码:var found =true; var result = (found && someUndefinedVariable); //这里会发生错误 alert(result); //这一行不会执行
代码解释:
1.当执行逻辑与操作时会发生错误,因为变量 someUndefinedVariable 没有声明;
2.由于变量 found 的值是 true,所以逻辑与操作符会继续对变量someUndefinedVariable 求值,但其尚未定义,因此就会导致错误。
结论:不能在逻辑与操作中使用未定义的值。
正确示例代码:
var found = false; var result = ( found && someUndefinedVariable ); //不会发生错误 alert(result); //会执行(“false”)
代码解释:
1.在这个示例里,警告框会显示出来;
2.无论变量 someUndefindVariable 有没有定义,也永远不能对它求值,因为第一个操作数的值是 false,所以逻辑与操作的结果必定是 false,根本用不着再对 &&右侧的操作数求值了。
逻辑或
var result = true || false;
(一)逻辑或的真值表(有真即真)
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
(二)与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;此时,它遵循下列规则:
1.如果第一个操作数是对象,则返回第一个操作数;2.第一个操作数的求值结果为 false,则返回第二个操作数;
3.如果两个操作数都是对象,则返回第一个操作数;
4.如果两个操作数都是 null,则返回 null;
5.如果两个操作数都是 NaN ,则返回 NaN;
6.如果两个操作数都是 undefined,则返回 undefined。
(三)逻辑或操作符也是短路操作符;如果第一个操作数的求值结果为 true ,就不会对第二个操作数求值了。
正确代码示例:var found =true; var result = (found || someUndefinedVariable); //不会发生错误 alert(result); //会执行(“true”)
代码解释:
1.在这个示例里,警告框会显示出来;
2.由于变量 found 的值是 true,而变量 someUndefinedVariable 永远不会求值,因此结果就会输出“true”;
3.如果把 found 的值改为 false,就会导致错误。
(四)我们可以利用逻辑或的这一行为来避免为变量赋值 null 或 undefined 值
var myObject = preferredObject || backupObject;
代码解释:
1.在这个例子中,变量 myObject 将被赋予等号后面两个值中的一个。变量 preferredObject 中包含有先赋给变量 myObject 的值,变量 backupObject 负责在 preferredObject 中不包含有效值的情况下提供后备值。如果 preferredObject 的值不是 null,那么它的值将被赋予给 myObject;如果是 null,则将 backupObject 的值赋给 myObject。
相关文章推荐
- jquery中的ajax如何返回结果而非回调方式即为同顺序执行
- 获取onbeforeunload的返回结果,在检测到取消离开页面后执行操作
- jquery中的ajax如何返回结果而非回调方式即为同顺序执行
- java 中try catch finally 的具体执行顺序返回结果+代码测试
- cout的输出顺序与其中表达式的执行顺序,以及自增操作优先级
- 练习 2-6 编写一个函数setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- 如何让SQL语句不执行默认排序,而是按照in语句的顺序返回结果
- MyBatis执行一次数据库操作的原理以及顺序
- 练习2-7 编写一个函数invert(x,p,n),该函数返回对x执行下列操作后的结果:将x从第p位开始的n个(二进制)位求反(即1变成0,0变成1),x的其余各位保持不变。
- Android的intent:基础概念以及显示/隐式使用Intent && 通过intent返回结果
- 练习 2-6 编写一个函数 setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- 练习 2-7 编写一个函数invert(x, p, n),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位求反(即,1变成0,0变成1),x的其余各位保持不变。
- 在程序中调用外部程序,用process返回命令执行结果以及抓取错误信息的方法
- 练习2-6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- 2.6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- 关于百度地图 DrivingRoute moreResultsUrl为“未能找到相应结果,请您:返回上一步操作..” 以及 WalkingRoute moreResultsUrl为空 的解决方案
- DOM事件阶段以及事件捕获与事件冒泡先后执行顺序
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
- 【未完】Js Confirm()判断添加条件语句造成返回结果不执行
- SQL中order by、group by 以及where的执行顺序