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

    更多优化方法可以参看我上一篇blog:前端工程优化:javascript的优化小结

  • 相关阅读:
    [导入]mootools框架【二】Core篇: 主要方法测试实例
    公司招聘中不能说的秘密 【转载】
    国外10个ASP.Net C#下的开源CMS
    [导入][Flash开发笔记] List控件删除指定label或data的项
    [导入]用C#截取指定长度的中英文混合字符串 改进版
    今天小侄子出生,想了一天的名字
    一个正则表达式的解释
    今日小收获
    昨天的事
    两点东西
  • 原文地址:https://www.cnblogs.com/coco1s/p/3951066.html
Copyright © 2011-2022 走看看