Javascript优化技巧之短路表达式详细介绍


Posted in Javascript onMarch 27, 2015

什么是短路表达式?

短路表达式:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。

一个最简单的例子:

foo = foo||bar;

这行代码是什么意思?答案:

//如果foo存在,值不变,否则把bar的值赋给foo

if(!foo)

    foo = bar;

在javascript的逻辑运算中,0、""、null、false、undefined、NaN都会判定为false,而其他都为true。所以在上式的foo = foo||bar;中,||先计算第一个运算数,如果可以被转换成true,也就是表示foo已经存在有值,那么返回左边这个表达式的值,否则计算第二个运算数bar。

另外,即使||运算符的运算数不是布尔值,仍然可以将它看作布尔OR运算,因为无论它返回的值是什么类型,都可以被转换为布尔值。

当然,使用如下做法会更加严谨:

if(foo)      //不够严谨

 

if(!!foo)    //更为严谨,!!可将其他类型的值转换为boolean类型

可以测试一下:

var foo;

var number = 1;

var string = "string";

var obj = {};

var arr = [];

 

 

console.log(typeof(foo));  // undefined

console.log(typeof(number));//number

console.log(typeof(string));
//string

console.log(typeof(obj));
//object


console.log(typeof(arr));
//object

 

console.log(typeof(!!foo));  // boolean

console.log(typeof(!!number));
//boolean

console.log(typeof(!!string));
//boolean

console.log(typeof(!!obj));
//boolean

console.log(typeof(!!arr));
//boolean

利用这一点可以很好的符合,优化javascript工程一文中提到的,使脚本少运行或者不运行,以达到优化javascript的目的。但是需要注意的是,这样写帮我们精简了代码的同时,也带来了代码可读性的降低的缺点。所以比较好的做好是添加是适当的注释。

Javascript 相关文章推荐
javawscript 三级菜单的实现原理
Jul 01 Javascript
javascript检查浏览器是否已经启用XX功能
Jul 10 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
Dec 01 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
Dec 04 Javascript
js如何准确获取当前页面url网址信息
Sep 13 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
May 21 Javascript
利用Js+Css实现折纸动态导航效果实例源码
Jan 25 Javascript
javascript按顺序加载运行js方法
Dec 01 Javascript
vue2.0项目实现路由跳转的方法详解
Jun 21 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
react中props 的使用及进行限制的方法
Apr 28 Javascript
使用react-virtualized实现图片动态高度长列表的问题
May 28 Javascript
学习JavaScript编程语言的8张思维导图分享
Mar 27 #Javascript
JavaScript中的函数声明和函数表达式区别浅析
Mar 27 #Javascript
jQuery使用fadein方法实现渐出效果实例
Mar 27 #Javascript
jQuery使用fadeout实现元素渐隐效果的方法
Mar 27 #Javascript
javascript包装对象实例分析
Mar 27 #Javascript
javascript操作select元素实例分析
Mar 27 #Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 #Javascript
You might like
php 分页原理详解
2009/08/21 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
php去除数组中重复数据
2014/11/18 PHP
php单链表实现代码分享
2016/07/04 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
python调用摄像头显示图像的实例
2018/08/03 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
python 实现dict转json并保存文件
2019/12/05 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
vue路由实现登录拦截
2021/03/24 Vue.js
化学学院毕业生自荐信范文
2013/12/17 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
大学生支教感言
2015/08/01 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript