JS代码优化整理(2)

108 阅读2分钟

1. 三元运算符相关

a = x ? x : y          =>    a = x ?: y  或者  a = x || y
a = x ? true : false   =>    a = !!x

2. 微软输入法和安全基线问题

修改前:没有注意微软输入法问题,数字等输入框没有规则校验

修改后:

(1)将校验规则统一维护成静态变量

(2)需要用到的组件引入并直接使用

3. v-for的时候一定要加key属性,且key属性的值一定不要用index

修改前:(index不稳定,增删时index可能会变化,进而引起key的变化)

修改后:(尽量用id,没有id就用type之类有区分度的变量)

4. 冻结仅用来展示的数据以提高性能

Vue不用进行数据劫持等操作,大大增加性能

5. 擅于利用正则表达式进行校验

// 修改前
if (value.indexOf('https://') < 0 && value.indexOf('htto://') < 0)
// 修改后
urlRule: /^http?:\/\//
if(!this.urlRule.test(value))

6. 静态变量建议统一写在开头便于阅读

补充:

组件**/实例的选项应该有统一的顺序:**

el –> filters -> props -> data -> computed -> watch -> 生命周期钩子 -> methods

元素 (包括组件) attribute 应该有统一的顺序**:**

v-for -> v-if -> v-show -> v-once -> v-model -> v-on -> v-text

更详细的可查阅(cn.vuejs.org/v2/style-gu…

7. 擅于使用模板字符串

// 修改前:
this.$t('common.placeholderSelect') + this.$t('tipsTime')
// 修改后:
`${this.$t('common.placeholderSelect')}${this.$t('tipsTime')}`

8. 错误信息尽量由后端来维护

前端直接打印错误即可,可以使错误更加准确。

9. 提交表单时确定增加loading避免重复提交表单

修改后:

(1) 提交表单按钮增加loading属性,属性值定义在data中,为布尔值

(2) 表单校验通过时,置为true,如果失败置为false

10. 擅用Object和Map处理else if及switch case

Map的优势:

(1)Object的键只能是字符串或者Symbols,但是Map可以是任意值,包括函数、对象、基本类型。

(2)Map是干净的,只含有显示插入的键,而Object上会有原型上的属性以及方法。

(3)Map中的key是有序的,迭代的时候以其插入的顺序返回键值,而object的键是无序的。

(4)Map长度可以通过size方法来获取,而object需要手动计算。

(5)Map是可迭代的,object需要通过获取键来迭代。

(6)在频繁增删键值对的场景下表现更好,在频繁添加和删除键值对的场景下未作出优化。

所以复杂情况推荐使用Map。

11. 字典不需要监听数据变化,不要定义在data里,也要避免魔数字

修改前:

data里面定义:导致魔数字,无用的数据监听

修改后:

(1)定义静态变量

(2)将字典的映射关系写在computed

(3)在方法和模板中使用

12. 其他常见问题

(1)尽量不要写魔数字

(2)尽量不要写行内样式

(3)props属性加上默认值

(4)属性后加空格