浅谈javascript中的 “ && ” 和 “ || ”


Posted in Javascript onFebruary 02, 2017

有时候,我们会在jQuery框架或者其他js插件中发现里面有很多 “ && ” 和 “ || ”,那么这两个标识到底是什么含义?怎么使用?我觉得还是有必要稍微深究一下。

一、原理:

&& 操作符特点:逻辑运算表达式中只要一个是false就取false的值,都是true取后面,都是false取前面。

|| 操作符特点:逻辑运算表达式中只要一个是true就取true的值,都是true取前面,都是false取后面。

在js逻辑运算中,我们知道 0、""、null、false、undefined、NaN 这五种数据类型是会被判断为false的。那么,我们在进行js的逻辑运算过程中,就可以根据上面的原理以及这五种数据类型来进行相应的判断处理。直接上DEMO...

二、原始DEMO:

先亮出问题!!!

如果我们要根据学生的成绩来判断等级,比如:90分表示A,80分表示B,60分表示C,其他表示D。

那么我们可以这么做:

JS代码:

var score = 90;
var grade = '';
if(score === 90){
 grade = "A";
}else if(score === 80){
 grade = "B";
}else if(score === 60){
 grade = "C";
}else{
 grade = "D";
}
console.log("当前学生等级为:" + grade); // 当前学生等级为:A

或者这样:

var score = 90;
var grade = '';
switch(score){
 case 90:
 grade = "A";
 break;
 case 80:
 grade = "B";
 break;
 case 60:
 grade = "C";
 break;
 default:
 grade = "D";
 break;
};
console.log("当前学生等级为:" + grade); // 当前学生等级为:A

三、优化DEMO:

其实,如果我们用 “ && ” 和 “ || ” 的话,大可不必如上面那么麻烦。

var score = 90;
var grade = (score===90 && 'A') || (score===80 && 'B') || (score===60 && 'C') || 'D';
console.log("当前学生等级为:" + grade); // 当前学生等级为:A

上面代码可以这么理解:

如果score的值等于90,那么score===90的逻辑表达式就成立(也即是true),就会执行到后面 'A' 的赋值操作,同时后面的“||” 逻辑运算也可以忽略(因为“||”运算符的特点是前面一旦为true,后面就没有执行的必要了)。

如果score的值不等于90,那么score===90的逻辑表达式就不成立(也即是false),根据“&&”操作符的特点,我们知道“(score===90 && 'A')”这段代码就不会执行到后面 'A' 的赋值操作,同时由于“(score===90 && 'A')”这段代码整体是false,那么根据“||”的特点,整个逻辑表达式会继续往后执行。

以此类推,如果前面所有的逻辑表达式都不成立,那么根据“||”的特点(全部为false就取最后面的),最后的grade赋值就会是“D”。

我们还可以用JSON形式来处理上面的逻辑运算:

var score = 90;
var grade = {90:"A", 80:"B", 60:"C"}[score] || 'D';
console.log("当前学生等级为:" + grade); // 当前学生等级为:A

这里利用了JSON对象的属性读取,当“JSON对象.属性值”存在的时候(为true),就会取得对应属性的key值(A、B或者C)。当score属性值不存在与JSON对象中的时候,就会执行“||”后面的内容,也就是把grade赋值为“D”。

当然,我们会发现上面的数值比较并没有太大的实用性,比如当学生的成绩在85分的时候,等级也会变成“D”,这明显是不合适的!!!

所以我们可以把上面的代码再优化下,把数值的 “相等比较” 改成 “范围区间比较” 。

var score = 85;
var grade = (score>=90 && 'A') || (score>=80 && 'B') || (score>=60 && 'C') || 'D';
console.log("当前学生等级为:" + grade); // 当前学生等级为:B

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Javascript 复制数组实现代码
Nov 26 Javascript
JavaScript中为元素加上name属性的方法
May 09 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
Sep 24 Javascript
js省市县三级联动效果实例
Apr 15 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
JS鼠标滚动分页效果示例
Jul 05 Javascript
vue插件vue-resource的使用笔记(小结)
Aug 04 Javascript
JS+canvas动态绘制饼图的方法示例
Sep 12 Javascript
详解.vue文件中监听input输入事件(oninput)
Sep 19 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
Aug 28 Javascript
Javascript中的 “&” 和 “|” 详解
Feb 02 #Javascript
javascript实现简易计算器
Feb 01 #Javascript
javascript实现右下角广告框效果
Feb 01 #Javascript
基于javascript实现最简单选项卡切换
Feb 01 #Javascript
快速实现jQuery多级菜单效果
Feb 01 #Javascript
angular实现商品筛选功能
Feb 01 #Javascript
Bootstarp基本模版学习教程
Feb 01 #Javascript
You might like
PHP安装攻略:常见问题解答(二)
2006/10/09 PHP
phpmyadmin的#1251问题
2006/11/25 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
webpack入门必知必会
2017/01/16 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
Python的组合模式与责任链模式编程示例
2016/02/02 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
python求最大连续子数组的和
2018/07/07 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
财务管理专业自荐信范文
2013/12/24 职场文书
运动会邀请函范文
2014/01/31 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
国旗下的演讲稿
2014/05/08 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle