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 相关文章推荐
javascript 获取表单file全路径
Dec 31 Javascript
教您去掉ie网页加载进度条的方法
Dec 09 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
Feb 07 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
javascript函数命名的三种方式及区别介绍
Mar 22 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
Nov 07 Javascript
jQuery事件对象的属性和方法详解
Sep 09 jQuery
vue webuploader 文件上传组件开发
Sep 23 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
Oct 12 Javascript
ES6 对象的新功能与解构赋值介绍
Feb 05 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 Javascript
javascript面向对象三大特征之封装实例详解
Jul 24 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中call_user_func_array的作用
2013/06/07 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
微信小程序实现天气预报功能
2018/07/18 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
使用K.function()调试keras操作
2020/06/17 Python
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
应届生服务员求职信
2013/10/31 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
捐资助学倡议书
2014/04/15 职场文书
商场消防安全责任书
2014/07/29 职场文书
休假证明书
2015/06/24 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
小学班长竞选稿
2015/11/20 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
详解nginx进程锁的实现
2021/06/14 Servers
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技