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 相关文章推荐
LazyLoad 延迟加载(按需加载)
May 31 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 Javascript
jquery选择器需要注意的问题
Nov 26 Javascript
Javascript无参数和有参数类继承问题解决方法
Mar 02 Javascript
在Javascript中处理数组之toSource()方法的使用
Jun 09 Javascript
jQuery实现字符串全部替换的方法【推荐】
Mar 09 Javascript
微信扫码支付零云插件版实例详解
Apr 26 Javascript
javascript 判断一个对象为数组的方法
May 03 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
Jun 25 Javascript
js实现下拉框二级联动
Dec 04 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
Jan 18 jQuery
js设置鼠标悬停改变背景色实现详解
Jun 26 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
PHP的开发框架的现状和展望
2007/03/16 PHP
一周让你学会PHP 不错的学习资料
2009/02/06 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python解析json实例方法
2013/11/19 Python
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
python实现读取命令行参数的方法
2015/05/22 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
详解Django的CSRF认证实现
2018/10/09 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
Python爬虫文件下载图文教程
2018/12/23 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
百联网上商城:i百联
2017/01/28 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
大学生学习生活的自我评价
2013/11/01 职场文书
实习生自我评价
2014/01/18 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python