zoukankan      html  css  js  c++  java
  • javascript优化--01高质量编码

    javascript的浮点数:

    • Javascript的数字都是双精度浮点数;
    • 64位编码数字;
    • 能表达53位精度的整数;
    • 进行位运算时会隐式地转化为32位整数(0,1序列)后计算;
    • 浮点数运算可能会有精度问题,最好是都用整数计算;

    严格模式:考虑到兼容性问题,可以用将自身包裹在立即调用的函数表达式里再连接其他文件;

    判断NaN:判断自身是否全等;

    对象隐式转换:

    • 一般对象通过valueOf方法强制转化为数字,通过toString方法强制转化为字符串;
    • 在两者都有的情况下,对象会选择valueOf;
    • 所以既有valueOf方法的对象应该实现toString,来返回valueOf方法产生的数字的字符串形式;

    输出日期方法:

    function toYMD(date) {
       var y = date.getYear() + 1900,
           m = date.getMonth() + 1,
           d  = date.getDate();
      return y 
             + '/' + (m < 10 ? '0' + m : m)
             + '/' + (d < 10 ? '0' + d : d); 
    }
    

    分号插入规则:

    • 只能在一行,一个或多个换行之后和程序输入结尾省略分号; 
    • 分号仅在随后的输入标记不能解析时插入;  
      • 注意下一行开头为:    (  [  +  -  /
      • 注意如果换行会强制增加分号的情况:   reutrn;  throw;   后置自增减;break; continue;
    • 分号不会作为分隔符在for循环空语句的头部自动加入

     视字符串为16位的代码单元序列

    • Javascript字符串由16位的代码单元组成,而不是由Unicode代码点注册;
    • Javascript使用两个代码单元表示2^16及其以上的Unicode代码点,这两个代码单元称为代理对;
    • 代理对会影响字符串元素计数,length,charAt,charCodeAt方法及正则表达式模式(如:'.')受到影响;
    • 当使用一个含有字符串操作的库时,要查看文档弄清其如何处理代码点的整个范围;
    • 可以使用第三方编写可识别代码点的字符串操作,如:URI操作函数sendcodeURI,decodeURI,encodeURIComponent,decodeURIComponent;

    使用闭包:

    • JS允许引用当前函数以外定义的变量;
    • 即使外部函数返回,当前函数任然可以使用外部函数定义的变量;
    • 闭包可以更新外部变量的值;

    变量声明提升:

    • 在代码块中的变量声明会被隐式地提升到封闭函数的顶部,可以考虑手动提升变量声明;
    • Js没有块级作用域,一个例外是try..catch语句将捕获的异常绑定到一个变量,该变量的作用域只是catch语句块;

    使用立即调用函数表达式创建局部作用域:

    function wrap(a) {
       var result = [], i , n;
       for(i = 0, n = a.length; i < n; i++) {
            result[i] = function() {return a[i]};
       }
    return result; }
    var f = wrap([0,1,2]);

    上例中reuslt[i]中i储存的是i的值,但function() {return a[i]}这个闭包中的i储存的是外部i的引用;所以最后返回f中i的值都为3;

    使用立即调用函数表达式:

    function wrap(a) {
       var result = [], i , n;
       for(i = 0, n = a.length; i < n; i++) {
          (function(j) {
               result[i] = function() {return a[i]};
          })(i); 
       }
       return result;
    }
    

    注意IIFE中:

    • 代码块不能包含任何跳出块的break和continue;
    • 使用this,argument会改变它们的含义;
  • 相关阅读:
    关于MATLAB收集人工鼠标移动轨迹的坐标
    对交叉验证的认识
    关于MATLAB处理大数据坐标文件2017624
    关于MATLAB处理大数据坐标文件2017622
    关于MATLAB处理大数据坐标文件2017620
    关于MATLAB处理大数据坐标文件201763
    关于MATLAB处理大数据坐标文件201762
    关于MATLAB处理大数据坐标文件201761
    关于MATLAB处理大数据坐标文件2017530
    [leetcode] 70. Climbing Stairs 解题报告
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4142557.html
Copyright © 2011-2022 走看看