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 相关文章推荐
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 Javascript
javascript中的107个基础知识收集整理 推荐
Mar 29 Javascript
jquery基础教程之deferred对象使用方法
Jan 22 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
Sep 06 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
Sep 10 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
May 05 Javascript
Javascript操作表单实例讲解(下)
Jun 20 Javascript
微信开发 微信授权详解
Oct 21 Javascript
Angular.js基础学习之初始化
Mar 10 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
Jun 08 jQuery
基于Vue框架vux组件库实现上拉刷新功能
Nov 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中使用PDF文档功能
2006/10/09 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
python地震数据可视化详解
2019/06/18 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
python 读取修改pcap包的例子
2019/07/23 Python
Apache部署Django项目图文详解
2019/07/30 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
《落花生》教学反思
2014/02/25 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
个人四风对照检查材料
2014/09/26 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
父亲去世追悼词
2015/06/23 职场文书
新学期开学寄语2016
2015/12/04 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫