浅谈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使用Math.Min返回两个数中较小数的方法
Apr 06 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
学习使用Bootstrap页面排版样式
May 11 Javascript
简单谈谈React中的路由系统
Jul 25 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
Sep 20 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
vue裁切预览组件功能的实现步骤
May 04 Javascript
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 Javascript
elementUI table表格动态合并的示例代码
May 15 Javascript
vue如何限制只能输入正负数及小数
Jul 04 Javascript
Vue 组件注册全解析
Dec 17 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读取文件的常见几种方法
2016/11/03 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
jquery插件制作 提示框插件实现代码
2012/08/17 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
js倒计时显示实例
2016/12/11 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
微信小程序之购物车功能
2020/09/23 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
easy_install python包安装管理工具介绍
2013/02/10 Python
Python中的map、reduce和filter浅析
2014/04/26 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
python之array赋值技巧分享
2019/11/28 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
大学生军训广播稿
2014/01/24 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
土建工程师岗位职责
2014/06/10 职场文书
搞笑车尾标语
2014/06/23 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
个人年底工作总结
2015/03/10 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js