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 相关文章推荐
javascript 对表格的行和列都能加亮显示
Dec 26 Javascript
javascript显示用户停留时间的简单实例
Aug 05 Javascript
JavaScript中json使用自己总结
Aug 13 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
Angular Module声明和获取重载实例代码
Sep 14 Javascript
JavaScript中cookie工具函数封装的示例代码
Oct 11 Javascript
Vue中fragment.js使用方法详解
Mar 09 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
May 07 Javascript
echarts整合多个类似option的方法实例
Jul 10 Javascript
通过实例学习React中事件节流防抖
Jun 17 Javascript
关于element的表单组件整理笔记
Feb 05 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 escape URL编码
2008/12/10 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
js实现头像上传并且可预览提交
2020/12/25 Javascript
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
彻底理解Python list切片原理
2017/10/27 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
Python计算信息熵实例
2020/06/18 Python
用 python 进行微信好友信息分析
2020/11/28 Python
python定义具名元组实例操作
2021/02/28 Python
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
《影子》教学反思
2014/02/21 职场文书
婚宴父亲致辞
2015/07/27 职场文书