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高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
JavaScript 更严格的相等 [译]
Sep 20 Javascript
js判断浏览器类型的方法
Aug 07 Javascript
JS实现单击输入框弹出选择框效果完整实例
Dec 14 Javascript
第十章之巨幕页头缩略图与警告框组件
Apr 25 Javascript
AngularJS ng-repeat数组有重复值的解决方法
Oct 23 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
Mar 27 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
angularjs性能优化的方法
Sep 05 Javascript
vue的hash值原理也是table切换实例代码
Dec 14 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
PHP安全编程之加密功能
2006/10/09 PHP
关于时间计算的结总
2006/12/06 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
jquery使用经验小结
2015/05/20 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
计算机软件个人的自荐信范文
2013/12/01 职场文书
早读迟到检讨书
2014/01/24 职场文书
运动会通讯稿150字
2014/02/15 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
电子信息工程自荐信
2014/05/26 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
个人先进事迹材料
2014/12/29 职场文书
感谢信模板大全
2015/01/23 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL