浅谈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 19 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
Mar 05 Javascript
详解javascript传统方法实现异步校验
Jan 22 Javascript
JavaScript实现移动端滑动选择日期功能
Jun 21 Javascript
大型JavaScript应用程序架构设计模式
Jun 29 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
Jul 24 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
Apr 01 Javascript
表格展示利器 Bootstrap Table实例代码
Sep 06 Javascript
vue路由传参页面刷新参数丢失问题解决方案
Oct 08 Javascript
js基础之事件捕获与冒泡原理
Oct 09 Javascript
解决VUE双向绑定失效的问题
Oct 29 Javascript
Vue初始化中的选项合并之initInternalComponent详解
Jun 11 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.ini中文版
2006/10/09 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
详解Nodejs之npm&package.json
2017/06/15 NodeJs
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
一个简单的python程序实例(通讯录)
2013/11/29 Python
python提示No module named images的解决方法
2014/09/29 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python操作串口的方法
2015/06/17 Python
python实现BackPropagation算法
2017/12/14 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
Python实现多线程的两种方式分析
2018/08/29 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
编辑求职信样本
2013/12/16 职场文书
往来会计岗位职责
2013/12/19 职场文书
老师自我鉴定范文
2013/12/25 职场文书
作风建设演讲稿
2014/05/23 职场文书
先进党支部事迹材料
2014/12/24 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
Python 中的 copy()和deepcopy()
2021/11/07 Python