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 图片 上一张 下一张 链接效果(续篇)
Apr 20 Javascript
JS声明变量背后的编译原理剖析
Dec 28 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
js动态修改input输入框的type属性(实现方法解析)
Nov 13 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
Oct 15 Javascript
javascript拖拽应用实例
Mar 25 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
Apr 25 Javascript
详解Vue单元测试case写法
May 24 Javascript
js实现全选和全不选
Jul 28 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实现在站点里面添加邮件发送的功能
2020/04/28 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
Js+XML 操作
2006/09/20 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
javascript常用方法汇总
2014/12/02 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python多线程实例教程
2014/09/06 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Python简单生成随机数的方法示例
2018/03/31 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
如何给Python代码进行加密
2020/01/10 Python
什么是Python中的匿名函数
2020/06/02 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
杭州联环马网络笔试题面试题
2013/08/04 面试题
单位门卫岗位职责
2013/12/20 职场文书
授权委托书格式范文
2014/08/02 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
八达岭长城导游词
2015/01/30 职场文书
2019年最新借条范本!
2019/07/08 职场文书
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
muduo TcpServer模块源码分析
2022/04/26 Redis