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中的数组的sort方法使用示例
Jan 22 Javascript
select多选 multiple的使用示例
Jun 16 Javascript
node.js中的path.basename方法使用说明
Dec 09 Javascript
JQuery实现样式设置、追加、移除与切换的方法
Jun 11 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
Jul 05 Javascript
jquery滚动条插件slimScroll使用方法
Feb 09 Javascript
微信小程序 下拉菜单简单实例
Apr 13 Javascript
Vuex利用state保存新闻数据实例
Jun 28 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
vue 实现axios拦截、页面跳转和token 验证
Jul 17 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
js实现3D旋转效果
Aug 18 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
python中列表元素连接方法join用法实例
2015/04/07 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
Python实现Restful API的例子
2019/08/31 Python
Pytorch之保存读取模型实例
2019/12/30 Python
Python守护进程实现过程详解
2020/02/10 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
卫校毕业生自我鉴定
2013/10/31 职场文书
社区十八大感言
2014/01/19 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
政府采购方案
2014/06/12 职场文书
授权委托书公证
2014/09/14 职场文书
社区好人好事材料
2014/12/26 职场文书
公司员工手册范本
2015/05/14 职场文书
张丽莉观后感
2015/06/16 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android