一、条件语句

       1,使用 Array.includes 来处理多重 || 条件         

// ----- 一般 ------if (fruit == 'apple' || fruit == 'strawberry' || fruit == 'banana'  ) {console.log('red');}//------- 优雅 ------// 把条件提取到数组中const redFruits = ['apple', 'strawberry', 'banana', 'cranberries']; if (redFruits.includes(fruit)) { console.log('red'); }

       

        2,少写嵌套,无效条件尽早返回

/_ 当发现无效条件时尽早返回 _/
function test(fruit, quantity) {const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];if (!fruit) thrownewError('No fruit!'); // 条件 1:尽早抛出错误if (!redFruits.includes(fruit)) return; // 条件 2:当 fruit 不是红色的时候,直接返回console.log('red');// 条件 3:必须是大量存在if (quantity > 10) {console.log('big quantity');}
}

     

      3,使用函数默认参数和解构

// -------   默认参数  一般   -------function test(fruit, quantity) {if (!fruit) return;const q = quantity || 1; // 如果没有提供 quantity,默认为 1console.log(`We have ${q}${fruit}!`);
}// -------   默认参数  优雅   -------function test(fruit, quantity = 1) { // 如果没有提供 quantity,默认为 1if (!fruit) return;console.log(`We have ${quantity}${fruit}!`);
}// -------   解构  一般   -------function test(fruit) { // 如果有值,则打印出来if (fruit && fruit.name)  {console.log (fruit.name);} else {console.log('unknown');}
}// -------   解构  优雅   -------// 解构 —— 只得到 name 属性// 默认参数为空对象 {}function test({name} = {}) {console.log (name || 'unknown');}

     

      4,相较于 switch,Map / Object 也许是更好的选择

//------   switch   一般 ---------function test(color) {// 使用 switch case 来找到对应颜色的水果switch (color) {case 'red':return ['apple', 'strawberry'];case 'yellow':return ['banana', 'pineapple'];case 'purple':return ['grape', 'plum'];default:return [];}
}// -----  Object   优雅 -----// 使用对象字面量来找到对应颜色的水果const fruitColor = {red: ['apple', 'strawberry'],yellow: ['banana', 'pineapple'],purple: ['grape', 'plum']};function test(color) {return fruitColor[color] || [];}// -----  Map   优雅 -----// 使用 Map 来找到对应颜色的水果const fruitColor = newMap().set('red', ['apple', 'strawberry']).set('yellow', ['banana', 'pineapple']).set('purple', ['grape', 'plum']);function test(color) {return fruitColor.get(color) || [];}// -----  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 test(color) {// 使用 Array filter 来找到对应颜色的水果return fruits.filter(f => f.color == color);
}

      5,使用 Array.every 和 Array.some 来处理全部/部分满足条件

// -------   直接优雅 --------
const fruits = [{ name: 'apple', color: 'red' },{ name: 'banana', color: 'yellow' },{ name: 'grape', color: 'purple' }];
function test() {// 条件:(简短形式)所有的水果都必须是红色const isAllRed = fruits.every(f => f.color == 'red');// 条件:至少一个水果是红色的const isAnyRed = fruits.some(f => f.color == 'red');console.log(isAllRed); // false
}

js 进阶篇 代码等级提升相关推荐

  1. web前端开发分享js进阶篇

    js进阶篇: js进阶,等妙味看的差不多,心里难免痒痒,看老师用尽可能少的代码来实现了众多以前没法实现的动态效果.然后自己想写,但不知道写啥东西,下面就这个问题做以建议,写这些东西的目的有这么几个,一 ...

  2. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...

  3. cytoscape.js进阶篇

    cytoscape.js进阶篇 系列文章 前言 cytoscape依赖引用 cytoscape扩展依赖引用 升级Cytoscape组件 扩展Cytoscape组件模板容器 扩展Cytoscape组件方 ...

  4. js 定时网页点击_前端面试题整合(JS进阶篇)(二)

    Ajax 是什么? 如何创建一个Ajax? AJAX全称是Asychronous JavaScript And Xml(异步的 JavaScript 和 XML) 它的作用是用来实现客户端与服务器端的 ...

  5. JS进阶篇--JS数组reduce()方法详解及高级技巧

    基本概念 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被 ...

  6. JS进阶篇--JS数组reduce()方法详解及高级技巧 1

    基本概念 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被 ...

  7. JS进阶篇--ckplayer.js视频播放插件

    网页中常见的功能就是播放视频,下面介绍的这个ckplayer.js既可以在pc端播放,也可以在手机网页上播放. 可调用flash也可以调用html5播放器: <div id="a1&q ...

  8. Three.js进阶篇之4 - 着色器

    "渲染"(Rendering)是即使非计算机专业的都不会觉得陌生的词,虽然在很多人说这个词的时候,并不清楚"渲染"究竟意味着什么.相反,"着色器&qu ...

  9. js 定时网页点击_前端面试题熬夜吐血(js进阶篇)

    Ajax 是什么? 如何创建一个Ajax? AJAX全称是Asychronous JavaScript And Xml(异步的 JavaScript 和 XML) 它的作用是用来实现客户端与服务器端的 ...

最新文章

  1. 我写代码的十八般兵器!
  2. 用Python实现Gauss-Jordan求逆矩阵
  3. java处理oom_java处理OOM和SOF
  4. python处理u开头的字符串
  5. 彻底解决_OBJC_CLASS_$_某文件名, referenced from:问题
  6. coach和mentor,教练和导师的区别
  7. 比较文本差异的工具_Linux 开发的五大必备工具 | Linux 中国
  8. linux怎么检测文件完整性,Linux如何基于AIDE检测文件系统完整性
  9. mysql复杂查询sql_mysql – 复杂的SQL查询,很多很多
  10. mmseg 同义词分析器 SolrSynonymParser
  11. 晶振 Crystal
  12. 2020年中国洪涝受灾人口数、死亡失踪人口数、倒塌房屋数量及造成的直接经济损失分析[图]
  13. 金融时间序列及Matlab实现
  14. STM32F401CCU6移植华为LiteOS
  15. Unity-Animator深入系列---测试CrossFade和CrossFadeInFixedTime
  16. rimraf node_modules 删除报错 rimraf : 无法加载文件
  17. 解决WARNING: Ignoring invalid distribution -pencv-python (c:\users\lhw\anaconda3\lib\site-packages)
  18. 心情不好 多吃香蕉或葡萄
  19. ESMap平台在线开发工具介绍-易景空间地图
  20. java 使用HttpC'lient 解析webService

热门文章

  1. Matplotlib(二)绘图生命周期
  2. 数据结构(五)---栈的链式存储的实现---java版
  3. 一道SQL面试题(行列互换)
  4. python3爬虫初探(四)之文件保存
  5. python学习笔记(十二)标准库os
  6. Akka框架——第一节:并发编程简介
  7. PU learning学习笔记
  8. Java TheadLocal
  9. 解析JavaScript中的字符串类型与字符编码支持
  10. Entity Framework 6 Recipes 2nd Edition(9-2)译-用WCF更新单独分离的实体