Javascript优化细节:短路表达式

什么是短路表达式?

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

  一个最简单的例子:

1
foo = foo||bar;

  这行代码是什么意思?答案:

1
2
3
//如果foo存在,值不变,否则把bar的值赋给foo
if (!foo)
     foo = bar;

  在javascript的逻辑运算中,0、""、null、false、undefined、NaN都会判定为false,而其他都为true。所以在上式的foo = foo||bar;中,||先计算第一个运算数,如果可以被转换成true,也就是表示foo已经存在有值,那么返回左边这个表达式的值,否则计算第二个运算数bar。

  另外,即使||运算符的运算数不是布尔值,仍然可以将它看作布尔OR运算,因为无论它返回的值是什么类型,都可以被转换为布尔值。

  当然,使用如下做法会更加严谨: 

1
2
3
if (foo)      //不够严谨
 
if (!!foo)    //更为严谨,!!可将其他类型的值转换为boolean类型

  可以测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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的目的。但是需要注意的是,这样写帮我们精简了代码的同时,也带来了代码可读性的降低的缺点。所以比较好的做好是添加是适当的注释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值