Javascript 中的 && 和 || 使用小结


Posted in Javascript onApril 25, 2010

普通情况下的 && 和 || 比较简单,这里不进行讨论。

准备两个对象用于下面的讨论。

var alice = { 
name: "alice", 
toString: function () { 
return this.name; 
} 
} var smith = { 
name: "smith", 
toString: function () { 
return this.name; 
} 
}

在 javascript 中,对于 && 不仅仅可以用于 boolean 类型,也不仅仅返回 Boolean 类型的结果。
l 如果第一个操作数是 Boolean 类型,而且值为 false ,那么直接返回 false。
l 如果第一个操作数是 Boolean 类型,而且值为 true,另外一个操作数是 object 类型,那么将返回这个对象。
l 如果两个操作数都是 object 类型,那么,返回第二个对象。
l 如果任何一个操作数是 null,那么,返回 null。
l 如果任何一个操作数是 NaN,那么返回 NaN。
l 如果任何一个操作数是 undefinded,那么返回 undefined。

alert(false && alice); // false
alert(true && alice); // alice

alert(alice && smith); // smith
alert(smith && alice); // alice

alert(null && alice); // null
alert(NaN && alice); // NaN
alert(undefined && alice); // undefined
alert(alice && undefined); // undefined

对于 || 来说,同样也不仅仅用于 Boolean 类型,也不仅仅返回 Boolean 类型的结果。
事实上,null、undefined、NaN 都将被看作 false。而对象被当作 true。

l 如果第一个操作数是 boolean 类型,而且值为 true, 那么,直接返回 true。
l 如果第一个操作数是 Boolean 类型,而且值为 false ,第二个操作数为 object,那么返回 object 对象。
l 如果两个操作数都是 object 类型,那么返回第一个对象。
l 如果两个操作数都是 null,那么,返回 null。
l 如果两个操作数都是 NaN,那么返回 NaN。
l 如果两个操作数都是 undefined,那么,返回 undefined。
alert(false || alice);         // alice

alert(true || alice);          // true

alert(alice || smith);         // alice

alert(smith || alice);         // smith

alert(null || alice);       // alice

alert(alice || null);       // alice

alert(null || null);        // null

alert(NaN || alice);        // alice

alert(alice || NaN);        // alice

alert(NaN || NaN);          // NaN

alert(undefined || alice);     // alice

alert(alice || undefined);     // alice

alert(undefined || undefined); // undefined

不用搞得这么复杂 推荐大家看这部分的说明
a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回a
a || b : 将a, b转换为Boolean类型, 再执行逻辑或, true返回a, false返回b
转换规则:
对象为true
非零数字为true
非空字符串为true
其他为false

相关文章可以参考下面几篇,综合一下
js 与或运算符 || && 妙用
js利用与或运算符优先级实现if else条件判断表达式
javascript &&和||运算法的另类使用技巧

Javascript 相关文章推荐
Jquery 最近浏览过的商品的功能实现代码
May 14 Javascript
JavaScript中Cookie操作实例
Jan 09 Javascript
javascript结合canvas实现图片旋转效果
May 03 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
Aug 24 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
Apr 12 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
Sep 20 Javascript
详解Javascript函数声明与递归调用
Oct 22 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
AngularJS中table表格基本操作示例
Oct 10 Javascript
微信小程序实现传参数的几种方法示例
Jan 10 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
May 23 Javascript
js 禁用只读文本框获得焦点时的退格键
Apr 25 #Javascript
js 内存释放问题
Apr 25 #Javascript
JavaScript 对象链式操作测试代码
Apr 25 #Javascript
网页上的Javascript编辑器和代码格式化
Apr 25 #Javascript
jQuery温习篇 强大的JQuery选择器
Apr 24 #Javascript
javascript 二分法(数组array)
Apr 24 #Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
Apr 24 #Javascript
You might like
一个程序下载的管理程序(四)
2006/10/09 PHP
动易数据转成dedecms的php程序
2007/04/07 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
react基本安装与测试示例
2020/04/27 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
Python切片操作深入详解
2018/07/27 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
C/C++程序员常见面试题一
2012/12/08 面试题
中文专业毕业生自荐信
2014/05/24 职场文书
党员四风剖析材料
2014/08/27 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
2014小学年度工作总结
2014/12/20 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL