今天百度发现一个简化长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. Azkaban-2.5.0-部署与常见案例

    该文章是基于 Hadoop2.7.6_01_部署 . Hive-1.2.1_01_安装部署 进行的 1. 前言 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核 ...

  2. [Jsoi2013]快乐的jyy

    题目 这个需要我们瞎\(yy\)一下就能做了 我们先对于第一个串建立\(PAM\) 我们把第二个串丢上去匹配,这里匹配出来的是以每一个位置为结尾且在另一个串里存在的最长回文后缀的长度 对于每一个位置开 ...

  3. 【转】理解js中的原型链,prototype与__proto__的关系

    说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...

  4. 转载 .Net多线程编程—任务Task https://www.cnblogs.com/hdwgxz/p/6258014.html

    .Net多线程编程—任务Task   1 System.Threading.Tasks.Task简介 一个Task表示一个异步操作,Task的创建和执行是独立的. 只读属性: 返回值 名称 说明 ob ...

  5. 关于栈和队列的一点点小知识-----C++自带函数

    栈和队列我们可以用C++里自带的函数使用,就不必手写了 1.栈,需要开头文件 #include<stack>  定义一个栈s:stack<int> s; 具体操作: s.emp ...

  6. Android开发之加载GIF图片

    一.加载GIF图片我用的是GitHub上的开源库:android-gif-drawable,项目地址:https://github.com/koral--/android-gif-drawable 二 ...

  7. mysql导出CSV格式的文件

    select  *  from  Account  into outfile "/tmp/haha.csv" fields terminated by ',' lines term ...

  8. properties中的编码如何生成:例如\u7AD9\u70B9这种。

    在eclipse中的properties中的一种编码,例如\u7AD9\u70B9,是如何自动生成的. 这种编码方式当你要增加某个字段的时候,也要相应的添加这种编码方式下的格式,具体方法如下:

  9. 高速LVDS电平简介

    一.LVDS简介 1.1.LVDS信号介绍LVDS:Low Voltage Differential Signaling,低电压差分信号.LVDS传输支持速率一般在155Mbps(大约为77MHZ)以 ...

  10. odoo 学习

    1.2.3.41.2.5.62.410.6变成1.234,1.256,2.4,10.6 def get_bom_namenum(self, cr, uid, ids, field_name, arg, ...