javascript如何判断类型(JavaScript如何优化逻辑判断代码详解)
javascript如何判断类型
JavaScript如何优化逻辑判断代码详解前言
我们日常使用到的逻辑判断语句有 if...else...、switch...case...、do...while...等。
在简单场景下,我们可能对这些语法的性能没有什么感觉,但当遇到复杂的业务场景时,如果处理不善,就会出现大量的逻辑嵌套,可读性差并且难以扩展。
千里之行始于足下,编写高可维护性和高质量的代码,我们就需要从细节处入手,我们今天主要讨论 JavaScript 中如何优化逻辑判断代码。
嵌套层级优化
function supply(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; // 条件 1: 水果存在 if (fruit) { // 条件 2: 属于红色水果 if (redFruits.includes(fruit)) { console.log('红色水果'); // 条件 3: 水果数量大于 10 个 if (quantity > 10) { console.log('数量大于 10 个'); } } } else { throw new Error('没有水果啦!'); } }
通过上面这个例子,我们可以看到:判断流程中规中矩,符合现实世界的映射。但是,因代码层层嵌套,导致阅读和维护都存在困难。
如果传入了 fruit 参数,则每次执行都至少需要经过两步 if 判断,在性能上也存在问题。
我们来对上面的代码进行一下优化处理:
function supply(fruit, quantity) { const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries']; if (!fruit) throw new Error('没有水果啦'); // 条件 1: 当 fruit 无效时,提前处理错误 if (!redFruits.includes(fruit)) return; // 条件 2: 当不是红色水果时,提前 return console.log('红色水果'); // 条件 3: 水果数量大于 10 个 if (quantity > 10) { console.log('数量大于 10 个'); } }
这里主要对嵌套层级做了优化,提前终止掉了不符合的条件,将三层嵌套减少到了一层,简化了代码结果结构,增强了可阅读性。
多条件分支的优化
相信我们很多人对下面这种代码不陌生吧?(想想刚开始写代码那会啊)
function pick(color) { // 根据颜色选择水果 if (color === 'red') { return ['apple', 'strawberry']; } else if (color === 'yellow') { return ['banana', 'pineapple']; } else if (color === 'purple') { return ['grape', 'plum']; } else { return []; } }
我们需要知道一点原则:if else 更适合于条件区间判断,而 switch case 更适合于具体枚举值的分支判断。
我们使用 switch...case...进行一下改写:
function pick(color) { // 根据颜色选择水果 switch (color) { case 'red': return ['apple', 'strawberry']; case 'yellow': return ['banana', 'pineapple']; case 'purple': return ['grape', 'plum']; default: return []; } }
switch...case... 优化之后的代码看上去格式整齐,思路很清晰,但还是很冗长。继续优化:
借助 Object 的 {key: value} 结构,我们可以在 Object 中枚举所有的情况,然后将 key 作为索引,直接通过 Object.key 或者 Object[key] 来获取内容:
const fruitColor = { red: ['apple', 'strawberry'], yellow: ['banana', 'pineapple'], purple: ['grape', 'plum'], } function pick(color) { return fruitColor[color] || []; }
使用 Map 数据结构,真正的(key, value) 键值对结构:
const fruitColor = new Map() .set('red', ['apple', 'strawberry']) .set('yellow', ['banana', 'pineapple']) .set('purple', ['grape', 'plum']); function pick(color) { return fruitColor.get(color) || []; }
优化之后,代码更简洁、更容易扩展。
为了更好的可读性,还可以通过更加语义化的方式定义对象,然后使用 Array.filter 达到同样的效果:
const fruits = [ {name: 'apple', color: 'red'}, {name: 'strawberry', color: 'red'}, {name: 'banana', color: 'yellow'}, {name: 'pineapple', color: 'yellow'}, {name: 'grape', color: 'purple'}, {name: 'plum', color: 'purple'} ]; function pick(color) { return fruits.filter(f => f.color == color); }
总结
上面使用的例子和手段都比较初级,但是其中的思想却值得我们细品,希望大家能够有所收获!
到此这篇关于JavaScript如何优化逻辑判断代码的文章就介绍到这了,更多相关JavaScript优化逻辑判断代码内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- nodejssocket文件传输(node+socket实现简易聊天室功能)
- jsonkeyvalue怎么取(替换json对象中的key最佳方案)
- js如何将json字符串转换为json对象
- js时间日期处理
- js里咋样设置css里面的属性(css不常见属性之pointer-events的使用方法)
- html markdown 超链接对比(html+js 实现markdown编辑器效果)
- php生成json信息(php使用json-schema模块实现json校验示例)
- js脚本语言原理(实例说明js脚本语言和php脚本语言的区别)
- 自己做的弹珠小游戏(JS实现简单打砖块弹球小游戏)
- html和js代码结合(JS、CSS和HTML实现注册页面)
- 动态加载js脚本
- laravel-admin代码执行流程(解决laravel-admin 自己新建页面里 js 需要刷新一次的问题)
- nodejs怎么查看对象的全部属性(浅谈nodejs中创建cluster)
- js图片水印库(js给图片打马赛克的方法示例)
- ExtJs 中Viewport 的使用
- js获取子表单所有数据(JavaScript实现异步提交表单数据)
- 学好汉语拼音,从娃娃绕口令抓起,平时还是要多练 收藏好(从娃娃绕口令抓起)
- 仙女们的私藏鲜法大PK 鲜香切块牛肉(仙女们的私藏鲜法大PK)
- 天热没胃口 这道菜开胃又下饭,2个小技巧新手一学就会(这道菜开胃又下饭)
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
热门推荐
- 使用vue组件开发项目(Vue记事本实例详解)
- mysql参数说明(MySQL中你可能忽略的COLLATION实例详解)
- linux怎么设置php代码(linux Cron定时执行带参数的PHP代码)
- tomcat原理详解(解析Tomcat架构原理到架构设计)
- mysql怎么给查询权限(MySql设置指定用户数据库查看查询权限)
- nginx如何配置php项目(Nginx服务器究竟是怎么执行PHP项目)
- python在mysql创建数据库(python3对接mysql数据库实例详解)
- dataframe数据处理教程(对dataframe数据之间求补集的实例详解)
- pythonexcel报表实例(对python生成业务报表的实例详解)
- es6新增语法以及用法(ES6 解构赋值的原理及运用)