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 入门·JavaScript 具有全范围的运算符
Oct 01 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
Nov 16 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
详解vue渲染从后台获取的json数据
Jul 06 Javascript
关于前后端json数据的发送与接收详解
Jul 30 Javascript
react-native ListView下拉刷新上拉加载实现代码
Aug 03 Javascript
微信小程序左滑动显示菜单功能的实现
Jun 14 Javascript
select2 ajax 设置默认值,初始值的方法
Aug 09 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
Nov 05 Javascript
JS实现头条新闻的经典轮播图效果示例
Jan 30 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 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处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
python连接mysql有哪些方法
2020/06/24 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
单位在职证明范本
2014/01/09 职场文书
优秀党员主要事迹
2014/01/19 职场文书
装修活动策划方案
2014/08/27 职场文书
教育合作协议范本
2014/10/17 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android