作为初学者,我们首先尝试让代码正常工作,但当我们尝试成为专业人士时,我们应该警惕编写干净高效的代码。编写干净的代码需要大量的练习,这是每个 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
如果我们努力成为一名优秀的开发人员,我们需要尝试寻找解决问题的最佳方法,因为任何人都可以解决问题,但我们如何解决问题却会产生重大影响。 我真的希望我能帮助你理解一些你不知道的东西,并帮助你提高自己。 如果您还有任何建议或问题,请在评论中留言。