浅谈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数据缓存系统实现代码
Oct 24 Javascript
js为数字添加逗号并格式化数字的代码
Aug 23 Javascript
JavaScript中的alert()函数使用技巧详解
Dec 29 Javascript
学习javascript面向对象 理解javascript原型和原型链
Jan 04 Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 Javascript
vue.js初学入门教程(1)
Nov 03 Javascript
BootStrap CSS全局样式和表格样式源码解析
Jan 20 Javascript
如何编写jquery插件
Mar 29 jQuery
Angular.JS中的this指向详解
May 17 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 Javascript
node微信开发之获取access_token+自定义菜单
Mar 17 Javascript
selenium+java中用js来完成日期的修改
Oct 31 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 max_execution_time执行时间问题
2011/07/17 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
javascript html 静态页面传参数
2009/04/10 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
谈谈vue中mixin的一点理解
2017/12/12 Javascript
Vue实现简单分页器
2018/12/29 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
使用Python处理BAM的方法
2018/09/28 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
python识别验证码的思路及解决方案
2020/09/13 Python
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
《囚绿记》教学反思
2014/03/01 职场文书
开门红主持词
2014/04/02 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
员工聘用合同范本
2015/09/21 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
Java存储没有重复元素的数组
2022/04/29 Java/Android