将《编写高质量JavaScript代码的68个有效方法》书中提到的68个方法分享给大家。
让自己习惯JavaScript
- 了解你使用的JavaScript版本
- 理解JavaScript的浮点数
- 当心隐式的强制转换
- 原始类型优于封装对象
- 避免对混合类型使用
==
运算符 - 了解分号插入的局限
- 视字符串为16位的代码单元序列
变量作用域
- 尽量少用全局对象
- 始终声明局部变量
- 避免使用
with
- 熟练掌握闭包
- 理解变量声明提升
- 使用立即调用的函数表达式创建局部函数
- 当心命名函数表达式笨拙的作用域
- 当心局部块函数声明笨拙的作用域
- 避免使用
eval
创建局部变量 - 间接调用
eval
函数优于直接调用
使用函数
- 理解函数调用、方法调用及构造函数
- 熟练掌握高阶函数
- 使用
call
方法自定义接收者来调用函数 - 使用
apply
方法通过不同数量的参数调用函数 - 使用
arguments
创建可变参数的函数 - 永远不要修改
arguments
对象 - 使用变量保存
arguments
的引用 - 使用
bind
方法提取具有确定接收者的方法 - 使用
bind
方法实现函数柯里化 - 使用闭包而不是字符串来封装代码
- 不要信赖函数对象的
toString
方法 - 避免使用非标准的栈检查属性
对象和原型
- 理解
prototype
、getPrototypeOf
和__proto__
之间的不同 - 使用
Object.getPrototypeOf
函数而不要使用__proto__
属性 - 始终不要修改
__proto__
属性 - 使构造函数与
new
操作符无关 - 在原型中存储方法
- 使用闭包存储私有数据
- 只将实例状态存储在实例对象中
- 认识到
this
变量的隐式绑定问题 - 在子类的构造函数中调用父类的构造函数
- 不要重用父类的属性名
- 避免继承标准类
- 将原型视为实现细节
- 避免使用轻率的猴子补丁(monkey-patching)
数组和字典
- 使用
Object
的直接实例构造轻量级的字典 - 使用
null
原型以防止原型污染 - 使用数组而不要使用字典存储有序集合
- 使用
hasOwnProperty
方法以避免原型污染 - 使用数组而不要使用字典来存储有序集合
- 绝不要在
Object.prototype
中增加可枚举的属性 - 避免在枚举期间修改对象
- 数组迭代要优先使用
for
循环而不是for...in
循环 - 迭代方法由于循环
- 在类数组对象上复用通用的数组方法
- 数组字面量优于数组构造函数
库和API设计
- 保持一致的约定
- 将
undefined
看做“没有值” - 接收关键字参数的选项对象
- 避免不必要的状态
- 使用结构类型设计灵活的接口
- 区分数组对象和类数组对象
- 避免过度的强制转换
- 支持方法链
并发
- 不要阻塞I/O事件队列
- 在异步序列中使用嵌套或命名的回调函数
- 当心丢弃错误
- 对异步循环使用递归
- 不要在计算时阻塞事件队列
- 使用计数器来执行并行操作
- 绝不要同步的调用异步的回调函数
- 使用
promise
模式清洁异步逻辑