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的一些注意
Dec 06 Javascript
javascript之卸载鼠标事件的代码
May 14 Javascript
javascript 特性检测并非浏览器检测
Jan 15 Javascript
jQuery对象与DOM对象之间的相互转换
Mar 03 Javascript
JS实现支持多选的遍历下拉列表代码
Aug 20 Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 Javascript
微信小程序 页面跳转传递值几种方法详解
Jan 12 Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 Javascript
js 毫秒转天时分秒的实例
Nov 17 Javascript
AngularJS 事件发布机制
Aug 28 Javascript
vue中使用protobuf的过程记录
Oct 26 Javascript
Vue接口封装的完整步骤记录
May 14 Vue.js
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
一个典型的PHP分页实例代码分享
2011/07/28 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
非常好的js代码
2006/06/27 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
JS对象深度克隆实例分析
2017/03/16 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
js断点调试心得分享(必看篇)
2017/12/08 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
python实现统计代码行数的方法
2015/05/22 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
基于Python的OCR实现示例
2020/04/03 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
迎新春趣味活动方案
2014/08/24 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
男方婚前保证书
2015/02/28 职场文书
学习心理学心得体会
2016/01/22 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
golang协程池模拟实现群发邮件功能
2021/05/02 Golang