浅谈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 相关文章推荐
JS的参数传递示例介绍
Feb 08 Javascript
Js可拖拽放大的层拖动特效实现方法
Feb 25 Javascript
JavaScript获取表单enctype属性的方法
Apr 02 Javascript
几行js代码实现自适应
Feb 24 Javascript
node.js入门教程之querystring模块的使用方法
Feb 27 Javascript
canvas仿iwatch时钟效果
Mar 06 Javascript
B/S(Web)实时通讯解决方案分享
Apr 06 Javascript
详谈Node.js之操作文件系统
Aug 29 Javascript
JavaScript数组去重的几种方法
Apr 07 Javascript
vue实现绑定事件的方法实例代码详解
Jun 20 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
Nov 09 Javascript
结合axios对项目中的api请求进行封装操作
Sep 21 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
解析link_mysql的php版
2013/06/30 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
python机器学习之KNN分类算法
2018/08/29 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
详解KMP算法以及python如何实现
2020/09/18 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
2014年车间主任工作总结
2014/12/10 职场文书
大雁塔英文导游词
2015/02/10 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
小学语文国培研修日志
2015/11/13 职场文书
导游词之神仙居景区
2019/11/15 职场文书
python 实现的截屏工具
2021/05/08 Python
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers