详解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 相关文章推荐
JS日期和时间选择控件升级版(自写)
Aug 02 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
Sep 10 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
Mar 18 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
jQuery拖拽插件gridster使用指南
Apr 21 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
Aug 31 Javascript
html判断当前页面是否在iframe中的实例
Nov 30 Javascript
jquery实现数字输入框
Feb 22 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
Feb 04 Javascript
详解使用 Node.js 开发简单的脚手架工具
Jun 08 Javascript
React组件设计模式之组合组件应用实例分析
Apr 29 Javascript
JS前后端实现身份证号验证代码解析
Jul 23 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 引用(&amp;)详解
2009/11/20 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
解读Python中degrees()方法的使用
2015/05/18 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python如何实现视频转代码视频
2019/06/17 Python
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
银行自荐信范文
2013/10/07 职场文书
交通安全教育制度
2014/02/02 职场文书
治庸问责心得体会
2014/09/12 职场文书
2015年林业工作总结
2015/05/14 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技