时间:2021-05-18
有时候,我们会在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以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
下面小编就为大家带来一篇浅谈JavaScript中面向对象的的深拷贝和浅拷贝。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。1.浅拷贝:复制一份引用,所
一、变量说到javascript中的delete操作符,还是首先要搞清楚javascript中的变量和属性之间的关系。javascript中,变量和对象属性关系
JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性。主要内容如下:理解JavaScript
摘抄自:ABS_GUIDE下载地址:http://pletelistisQQHaveaniceday!!!以上这篇浅谈linux中shell变量$#,$@,$0
把JavaScript中的伪数组转换为真数组在JavaScript中,函数中的隐藏变量arguments和用getElementsByTagName获得的元素集