逻辑与循环

始终使用 === 替代 ==

例外: obj == null 可以用来检查 null || undefined

  1. if (name === 'John') // ✓ 正确
  2. if (name == 'John') // ✗ 错误
  1. if (name !== 'John') // ✓ 正确
  2. if (name != 'John') // ✗ 错误

避免将变量与自己进行比较操作

  1. if (score === score) {} // ✗ 错误

if/else 关键字要与花括号保持在同一行

  1. // ✓ 正确
  2. if (condition) {
  3. // ...
  4. } else {
  5. // ...
  6. }
  1. // ✗ 错误
  2. if (condition)
  3. {
  4. // ...
  5. }
  6. else
  7. {
  8. // ...
  9. }

多行 if 语句的的括号不能省略

  1. // ✓ 正确
  2. if (options.quiet !== true) console.log('done')
  1. // ✓ 正确
  2. if (options.quiet !== true) {
  3. console.log('done')
  4. }
  1. // ✗ 错误
  2. if (options.quiet !== true)
  3. console.log('done')

对于三元运算符 ? 和 : 与他们所负责的代码处于同一行

  1. // ✓ 正确
  2. const location = env.development ? 'localhost' : 'www.api.com'
  3. // ✓ 正确
  4. const location = env.development
  5. ? 'localhost'
  6. : 'www.api.com'
  7. // ✗ 错误
  8. const location = env.development ?
  9. 'localhost' :
  10. 'www.api.com'

请书写优雅的条件语句(avoid Yoda conditions)

  1. if (42 === age) { } // ✗ 错误
  2. if (age === 42) { } // ✓ 正确

避免使用常量作为条件表达式的条件(循环语句除外)

  1. if (false) { // ✗ 错误
  2. // ...
  3. }
  4. if (x === 0) { // ✓ 正确
  5. // ...
  6. }
  7. while (true) { // ✓ 正确
  8. // ...
  9. }

循环语句中注意更新循环变量

  1. for (let i = 0; i < items.length; j++) {...} // ✗ 错误
  2. for (let i = 0; i < items.length; i++) {...} // ✓ 正确

如果有更好的实现,尽量不要使用三元表达式

  1. let score = val ? val : 0 // ✗ 错误
  2. let score = val || 0 // ✓ 正确

switch 语句中不要定义重复的 case 分支

  1. switch (id) {
  2. case 1:
  3. // ...
  4. case 1: // ✗ 错误
  5. }

switch 一定要使用 break 来将条件分支正常中断

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

避免不必要的布尔转换

  1. const result = true
  2. if (!!result) { // ✗ 错误
  3. // ...
  4. }
  5. const result = true
  6. if (result) { // ✓ 正确
  7. // ...
  8. }

避免使用逗号操作符

  1. if (doSomething(), !!test) {} // ✗ 错误