JavaScript

PPG007 ... 2021-12-27 About 5 min

# JavaScript

# 引用

所有的赋值都使用 const,如果一定要对参数重新赋值要使用 let 而不是 var。

# 对象

使用字面值创建对象而不是 new,例如:

const obj = {};
1

使用计算属性名创建动态属性名的对象而不是在对象定义外再创建:

const obj = {
    [getKey()]: true
}
1
2
3

对象方法使用简写形式。

可以简写的属性名要简写,简写的属性要放前面。

属性名不必要加引号就不加。

不要直接调用 Object.prototype 上的方法,有的方法可能会被屏蔽,可以这样:

Object.prototype.hasOwnProperty.call(obj,key);
1

对象浅拷贝应该使用扩展运算符。

# 数组

用字面量创建数组。

用 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-infor-of

不使用生成器。因为无法很好的转为 ES5。

# 属性

访问属性使用点符号,如果是变量获取属性使用方括号。

幂运算使用 ** 运算符。

# 变量

使用 const 或 let 声明变量。

不要使用链式声明对象。

不要使用一元自增自减运算符。

赋值的时候避免在等号前后换行,如果等号右边太长可以用圆括号包裹起来。

变量如果不使用就不要声明。

# 比较运算符与相等

用严格相等和严格不等进行判断。

if 语句使用 ToBoolean 抽象方法来计算表达式,规则:

  • Objects 计算成 true。
  • undefined 计算为 false。
  • null 计算为 false。
  • +0、-0、NaN 计算为 false。
  • 空字符串(不包含纯空格字符串)计算为 false。

# 控制语句

当控制语句中的条件太长时要换行,每个条件一行,逻辑运算符放在行首。

# 注释

单行注释放在被注释区域上面,如果注释不是在第一行,那么注释前面就空一行。

# 空格

链式调用过长换行时,点符号开头。

一个代码块后的下一条语句前空一行。

不要用空白行填充块。

圆括号、方括号前后不加空格。计算属性要有空格。

[1, 2, 3]
1

花括号内前后加空格。

调用函数时函数名和小括号之间不要空格。

在对象的字面量属性中,键值之间要空格。

# 逗号

不要前置逗号。

使用额外的结尾逗号。

# 分号

语句末尾加分号。

# 类型转换与强制转换

数字转换使用 Number,parseInt 转换应该带着基数。

布尔转换使用两个取反符号:!!

# Get-Set 访问器

不要使用属性的访问器函数,可以自定义。、

如果要使用访问器函数那么 get 和 set 要一起使用。

# 其他

Promise 构造器参数不能是 async。

if 语句等布尔表达式不能是常量。

Last update: December 27, 2021 03:30
Contributors: PPG007