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 获取url参数和script标签中获取url参数函数代码
Jan 22 Javascript
Jquery中dialog属性小记
Sep 03 Javascript
js对象数组按属性快速排序
Jan 31 Javascript
jquery判断浏览器类型的代码
Nov 05 Javascript
JS中操作JSON总结
Dec 06 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
Mar 27 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
Sep 14 Javascript
原生js开发的日历插件
Feb 04 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
Vue实现push数组并删除的例子
Nov 01 Javascript
简单了解Vue computed属性及watch区别
Jul 10 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
第十二节--类的自动加载
2006/11/16 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
利用python获取Ping结果示例代码
2017/07/06 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
用pycharm开发django项目示例代码
2019/06/13 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
《十六年前的回忆》教学反思
2014/02/14 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
五四演讲稿范文
2014/09/03 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
服务承诺书
2015/01/19 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python