参考

airbnb:https://github.com/airbnb/javascript
standard:https://standardjs.com/rules.html

Standard

禁止未引用变量

  1. function myFunction () {
  2. var result = something() // ✗ avoid
  3. }

异常抛出

  1. // ✓ ok
  2. run(function (err) {
  3. if (err) throw err
  4. window.alert('done')
  5. })
  6. // ✗ avoid
  7. run(function (err) {
  8. window.alert('done')
  9. })

三元表达式书写

  1. // ✓ ok
  2. var location = env.development ? 'localhost' : 'www.api.com'
  3. // ✓ ok
  4. var location = env.development
  5. ? 'localhost'
  6. : 'www.api.com'
  7. // ✗ avoid
  8. var location = env.development ?
  9. 'localhost' :
  10. 'www.api.com'

new构造器必须大写

  1. function animal () {}
  2. var dog = new animal() // ✗ avoid
  3. function Animal () {}
  4. var dog = new Animal() // ✓ ok

对象设置了setter以后,必须设置getter

  1. var person = {
  2. set name (value) { // ✗ avoid
  3. this._name = value
  4. }
  5. }
  6. var person = {
  7. set name (value) {
  8. this._name = value
  9. },
  10. get name () { // ✓ ok
  11. return this._name
  12. }
  13. }

禁止array构造器

  1. var nums = new Array(1, 2, 3) // ✗ avoid
  2. var nums = [1, 2, 3] // ✓ ok

禁止使用arguments.callee 和 arguments.caller

  1. function foo (n) {
  2. if (n <= 0) return
  3. arguments.callee(n - 1) // ✗ avoid
  4. }
  5. function foo (n) {
  6. if (n <= 0) return
  7. foo(n - 1) // ✓ ok
  8. }

删除debugger

  1. function sum (a, b) {
  2. debugger // ✗ avoid
  3. return a + b
  4. }

禁止使用delete操作符

  1. var name
  2. delete name // ✗ avoid

合并导入

  1. import { myFunc1 } from 'module'
  2. import { myFunc2 } from 'module' // ✗ avoid
  3. import { myFunc1, myFunc2 } from 'module' // ✓ ok

禁止eval

  1. eval( "var result = user." + propName ) // ✗ avoid
  2. var result = user[propName] // ✓ ok

异常捕获禁止重新赋值

  1. try {
  2. // ...
  3. } catch (e) {
  4. e = 'new value' // ✗ avoid
  5. }
  6. try {
  7. // ...
  8. } catch (e) {
  9. const newVal = 'new value' // ✓ ok

避免不必要的布尔值判断

  1. const result = true
  2. if (!!result) { // ✗ avoid
  3. // ...
  4. }
  5. const result = true
  6. if (result) { // ✓ ok
  7. // ...
  8. }

switch要写break

  1. switch (filter) {
  2. case 1:
  3. doSomething() // ✗ avoid
  4. case 2:
  5. doSomethingElse()
  6. }
  7. switch (filter) {
  8. case 1:
  9. doSomething()
  10. break // ✓ ok
  11. case 2:
  12. doSomethingElse()
  13. }
  14. switch (filter) {
  15. case 1:
  16. doSomething()
  17. // fallthrough // ✓ ok
  18. case 2:
  19. doSomethingElse()
  20. }

禁止在嵌套块中声明函数

  1. if (authenticated) {
  2. function setAuthUser () {} // ✗ avoid
  3. }

new构造函数需要赋值

  1. new Character() // ✗ avoid
  2. const character = new Character() // ✓ ok

路径拼接

  1. const pathToFile = __dirname + '/app.js' // ✗ avoid
  2. const pathToFile = path.join(__dirname, 'app.js') // ✓ ok

赋值返回必须写括号

  1. function sum (a, b) {
  2. return result = a + b // ✗ avoid
  3. }
  4. function sum (a, b) {
  5. return (result = a + b) // ✓ ok
  6. }

异常抛出

  1. throw 'error' // ✗ avoid
  2. throw new Error('error') // ✓ ok

使用或代替三元

  1. let score = val ? val : 0 // ✗ avoid
  2. let score = val || 0 // ✓ ok

移除不必要的构造器

  1. class Car {
  2. constructor () { // ✗ avoid
  3. }
  4. }

补充

async/await 替代 Promise then

不要什么都用forEach, map,some,every,filter,reduce,flat,…合理使用

使用map或者enum代替if else判断

不要滥用Promise.all,尤其是在并行请求接口的时候,会因为一个接口错误引起整个页面白屏

使用es6,例如const、箭头函数、字符串模板、promise、解构赋值等