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 相关文章推荐
20个非常棒的 jQuery 幻灯片插件和教程分享
Aug 23 Javascript
Javascript Request获取请求参数如何实现
Nov 28 Javascript
js中javascript:void(0) 真正含义
Nov 05 Javascript
最全面的JS倒计时代码
Sep 17 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
Nov 25 Javascript
bootstrap选项卡使用方法解析
Jan 11 Javascript
JS实现的四级密码强度检测功能示例
May 11 Javascript
BootStrap的双日历时间控件使用
Jul 25 Javascript
详解bootstrap导航栏.nav与.navbar区别
Nov 23 Javascript
解决layui数据表格Date日期格式的回显Object的问题
Sep 19 Javascript
uni-app从安装到卸载的入门教程
May 15 Javascript
小程序实现tab标签页
Nov 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php include,include_once,require,require_once
2008/09/05 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
在Python中关于中文编码问题的处理建议
2015/04/08 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
使用python绘制二维图形示例
2019/11/22 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
ORACLE十问
2015/04/20 面试题
laravel使用redis队列实例讲解
2021/03/23 PHP
自主招生自荐信范文
2013/12/04 职场文书
劳动实践课感言
2014/02/01 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
欢迎横幅标语
2014/06/17 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript