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 相关文章推荐
Jquery替换已存在于element上的event的方法
Mar 09 Javascript
AngularJS优雅的自定义指令
Jul 01 Javascript
bootstrapValidator 重新启用提交按钮的方法
Feb 20 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
PHP7新特性简述
Jun 11 Javascript
webpack3+React 的配置全解
Aug 21 Javascript
mongoose更新对象的两种方法示例比较
Dec 19 Javascript
javascript匿名函数中的'return function()'作用
Oct 15 Javascript
微信小程序实现手指拖动选项排序
Apr 22 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
Jun 01 Javascript
JavaScript中reduce()的用法
May 11 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
php文件上传类的分享
2017/07/06 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
python获取目录下所有文件的方法
2015/06/01 Python
关于Python的一些学习总结
2018/05/25 Python
Python基础教程之异常详解
2019/01/10 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
主持人演讲稿范文
2013/12/28 职场文书
说明书格式及范文
2014/05/07 职场文书
住宅使用说明书
2014/05/09 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
公务员处分决定书
2015/06/25 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
编写python程序的90条建议
2021/04/14 Python
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
Window server中安装Redis的超详细教程
2021/11/17 Redis