详解JavaScript逻辑And运算符


Posted in Javascript onDecember 04, 2015

在JavaScript中,逻辑 AND 运算符用双和号(&&)表示

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

下面的真值表描述了逻辑AND运算符的行为:

详解JavaScript逻辑And运算符

需要说明的是:逻辑AND运算的运算数可以是任何类型的,不止是Boolean值,如果某个运算数不是原始的Boolean型值,逻辑AND运算并不一定返回Boolean值

逻辑AND运算符的运算行为如下:

  • 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
  • 如果两个运算数都是对象,返回第二个对象。
  • 如果某个运算数是 null,返回 null。
  • 如果某个运算数是 NaN,返回 NaN。
  • 如果某个运算数是 undefined,发生错误。
  • 如果两个运算数都是boolean类型,则返回boolean值

与Java中的逻辑AND运算相似,JavaScript 中的逻辑AND运算也是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数。对于逻辑AND运算来说,如果第一个运算数是false,那么无论第二个运算数的值是什么,结果都不可能等于true。

考虑下面的例子:

var bTrue = true;
var bResult = (bTrue && bUnknown); //发生错误
alert(bResult); //这一行不会执行

代码运行结果:

详解JavaScript逻辑And运算符

这段代码在进行逻辑 AND 运算时将引发错误,因为变量 bUnknown 是未定义的。变量 bTrue 的值为 true,因为逻辑 AND 运算将继续计算变量 bUnknown。这样做就会引发错误,因为 bUnknown 的值是 undefined,不能用于逻辑 AND 运算。
    如果修改这个例子,把第一个数设为 false,那么就不会发生错误:

var bTrue = false;
var bResult = (bTrue && bUnknown); //不会发生错误
alert("bTrue && bUnknown的结果是:"+(bResult));//输出 "false"

在这段代码中,脚本将输出逻辑AND运算返回的值,即字符串"false"。即使变量 bUnknown 的值为 undefined,它也不会被计算,因为第一个运算数的值是 false。

运行结果:

详解JavaScript逻辑And运算符

验证JavaScript逻辑And运算符的运算行为

测试代码:

<script type="text/javascript">
  document.write("验证JavaScript逻辑And运算符的运算行为:");
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");

  var bTrue = true;
  var bFalse = false;
  var bResult = bTrue && bFalse;
  /*1.如果两个运算数都是boolean类型,则返回boolean值*/
  document.write("1.如果两个运算数都是boolean类型,则返回boolean值");
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  document.write("bTrue = true,bFalse = false,bTrue && bFalse的结果是:"+(bResult));//结果为false
  document.write("<br/>");

  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");

  var obj = new Object();
  /*2.如果一个运算数是对象,另一个是 Boolean 值,返回该对象*/
  document.write("2.如果一个运算数是对象,另一个是 Boolean 值,返回该对象");
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  document.write("obj是一个对象,true&&obj的结果是:"+(true&&obj));
  document.write("<br/>");
  document.write("obj==true&&obj的结果是:"+(obj==(true&&obj)));
  document.write("<br/>");
  document.write("false&&obj的结果是:"+(false&&obj));
  document.write("<br/>");

  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  /*3.如果两个运算数都是对象,返回第二个对象。*/
  var obj1 = new Object();
  var obj2 = new Object();
  document.write("3.如果两个运算数都是对象,返回第二个对象。");
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  document.write("obj1是一个对象,obj2是一个对象,obj1==(obj1&&obj2)的结果是:"+(obj1==(obj1&&obj2)));//结果为false
  document.write("<br/>");
  document.write("obj1是一个对象,obj2是一个对象,obj2==(obj1&&obj2)的结果是:"+(obj2==(obj1&&obj2)));//结果为true
  document.write("<br/>");

  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  /*4.如果某个运算数是 null,返回null。*/
  var a=null;
  var b=true;
  document.write("4.如果某个运算数是 null,返回null。");
  document.write("<br/>");
  document.write("a=null,b=true,a&&b的结果是:"+(a&&b));
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  /*5.如果某个运算数是NaN,返回NaN*/
   var c = NaN;
   var d = "str";
  document.write("5.如果某个运算数是NaN,返回NaN");
  document.write("<br/>");
  document.write("c=NaN,d=str,c&&d的结果是:"+(c&&d));
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  /*
  6.JavaScript中的逻辑 AND 运算是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数。
  对于逻辑 AND 运算来说,如果第一个运算数是 false,那么无论第二个运算数的值是什么,结果都不可能等于 true。
  */
  var bFalse = false;
  var bResult = (bFalse && bUnknown);
  document.write("6.JavaScript中的逻辑 AND 运算是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数");
  document.write("<br/>");
  document.write("对于逻辑 AND 运算来说,如果第一个运算数是 false,那么无论第二个运算数的值是什么,结果都不可能等于 true。");
  document.write("<br/>");
  document.write("bFalse=false,bUnknown是一个未定义的变量,bFalse && bUnknown的结果是:"+(bResult)); //输出 "false"

  var bTrue = true;
  var bResult = (bTrue && bUnknown);  //发生错误
  alert(bResult);      //这一行不会执行
 </script>

详解JavaScript逻辑And运算符

以上就是关于JavaScript逻辑And运算符的全部介绍,希望能够帮助到大家更好的学习js的逻辑运算符。

Javascript 相关文章推荐
从父页面读取和操作iframe中内容方法
Jul 25 Javascript
js获取日期:昨天今天和明天、后天
Jun 11 Javascript
Javascript中的默认参数详解
Oct 22 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
Apr 25 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
layui输入框中只允许输入整数的实现方法
Sep 18 Javascript
基于Vue的侧边目录组件的实现
Feb 05 Javascript
Node.js API详解之 string_decoder用法实例分析
Apr 29 Javascript
用js实现放大镜效果
Oct 28 Javascript
JavaScript选择器函数querySelector和querySelectorAll
Nov 27 Javascript
JavaScript encodeURI 和encodeURIComponent
Dec 04 #Javascript
详解JavaScript逻辑Not运算符
Dec 04 #Javascript
简要了解jQuery移动web开发的响应式布局设计
Dec 04 #Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
Dec 04 #Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
Dec 04 #Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
Dec 04 #Javascript
写给小白的JavaScript引擎指南
Dec 04 #Javascript
You might like
PHP开发中四种查询返回结果分析
2011/01/02 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
常用一些Javascript判断函数
2012/08/14 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
JS原型链怎么理解
2016/06/27 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
JavaScript 异步调用
2017/10/25 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
如何选择使用结构还是类
2014/05/30 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
学会感恩主题班会
2015/08/12 职场文书
合作协议书格式范本
2016/03/21 职场文书
导游词之广西漓江
2019/11/02 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js