MK
摩柯社区 - 一个极简的技术知识社区
AI 面试

JavaScript中的条件语句与循环结构

2024-09-276.9k 阅读

JavaScript 中的条件语句

在 JavaScript 编程中,条件语句允许我们根据不同的条件执行不同的代码块。这为程序增加了灵活性,使其能够根据特定情况做出决策。

if 语句

if 语句是最基本的条件语句。它的语法如下:

if (condition) {
    // 如果 condition 为 true,执行这里的代码
}

这里的 condition 是一个布尔表达式,它可以是比较运算、逻辑运算等结果为 truefalse 的表达式。例如:

let num = 10;
if (num > 5) {
    console.log('数字大于 5');
}

在这个例子中,变量 num 的值为 10num > 5 的结果为 true,所以会执行 console.log('数字大于 5'); 这行代码,输出“数字大于 5”。

if...else 语句

if...else 语句在 if 语句的基础上增加了另一个分支,当 conditionfalse 时执行 else 块中的代码。语法如下:

if (condition) {
    // 如果 condition 为 true,执行这里的代码
} else {
    // 如果 condition 为 false,执行这里的代码
}

例如:

let age = 18;
if (age >= 18) {
    console.log('你已经成年');
} else {
    console.log('你还未成年');
}

这里变量 age18age >= 18true,所以输出“你已经成年”。如果 age 的值小于 18,则会输出“你还未成年”。

if...else if...else 语句

当需要根据多个条件进行判断时,可以使用 if...else if...else 语句。它的语法如下:

if (condition1) {
    // 如果 condition1 为 true,执行这里的代码
} else if (condition2) {
    // 如果 condition1 为 false 且 condition2 为 true,执行这里的代码
} else {
    // 如果所有条件都为 false,执行这里的代码
}

例如,根据学生的成绩给出不同的评价:

let score = 85;
if (score >= 90) {
    console.log('优秀');
} else if (score >= 80) {
    console.log('良好');
} else if (score >= 60) {
    console.log('及格');
} else {
    console.log('不及格');
}

在这个例子中,score85score >= 90falsescore >= 80true,所以输出“良好”。

三元运算符(条件运算符)

三元运算符是 if...else 语句的一种简洁写法。它的语法是:

condition? expression1 : expression2;

如果 conditiontrue,则返回 expression1 的值;如果 conditionfalse,则返回 expression2 的值。例如:

let num = 10;
let result = num > 5? '大于 5' : '小于等于 5';
console.log(result);

这里 num > 5true,所以 result 的值为“大于 5”,最终输出“大于 5”。

switch...case 语句

switch...case 语句用于基于不同的条件执行不同的代码块。它比较一个表达式的值与多个 case 的值,语法如下:

switch (expression) {
    case value1:
        // 如果 expression 的值等于 value1,执行这里的代码
        break;
    case value2:
        // 如果 expression 的值等于 value2,执行这里的代码
        break;
    default:
        // 如果 expression 的值与所有 case 的值都不相等,执行这里的代码
}

例如,根据星期几输出不同的信息:

let day = 3;
switch (day) {
    case 1:
        console.log('星期一');
        break;
    case 2:
        console.log('星期二');
        break;
    case 3:
        console.log('星期三');
        break;
    case 4:
        console.log('星期四');
        break;
    case 5:
        console.log('星期五');
        break;
    case 6:
        console.log('星期六');
        break;
    case 7:
        console.log('星期日');
        break;
    default:
        console.log('无效的日期');
}

这里 day 的值为 3,所以会输出“星期三”。注意 break 关键字的作用,它用于终止 switch 语句的执行,如果没有 break,程序会继续执行下一个 case 的代码,直到遇到 breakswitch 结束。例如:

let num = 2;
switch (num) {
    case 1:
        console.log('一');
    case 2:
        console.log('二');
    case 3:
        console.log('三');
}

在这个例子中,num 的值为 2,由于没有 break,程序会输出“二”“三”。

JavaScript 中的循环结构

循环结构允许我们重复执行一段代码,直到满足特定条件为止。JavaScript 提供了多种循环结构,每种都有其适用场景。

for 循环

for 循环是最常用的循环结构之一,它用于已知循环次数的情况。语法如下:

for (initialization; condition; increment) {
    // 循环体代码
}
  • initialization:初始化变量,通常是一个计数器,只在循环开始时执行一次。
  • condition:循环条件,每次循环开始前检查此条件,如果为 true,则执行循环体;如果为 false,则终止循环。
  • increment:每次循环结束后执行的操作,通常是对计数器的增加或减少。

例如,输出 1 到 10 的数字:

for (let i = 1; i <= 10; i++) {
    console.log(i);
}

在这个例子中,let i = 1 初始化变量 i1i <= 10 是循环条件,只要 i 小于等于 10 就继续循环,i++ 每次循环结束后将 i 的值增加 1

for 循环还可以用于遍历数组。例如:

let fruits = ['苹果', '香蕉', '橙子'];
for (let i = 0; i < fruits.length; i++) {
    console.log(fruits[i]);
}

这里通过 for 循环遍历 fruits 数组,i 作为索引,依次输出数组中的每个元素。

while 循环

while 循环用于在条件为 true 时重复执行代码块。语法如下:

while (condition) {
    // 循环体代码
}

例如,计算 1 到 100 的累加和:

let sum = 0;
let i = 1;
while (i <= 100) {
    sum += i;
    i++;
}
console.log(sum);

在这个例子中,i <= 100 是循环条件,只要 i 小于等于 100,就执行 sum += ii 的值累加到 sum 中,然后 i++ 增加 i 的值。

while 循环需要注意避免死循环,即条件永远为 true 的情况。例如:

// 以下代码会导致死循环
while (true) {
    console.log('这是一个死循环');
}

这样的代码会一直输出“这是一个死循环”,除非强制终止程序。

do...while 循环

do...while 循环与 while 循环类似,但它先执行一次循环体,然后再检查条件。语法如下:

do {
    // 循环体代码
} while (condition);

例如:

let num = 0;
do {
    console.log(num);
    num++;
} while (num < 5);

在这个例子中,首先会执行一次 console.log(num)num++,然后检查 num < 5 的条件。如果条件为 true,则继续循环;如果为 false,则终止循环。所以会输出 0 1 2 3 4

循环中的 break 和 continue 关键字

  • break 关键字:用于立即终止循环。例如:
for (let i = 1; i <= 10; i++) {
    if (i === 5) {
        break;
    }
    console.log(i);
}

在这个例子中,当 i 等于 5 时,执行 break 关键字,循环立即终止,所以只会输出 1 2 3 4

  • continue 关键字:用于跳过当前循环的剩余部分,直接进入下一次循环。例如:
for (let i = 1; i <= 10; i++) {
    if (i === 5) {
        continue;
    }
    console.log(i);
}

这里当 i 等于 5 时,执行 continue,跳过 console.log(i) 这一行,直接进入下一次循环,所以会输出 1 2 3 4 6 7 8 9 10

嵌套循环

在 JavaScript 中,我们可以在一个循环内部再嵌套另一个循环,这称为嵌套循环。最常见的是在 for 循环中嵌套 for 循环。例如,打印九九乘法表:

for (let i = 1; i <= 9; i++) {
    for (let j = 1; j <= i; j++) {
        let result = i * j;
        process.stdout.write(`${j}×${i}=${result}\t`);
    }
    console.log();
}

在这个例子中,外层 for 循环控制行数,内层 for 循环控制每行的乘法运算数量。process.stdout.write 用于在同一行输出内容,\t 是制表符用于对齐,console.log() 用于换行。

嵌套循环也可以用于处理多维数组。例如,二维数组的遍历:

let matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];
for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
        console.log(matrix[i][j]);
    }
}

这里外层 for 循环遍历二维数组的行,内层 for 循环遍历每行中的元素。

循环的性能优化

在使用循环时,性能是一个需要考虑的因素。以下是一些优化建议:

  • 减少循环内的计算:将可以在循环外计算的表达式放在循环外。例如:
// 不好的写法
for (let i = 0; i < array.length; i++) {
    let result = complexCalculation() * anotherCalculation();
    // 其他操作
}

// 好的写法
let factor1 = complexCalculation();
let factor2 = anotherCalculation();
for (let i = 0; i < array.length; i++) {
    let result = factor1 * factor2;
    // 其他操作
}
  • 避免不必要的嵌套循环:如果可以通过其他方式解决问题,尽量避免使用多层嵌套循环,因为嵌套循环的时间复杂度会随着层数增加而迅速增长。例如,在某些情况下,可以使用 mapfilter 等数组方法替代嵌套循环来处理数组。
  • 使用更高效的循环类型:对于已知循环次数的情况,for 循环通常比 while 循环更高效,因为 for 循环的初始化、条件判断和递增操作在同一行,更容易被编译器优化。

条件语句与循环结构的结合使用

在实际编程中,条件语句和循环结构常常结合使用,以实现更复杂的逻辑。

在循环中使用条件语句

例如,在遍历数组时,只处理满足特定条件的元素。假设我们有一个数组,需要找出其中所有的偶数并计算它们的和:

let numbers = [1, 2, 3, 4, 5, 6];
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] % 2 === 0) {
        sum += numbers[i];
    }
}
console.log(sum);

这里在 for 循环中使用 if 语句判断数组元素是否为偶数,如果是则累加到 sum 中。

在条件语句中使用循环

比如,根据用户输入的数字,决定是否执行一个循环操作。例如,用户输入一个数字,如果这个数字大于 10,就输出从 1 到该数字的所有奇数:

let num = parseInt(prompt('请输入一个数字'));
if (num > 10) {
    for (let i = 1; i <= num; i += 2) {
        console.log(i);
    }
}

这里先通过 if 语句判断用户输入的数字是否大于 10,如果是,则使用 for 循环输出从 1 到该数字的所有奇数。

总结

条件语句和循环结构是 JavaScript 编程中非常重要的组成部分。条件语句让程序能够根据不同情况做出决策,而循环结构则实现了代码的重复执行,提高了代码的效率和可维护性。通过合理地使用这些结构,并注意性能优化,我们可以编写出高效、健壮的 JavaScript 程序。无论是简单的脚本还是复杂的 Web 应用程序,对条件语句和循环结构的熟练掌握都是必不可少的。在实际编程中,不断练习和积累经验,能够更好地运用它们来解决各种问题。

希望这篇文章能帮助你深入理解 JavaScript 中的条件语句与循环结构,并在实际编程中灵活运用。如果你还有其他问题或需要进一步的学习,欢迎继续探索相关的技术文档和教程。