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 Date对象使用总结
May 14 Javascript
使用JS 清空File控件的路径值
Jul 08 Javascript
js中settimeout方法加参数
Feb 28 Javascript
js判断横竖屏及禁止浏览器滑动条示例
Apr 29 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
js实现非常简单的焦点图切换特效实例
May 07 Javascript
Express的路由详解
Dec 10 Javascript
JavaScript阻止回车提交表单的方法
Dec 30 Javascript
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
Nov 08 Javascript
layui 对table中的数据进行转义的实例
Sep 12 Javascript
Vue3 Composition API的使用简介
Mar 29 Vue.js
学习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写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
Python实现115网盘自动下载的方法
2014/09/30 Python
基python实现多线程网页爬虫
2015/09/06 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Python之时间和日期使用小结
2019/02/14 Python
python命令行参数用法实例分析
2019/06/25 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
Python如何在DataFrame增加数值
2020/02/14 Python
python opencv进行图像拼接
2020/03/27 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
财务主管的岗位职责
2013/12/30 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
付款承诺函范文
2015/01/21 职场文书
营运督导岗位职责
2015/04/10 职场文书