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 新浪背投广告实现代码
Jul 07 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
Jan 08 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
Dec 20 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
Mar 13 Javascript
AngularJS模态框模板ngDialog的使用详解
May 11 Javascript
Bootstrap4 gulp 配置详解
Jan 06 Javascript
vue+iview/elementUi实现城市多选
Mar 28 Javascript
JS正则表达式封装与使用操作示例
May 15 Javascript
vue+element实现打印页面功能
May 20 Javascript
关于layui 下拉列表的change事件详解
Sep 20 Javascript
js实现超级玛丽小游戏
Mar 18 Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 jQuery
学习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
第十三节 对象串行化 [13]
2006/10/09 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
PHP数组操作类实例
2015/07/11 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
推荐dojo学习笔记
2007/03/24 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
Python常用的json标准库
2019/02/19 Python
python+mysql实现教务管理系统
2019/02/20 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
简约控的天堂:The Undone
2016/12/21 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
爱岗敬业演讲稿范文
2014/01/14 职场文书
大课间活动制度
2014/01/18 职场文书
财务简历的自我评价
2014/03/05 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
装配出错检讨书
2014/09/23 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL