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 相关文章推荐
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
Dec 08 Javascript
xml文档转换工具,附图表例子(hta)
Nov 17 Javascript
javascript复制对象使用说明
Jun 28 Javascript
jquery增加时编辑jqGrid(实例代码)
Nov 08 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
Jquery技巧(必须掌握)
Mar 16 Javascript
浅谈angular.copy() 深拷贝
Sep 14 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
May 09 Javascript
了解在JavaScript中将值转换为字符串的5种方法
Jun 06 Javascript
vue中实现动态生成二维码的方法
Feb 21 Javascript
微信小程序后端实现授权登录
Feb 24 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
Mar 07 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获取目标函数执行时间示例
2014/03/04 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
python模块smtplib学习
2018/05/22 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python pygame模块编写飞机大战
2018/11/20 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
婴儿地球:Baby Earth
2018/12/25 全球购物
妇产医师自荐信
2014/01/29 职场文书
顶碗少年教学反思
2014/02/21 职场文书
大二学习计划书范文
2014/04/27 职场文书
总经理人事任命书
2014/06/05 职场文书
微笑服务标语
2014/06/24 职场文书
催款函范本大全
2015/06/24 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android