编写更优雅的 JavaScript 代码

代码技巧

  1. 优先 ES6 新特性写法

熟练使用 ES6 新特性可以优化代码,更加简洁,代码对比

// 箭头函数
function foo(){
  console.log('hello world')
}

const foo = () => console.log('hello world')

// 数组去重
const formatArray = arr => [...new Set(arr)]

// 数组合并
const newArr = [...arr1, ...arr2, 'value']

// 对象浅拷贝
const newObj = {...obj}

// 解构赋值
const person = {name: 'bao', age: 18}
const { name, age } = person

...
  1. 优化逻辑判断语句

大量的 if else 逻辑判断难以维护,且性能较差,可用多种方式代替

// 对象配置法
// 函数内部有条件判断,且 return 值时,满足条件立即return,而不要在结尾return
const foo = v => {
  if (v === 'name') {
    return 'bao'
  } else if (v === 'age') {
    return '18'
  } else if (v === 'height') {
    return '180'
  }
}
const cfg = {
  name: 'bao',
  age: '18',
  height: '180'
}
const foo = v => cfg[v]

// 数组配置法
if (value === 'hello' || value === 'world' || value === 'blabla') {
  // ...
}
// 配置数组形式
const rightValue = ['hello', 'world', 'blabla']
if (rightValue.includes[value]) {
  // ...
}
  1. 善用 && 、 || 和 三元运算
if (name === 'bao') {
  someFunc()
}

name === 'bao' && someFunc()

if (name === 'bao') {
  someFunc()
} else {
  elseFunc()
}

name === 'bao' ? someFunc() : elseFunc()

  1. 对象属性变量应用

如在 react 中,调用 action 方法来获取数据,不同条件执行不同方法

if (isMember) {
  let res = await actions.getMemberInfo(params)
} else {
  let res = await actions.getCommonUserInfo(params)
}

const actionName = isMember ? 'getMemberInfo' : 'getCommonUserInfo'
let res = await actions[actionName](params)

  1. 类型转换
// 字符串转数字
let str = '1234'
let num = str+

console.log(+new Date()) // 1536231682006

// 转字符串
let str = `${num}`

更高效的代码

  1. 使用局部变量代替引用类型查找

局部变量的读取速度最快,而引用类型的数据读取需要按引用指针去查找,所以可以对多次使用的引用类型属性 使用局部变量读取一次,重复使用

let obj = {
  person: {
    man: {
      bao: {
        age: 18
      }
    }
  }
}

let age = obj.person.man.bao.age
// use age do many things
  1. 删除多个对象属性时先使属性为 null

删除属性时,js 引擎会去查找该属性的值是否是其他对象的引用,所以删除前提前赋值为 null,可以减少 js 引擎的检测过程,提高效率

let obj = {
  person: {
    man: {
      bao: {
        age: 18
      }
    }
  }
}
obj.person = null
delete obj.person

  1. 局部变量保存数组 length
let len = arr.length
for(let i=0; i<len; i++)){
  // ...
}

代码结构组织等优化

随着项目(react 项目)的日益扩大,代码量快速增多,后期维护非常耗费时间,主要通过以下方法减少代码量

  1. 凡是二次出现的代码片段,立即考虑复用,拆分公共组件
  2. 封装功能函数

最近做了一个复杂的图表、表格数据交互功能,涉及表格数据的各种计算、排序、比较、编辑前后对比等功能, 逻辑复杂,按交互不同有多种逻辑执行过程。采取的方法是单一功能函数封装,对每个计算、数据处理步骤, 都封装为小函数,不同逻辑不同函数组件组合,保证每个函数的可用性,整体功能也可以保证质量。

同时可以将项目常用的功能方法封装公用 util 来复用使用

  1. 善用 class 类的继承,复用功能方法 主要封装了 fetch 请求的 get/post 方法到 CommonActions class, 然后创建 actions 时只需要 extends CommonActions 就可以在新的 actions 中直接调用 this.get()/this.post() 来完成 请求数据。

总之,在逻辑清晰的情况下,尽可能复用组件、方法,维护好高质量的公共组件、方法,便于项目维护

  1. 善用装饰器 react 高阶函数已经提供了一种优雅的组件复用形式,而装饰器的使用可以更优雅地实现高阶函数
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • 搭建博客 GitHub上新建一个空repo,命名格式github的用户名.github.io,此处用xxx.git...
    青山白衣阅读 200评论 0 0
  • 今天中午笑笑放学到家有点晚,路上磨磨蹭蹭,奶奶在楼上看着她喊着她才加快脚步回家!不舒服的我躺在床上不用看就...
    大牛拉小车阅读 172评论 0 1
  • 我有一朵花,藏自心间, 他不娇艳,不出众,却独一。 蕴养多年,久经浮沉风雨拍打,依然挺立。 路过许多人,被观望,被...
    王先生的日记本阅读 523评论 5 3
  • 建议读一遍swift blog来了解OC与swift不同以及swift版本变动细节 OC id -> Swift ...
    月半的瘦子阅读 380评论 0 0