JavaScript条件语句与循环语句

176 阅读6分钟

之前的文章中在区块部分有提到循环语句,今天就来详细聊聊条件语句和循环语句的语法、作用和使用场景。

1.条件语句

在JavaScript中,有if 和Switch两种条件语句,即如果满足其中的条件就会执行相应的语句。

if结构

if结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。所谓布尔值,指的是 JavaScript 的两个特殊值,true表示“真”,false表示“伪”。为true时就会执行后面的语句,为false时则跳过后面的语句

if (布尔值){
  语句;
}

// 或者if (布尔值) 语句;适用于语句简单的情况
if(true){ //为true时执行console.log(123),从而打印123
    console.log(123)
}

if( 2 > 3) { //因为括号内表达式的结果是false,所以不会执行之后的语句
    console.log(123)
} 

if ... else 结构

在if结构后面加上else代码块,代表不满足if中的条件时执行else中的代码

if( 2 > 3) {
    console.log(123)
} else {
    console.log(456)
}

还是拿上一个 2 > 3举例。因为不满足if中的条件,那么就会执行console.log(456)从而打印456。
对同一个变量进行多次判断时,多个if...else语句可以连写在一起。

if (grade > 80) {
  // ...
} else if (grade > 60) {
  // ...
} else if (grade === 60) {
  // ...
} else {
  // ...
}

switch 结构

上述多个if ... else连用的情况可以用Switch结构取代

let fruit = 'banana'
switch (fruit) {
  case "banana":
  //满足banana情况下的执行代码
   console.log('banana')
   break;
  case "apple":
  //满足apple情况下的执行代码
  console.log('apple')
    break;
  default:
    // 默认内容
    console.log('该水果不是香蕉或苹果')
}

执行上述代码我们可以很明显的知道它会执行这一段代码:console.log('banana'),从而打印banana。因为fruit的值是banana,满足case是banana的条件分支。如果所有的case都不符合的话会执行default中的语句
注意,每个case代码块内部的break语句不能少,否则会接下去执行下一个case代码块,而不是跳出switch结构,从而陷入无限循环。
当然了,switch语句部分和case语句部分也可以是表达式。例如下面的代码,是永远不会执行default代码块中的代码的:

switch (1 + 1) {
  case 2:
    console.log(2)
    break;
  default:
    console.log('打印默认值')
}

break 语句和 continue 语句

在上述的switch条件结构中我们有看到break,它的作用想必大家都已经猜到了,就是跳出代码块和循环。这里就简单介绍一下break语句以及有着类似效果的continue语句。两者都具有跳转的作用,可以不让代码按照既定的顺序执行。
for循环中使用break语句跳出循环。

for (var i = 0; i < 10; i++) {
    console.log(i);
    if (i === 3){
        break;
    }
}
//上述代码只会执行到3就跳出循环 故打印结果为 0 1 2 3

在while循环中使用break

var i = 0;

while(i < 100) {
  console.log(i);
  i++;
  if (i === 5) break;
}
//上述代码只会执行5次就跳出循环

continue语句则用于立刻终止本轮循环,开始下一轮新的循环。可以理解为跳过本次循环,继续下一轮循环。我们来举个例子:
你邀请了一些朋友参加聚会,你会给他们准备巧克力作为小礼物。而出于安全性考虑,决定不给那些带了宠物的朋友分发礼物,以免宠物误食巧克力对其造成一定的副作用。这时我们可以用continue对到达的朋友进行筛选,如果朋友带了宠物,则跳过发放礼物的环节,继续给下一位朋友发放。
我们可以使用对象数组定义参会朋友,并通过hasPet字段判断其有没有带宠物。

let guests = [
    { name: "Alice", hasPet: true },
    { name: "Bob", hasPet: false },
    { name: "Carol", hasPet: false },
    { name: "Dave", hasPet: true },
    { name: "Eve", hasPet: false }
];

console.log("分发聚会礼物:");

for (let i = 0; i < guests.length; i++) {
    if (guests[i].hasPet) { //判断朋友带了宠物
        console.log(guests[i].name + " 带了宠物,跳过分发礼物。");
        continue; // 跳过这位带宠物的朋友
    }
    // 为没有带宠物的朋友准备礼物
    console.log("给 " + guests[i].name + " 一份礼物。");
}

运行结果:
分发聚会礼物:
Alice 带了宠物,跳过分发礼物。
给 Bob 一份礼物。
给 Carol 一份礼物。
Dave 带了宠物,跳过分发礼物。
给 Eve 一份礼物。

2.循环语句

循环语句用于重复执行一段代码块,直到指定的条件不再满足。这对于处理数组、对象集合或执行任何重复任务时非常有用。

for循环

这是最常见的循环形式,用于当你知道循环应该执行的次数时。它包含三个部分:初始化表达式、条件表达式和递增表达式。

  • 初始化表达式:确定循环变量的初始值,只在循环开始时执行一次。
  • 条件表达式:每轮循环开始时,都要执行这个条件表达式,只有值为真,才继续进行循环。
  • 递增表达式:每轮循环的最后一个操作,通常用来递增循环变量。
for (初始化表达式; 条件表达式; 递增表达式) {
  语句
}
for (let i = 0; i < 10; i++) {
    console.log(i); //输出0 1 2 3 4 5 6 7 8 9 
}

在这个例子中,循环从0开始计数,增加到9。每次循环增加1。
所有的for循环都可以改写为while循环:

var x = 10
while( i < x){
    console.log(i)
    i++
}

for语句的三个部分,可以省略任何一个,也可以全部省略。下列代码省略了for语句表达式的三个部分,结果就导致了一个无限循环。

for ( ; ; ){
  console.log('无限循环');
}

while循环

while语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。

while (条件) {
  语句;
}

例如:
var i= 0while( i < 10){
    console.log(i)
    i = i + 1
}

//上述代码块中的语句会循环执行10次,直到i = 10不满足条件时退出循环

do...while循环

与while循环不同的是do...while会先执行一次循环体,然后再进行循环。该循环最大的特点就是不论条件是真是假,循环都至少会执行一次,需要注意的是,while后的分号;不能省略

do {
  语句
} while (条件);

例如:
var x = 10;
var i = 0;

do {
  console.log(i);
  i++;
} while(i < x);