编写更好的 JavaScript 代码,5个提示

134 阅读4分钟

作为初学者,我们首先尝试让代码正常工作,但当我们尝试成为专业人士时,我们应该警惕编写干净高效的代码。编写干净的代码需要大量的练习,这是每个 JavaScript 开发人员都必须掌握的技能。在本文中,我将与您分享一些技巧,帮助你提高这些 JavaScript 技能。

1. 使用includes()来避免多重检查

在 if 条件中使用多个 OR (||) 和 AND (&&) 可能会让代码看起来非常混乱。所以,如果可以的话,尽量避免它们。在下面的场景中,我们可以通过这个简单的替代方案来提高代码的可读性。您可以轻松地替换它:

  if (值 === 'a' || 值 === 'b' || 值 === 'c') { ... }

像这样:

  if (['a', 'b', 'c'].includes(value)) { ... }

当您使用此替代方案时,代码会变得更加干净,并且可以避免 if 中包含太多条件。

2. ! 转化任何值为 Boolean 类型

(NOT)运算符 ! 可以使用两次,!! 以便将任何变量转换为布尔值(如 Boolean(xxx) ),它可以帮助我们在使用对象之前方便地检查对象是否存在。

  const val = null
  
  !!val // false
  Boolean(val) // false
  
  if (!!val) { } // val is not null or undefined

3. 可选链

javascript 处理对象之前,您需要经常检查对象的某些属性是否存在。很多开发人员都这样写:

  const val = { a: { b: { c: 5 } } }
  if (!!val.a && !!val.a.b && !!val.a.b.c) { ... } // val.a.b.c 存在

您可以使用可选链接以避免使用如上所述的多重检查。

  const val = { a: { b: { c: 5 } } }
  if (!!val.a?.b?.c) { ... } // val.a.b.c 存在
  // If the key doesn't exist, it will return undefined
  const test = val.a?.b?.c?.d // undefined

关于可选链接的更多信息

4. 在 if 中返回值时避免 else

如果有一个公共的 return 语句,最好在块之外返回它,而不是在else中返回它。永远记住每一行代码都可能导致问题,因此最好尽可能减少它们。我已经多次看到类似的代码片段:

  if (...) { // 在此示例中条件是什么并不重要  
      return 'hello'  
  } else {  
      return 'bye'  
  }

您只需将上面的代码替换为:

  if (...) { // 在此示例中条件是什么并不重要  
      return 'hello'
  }
  return 'bye'

5. 避免 forEach,多使用 filter、map、reduce、every & some 函数

使用 forEach 是一种老派的方法,有多种替代方案比 forEach 更高效,并且可以完成更多工作。我从这篇文章中得到的最好的建议是,作为初学者,我们使用了很多 forEach 函数,但是 JS 为您提供了很多替代方案,而且,这些函数是 FP (functional programming,函数式编程)。

Filter

顾名思义, 它允许我们根据给出的条件过滤某些值。

  const vals = [1, 2, 3, 4]
  const evenValue = vals.filter(currentValue => {
      return currentValue % 2 == 0 // 删除在此条件下所有返回 false 的值
  }) // [2, 4]

Map

如果需要将数组中的所有成员换成另一个成员,需要用到它。例如,让数组中的每一个数字,都 * 2 。

  const vals = [1, 2, 3, 4]
  const valueMultiplied = vals.map(currentValue => {
      return currentValue * 2
  }) // [2, 4, 6, 8]

Reduce

最难理解的是,像其他函数一样, reduce 也有 accumulator(累加器)。

如果要使用 reduce,你需要知道一条规则:

你是否需要从数组中获取单个值?

例如,如果我想将数组中的所有数字求和变成一个数,那么就需要reduce,而accumulator就是总和! 与任何值一样,您需要初始化它!

  const vals = [1, 2, 3, 4]
  const sum = vals.reduce((accumulator, currentValue) => {
     return accumulator += currentValue // 总是需要返回 “accumulator”
  }, 0) // 10

Some & Every

some 会检查您的所有项目,当其中一项符合您的条件时,它将返回 true,否则将返回 false

every 会检查您的所有项目,当其中一项不符合您的条件时,它将返回 false,否则将返回 true

但什么时候用呢?

例如,如果您需要确保所有项目都符合某个条件!

  const vals = [ 2, 4 ]
  if (vals.every(val => val % 2 === 0)) { } // 确保数组中只有偶数
  const valsArr = [ 2, 4, 5 ]
  valsArr.every(val => val % 2 === 0) // 将返回 false,因为数组中有奇数

您可以在相反的上下文中使用 some,例如,如果您想确保数组至少包含一个奇数值。

  const vals = [ 2, 4, 5 ]
  vals.some(val => val % 2 !== 0) // return true

总结

A good programmer is someone who always looks both ways before crossing a one-way street.(好的程序员即使在过单行道时也总是会环顾两边) — Doug Linder

如果我们努力成为一名优秀的开发人员,我们需要尝试寻找解决问题的最佳方法,因为任何人都可以解决问题,但我们如何解决问题却会产生重大影响。 我真的希望我能帮助你理解一些你不知道的东西,并帮助你提高自己。 如果您还有任何建议或问题,请在评论中留言。


参考,来源     5 Tips To Write Better JavaScript