逻辑与(&&)

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。

或操作(||)和与操作()的执行顺序以及返回结果相关推荐

  1. 细琢磨,try catch finally 执行顺序与返回值

    try catch finally 常见格式如下: try{//应用代码}catch(Exception e){//异常捕捉处理}finally{//资源释放.流关闭等等 } 通常执行顺序: try有 ...

  2. try catch finally return的执行顺序与返回值探究

    下午看了一下百度文库中下载下来的java笔试题,其中一道就是关于这个问题的,所以写了个测试程序验证了一下,另外具体的理论知识搜罗了网上的资料. 测试程序如下: package com.andy.cod ...

  3. hive sql 语句正确执行顺序

    网上对select 和group by的执行顺有不同的说法,很容易让人挠头,这里通过代码成功验证 : group by>select 正确的执行顺序: from ..on .. join .. ...

  4. 【Linux 内核 内存管理】RCU 机制 ④ ( RCU 模式下更新链表项 list_replace_rcu 函数 | 链表操作时使用 smp_wmb() 函数保证代码执行顺序 )

    文章目录 一.RCU 模式下更新链表项 list_replace_rcu 函数 二.链表操作时使用 smp_wmb() 函数保证代码执行顺序 一.RCU 模式下更新链表项 list_replace_r ...

  5. 怎么控制ajax执行先后顺序,[转]多个ajax请求时控制执行顺序或全部执行后的操作...

    一.当确保执行顺序时: 1. 请求加async: false,,这样所有的ajax就会同步执行,请求顺序就是代码顺序 2.$.when($.ajax( {async: false, url : url ...

  6. atexit函数的执行顺序_多玩YY语音的面试题:C++中如何在main()函数之前执行操作?...

    多玩YY语音的面试题:C++中如何在main()函数之前执行操作? 第一反应main()函数是所有函数执行的开始.但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的t ...

  7. 计算机加电启动操作引导自举,在计算机加电启动过程中,加电自检程序、 操作系统、引导程序、自举装入程序,这四个的执行顺序为...

    在计算机加电启动过程中四个程序的执行顺序应该为: 1.加电自检程序: 2.自举装入程序: 3.引导程序: 4.操作系统. 复位启动: "复位"是用硬件控制的方式对CPU进行复位操作 ...

  8. MySQL 学习笔记(17)— SQL 执行顺序

    以查询语句为例,我们看下面的查询语句: (6)SELECT [DISTINCT | ALL] col1, col2, agg_func(col3) AS alias (1) FROM t1 JOIN ...

  9. Jmeter组件执行顺序与作用域

    一.Jmeter重要组件: 1)配置元件---Config Element: 用于初始化默认值和变量,以便后续采样器使用.配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同 ...

  10. Spring Aop 常见注解和执行顺序

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:juejin.cn/post/7062506923194581029 Spring 一开始最强大的就是 IOC / AOP 两 ...

最新文章

  1. python获取列表中前N大的索引
  2. php源码之计算两个文件的相对路径
  3. 确定浏览器是否支持某些DOM模块
  4. mysql数据库学习(一)--基础
  5. 板邓:php获取数组元素个数
  6. python 禁用网卡_如何编程实现启用禁用网卡
  7. Java实现递归回溯,解决八皇后问题,数据结构与算法
  8. 基于Metronic的Bootstrap开发框架经验总结(11)--页面菜单的几种呈现方式
  9. 如何让机器像人一样多角度思考?
  10. vue中html没引入js文件,vue.js如何引入非模块化的js文件并调用里面的方法和类。...
  11. Mac OS X:解决开机总是显示“电脑关机是因为发生了问题”
  12. 可以把视频从竖屏转换成横屏吗
  13. c语言 代码自动补全,codeblocks 设置代码自动补全
  14. 图像拼接和图像融合技术(基于Opencv)
  15. 如何用最短的时间找到初级数据分析工作?
  16. 时间序列之MATLAB程序
  17. C++string字符串初始化与使用
  18. 最低仅需万元到手,Gooxi AMD Rome平台服务器特价啦
  19. 谈判技巧——准备阶段
  20. vhs预设_如何在Linux中数字化VHS磁带

热门文章

  1. vue实现echarts中的map自定义地图背景色
  2. html.ex.day02
  3. EDCSA OPENSSL签名验签方法
  4. 常见未授权访问漏洞总结
  5. 【武汉加油!中国加油!】挑战七天 实现机器视觉检测有没有戴口罩系统——第四五六七天
  6. linux检查语法错误的命令,使用CHECKSYNTAX命令检查RMAN脚本是否存在语法错误
  7. 计算机纳入高考作文,高考作文听人家说今年的高考作文是用计算机批 – 手机爱问...
  8. Linux 中root权限
  9. [bzoj4199][NOI2015]品酒大会
  10. AWS简介(Amazon Web Services )