zoukankan      html  css  js  c++  java
  • (第二章)改善JavaScript,编写高质量代码。

    建议34:字符串是非值操作

    var a = "javascript";
    var b = a;
    b = b.toUpperCase();
    alert(a);  //javascript;
    alert(b); //JAVASCRIPT;
    建议34

    建议35:获取字节长度

    String.prototype.lengthBD = function(){
      var b = 0; l = this.length;
      if(l){
        for(var i = 0; i < l; i++){
          if(this.charCodeAt(i) > 255){
            b+=2;
          }else{
            b++;
          }
        }
        return b;
      }else{
        return 0;
      }
    }
    
    var s= "String对象长度";
    alert(s.lengthDB()); //14  中文为2个数字
    建议35

    建议36:警惕字符串链接操作

    当连接少量字符串时,例如:
    str += "one" + " two";
    JavaScript在执行这行代码时会进行以下4个步骤:
    第一步,在内存中创建一个临时字符串。
    第二步,临时字符串的值被赋予"onetwo",
    第三步,临时字符串与str的值进行连接,
    第四步,把结果赋予str。
    不过,通过下面的代码进行优化能够提高执行效率,两个离散表达式直接将内容附加到str上,避免了临时字符串(第一步和第二步),这样做可以使执行速度提高10%~40%;
    str += "one";
    str += "two";
    实际上,也可以用以下一行代码实现同样的性能提高,例如:
    str = str + "one" + "two";
    也就是说 str要在开头,如str = "one" + str + "two" 就会失去这种优化。
    建议36

    建议37:推荐使用replace

    replace方法同时执行查找和替换两个操作。
    var s = "javascript";
    var b = s.replace(/(java)(script)/,"$2-$1");
    alert(b);   // "script-java";
    1.$1、$2、...、$99:与正则表达式中的第1~99个子表达式相匹配的文本。
    2.$&:与正则表达式相匹配的子字符串。
    3.$`:位于匹配字符串左侧的文本。
    4.$':位于匹配字符串右侧的文本。
    5.$$:表示$符号。
    建议37

    建议38:正确认识正则表达式工作机制

    建议39:正确理解正则表达式回溯

    建议40:正确使用正则表达式分组

    建议41:正确使用正则表达式引用

    建议42:用好正则表达式静态值

    建议43:使用exec增强正则表达式功能

    建议44:正确使用原子组

    建议45:警惕嵌套量词和回溯失控

    建议46:提高正则表达式执行效率 

    建议47:避免使用正则表达式的场景

    建议48:慎用正则表达式修剪字符串

    建议49:比较数组与对象同源特征

    建议50:正则检测数组类型

    建议51:理解数组长度的有限性和无限性

    建议52:建议使用splice删除数组

    var number = ['zero','one','two','three','four','five'];
    delete numbers[2];
    number = ['zero','one',undefined,'three','four','five'];
    
    var number = ['zero','one','two','three','four','five'];
    numbers.splice(2,1);
    number = ['zero','one','three','four','five'];
    
    这对大型数组来说效率会更高。
    建议52

    建议53:小心使用数组维度

    建议54:增强数组排序的sort功能

    //从小到大排序
    function f(a,b){
      return (a-b)
    }
    var a = [3,1,2,4,5,7,8,0,9,6];
    a.sort(f);
    alert(a); // [0,1,2,3,4,5,6,7,8,9];
    
    //从大到小排序
    function f(a,b){
      return -(a-b)
    }
    var a = [3,1,2,4,5,7,8,0,9,6];
    a.sort(f);
    alert(a); // [9,8,7,6,5,4,3,2,1,0];
    
    //根据奇偶性质排列数组 奇数在前
    function f(a,b){
      var a = a%2;
      var b = b%2;
      if(a==0){return 1;}
      if(b==0){return -1;}
    }
    var a = [3,1,2,4,5,7,6,8,0,9];
    a.sort(f);
    alert(a); //[3,1,5,7,9,0,8,6,4,2];
    
    //根据奇偶性质排列数组 偶数在前
    function f(a,b){
      var a = a%2;
      var b = b%2;
      if(a==0){return -1;}
      if(b==0){return 1;}
    }
    var a = [3,1,2,4,5,7,6,8,0,9];
    a.sort(f);
    alert(a); //[0,8,6,4,2,6,8,3,1,5,7,9];
    建议54

    建议55:不要拘泥于数字下标

    var a = [];
    a[-1] = 1; //为下标位-1的元素赋值
    很明显,上面的用法是非法的。因为这不符合语法规范,使用length属性检查,返回值为0,说明数组并没有增加长度,这是正确的,也是正常的,但是,使用下面的方法可以读取该元素的值。
    alert(a.length); // 0
    alert(a[-1]);
    alert(a["-1"]);
    建议55

    建议56:使用arguments模拟重载

  • 相关阅读:
    Sql诊断之Explain
    Cenos7安装docker环境以及docker-compose
    uniapp苹果内购获取不到苹果的iap支付通道
    iOS云打包如何设置通用链接等Capabilities配置
    iOS应用id,套装id,appid,BundleID申请教程
    利用Appuploader在window上申请IOS开发所需要的证书及描述文件
    浅析GET和POST请求的本质区别以及关于get请求的长度限制到底是多少的问题
    iOS苹果开发者组织账号申请时的坑
    apache开源项目--HIVE
    [Unit testing Java] Unit testing Junit Controller
  • 原文地址:https://www.cnblogs.com/xueweijie/p/7864877.html
Copyright © 2011-2022 走看看