全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈javascript中的 “ && ” 和 “ || ”

有时候,我们会在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中数组去重与拍平的方法示例  # 理解javascript中的Function.prototype.bind的方法  # JavaScript数组复制详解  # Javascript基础回顾之(三) js面向对象  # Javascript基础回顾之(一) 类型  # JavaScript基础之AJAX简单的小demo  # JavaScript Date 知识浅析  # JavaScript实现时钟滴答声效果  # Javascript中 带名 匿名 箭头函数的重要区别(推荐)  # javascript判断回文数详解及实现代码  # Javascript中的 “&” 和 “|” 详解  # 都是  # 就会  # 这段  # 我们可以  # 即是  # 都不  # 也会  # 这五种  # 我觉得  # 有很多  # 就不  # 可以用  # 会在  # 以此类推  # 这两个  # 太大  # 不存在  # 大可不必  # 有必要  # 这么做 


相关文章: c# 在高并发下使用反射发射(Reflection.Emit)的性能  C++时间戳转换成日期时间的步骤和示例代码  如何彻底删除建站之星生成的Banner?  微信推文制作网站有哪些,怎么做微信推文,急?  制作农业网站的软件,比较好的农业网站推荐一下?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  网站制作免费,什么网站能看正片电影?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  如何解决ASP生成WAP建站中文乱码问题?  建站之星在线版空间:自助建站+智能模板一键生成方案  如何快速搭建高效WAP手机网站?  如何制作算命网站,怎么注册算命网站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  装修招标网站设计制作流程,装修招标流程?  宝塔新建站点为何无法访问?如何排查?  宁波免费建站如何选择可靠模板与平台?  建站之星多图banner生成与模板自定义指南  如何在万网开始建站?分步指南解析  头像制作网站在线制作软件,dw网页背景图像怎么设置?  韩国服务器如何优化跨境访问实现高效连接?  购物网站制作公司有哪些,哪个购物网站比较好?  郑州企业网站制作公司,郑州招聘网站有哪些?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  ,石家庄四十八中学官网?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  建站之星安装步骤有哪些常见问题?  电商网站制作价格怎么算,网上拍卖流程以及规则?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  C#如何在一个XML文件中查找并替换文本内容  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  微信小程序 五星评分(包括半颗星评分)实例代码  实现虚拟支付需哪些建站技术支撑?  C#如何使用XPathNavigator高效查询XML  魔方云NAT建站如何实现端口转发?  南京网站制作费用,南京远驱官方网站?  盘锦网站制作公司,盘锦大洼有多少5G网站?  山东云建站价格为何差异显著?  电商平台网站制作流程,电商网站如何制作?  高防服务器如何保障网站安全无虞?  建站之星伪静态规则如何正确配置?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  测试制作网站有哪些,测试性取向的权威测试或者网站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  网站制作报价单模板图片,小松挖机官方网站报价?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何选择服务器才能高效搭建专属网站?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何在景安服务器上快速搭建个人网站?  免费视频制作网站,更新又快又好的免费电影网站?  专业网站建设制作报价,网页设计制作要考什么证? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。