当前位置:首页 > 日记 > 正文

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

浅谈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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

相关文章

Word2007怎样快速转换成PDF格式

Word2007怎样快速转换成PDF格式

转换成,快速,格式,电脑软件,PDF,  Word和PDF是常见的办公文档格式,这两种格式有时需要进行格式转换。那么下面就由小编为您分享下Word2007快速转换成PDF格式的技巧,希望能帮助您,有需要的朋友可以来看看哦。快速转换成PDF格式的步骤如下:  …

JavaScript数组迭代方法

JavaScript数组迭代方法

数组,方法,迭代,电脑软件,JavaScript,最近工作中经常涉及到数据的处理,数组尤其常见,经常需要对其进行遍历、转换操作,网上的文章零零散散,不得已自己又找出红宝书来翻出来看,顺便记一笔,便于以后查询。数组常用的迭代方法ECMAScript5为数组定义…

微信指纹支付如何取消

微信指纹支付如何取消

支付,取消,指纹,电脑软件,  当你在使用微信指纹支付时,偶尔会需要一些小问题,想要关闭指纹支付的方法也很简单,根据本文提供的图文教程即可轻松取消指纹支付,一起来看看吧!微信指纹支付如何取消其实关闭指纹支付的方法更加简单,和开启时程序一…

微信读书怎么免费看书?

微信读书怎么免费看书?

电脑软件,  微信读书怎么免费看书?不知道大家发现没有,微信读书app上面的书虽然都非常的有品位,推荐的书都是非常值得一读的好书,但是你们注意到标价没有?是不是有一丢丢高啊?那么在这里小编要告诉大家微信读书免费看书的方法,赶紧来mark~!微…

AngularJS2中一种button切换效果的

AngularJS2中一种button切换效果的

方法,效果,电脑软件,button,之前用三目表达式和ng-class实现了按钮切换效果,似乎达到了我的预期,但是我觉得还有改进空间,网上找了一些资料,大概还有以下几种实现方式:路由<button class="btn1" routerLink="component1" routerLinkActive=…

excel2007插入表单控件的教程excel

excel2007插入表单控件的教程excel

表单,控件,教程,电脑软件,strong,  Excel中的表单控件该如何插入呢?下面是小编带来的关于excel2007插入表单控件的教程,希望阅读过后对你有所启发!excel2007插入表单控件的教程插入表单步骤1:先看下效果,下面是两个调查表单,左边使用的是单选…

word2016文档中怎么切换插入改写模

word2016文档中怎么切换插入改写模

模式,文档,电脑软件,  很多用户在使用word时,输入空格后面的字就消失了,这是因为无意间切换了word的&ldquo;改写/插入&rdquo;模式。以下是小编为您带来的关于word2016文档切换插入改写模式,希望对您有所帮助。word2016文档切换插入改写模式…

浅谈jQuery中事情的动态绑定

浅谈jQuery中事情的动态绑定

动态绑定,浅谈,事情,电脑软件,jQuery,在jQuery的开发过程中,我们往往需要处理各种事件,例如click(),hover()等。在jQuery的API中,我们可以使用不同的方法来将这些事件绑定到特定的元素中。今天这篇文章中,我们将要介绍如何使用bind(),on(),live()…

ps软件怎样用钢笔来抠图

ps软件怎样用钢笔来抠图

抠图,方法,电脑软件,ps,  在ps软件中抠图的方法其实有很多,我们还可以使用钢笔来进行抠图。那么大家知道ps软件怎样用钢笔来抠图吗?下面是小编整理的ps软件怎样用钢笔来抠图的方法,希望能帮到大家!ps软件用钢笔来抠图的方法1、运行PS软件(…

WPS演示2013中如何设置自定义放映

WPS演示2013中如何设置自定义放映

自定义,设置,演示,如何设置,电脑软件,  打开一份幻灯片,有好多页,但是我们也没必要非要将不需要放映的删去,我们可以利用自定义放映的方法指定放映幻灯片中特定的几页。以下是小编为您带来的关于WPS演示2013中设置自定义放映,希望对您有所帮…

如何成为微信至尊会员?

如何成为微信至尊会员?

至尊,会员,电脑软件,  微信朋友圈里即将开始流行一种忽大忽小的字体。伴随着字体的发生,微信至尊会员也就奇妙的诞生了。利用特殊符号来改变自己的微信昵称,让自己瞬间变为微信至尊会员,就连土豪也不知道开通微信会员的方法哦!下面,小编来教…

excel修改图例系列名称教程excel怎

excel修改图例系列名称教程excel怎

图例,修改,教程,名称,系列,  在当今社会中,经常需要用到Excel进行办公,或许有些并不太熟悉Excel的朋友不会使用修改图例系列名称的功能,下面是由小编分享的excel修改图例系列名称教程,以供大家阅读和学习。excel修改图例系列名称教程修改图例…