今天百度发现一个简化长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. mysql 拒绝访问的解决办法

    java.sql.SQLException: null,  message from server: "Host 'xxx' is not allowed to connect to thi ...

  2. D - Milking Time 动态规划

    Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...

  3. NOIP2018 AFO记

    仿佛"距NOIP2018还剩30天"的倒计时还在昨天,没想到这一天来的这么快. 考前在机房嘻嘻哈哈打打闹闹,开玩笑说道"我要AFO了",心里暗暗发誓做好自己,不 ...

  4. (11)Python包

  5. 有时间研究一下Spark的HashPartitioner和RangePartitioner

    有时间研究一下Spark的HashPartitioner和RangePartitioner有时间研究一下Spark的HashPartitioner和RangePartitioner有时间研究一下Spa ...

  6. 【转】escape,encodeURI,encodeURIComponent有什么区别?

    在这个页面里面试着搜了一下 「UTF-8」 ,居然没有搜到. escape 和 encodeURI 都属于 Percent-encoding,基本功能都是把 URI 非法字符转化成合法字符,转化后形式 ...

  7. day12 Python元祖

    前戏 #元祖:元素不可被改变,不能白增加或者删除 #tuple #tu = (11,22,33,44) #tu.count(22),获取指定元素在元祖中出现的次数 #tu.index(22),获取元素 ...

  8. maven 仓库配置 pom中repositories属性

    文章转自http://blog.csdn.net/zlgydx/article/details/51130627 什么是Maven仓库在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录 ...

  9. dijkstra P4779 【模板】单源最短路径(标准版) 洛谷luogu

    题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100→60 Ag→Cu 最终,他因此没能与理想的大 ...

  10. 堆-STL

    往堆中加一个元素的算法(put): #include<algorithm> void put (int d) { heap[++heap_size]=d; push_heap(heap+, ...