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 相关文章推荐
IE6下出现JavaScript未结束的字符串常量错误的解决方法
Nov 21 Javascript
javascript对下拉列表框(select)的操作实例讲解
Nov 29 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
JavaScript中的原型继承基础学习教程
May 06 Javascript
javascript prototype原型详解(比较基础)
Dec 26 Javascript
vue组件watch属性实例讲解
Nov 07 Javascript
使用vuex的state状态对象的5种方式
Apr 19 Javascript
微信小程序基于picker实现级联菜单
Feb 15 Javascript
如何基于filter实现网站整体变灰功能
Apr 17 Javascript
javascript 使用sleep函数的常见方法详解
Apr 26 Javascript
详解vue中v-model和v-bind绑定数据的异同
Aug 10 Javascript
Vue3.0的优化总结
Oct 16 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小技巧之函数重载
2014/06/02 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
微信小程序自动客服功能
2017/11/02 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python读取图片任意范围区域
2019/01/23 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
python with语句的原理与用法详解
2020/03/30 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
车间主管岗位职责
2013/11/14 职场文书
2014年减负工作总结
2014/12/10 职场文书
个人汇报材料范文
2014/12/30 职场文书
颐和园导游词
2015/01/30 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
留学推荐信中文范文
2015/03/26 职场文书
中标通知书
2015/04/17 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书