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 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
Feb 17 Javascript
比Jquery的document.ready更快的方法
Apr 28 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 Javascript
javascript获得当前的信息的一些常用命令
Feb 25 Javascript
浅谈jquery事件处理
Apr 24 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
ES6基础之解构赋值(destructuring assignment)
Feb 21 Javascript
新手入门带你学习JavaScript引擎运行原理
Jun 24 Javascript
React Hooks 实现和由来以及解决的问题详解
Jan 17 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
Aug 06 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
基于JQuery的cookie插件
2010/04/07 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
js的2种继承方式详解
2014/03/04 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Python input函数使用实例解析
2019/11/22 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
计算机专业个人简短的自我评价
2013/10/23 职场文书
会计系个人求职信范文分享
2013/12/20 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
机关作风建设工作总结
2014/10/23 职场文书
长城导游词
2015/01/30 职场文书
赞助商致辞
2015/07/30 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书
高三化学教学反思
2016/02/22 职场文书