浅谈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 相关文章推荐
Array.prototype.slice 使用扩展
Jun 09 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
Dec 08 Javascript
JavaScript中的函数声明和函数表达式区别浅析
Mar 27 Javascript
浅析JavaScript中break、continue和return的区别
Nov 30 Javascript
js实现拖拽功能
Mar 01 Javascript
Angular2中如何使用ngx-translate进行国际化
May 21 Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
Jan 12 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
Vue.js 无限滚动列表性能优化方案
Dec 02 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
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
js查错流程归纳
2012/05/04 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
vue中各组件之间传递数据的方法示例
2017/07/27 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Django中的Model操作表的实现
2018/07/24 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
python 图片去噪的方法示例
2019/07/09 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
python中altair可视化库实例用法
2021/01/26 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
Python使用openpyxl复制整张sheet
2021/03/24 Python
创业计划书撰写原则
2014/01/25 职场文书
岗位竞聘书范文
2014/03/31 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
求职信范文大全
2014/05/26 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏