es6之更优雅的条件语句

在使用JavaScript时,条件判断是经常会用到的,一些简单的判断条件还可以接受,当遇到比较复杂多重条件时就比较恶心了。这里使用es6的小技巧使判断更优雅。

1、使用 Arrary.includes 处理多重条件(返回布尔值 true 或 false)

比如:

function test(fruit) {
  if (fruit == "apple" || fruit == "orange") {
    console.log("red");
  } else {
     console.log(‘blue‘)
  }
}

当两个条件时,还比较简单,但是当条件增多这种写法就太麻烦了。可以使用如下:

1 function test2(fruit) {
2   const redFruits = [‘apple‘, ‘cherry‘, ‘strawberry‘];
3   if(redFruits.includes(fruit)) {
4     console.log(‘red‘)
5   } else {
6     console.log(‘blue‘)
7   }
8 }

将条件放到一个数组中,简便了好多。

2、少写嵌套,尽早返回

为之前的例子添加两个条件:

如果没有提供水果,抛出错误。

如果水果数量大于10,则打印。

 1 function test3(fruit, quantity) {
 2   const redFruits = [‘apple‘, ‘cherry‘, ‘strawberry‘];
 3   if(!fruit) console.error(‘error‘);
 4   if(redFruits.includes(fruit)) {
 5     console.log(‘red‘);
 6     if(quantity > 10) {
 7       console.log(‘big quantity‘)
 8     }
 9   }
10 }
11
12 // test3(null)
13 // test3(‘apple‘)
14 test3(‘apple‘, 20)

test3

上面这个有问题,完全可以 写 并语句 && 。时刻记着 return 它可以阻止后面函数的执行。减少无必要的判断。

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

在JavaScript 中 我们经常需要检查 null 或 undefined 并赋予默认值。

1 function test4(fruit, quantity) {
2   if(!fruit) return;
3   const q = quantity || 0;
4   console.log(`we have ${q} ${fruit}!`)
5 }
6
7 test4(‘banana‘);  // we have 0 banana!
8 test4(‘apple‘, 3);  // we have 3 apple!

事实上,我们可以通过函数的默认参数来去掉变量q

1 function test5(fruit, quantity = 1) {
2   if(!fruit) return;
3   const q = quantity || 0;
4   console.log(`we have ${quantity} ${fruit}!`)
5 }
6 test5(‘banana‘);  // we have 1 banana!
7 test5(‘apple‘, 3);  // we have 3 apple!

注意:所有的函数参数都可以有默认值。

那如果fruit 是一个对象呢?如何使用默认值?

 1 function test6(fruit) {
 2   if(fruit && fruit.name) {
 3     console.log(fruit.name);
 4   } else {
 5     console.log(‘unknown‘)
 6   }
 7 }
 8 test6(undefined); // unknown
 9 test6({ });  // unknown
10 test6({name: ‘apple‘, color: ‘red‘}); // apple

上面是 当水果名字属性存在时,将其打印,否则打印 unknown。

我们可以通过默认参数 和 解构赋值的方法来避免 写出 fruit && fruit.name 这种条件。

1 // 解构 -- 只得到name属性。默认参数为空对象 {}
2 function test7({name} = {}) {
3   console.log(name || ‘unknown‘);
4 }
5 test7(undefined); // unknown
6 test7({ });  // unknown
7 test7({name: ‘apple‘, color: ‘red‘}); // apple

既然我们只需要fruit 的name属性,我们可以使用{name} 将其解构出来,之后在代码中就可以使用name代替fruit.name了。

我们还使用{}作为默认值,如果不使用默认值,当 undefined 时会报错。cannot destructure property name of ‘undefined‘ or ‘null‘。

注意:解构 ---- 只适用于对象。

4、相比 switch 、Map / Object 也许是更好地选择。

如下我们想要根据颜色打印水果:

 1 function test8(color) {
 2   switch(color) {
 3     case ‘red‘:
 4       return [‘apple‘, ‘strawberry‘];
 5     case ‘yellow‘:
 6       return [‘banana‘, ‘pineapple‘];
 7     case ‘purple‘:
 8       return [‘grape‘, ‘plum‘];
 9     default:
10       return [];
11   }
12 }
13 console.log(test8(null)); // []
14 console.log(test8(undefined)); // []
15 console.log(test8(‘red‘)); // [ ‘apple‘, ‘strawberry‘ ]

同样的结果可以通过对象字面量来实现,语法更简洁,如下:

 1 const fruitColor = {
 2   red: [‘apple‘, ‘strawberry‘],
 3   yellow: [‘banana‘, ‘pineapple‘],
 4   purple: [‘grape‘, ‘plum‘]
 5 };
 6 function test9(color) {
 7   return fruitColor[color] || [];
 8 }
 9 console.log(test9(null)); // []
10 console.log(test9(undefined)); // []
11 console.log(test9(‘red‘)); // [ ‘apple‘, ‘strawberry‘ ]

也可以使用Map来实现同样效果:

1 // 使用Map找到对应颜色的水果
2 const fruitColors = new Map().set(‘red‘, [‘apple‘, ‘strawberry‘]).set(‘yellow‘, [‘banana‘, ‘pineapple‘]).set(‘purple‘, [‘grape‘, ‘plum‘]);
3 function test10(color) {
4   return fruitColors.get(color) || [];
5 }
6 console.log(test10(null)); // []
7 console.log(test10(undefined)); // []
8 console.log(test10(‘red‘)); // [ ‘apple‘, ‘strawberry‘ ]

Map 是es6引入的新的对象类型,允许存放键值对。但是和json不一样,不能像 jsonObj.key 那样取值,会得到undefined。只能 mapObj.get(key) 取值。详细看Map。

还用一种 重构语法:

 1 const fruits = [
 2   {
 3     name: ‘apple‘,
 4     color: ‘red‘
 5   },
 6   {
 7     name: ‘banana‘,
 8     color: ‘yellow‘
 9   },
10   {
11     name: ‘grape‘,
12     color: ‘purple‘
13   },
14   {
15     name: ‘orange‘,
16     color: ‘yellow‘
17   }
18 ];
19 function test11(color) {
20   // 使用 Array.filter 方法
21   return fruits.filter(f => f.color == color)
22 }
23 console.log(test11(‘yellow‘)); // [ { name: ‘banana‘, color: ‘yellow‘ },{ name: ‘orange‘, color: ‘yellow‘ } ]

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

如下代码是要检查是否所有水果都是红色的:

1 function test12() {
2   let isAllRed = true;
3   for(let f of fruits) {
4     if(!isAllRed) break;
5     isAllRed = (f.color == ‘red‘);
6   }
7   console.log(isAllRed);
8 }
9 test12() // false

我们可以通过 Array.every 来减少代码量:

1 function test13() {
2   const isAllRed = fruits.every(f => f.color == ‘red‘);
3   console.log(isAllRed);
4 }
5 test13()  // false

类似的检查是否至少有一个是红色的,可以使用Array.some

1 function test14() {
2   const isAngRed = fruits.some(f => f.color == ‘red‘);
3   console.log(isAngRed)
4 }
5 test14() // true

后续 es6 一些 更加简单方便的方法再添加。

function test14() {

const isAngRed = fruits.some(f => f.color == ‘red‘);

console.log(isAngRed)

}

test14() // true

原文地址:https://www.cnblogs.com/xguoz/p/10146931.html

时间: 2024-11-03 04:57:26

es6之更优雅的条件语句的相关文章

C#中一种替换switch语句更优雅的写法

今天在项目中遇到了使用switch语句判断条件,但问题是条件比较多,大概有几十个条件,满屏幕的case判断,是否有更优雅的写法替代switch语句呢? 假设有这样的一个场景:商场经常会根据情况采取不同的打折方案,如果打折方案比较少,可以考虑使用switch语句作判断.但如果有几十甚至几百种打折方案的时候,用switch语句就不够优雅. 先来一个打折接口. public interface IValueProcessor { decimal DaZhe(short policy,decimal o

框架基础:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码

距离上一篇博客书写,又过去了大概几个月了,这段时间暂时离开了这个行业,让大脑休息一下.一个人旅行,一个人休息,正好也去完成一个目标 --- 拥有自己的驾照.当然,也把自己晒的黑漆马虎的.不过这一段时间虽然在技术上没有学太多东西,但是在心态上给了自己一个沉淀的机会,感觉自己变得更加沉稳和成熟,感觉这就是自己需要找到的自己,回归自我.好了,废话不多说了,虽然技术上没有学一些新的东西,但是欠的东西还是要补回来的.正如这篇博客,前端Promise规范的实现与ajax技术的集成,当时github上一个用户

JavaScript 复杂判断的更优雅写法

转发一篇文章,总结的很好: 前提 我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃肿,越来越看不懂,那么如何更优雅的写判断逻辑,本文带你试一下. 举个例子 先看一段代码 /** * 按钮点击事件 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 商品售罄 4 开团成功 5 系统取消 */ const o

【原创】基于.NET的轻量级高性能 ORM - TZM.XFramework 之让代码更优雅

[前言] 大家好,我是TANZAME.出乎意料的,我们在立冬的前一天又见面了,天气慢慢转凉,朋友们注意添衣保暖,愉快撸码.距离 TZM.XFramework 的首秀已数月有余,期间收到不少朋友的鼓励.建议和反馈,在此致以深深的感谢. 不少围观的朋友经常问题我,.NET 体系下优秀的 O/RM 官方的有EF,第三方的有linq2db (国外).StackExchange/Dapper (国外).NHibernate (国外).PetaPoco (国外).Freesql (国内)等等,What's

【Go语言】【8】GO语言的条件语句和选择语句

一.条件语句 条件语句即if-else语句,通常用来判断条件是否满足,下面通过猜价格游戏来了解条件语句: 1.猜价格游戏 假如有一件商品价格为81元,在[0,100]范围之内 系统请猜测者输入一个价格 猜测者:50 系统提示:低了 猜测者:87 系统提示:高了 猜测者:83 系统提示:高了 猜测者:81 系统提示:恭喜您猜对了 最终效果如下图: 2.猜价格代码实现 package main import ( "fmt" "math/rand" "time&

「8」条件语句

1.简单if语句 ●语法 if.else属于条件分支语句 if (条件) { ←条件表达式或逻辑表达式 //语句1 ←条件成立:执行语句1 } else { //语句2 ←条件不成立:执行语句2 } ●要点 程序流程有三: ●顺序执行 ●选择执行 ●循环执行 条件分支语句用于选择执行.可以只有单独if语句而没有else语句.当if语句块中只有一条指令的时候,可以省略大括号(不推荐使用,尽量使用大括号).if-else语句可以嵌套. ●流程图 ●条件表达式(简化的if-else语句) 条件表达式由

javascript语句——条件语句、循环语句和跳转语句

× 目录 [1]条件语句 [2]循环语句 [3]跳转语句 前面的话 默认情况下,javascript解释器依照语句的编写顺序依次执行.而javascript中的很多语句可以改变语句的默认执行顺序.本文介绍可以改变语句默认执行顺序的条件语句.循环语句和跳转语句 条件语句 脚本的威力体现在它们可以根据人们给出的各种条件做出决策,javascript使用条件语句来做判断 条件语句(conditianal statement)通过判断表达式的值来决定执行还是跳过某些语句,包括if语句和switch语句

Swift 条件语句

条件语句 根据特定的条件执行特定的代码通常是十分有用的,例如:当错误发生时,你可能想运行额外的代码:或者,当输入的值太大或太小时,向用户显示一条消息等.要实现这些功能,你就需要使用条件语句. Swift 提供两种类型的条件语句:if语句和switch语句.通常,当条件较为简单且可能的情况很少时,使用if语句.而switch语句更适用于条件较复杂.可能情况较多且需要用到模式匹配(pattern-matching)的情境. If if语句最简单的形式就是只包含一个条件,当且仅当该条件为true时,才

[玩转SQL]:02 条件语句与排序

SELECT 更高的用法可以使用WHERE提供查询条件. WHERE语句 语法: SELECT * | {[DISTINCT] column|expression [alias]...} FROM   table [WHERE condition(s)]; 通过WHERE后边子句的表达返回True or False来判断是否满足条件. WHERE子句不可以使用别名. WHERE通常跟在FROM后边. --查询deparment_id为90的列 SELECT employee_id,last_na