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 相关文章推荐
javascrip客户端验证文件大小及文件类型并重置上传
Jan 12 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
Apr 07 Javascript
js Array对象的扩展函数代码
Apr 24 Javascript
计算新浪Weibo消息长度(还可以输入119字)
Jul 02 Javascript
thinkphp 表名 大小写 窍门
Feb 01 Javascript
Javascript OOP之面向对象
Jul 31 Javascript
angularJS的radio实现单项二选一的使用方法
Feb 28 Javascript
vscode下vue项目中eslint的使用方法
Jan 13 Javascript
vue实现鼠标移入移出事件代码实例
Mar 27 Javascript
使用layui的router来进行传参的实现方法
Sep 06 Javascript
jQuery实现每日秒杀商品倒计时功能
Sep 06 jQuery
vue+animation实现翻页动画
Jun 29 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
JavaScript中的事件处理
2008/01/16 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
python练习程序批量修改文件名
2014/01/16 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
调解协议书
2014/04/16 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
特此通知格式
2015/04/27 职场文书
机关工会工作总结2015
2015/05/26 职场文书
简爱读书笔记
2015/06/26 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
Golang的继承模拟实例
2021/06/30 Golang
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
使用Python拟合函数曲线
2022/04/14 Python