嵌套太深,分支太多的条件语句令人生畏,难以维护。本文介绍减少嵌套深度和条件分支数量的一些技巧。
优化技巧
技巧1:尽早返回无效条件
function supply(fruit, quantity) {const redFruits = ['apple', 'pear', 'cherry'];// 条件 1: 水果存在if (fruit) {// 条件 2: 属于红色水果if (redFruits.includes(fruit)) {console.log('红色水果');// 条件 3: 水果数量大于 10 个if (quantity > 10) {console.log('数量大于 10 个');}}} else {throw new Error('没有水果啦!');}}
优化为:
function supply(fruit, quantity) {const redFruits = ['apple', 'pear', 'cherry'];// 条件 1: 当 fruit 无效时,提前处理错误if (!fruit) throw new Error('没有水果啦');// 条件 2: 当不是红色水果时,提前 returnif (!redFruits.includes(fruit)) return;console.log('红色水果');// 条件 3: 水果数量大于 10 个if (quantity > 10) {console.log('数量大于 10 个');}}
技巧2:直接执行对象上的方法替代条件判断
switch (action) {case 'add':return add()case 'update':return update()case 'list':return list();default:throw 'Not Support Action'}
优化为:
const handler = {add() {},update() {},list() {}}handler(action)()
技巧3:多个字符串相等判断用 includes
if (action === 'add' ||action === 'update' ||action === 'delete') {console.log('change')}
优化为
if(['add', 'update', 'delete'].includes(action)) {console.log('change')}
技巧4:对象的属性存在判断用可选链操作符
if (obj && obj.a && obj.a.fn) {obj.a.fn()}
优化为
obj?.a?.fn?.()
