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 判断代码全收集
Apr 28 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
Aug 15 Javascript
完美解决js传递参数中加号和&号自动改变的方法
Oct 11 Javascript
原生js实现新闻列表展开/收起全文功能
Jan 20 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
实例讲解v-if和v-show的区别
Jan 31 Javascript
Angular实现svg和png图片下载实现
May 05 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
Apr 25 Javascript
详解React的回调渲染模式
Sep 10 Javascript
JavaScript小技巧带你提升你的代码技能
Sep 15 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 编写的日历
2006/10/09 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
浅析php学习的路线图
2013/07/10 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
JavaScript中URL编码函数代码
2011/01/11 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
Python实现端口复用实例代码
2014/07/03 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
称象教学反思
2014/02/03 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
工程部经理岗位职责
2015/02/02 职场文书
埃及王子观后感
2015/06/16 职场文书
计算机教师工作总结
2015/08/13 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
opencv检测动态物体的实现
2021/07/21 Python
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python