前言
在任何编程语言中,代码需要根据不同的条件在给定的输入中做不同的决定和执行相应的动作。
例如,在一个游戏中,如果玩家生命点为0,游戏结束。在天气应用中,如果在早上被查看,显示一个日出图片,如果是晚上,则显示星星和月亮。在这篇文章中,我们将探索JavaScript中所谓的条件语句如何工作。
如果你使用JavaScript工作,你将写很多包含条件调用的代码。条件调用可能初学很简单,但是还有比写一对对if/else更多的东西。这里有些编写更好更清晰的条件代码的有用提示。
1. 数组方法 Array.includes
使用 Array.includes 进行多条件选择
例如:
1
2
3
4
5
6
7
|
function printAnimals(animal) {
if (animal === 'dog' || animal === 'cat' ) {
console.log(I have a ${animal});
}
}
console.log(printAnimals( 'dog' )); // I have a dog
|
上面的代码看起来很好因为我们只检查了两个动物。然而,我们不确定用户输入。如果我们要检查任何其他动物呢?如果我们通过添加更多“或”语句来扩展,代码将变得难以维护和不清晰。
解决方案:
我们可以通过使用 Array.includes 来重写上面的条件
1
2
3
4
5
6
7
8
9
|
function printAnimals(animal) {
const animals = [ 'dog' , 'cat' , 'hamster' , 'turtle' ];
if (animals.includes(animal)) {
console.log(I have a ${animal});
}
}
console.log(printAnimals( 'hamster' )); // I have a hamster
|
这里,我们创建来一个动物数组,所以条件语句可以和代码的其余部分抽象分离出来。现在,如果我们想要检查任何其他动物,我们只需要添加一个新的数组项。
我们也能在这个函数作用域外部使用这个动物数组变量来在代码中的其他任意地方重用它。这是一个编写更清晰、易理解和维护的代码的方法,不是吗?
2. 提前退出 / 提前返回
这是一个精简你的代码的非常酷的技巧。我记得当我开始专业工作时,我在第一天学习使用提前退出来编写条件。
让我们在之前的例子上添加更多的条件。用包含确定属性的对象替代简单字符串的动物。
现在的需求是:
- 如果没有动物,抛出一个异常
- 打印动物类型
- 打印动物名字
- 打印动物性别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
const printAnimalDetails = animal => {
let result; // declare a variable to store the final value
// condition 1: check if animal has a value
if (animal) {
// condition 2: check if animal has a type property
if (animal.type) {
// condition 3: check if animal has a name property
if (animal.name) {
// condition 4: check if animal has a gender property
if (animal.gender) {
result = ${animal.name} is a ${animal.gender} ${animal.type};;
} else {
result = "No animal gender" ;
}
} else {
result = "No animal name" ;
}
} else {
result = "No animal type" ;
}
} else {
result = "No animal" ;
}
return result;
};
console.log(printAnimalDetails()); // 'No animal'
console.log(printAnimalDetails({ type: "dog" , gender: "female" })); // 'No animal name'
console.log(printAnimalDetails({ type: "dog" , name: "Lucy" })); // 'No animal gender'
console.log(
printAnimalDetails({ type: "dog" , name: "Lucy" , gender: "female" })
); // 'Lucy is a female dog'
|
你觉得上面的代码怎么样?
它工作得很好,但是代码很长并且维护困难。如果不使用lint工具,找出闭合花括号在哪都会浪费很多时间。