JavaScript
# JavaScript
# 引用
所有的赋值都使用 const,如果一定要对参数重新赋值要使用 let 而不是 var。
# 对象
使用字面值创建对象而不是 new,例如:
const obj = {};
使用计算属性名创建动态属性名的对象而不是在对象定义外再创建:
const obj = {
[getKey()]: true
}
2
3
对象方法使用简写形式。
可以简写的属性名要简写,简写的属性要放前面。
属性名不必要加引号就不加。
不要直接调用 Object.prototype
上的方法,有的方法可能会被屏蔽,可以这样:
Object.prototype.hasOwnProperty.call(obj,key);
对象浅拷贝应该使用扩展运算符。
# 数组
用字面量创建数组。
用 push 方法向数组中添加值。
用扩展运算符做浅拷贝。
用扩展运算符将可迭代对象转换成数组,用 Array.from
将一个类数组对象转成一个数组。
用 Array.from
做 map 遍历,对比扩展运算符可以避免创建一个临时数组。
如果一个数组有很多行,在数组的前后中括号进行换行。
除了 forEach 方法,其他方法如 map、reduce 等方法中要有 return。
# 解构
用对象的解构赋值来获取和使用对象某个或多个属性值。
多个返回值用对象的解构而不是数组解构。
# 字符串
字符串应该使用单引号。
长字符串不应该换行。
当需要动态字符串时,使用模板字符串而不是拼接。
永远不要使用 eval()。
不要使用不必要的转义字符。
# 函数
使用命名函数表达式而不是函数声明,避免函数声明导致的提升。
把立即执行函数包裹在圆括号里。
不要在 if、while 等非函数块内声明函数。
不要使用 arguments 命名参数。
不要使用 arguments 变量,用 rest 替代。
在参数列表中指定默认值而不是在函数里进行判断再赋值。
避免默认参数值的副作用,默认值应当简洁直接。
默认参数赋值放在最后。
创建函数不要使用 Function 构造器。
函数定义部分要有空格。
不要修改传入的参数。
使用扩展运算符调用多参数的函数。
调用或者编写一个包含多个参数的函数,参数列表应该换行,每行只有一个参数和一个结尾的逗号。
不要传入不使用的参数。
# 箭头函数
当一定要使用函数表达式(回调函数)时,使用箭头函数,如果一个函数逻辑复杂,应该把它单独写入一个命名函数里。
如果函数体是一个没有副作用的表达式语句组成,就删除大括号和 return。
如果表达式包含多行就包裹在圆括号里面。
箭头函数的参数用圆括号包裹起来。
避免箭头函数和大于等于、小于等于号混淆。
# 类与构造函数
使用 class 语法,避免操作原型对象。
使用 extends 实现继承。
方法可以返回 this 实现链式调用。
空构造函数或只是代表父类的构造函数是不需要写的。
避免重复定义类成员。
除非外部库或框架需要使用特定的非静态方法,否则类方法应该使用 this 或被写成静态方法。
派生类需要调用 super。
构造器禁止 return。
# 模块
使用 export、import 导出、导入模块。
不要使用 import 通配符。
一个文件中的多个模块在一个 import 语句中引入。
不要导出可变的东西。
如果一个文件只导出一个模块,使用 default。
import 语句要放在所有语句之前。
多行的 import 应该缩进。
# 迭代器与生成器
不要用迭代器而是使用 for-in
、for-of
。
不使用生成器。因为无法很好的转为 ES5。
# 属性
访问属性使用点符号,如果是变量获取属性使用方括号。
幂运算使用 **
运算符。
# 变量
使用 const 或 let 声明变量。
不要使用链式声明对象。
不要使用一元自增自减运算符。
赋值的时候避免在等号前后换行,如果等号右边太长可以用圆括号包裹起来。
变量如果不使用就不要声明。
# 比较运算符与相等
用严格相等和严格不等进行判断。
if 语句使用 ToBoolean 抽象方法来计算表达式,规则:
- Objects 计算成 true。
- undefined 计算为 false。
- null 计算为 false。
- +0、-0、NaN 计算为 false。
- 空字符串(不包含纯空格字符串)计算为 false。
# 控制语句
当控制语句中的条件太长时要换行,每个条件一行,逻辑运算符放在行首。
# 注释
单行注释放在被注释区域上面,如果注释不是在第一行,那么注释前面就空一行。
# 空格
链式调用过长换行时,点符号开头。
一个代码块后的下一条语句前空一行。
不要用空白行填充块。
圆括号、方括号前后不加空格。计算属性要有空格。
[1, 2, 3]
花括号内前后加空格。
调用函数时函数名和小括号之间不要空格。
在对象的字面量属性中,键值之间要空格。
# 逗号
不要前置逗号。
使用额外的结尾逗号。
# 分号
语句末尾加分号。
# 类型转换与强制转换
数字转换使用 Number,parseInt 转换应该带着基数。
布尔转换使用两个取反符号:!!
。
# Get-Set 访问器
不要使用属性的访问器函数,可以自定义。、
如果要使用访问器函数那么 get 和 set 要一起使用。
# 其他
Promise 构造器参数不能是 async。
if 语句等布尔表达式不能是常量。