js 基础-&& || 逻辑与和逻辑或
今天百度发现一个简化长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 基础-&& || 逻辑与和逻辑或的更多相关文章
- JS基础,相亲,逻辑训练
简单逻辑 <script> var a = prompt("有房么?"); // if(a == "有") { alert("结婚吧&qu ...
- 研究分析JS中的三种逻辑语句
JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10; ...
- Flask基础(06)-->视图常用逻辑
Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...
- js 动态添加元素 删除元素逻辑
js 动态添加元素 删除元素逻辑 var obox=document.getElementById("box"); oadd.onclick=function(){ var odi ...
- js 基础篇(点击事件轮播图的实现)
轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...
- Node.js基础与实战
Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...
- JavaScript学习笔记 - 进阶篇(1)- JS基础语法
前言 JavaScript能做什么? 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等) JS进阶篇学习什么? 在JavaS ...
- 前端面试题目汇总摘录(JS 基础篇)
JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...
- 1、js基础内容
js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...
- JS基础学习——作用域
JS基础学习--作用域 什么是作用域 变量的作用域就是变量能被访问到的代码范围,比如在下面的这个js代码中,变量a的作用域就是函数foo,因此在全局作用域内的console.log(a)语句不能访问到 ...
随机推荐
- 【16】有关python面向对象编程
面向对象编程 一.第一个案例---创建类 #__author:"吉" #date: 2018/10/27 0027 #function: # 设计类: ''' 1 类名:首字母大写 ...
- 「PKUSC2018」神仙的游戏
题目链接 比如说上面\(|S|\)为12的字符串,我们欲求出\(f(9)\)的值,那么上面相同颜色的字符必须两两能够匹配.也就是说,同种颜色的字符集里不能同时出现0和1.如果只考虑同种颜色集里相邻的两 ...
- NOIP2018爆零退役滚粗记
\(Day\ -1\) 非常的颓废 上午考了loli\(\ \ oi\)的最后一轮,\(mhr\)一个小时十五分钟怒切\(260\)分,吊打生爷 发现自己\(T2\)树的直径写怪了,不明觉厉 怕不是要 ...
- SQL update select结合语句详解及应用
QL update select语句 最常用的update语法是: 1 2 UPDATE TABLE_NAME SET column_name1 = VALUE WHRER column_name2 ...
- canvas.toDataURL 画布导出图片
<html> <meta http-equiv="X-UA-Compatible" content="chrome=1"> <he ...
- Click to add to Favorites Troubleshooting: High Version Count Issues (Doc ID 296377.1)
Copyright (c) 2018, Oracle. All rights reserved. Oracle Confidential. Click to add to Favorites Trou ...
- oracle 查询非自增长分区的最大分区
select a.table_owner, a.table_name, a.max_partition from (select table_owner, table_name, max(parti ...
- 搭建OpenResty(Nginx+Lua)
这篇文章是一个多月前写的,当时之所以搭建这个是为了最大程度上发挥Nginx的高并发效率(主要是结合lua脚本),参考的话,主要参考张开涛先生写的跟开涛学Nginx+lua系列文章,地址为:https: ...
- git fork之如何同步更新
1.打开git fork的开源项目(这里我以git fork vscode为例): 2.点击New pull request 3.选择你自己的 4.选择完后出现如图 5.调整状态,右边改为源fork地 ...
- Cesium学习1:如何在本机的Apache tomcat9.0.8服务器中打开cesium的index.html页面
Cesium的官方网站:https://cesiumjs.org/ 点击这个按钮来获取最新的Cesium:下载Cesium. 下载完成之后将zip文件解压到你选择的新目录,解压之后文件目录类似于下图. ...