浅谈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中valueOf函数与toString方法深入理解
Dec 02 Javascript
JavaScript回调(callback)函数概念自我理解及示例
Jul 04 Javascript
js获取IFRAME当前的URL的方法
Nov 13 Javascript
jQuery获取和设置表单元素的方法
Feb 14 Javascript
教你如何使用PHP输出中文JSON字符串
May 22 Javascript
js实现拉幕效果的广告代码
Sep 02 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
Dec 14 Javascript
ES6教程之for循环和Map,Set用法分析
Apr 10 Javascript
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
深入理解js 中async 函数的含义和用法
May 13 Javascript
Vue实现图书管理小案例
Dec 03 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
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
linux php mysql数据库备份实现代码
2009/03/10 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
Python分析学校四六级过关情况
2017/11/22 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
python中while和for的区别总结
2019/06/28 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
Python中url标签使用知识点总结
2020/01/16 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
员工试用期自我评价
2014/09/18 职场文书
小平您好观后感
2015/06/09 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang