# 前端业务代码的书写注意点 ## 变量,常量 几乎所有的 `var`,`let`,都可以用`const`代替,比如常见的写法: 交换两个数: ```js const [b2,a2]=[a1,b1]; ``` (通过新建两个和原来完全不同的数字) push: ```js const a = [1,2,3] const newItem = 4; const b = [...a,newItem] ``` pop: ```js const a = [1,2,3] const b = a.slice(0,-1) ``` 修改键: ```js const a = { key1:'foo', key2:2333, } const b = { ...a, key1: 114514 } // 尽量不要使用 a.key1 = 114514 ``` ## 循环 尽量不要使用 `for` 循环,使用`map`,`reduce`等,如果真的遇到需要改变之前定义的值,则请使用 `forEach` ## 语句 请尽量避免使用无返回值的语句,比如`for` 循环,`if`语句,`switch`语句等,因为这些语句起效果都会导致之前的定义的值的变化,也就是改变之前定义的东西的值。多使用三元表达式等。 ## 函数 请控制每个函数的工作指责,当一个函数的逻辑,不能用简单的一句话说清楚时候,请拆分函数。 当一个语句,需要一些额外的小技巧,小知识来解释的时候,请抽取成函数。比如判断一个0是正零还是负零,我们其实只要写 `1/x === -Infinity`或者`Object.is(-0,x)`就好,但是这需要一些额外的知识,所以可以抽取成函数`const isNegativeZero = x => Object.is(x, -0)` ## css css尽量使用css-module,防止污染模块外的组件。 另外,className 尽量只有一个字符串值,不要用`classnames`库把很多的样式组合出来一个新样式。样式的组合使用 less或者sass的 mixin,extends等特性 ## 面向对象 大多数情况,你不需要继承扩展修改现有的类,也不需要大部分的Java程序员带来的面向对象的各种实践。我们需要的事情是,把各种复杂的逻辑,拆成简单清晰的小函数,或着可以复用的object就好了。