1、注重命名
/ w' r9 ]" z7 Y 为一个事件命名是很困难的。虽然困难但是非常有必要。# o+ Y) u, L- ?0 f
想象以下,将两个数组合并成一个数组,并生成一个唯一值的数组。那么你会怎么命名它呢?我们也许会这样命名?- z; a- y! |" g6 C V
- function mergeNumberListIntoUniqueList(listOne, listTwo) {
- return [...new Set([...listOne, ...listTwo])]
- }
上面的命名并不糟糕,但是还不是很友好。你可以将一个功能函数拆分为两个功能函数,这样命名更友好和函数复用性更好。
8 ~0 @ C( H2 X: S$ ? T- function mergeLists(listOne, listTwo) {
- return [...listOne, ...listTwo]
- }
-
- function createUniqueList(list) {
- return [...new Set(list)]
- }
+ d: Z# o U: ]1 i0 A2、IF语句简化
8 q. g7 S- P# S 假设我们有下面的代码:
6 h5 ]( b4 Y) n0 {' n1 k8 O- if(value === 'duck' || value === 'dog' || value === 'cat') {
- // ...
- }
我们可以这样解决:& |. @' K+ w; ?+ T
- const options = ['duck', 'dog', 'cat'];
- if (options.includes(value)) {
- // ...
- }
将乱七八糟的条件判断放到一个变量中存储,比看臃肿的表达式要好很多。3 r8 K3 [- f8 ^7 H0 {" K
3、及早返回0 N$ U j3 w' Z8 V/ }+ A& G
有下面的代码:% c: r( \" ~- }, c& K$ s. Q4 v
- function handleEvent(event) {
- if (event) {
- const target = event.target;
- if (target) {
- // Your awesome piece of code that uses target
- }
- }
- }
及早返回使得我们的代码更加易读:, \# X1 X+ Y+ G; Z( n" [$ \* K
- function handleEvent(event) {
- if (!event || !event.target) {
- return;
- }
- // Your awesome piece of code that uses target
- }
) h* C, Q( [% _9 A+ z( t- S9 \4、解构赋值
' W8 {6 w$ a; [" _ 在javascript中,我们可以对objects和arrays进行解构赋值。例如:$ F: Z3 g6 A8 I$ M* u
- // object 解构赋值
- const numbers = {one: 1, two: 2};
- const {one, two} = numbers;
- console.log(one); // 1
- console.log(two); // 2
-
- // array 解构赋值
- const numbers = [1, 2, 3, 4, 5];
- const [one, two] = numbers;
- console.log(one); // 1
- console.log(two); // 2
) X$ Y: B. [1 {' I
5、童子军规则
2 a# R2 e: r# V5 R 童子军有一条规则:永远保持离开时的露营比你发现它时更整洁。如果你在地面上发现了脏东西,那么无论是否是你留下的,你都要将它清理干净。你要有意地为下一组露营者改善环境。, K" }" v# s8 l% ?: I
我们编写代码也是这样子,如果你在代码中发现了脏代码,那么你可以尝试去修改它,即使是一个没有被引用到的变量名。4 e) n, ~, v' Z: K) |; J& z
6、代码风格$ l3 F% F: D0 m" C
在你的团队中使用一种代码风格,比如限定代码缩进的规范是两空格呢还是四空格;使用单引号呢还是双引号呢;使用同类的一种框架呢,还是流行两种解决方案的框架呢...这样团队中人员接手项目的成本就会降低,开发人员的心里减少排斥感~6 n: w0 d* I$ W0 g( e
4 `; q2 C+ s2 i# S. L! t |