浅谈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 相关文章推荐
jQuery 对象中的类数组操作
Apr 27 Javascript
Js基础学习资料
Nov 23 Javascript
jquery等待效果示例
May 01 Javascript
Node.js和MongoDB实现简单日志分析系统
Apr 25 Javascript
jquery mobile 移动web(5)
Dec 20 Javascript
JS如何判断json是否为空
Jul 06 Javascript
three.js实现3D模型展示的示例代码
Dec 31 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
Oct 10 jQuery
在项目vue中使用echarts的操作步骤
Sep 07 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
Sep 09 Javascript
Vue自定义表单内容检查rules实例
Oct 30 Javascript
jquery插件实现图片悬浮
Apr 16 jQuery
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命令行脚本接收传入参数的三种方式
2014/08/20 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
Python实现选择排序
2017/06/04 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
详解Django中间件执行顺序
2018/07/16 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
python 循环数据赋值实例
2019/12/02 Python
Python自省及反射原理实例详解
2020/07/06 Python
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
计算机本科生自荐信
2013/10/15 职场文书
银行开业庆典方案
2014/02/06 职场文书
客服部班长工作责任制
2014/02/25 职场文书
2015年暑期见闻
2015/07/14 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python