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倒计时页面跳转实例小结
Sep 11 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
Mar 26 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
Nov 30 Javascript
完美实现bootstrap分页查询
Dec 09 Javascript
AngularJS入门教程引导程序
Aug 18 Javascript
AngularJS获取json数据的方法详解
May 27 Javascript
angular2路由切换改变页面title的示例代码
Aug 23 Javascript
快速处理vue渲染前的显示问题
Mar 05 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
JS使用对象的defineProperty进行变量监控操作示例
Feb 02 Javascript
原生JS实现贪吃蛇小游戏
Mar 09 Javascript
全面解析JavaScript Module模式
Jul 24 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加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
js 函数的副作用分析
2011/08/23 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
处理Python中的URLError异常的方法
2015/04/30 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
医学生自我鉴定范文
2013/11/08 职场文书
给分销商的致歉信
2014/01/14 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
医药销售自我评价200字
2014/09/11 职场文书
大学生村官工作心得体会
2016/01/23 职场文书