Javascript优化技巧之短路表达式详细介绍

 更新时间:2015年03月27日 16:47:53   投稿:junjie  
这篇文章主要介绍了Javascript优化技巧之短路表达式详细介绍,本文讲解了什么是短路表达式,并给出了一些示例,需要的朋友可以参考下

什么是短路表达式?

短路表达式:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。

一个最简单的例子:

复制代码 代码如下:

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的目的。但是需要注意的是,这样写帮我们精简了代码的同时,也带来了代码可读性的降低的缺点。所以比较好的做好是添加是适当的注释。

相关文章

  • Bootstrap基本样式学习笔记之表单(3)

    Bootstrap基本样式学习笔记之表单(3)

    这篇文章主要介绍了Bootstrap学习笔记之表单基本样式的相关资料,为大家分享了三种表单样式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 微信小程序学习笔记之本地数据缓存功能详解

    微信小程序学习笔记之本地数据缓存功能详解

    这篇文章主要介绍了微信小程序学习笔记之本地数据缓存功能,结合实例形式分析了微信小程序wx.setStorage、wx.getStorage以及wx.removeStorage、wx.clearStorage针对数据缓存的存取、删除等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • js实现简单选项卡功能

    js实现简单选项卡功能

    这篇文章主要为大家详细介绍了使用JS实现简单的选项卡功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • element-ui dialog弹窗增加全屏功能(推荐)

    element-ui dialog弹窗增加全屏功能(推荐)

    这篇文章主要介绍了element-ui dialog弹窗增加全屏功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • 浅谈layer的Icon样式以及一些常用的layer窗口使用方法

    浅谈layer的Icon样式以及一些常用的layer窗口使用方法

    今天小编就为大家分享一篇浅谈layer的Icon样式以及一些常用的layer窗口使用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • js实现双人五子棋小游戏

    js实现双人五子棋小游戏

    这篇文章主要为大家详细介绍了js实现双人五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • JS模板编译的实现详情

    JS模板编译的实现详情

    这篇文章主要介绍了JS模板编译的实现详情,编译是一种格式变成另一种格式的过程。编译会导致好的结果,比如书写简单的代码,编译出来复杂的代码;或者提高代码的使用性能
    2022-07-07
  • 基于casperjs和resemble.js实现一个像素对比服务详解

    基于casperjs和resemble.js实现一个像素对比服务详解

    这篇文章主要给大家介绍了关于基于casperjs和resemble.js实现一个像素对比服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • js日期范围初始化得到前一个月日期的方法

    js日期范围初始化得到前一个月日期的方法

    这篇文章主要介绍了js日期范围初始化得到前一个月日期的方法,涉及javascript操作日期的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • 简单使用webpack打包文件的实现

    简单使用webpack打包文件的实现

    这篇文章主要介绍了简单使用webpack打包文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论