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 相关文章推荐
两个比较有用的Javascript工具函数代码
Feb 17 Javascript
input 输入框内的输入事件详细分析
Mar 17 Javascript
javascript Array 数组常用方法
Apr 05 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
Jun 15 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 Javascript
vue.js指令和组件详细介绍及实例
Apr 06 Javascript
JavaScript实现的商品抢购倒计时功能示例
Apr 17 Javascript
AngularJS 实现购物车全选反选功能
Oct 24 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
js实现内置计时器
Dec 16 Javascript
基于vue和websocket的多人在线聊天室
Feb 01 Javascript
JavaScript中跨域问题的深入理解
Mar 04 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+DBM的同学录程序(1)
2006/10/09 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
写出高质量的PHP程序
2012/02/04 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
destoon复制新模块的方法
2014/06/21 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
js中匿名函数的N种写法
2010/09/08 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
简单介绍django提供的加密算法
2019/12/18 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
初中三好学生自我鉴定
2014/04/07 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
办公用品质量保证书
2015/05/11 职场文书
雷锋的观后感
2015/06/10 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL