今天百度发现一个简化长if   else if 语句的方法,看起来及其强大,感觉这样虽然对系统性能提升没有帮助但是代码更简练了,分析了一番,下面先说说自己学到的理论。

首先要弄清楚js 中对于 变量,在逻辑判断中会把对应的变量转为boolean类型,转化规则是非空字符串转为true,空字符串转为false,非0数字转为true,0或者NaN转为false,特殊的基本数据类型undefined转为false,null转为false,当然逻辑判断完赋值的时候会转化回去。

1、逻辑与(&&),例如:a && b && c ,其中a,b,c是任意类型的变量的代表,在逻辑与中会有短路现象,a、b、c都是true整个语句才是true,否则整个语句是false, 这些是常识,

大多数人不知道的是另一方面如果整个逻辑语句执行完毕后如果没有false那就返回最后一个逻辑判断即c,而对这两种情况,返回的都是变量的实际值,而不是转化为boolean后的值,可以理解为狗熊掰棒子,掰一个不是合格的棒子就扔掉,继续掰继续仍,然后碰到了合格的就拿这个,因为其它的已经扔了。

2、逻辑或(||),例如:a || b || c,其中a,b,c亦是任意类型变量的代表,这里同样会有短路现象,相反,逻辑或碰到true会短路不再执行后面的语句直接返回true,没有碰到true就返回最后一个false,然后返回转化前的变量,同样可以通过狗熊掰棒子的例子来理解,只是检查的标准不一样了。

接下来就该实战了,普通的判断表达式:

if(a == undefined){ // 初始化

a = 0;

};

强化后:var a = a || 0; // 初始化

还有更强大的:
普通版:

var a = 0;

var length = 10;

if(length>2 && length<5){

 a = 2;

}

else if(length>5 && length<8){

 a = 4;

}

else{

 a = 6;

}

强化版:

var a = ((length>2 && length<5) && 2) || ((length>5 && length<8) && 4) || 6; // 省了N行代码,可以这样记忆,if 与else if可以用||逻辑或来代替,而判断条件和该条件下的返回结果可以通过逻辑与来判断。

另外:

普通版:

var a = 0;

var length = 10;

if(length == 2){

 a = 2;

}

else if(length == 4){

 a = 4;

}

else{

 a = 6;

}

强化版:

var a = {2:2,4:4}[length] ||  6; // 一个变量可以合并,省了N行+M列代码。

js 基础-&& || 逻辑与和逻辑或的更多相关文章

  1. JS基础,相亲,逻辑训练

    简单逻辑 <script> var a = prompt("有房么?"); // if(a == "有") { alert("结婚吧&qu ...

  2. 研究分析JS中的三种逻辑语句

    JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10;  ...

  3. Flask基础(06)-->视图常用逻辑

    Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...

  4. js 动态添加元素 删除元素逻辑

    js 动态添加元素 删除元素逻辑 var obox=document.getElementById("box"); oadd.onclick=function(){ var odi ...

  5. js 基础篇(点击事件轮播图的实现)

    轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...

  6. Node.js基础与实战

    Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...

  7. JavaScript学习笔记 - 进阶篇(1)- JS基础语法

    前言 JavaScript能做什么? 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等) JS进阶篇学习什么? 在JavaS ...

  8. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

  9. 1、js基础内容

    js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...

  10. JS基础学习——作用域

    JS基础学习--作用域 什么是作用域 变量的作用域就是变量能被访问到的代码范围,比如在下面的这个js代码中,变量a的作用域就是函数foo,因此在全局作用域内的console.log(a)语句不能访问到 ...

随机推荐

  1. CSRF 漏洞原理详解及防御方法

    跨站请求伪造:攻击者可以劫持其他用户进行的一些请求,利用用户身份进行恶意操作. 例如:请求http://x.com/del.php?id=1 是一个删除ID为1的账号,但是只有管理员才可以操作,如果攻 ...

  2. SpringMVC 常用applicationContext.xml、web.xml、servlet-mvc.xml简单配置

    在进行学习配置文件之前,为了加深对框架的认识,简单的做了SSM框架的简单实验.然后画出listAll查询方法的整个过程的思维导图. 整个过程中的web.xml.SpringMVC.xml.applic ...

  3. Kafka远程调试简单记录

    Kafka启动脚本: ./kafka-server-start.sh -daemon ../config/server.properties 最终翻阅脚本可以确定是调用kafka-run-class. ...

  4. springboot 传值到页面

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code   <!DOCTYPE html> 2 <html> 3 &l ...

  5. SQL数据库中日期时间类型,按日期group by 实现

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code cast(starttime as date):  时间转日期类型 实例SQL: SELECT ...

  6. python +百度语音识别+图灵对话

    https://github.com/Dongvdong/python_Smartvoice 上电后,只要周围声音超过 2000,开始录音5S 录音上传百度识别,并返回结果文字输出 继续等待,周围声音 ...

  7. m100(2) 云台自动跟踪

    大疆 210云台控制 https://developer.dji.com/onboard-sdk/documentation/sample-doc/advanced-sensing-target-tr ...

  8. jQuery:自定义函数

    <!doctype html><html><head><meta charset="utf-8"><title>< ...

  9. java开发过程问题及解决

    1.junit做测试时候报异常: junit.framework.AssertionFailedError: No tests found in com.mq.original.OriginalMqP ...

  10. 7-51单片机ESP8266学习-AT指令(8266TCP服务器,编写自己的C#TCP客户端发信息给单片机控制小灯的亮灭)

    http://www.cnblogs.com/yangfengwu/p/8780182.html 自己都是现做现写,如果想知道最终实现的功能,请看最后 先把源码和资料链接放到这里 链接: https: ...