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 相关文章推荐
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
Aug 28 Javascript
js Dialog 实践分享
Oct 22 Javascript
JS隐藏参数post传值实例
Apr 18 Javascript
jqeury-easyui-layout问题解决方法
Mar 24 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
Apr 25 Javascript
Egret引擎开发指南之编译项目
Sep 03 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
Nov 12 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
Aug 13 Javascript
js实现省市级联效果分享
Aug 10 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
JS和Canvas实现图片的预览压缩和上传功能
Mar 30 Javascript
vue awesome swiper异步加载数据出现的bug问题
Jul 03 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
PHP仿盗链代码
2012/06/03 PHP
php计算十二星座的函数代码
2012/08/21 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
PHP反射基础知识回顾
2020/09/10 PHP
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
Python使用gensim计算文档相似性
2016/04/10 Python
python字典快速保存于读取的方法
2018/03/23 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
战略合作意向书范本
2014/04/01 职场文书
公司授权委托书范本
2014/04/03 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
倡议书怎么写?
2019/04/11 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
详解Python中*args和**kwargs的使用
2022/04/07 Python