前端开发时需要注意的一些地方

46 阅读1分钟

1、减少if的使用

const options = new Map[[key1, value1], [key2, value2], ...options];  options.get(key);
[option1, option2, ...options].includes(option);
arr.some() arr.find()...
switch case
...

2、在流程控制语句中,应当坚持使用布尔值作为条件,尽可能避免使用隐式转换后的结果作为判断依据;以免产生意料之外的问题if(str) < if(typeof str === 'string')

3、对于改变数组的操作,在执行前应当创建其副本后进行操作return [...arr].reverse()

4、避免一个函数身兼数职,注意保持函数的单一性职责,每个函数都倾向于解决自己独立的任务;在对应的状态处理函数中,通过不同的条件来调用相应的方法来进行处理,会使得业务代码更加清晰的同时也方便后期的维护和扩展

5、在项目开发的过程中,业务代码与实际的功能代码进行可以进行适当的分离,避免一个组件模块代码行数过长难以阅读,同时常用的一些方法和常量枚举需要放到项目公共方法处,避免一个功能处处实现也可以减少魔法数字的使用

6、在某些数组查找的场景下应当适当考量some和find的使用,find会返回查找到的值,在隐式转换后可能“并不存在”

7、不要使用Boolean对象去创建布尔值,转换函数和构造函数得到的值并不相同

8、在变量定义时尽量对其进行赋值,可以定义其部分范围,当然能够使用TS更好

9、尽量避免通过js操作dom的方式插入大量的html标签,可以通过隐藏标签的方式,在数据或者标签需要展示的时候再通过js来控制显示即可

10、逻辑层和视图层应当松散耦合,只改变class类名而不用过多使用js操作元素样式,就可以很大程度上避免因为逻辑变动而产生视图上的变动;有疑问的话也可以很快定位到是逻辑或是视图上的问题

11、不要比较null或者undefined,尽量使用typeof和instanceof或者Object.prototype.toString.call()来进行类型判断

12、避免多次对于原型或者原型链上的属性的查找,尤其是在需要较多次循环的时候。可以在循环开始之前通过保存引用在循环时使用引用的方式;来减少循环过程中对于原型链的查找

13、不同软件生成的文件可能会存在兼容性的差别,在项目中如果存在模版文件下载时,需要格外注意

14、对于不同形式的按钮或者用户操作会关联到接口的操作中,都应加上类似防抖、节流、lockCommit等方式来避免用户多次点击而可能会产生的问题

15、babel在将js转为es5时,默认使用严格模式,为了安全性不要使用caller、callee、arguments

16、尽量使用无状态组件,不要让数据散落到各个组件之间,数据集中管理可以更好的保持数据的一致性和可维护性。

17、使用软编码而非硬编码,硬编码的常量和参数直接写入代码中,不使用变量或配置文件,后期维护成本高,而且不便修改

18、在开发过程中可以的话应当使用较高兼容性的方法来实现功能,eg:repalceAll => repalce(//g)前者在chrome85上才得以支持

19、在中台操作中,传值再填入是很常见的操作,但是实际上也应当注意再填入时的类型转换问题,避免因此产生难以查找的bug

20、如何从页面的某一特征处快速查找到对应的代码文件?具有较高辨识度的类名或者页面唯一的文案或许是个不错的选择

21、异步获取的数据在子组件的mounted时并未获取到props传来的值,v-if在获取后再加载或者通过watch来进行后续的操作

22、注意代码规范、圈复杂度以及代码复杂度;在开发过程中比较晦涩的方法应当尽量使用注释或者jsDoc来进行代码标注

23、对于常用的拷贝方法应当具有一定了解,浅拷贝偶尔会在一些你想不到的地方偷偷“捣乱”

24、方法和变量名应当契合正常的开发思维,推荐大概过下代码简洁之道

25、不要过度依赖框架和三方库,原生基础还是相当重要的

·有机会再补充,有问题的地方辛苦指正