YeaseonZhang

高效JavaScript 68诫

将《编写高质量JavaScript代码的68个有效方法》书中提到的68个方法分享给大家。

让自己习惯JavaScript

  1. 了解你使用的JavaScript版本
  2. 理解JavaScript的浮点数
  3. 当心隐式的强制转换
  4. 原始类型优于封装对象
  5. 避免对混合类型使用==运算符
  6. 了解分号插入的局限
  7. 视字符串为16位的代码单元序列

变量作用域

  1. 尽量少用全局对象
  2. 始终声明局部变量
  3. 避免使用with
  4. 熟练掌握闭包
  5. 理解变量声明提升
  6. 使用立即调用的函数表达式创建局部函数
  7. 当心命名函数表达式笨拙的作用域
  8. 当心局部块函数声明笨拙的作用域
  9. 避免使用eval创建局部变量
  10. 间接调用eval函数优于直接调用

使用函数

  1. 理解函数调用、方法调用及构造函数
  2. 熟练掌握高阶函数
  3. 使用call方法自定义接收者来调用函数
  4. 使用apply方法通过不同数量的参数调用函数
  5. 使用arguments创建可变参数的函数
  6. 永远不要修改arguments对象
  7. 使用变量保存arguments的引用
  8. 使用bind方法提取具有确定接收者的方法
  9. 使用bind方法实现函数柯里化
  10. 使用闭包而不是字符串来封装代码
  11. 不要信赖函数对象的toString方法
  12. 避免使用非标准的栈检查属性

对象和原型

  1. 理解prototypegetPrototypeOf__proto__之间的不同
  2. 使用Object.getPrototypeOf函数而不要使用__proto__属性
  3. 始终不要修改__proto__属性
  4. 使构造函数与new操作符无关
  5. 在原型中存储方法
  6. 使用闭包存储私有数据
  7. 只将实例状态存储在实例对象中
  8. 认识到this变量的隐式绑定问题
  9. 在子类的构造函数中调用父类的构造函数
  10. 不要重用父类的属性名
  11. 避免继承标准类
  12. 将原型视为实现细节
  13. 避免使用轻率的猴子补丁(monkey-patching)

数组和字典

  1. 使用Object的直接实例构造轻量级的字典
  2. 使用null原型以防止原型污染
  3. 使用数组而不要使用字典存储有序集合
  4. 使用hasOwnProperty方法以避免原型污染
  5. 使用数组而不要使用字典来存储有序集合
  6. 绝不要在Object.prototype中增加可枚举的属性
  7. 避免在枚举期间修改对象
  8. 数组迭代要优先使用for循环而不是for...in循环
  9. 迭代方法由于循环
  10. 在类数组对象上复用通用的数组方法
  11. 数组字面量优于数组构造函数

库和API设计

  1. 保持一致的约定
  2. undefined看做“没有值”
  3. 接收关键字参数的选项对象
  4. 避免不必要的状态
  5. 使用结构类型设计灵活的接口
  6. 区分数组对象和类数组对象
  7. 避免过度的强制转换
  8. 支持方法链

并发

  1. 不要阻塞I/O事件队列
  2. 在异步序列中使用嵌套或命名的回调函数
  3. 当心丢弃错误
  4. 对异步循环使用递归
  5. 不要在计算时阻塞事件队列
  6. 使用计数器来执行并行操作
  7. 绝不要同步的调用异步的回调函数
  8. 使用promise模式清洁异步逻辑