编写高质量JavaScript的有效方法

编写高质量JavaScript的有效方法

1、js的特别之处

  1. 浮点数计算不精确,应该尽可能转为整数进行计算
  2. 小心强制的类型转换。
    NaN是js中惟一一个不等于自身的值,能够利用这一点来检测NaN.
    js中的七个假值:false,0,-0,null,undefined,NaN,"".
  3. 当参数类型不一样时, == 运算符会对参数用一套难以理解的隐式强制转换的规则进行转换,因此应尽可能使用 === 运算符,比较不一样类型的值时,先进行手动的转换后在进行比较。
  4. 分号插入规则
  • 分号仅在}标记以前、一个或多个换行以后和程序输入的结尾插入
  • 分后仅在后面的输入标记不能解析时插入
  • for循环头部var i=0以后必须显式的插入分号
  • 在return , throw, break, continue, ++ ,-- 的参数以前绝对不能换行,不然会在换行前强制插入分号javascript

    若是下一条语句以(, {, +, -. / 开始时,前一行语句不能省略分号,不然会视为同一行语句执行。java

2、变量做用域

  1. 闭包的三个特性
  • js容许你应用在当前函数外定义的变量
  • 即时外部函数已经返回,当前函数仍然能够引用外部函数中定义的变量
  • 闭包能够更新外部变量的值api

    3、使用函数

  1. 永远不要修改arguments对象
  2. 使用bind方法建立绑定到适当接受者的函数
function bind(fn, context) {
    return function() {
        return fn.apply(context, arguments);
    };
}
  1. 避免使用函数对象的toString()方法
  2. 避免使用非标准的arguments.callee和arguments.callee属性数组

    4、对象和原型

  3. 使用Object.getPrototypeOf(obj)函数而不是obj._proto_来检测原型
  4. 不要修改_proto_属性
  5. 使用闭包来存储私有数据
  6. 继承时使用object.create(parent.prototype)来构造子类的原型,以免调用父类的构造函数
  7. 不要重用父类的属性名(容易引起冲突)
  8. 不要去继承内置的Array、Function等内置的标准类缓存

    5、数组与字典

  9. 属性枚举时使用hasOwnProperty过滤原型属性,防止原型污染。
    为了不hasOwnProperty被意外覆盖,能够预先缓存hasOwn方法或者直接在原型中加入hasOwn方法。
var hasOwn = {}.hasOwnProperty;
  1. 由于for...in循环没法保证循环顺序,因此用数组而不是字典来存储有序集合,使用for循环循环数组。
  2. 绝对不要在Object.prototype中增长可枚举的属性
  3. 不要在枚举时修改枚举对象
  4. ES5中Array自带的foreach,map,filter等方法优于for循环,但若是须要提早终止循环仍是推荐使用传统的循环。闭包

    6、库和API设计

  5. 接口设计为接受关键字参数的选项对象,使用extend合并默认参数对象和用户写入的参数对象。
  6. 避免过分的强制转换,考虑使用防护性监视非预期的输入。
  7. 支持方法链.app

相关文章
相关标签/搜索