JS短路原理的应用示例 精简代码的途径


Posted in Javascript onDecember 13, 2013

在js逻辑运算中,0、""、null、false、undefined、NaN都会判为false,其他都为true.

||先计算第一个运算数,如果可以被转换成true,则返回左边这个表达式的值,否则计算第二个运算数。即使||运算符的运算数不是布尔值,任然可以将它看作布尔OR运算,因为无论它返回的值是什么类型,都可以被转换为布尔值。
利用它对非布尔型的值会将其返回的特性:对非布尔型的运算数使用||,用于选取一组备选值中的第一个定义了的并且非空的值(第一个为非false的值)

例:
var max = max_width || obj.max_width || 500 ;
var attr = attr || "";这个运算经常用来判断一个变量是否已定义,如果没有定义就给他一个初始值,在给函数的参数定义一个默认值的时比较有用。

&&,它先计算第一个表达式,若为假,就不会去处理第二个表达;否则继续处理后继表达式。从左到右选取表达式的第一个为非true的表达式的值,如果一直未找到则返回最后一个表达式的值。

例:(其中的味道还需要细心琢磨)

2 && 's1' && '123' && 'sss' 表达式的值等于 'sss'
2 && 's1' && '' && 'sss' 表达式的值等于 ''
2 && 's1' && NaN && 'sss'表达式的值等于 NaN

if(a >=5){
alert("你好");
}
可以简成:
a >= 5 && alert("你好");

typeof 5和typeof !!5的区别,这是一种更严谨的写法,!!的作用是把一个其他类型的变量转成的bool类型。例如, if(!!attr) => if(attr)

js中||和&&的特性帮我们精简了代码的同时,也带来了代码可读性的降低。这就需要我们自己来权衡了。

JS中的startWith功能的巧妙实现,alert(!'asdf'.indexOf('s')) =》 !0 = true

Javascript 相关文章推荐
用js实现控制内容的向上向下滚动效果
Jun 26 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
jquery 触发a链接点击事件解决方案
May 02 Javascript
js 对小数加法精度处理示例说明
Dec 27 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
完美实现js选项卡切换效果(二)
Mar 08 Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
Feb 22 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
原生js实现碰撞检测
Mar 12 Javascript
代码触发js事件(click、change)示例应用
Dec 13 #Javascript
jquery获得option的值和对option进行操作
Dec 13 #Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
Dec 13 #Javascript
jquery改变disabled的boolean状态的三种方法
Dec 13 #Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
Dec 13 #Javascript
Extjs4中的分页应用结合前后台
Dec 13 #Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
Dec 13 #Javascript
You might like
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
浏览器常用高宽的jquery插件
2011/02/24 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
python调用摄像头显示图像的实例
2018/08/03 Python
python删除字符串中指定字符的方法
2018/08/13 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
python3实现微型的web服务器
2019/09/03 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
ET Mall东森购物网:东森严选
2017/03/06 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
C语言笔试题
2014/09/04 面试题
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
本科生的职业生涯规划范文
2014/01/09 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
运动会通讯稿500字
2014/02/20 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书