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 相关文章推荐
IE8 兼容性问题(属性名区分大小写)
Jun 04 Javascript
javascript去掉前后空格的实例
Nov 07 Javascript
Jquery实现自定义tooltip示例代码
Feb 12 Javascript
js判断当前浏览器类型,判断IE浏览器方法
Jun 02 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
Jun 03 Javascript
javascript 数组的正态分布排序的问题
Jul 31 Javascript
jquery判断iPhone、Android设备类型
Sep 14 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
Oct 16 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 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+javascript实现二级级联菜单的制作
2008/05/06 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
php异常处理捕获错误整理
2019/09/23 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
javascript prototype,executing,context,closure
2008/12/24 Javascript
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
PHP如何删除一个Cookie值
2012/11/15 面试题
实用的简历自我评价
2014/03/06 职场文书
赡养老人协议书
2014/04/21 职场文书
公司口号大全
2014/06/11 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
工程服务质量承诺书
2015/04/29 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
2016国庆促销广告语
2016/01/28 职场文书
Python 中的 copy()和deepcopy()
2021/11/07 Python
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js