浅谈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获得服务器端控件的ID的实现代码
Dec 28 Javascript
JS cookie中文乱码解决方法
Jan 28 Javascript
浅谈javascript获取元素transform参数
Jul 24 Javascript
浅谈js键盘事件全面控制
Dec 01 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
Mar 21 Javascript
React中使用async validator进行表单验证的实例代码
Aug 17 Javascript
微信小程序实现手势滑动卡片效果
Aug 26 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 Javascript
jquery实现鼠标悬浮弹出气泡提示框
Dec 23 jQuery
在HTML5 localStorage中存储对象的示例代码
Apr 21 Javascript
js之ajax文件上传
May 13 Javascript
vue router 动态路由清除方式
May 25 Vue.js
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
自己做矿石收音机
2021/03/02 无线电
php抓取页面与代码解析 推荐
2010/07/23 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
Javascript学习指南
2014/12/01 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
js实现五星评价功能
2017/03/08 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
Scrapy的简单使用教程
2017/10/24 Python
python分布式环境下的限流器的示例
2017/10/26 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
工商管理应届生求职信
2013/10/07 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
个人自我鉴定总结
2014/03/25 职场文书
2014年食堂工作总结
2014/11/20 职场文书
工程技术员岗位职责
2015/04/11 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python