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 相关文章推荐
WordPress 照片lightbox效果的运用几点
Jun 22 Javascript
jquery 页面滚动到底部自动加载插件集合
Jan 31 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
May 20 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
Mar 02 Javascript
jQuery实现平滑滚动到指定锚点的方法
Mar 20 Javascript
Node.js实现数据推送
Apr 14 Javascript
微信小程序-获得用户输入内容
Feb 13 Javascript
微信小程序日历组件calendar详解及实例
Jun 08 Javascript
详解JS获取HTML DOM元素的8种方法
Jun 17 Javascript
深入浅析javascript函数中with
Oct 28 Javascript
Echarts实现多条折线可拖拽效果
Dec 19 Javascript
Vue 嵌套路由使用总结(推荐)
Jan 13 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
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
php 代码优化的42条建议 推荐
2009/09/25 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
jquery插件懒加载的示例
2020/10/24 jQuery
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
python各种语言间时间的转化实现代码
2016/03/23 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
对pandas中to_dict的用法详解
2018/06/05 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Python如何读写字节数据
2020/08/05 Python
中科创达面试题
2016/12/28 面试题
销售人员中英文自荐信
2013/09/22 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
英文留学推荐信范文
2014/01/25 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
高三语文复习计划
2015/01/19 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书