JavaScript标准编码风格
作者:高天阳
邮箱:13683265113@163.com
更改历史
* 2018-09-14 高天阳 初始化文档前言
1 简介
1.1 简介
1.2 风格的重要性
1.3 JavaScript 标准编码风格
1.4 良好的程序层次结构
2 细则
细则目录
2.1 使用两个空格进行缩进
2.2 除需要转义的情况外,字符串统一使用单引号
2.3 不要定义未使用的变量
2.4 关键字后面加空格
2.5 函数声明时括号与函数名间加空格
2.6 始终使用 === 替代 ==
2.7 字符串拼接操作符 (Infix operators) 之间要留空格
2.8 逗号后面加空格
2.9 else 关键字要与花括号保持在同一行
2.10 多行 if 语句的的括号不能省
2.11 不要丢掉异常处理中err参数
2.12 使用浏览器全局变量时加上 window. 前缀
2.13 不允许有连续多行空行
2.14 对于三元运算符 ? 和 : 与他们所负责的代码处于同一行
2.15 每个 var 关键字单独声明一个变量
2.16 条件语句中赋值语句使用括号包起来。这样使得代码更加清晰可读,而不会认为是将条件判断语句的全等号(===)错写成了等号(=)
2.17 单行代码块两边加空格
2.18 对于变量和函数名统一使用驼峰命名法
2.19 不允许有多余的行末逗号
2.20 始终将逗号置于行末
2.21 点号操作符须与属性需在同一行
2.22 文件末尾留一空行
2.23 函数调用时标识符与括号间不留间隔
2.24 键值对当中冒号与值之间要留空白
2.25 构造函数要以大写字母开头
2.26 无参的构造函数调用时要带上括号
2.27 对象中定义了存值器,一定要对应的定义取值器
2.28 子类的构造器中一定要调用 super
2.29 使用数组字面量而不是构造器
2.30 避免使用 arguments.callee 和 arguments.caller
2.31 避免对类名重新赋值
2.32 避免修改使用 const 声明的变量
2.33 避免使用常量作为条件表达式的条件(循环语句除外)
2.34 不要使用 debugger
2.35 不要对变量使用 delete 操作
2.36 不要定义冗余的函数参数
2.37 类中不要定义冗余的属性
2.38 对象字面量中不要定义重复的属性
2.39 switch 语句中不要定义重复的 case 分支
2.40 同一模块有多个导入时一次性写完
2.41 正则中不要使用空字符
2.42 不要解构空值
2.43 不要使用 eval()
2.44 catch 中不要对错误重新赋值
2.45 不要扩展原生对象
2.46 避免多余的函数上下文绑定
2.47 避免不必要的布尔转换
2.48 不要使用多余的括号包裹函数
2.49 switch 一定要使用 break 来将条件分支正常中断
2.50 不要省去小数点前面的0
2.51 避免对声明过的函数重新赋值
2.52 不要对全局只读对象重新赋值
2.53 注意隐式的 eval()
2.54 嵌套的代码块中禁止再定义函数
2.55 不要向 RegExp 构造器传入非法的正则表达式
2.56 不要使用非法的空白符
2.57 禁止使用 __iterator__
__iterator__2.58 外部变量不要与对象属性重名
2.59 不要使用标签语句
2.60 不要书写不必要的嵌套代码块
2.61 不要混合使用空格与制表符作为缩进
2.62 除了缩进,不要使用多个空格
2.63 不要使用多行字符串
2.64 new 创建对象实例后需要赋值给变量
new 创建对象实例后需要赋值给变量2.65 禁止使用 Function 构造器
Function 构造器2.66 禁止使用 Object 构造器
2.67 禁止使用 new require
2.68 禁止使用 Symbol 构造器
2.69 禁止使用原始包装器
2.70 不要将全局对象的属性作为函数调用
2.71 不要使用八进制字面量
2.72 字符串字面量中也不要使用八进制转义字符
2.73 使用 __dirname 和 __filename 时尽量避免使用字符串拼接
__dirname 和 __filename 时尽量避免使用字符串拼接2.74 使用 getPrototypeOf 来替代 __proto__
getPrototypeOf 来替代 __proto__2.75 不要重复声明变量
2.76 正则中避免使用多个空格
2.77 return 语句中的赋值必需有括号包裹
return 语句中的赋值必需有括号包裹2.78 避免将变量赋值给自己
2.79 避免将变量与自己进行比较操作
2.80 避免使用逗号操作符
2.81 不要随意更改关键字的值
2.82 禁止使用稀疏数组(Sparse arrays)
2.83 不要使用制表符
2.84 正确使用 ES6 中的字符串模板
2.85 使用 this 前请确保 super() 已调用
this 前请确保 super() 已调用2.86 用 throw 抛错时,抛出 Error 对象而不是字符串
throw 抛错时,抛出 Error 对象而不是字符串2.87 行末不留空格
2.88 不要使用 undefined 来初始化变量
undefined 来初始化变量2.89 循环语句中注意更新循环变量
2.90 如果有更好的实现,尽量不要使用三元表达式
2.91 return,throw,continue 和 break 后不要再跟代码
return,throw,continue 和 break 后不要再跟代码2.92 finally 代码块中不要再改变程序执行流程
finally 代码块中不要再改变程序执行流程2.93 关系运算符的左值不要做取反操作
2.94 避免不必要的 .call() 和 .apply()
.call() 和 .apply()2.95 避免使用不必要的计算值作对象属性
2.96 禁止多余的构造器
2.97 禁止不必要的转义
2.98 import, export 和解构操作中,禁止赋值到同名变量
import, export 和解构操作中,禁止赋值到同名变量2.99 属性前面不要加空格
2.100 禁止使用 with
with2.101 对象属性换行时注意统一代码风格
2.102 代码块中避免多余留白
2.103 展开运算符与它的表达式间不要留空白
2.104 遇到分号时空格要后留前不留
2.105 代码块首尾留空格
2.106 圆括号间不留空格
2.107 一元运算符后面跟一个空格
2.108 注释首尾留空格
2.109 模板字符串中变量前后不加空格
2.110 检查 NaN 的正确姿势是使用 isNaN()
NaN 的正确姿势是使用 isNaN()2.111 用合法的字符串跟 typeof 进行比较操作
typeof 进行比较操作2.112 自调用匿名函数 (IIFEs) 使用括号包裹
2.113 yield 中的 前后都要有空格
2.114 请书写优雅的条件语句(avoid Yoda conditions)
3 关于分号
3.1 不要使用分号 (参见:1,2,3)
3.2 不要使用 (, [, or ` 等作为一行的开始。在没有分号的情况下代码压缩后会导致报错,而坚持这一规范则可避免出错
(, [, or ` 等作为一行的开始。在没有分号的情况下代码压缩后会导致报错,而坚持这一规范则可避免出错4 最佳实践
4.1 比较对象属性的3种添加方式


5 同类型技术比较
参考资料
Last updated