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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
JQUERY获取form表单值的代码
Jul 17 Javascript
javascript下利用arguments实现string.format函数
Aug 24 Javascript
form表单只提交数据而不进行页面跳转的解决方案
Sep 18 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
js实现将选中内容分享到新浪或腾讯微博
Dec 16 Javascript
JavaScript实现反转字符串的方法详解
Apr 27 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
May 04 jQuery
实例解析Vue.js下载方式及基本概念
May 11 Javascript
Vue中对比scoped css和css module的区别
May 17 Javascript
JavaScript使用math.js进行精确计算操作示例
Jun 19 Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 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
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
python2.7到3.x迁移指南
2018/02/01 Python
Python高级property属性用法实例分析
2019/11/19 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
Pycharm github配置实现过程图解
2020/10/13 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
个人求职信范例
2014/01/29 职场文书
银行优秀员工事迹
2014/02/06 职场文书
社保委托书怎么写
2014/08/02 职场文书
学校端午节活动方案
2014/08/23 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS