JavaScript语法基础学习——运算符&分支和循环结构

目录


一、JavaScript 运算符

1. 运算符

运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算术运算等功能的符号。
JavaScript中常用的运算符有:

  • 算术运算符
  • 递增和递减运算符
  • 比较运算符
  • 逻辑运算符
  • 赋值运算符

2. 算术运算符

2.1 算术运算符概述

概念:算术运算使用的符号,用于执行两个变量或值的算术运算。
请添加图片描述

2.2 浮点数的精度问题

浮点数值的最高精度是17位小数,但在进行算术计算时其精度远远不如整数。

  • 浮点数在算术运算中会有问题
    请添加图片描述
    所以,不要直接判断两个浮点数是否相等!

2.3 表达式和返回值

表达式: 是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合
简单理解:是由数字、运算符、变量等组成的式子
表达式最终都会有一个结果,返回给我们,我们称为 返回值

  • 在程序里面 2 = 1 + 1 把右边的表达式计算完毕后把返回值赋值给左边

3. 递增和递减的运算符

3.1 递增和递减的运算符概述

如果需要反复给数字变量加上或减去1,可以使用 递增( ++ )递减( – ) 运算符来完成。
在JavaScript中,递增( ++ )和递减( – )既可以放在变量前面,也可以放在变量后面。放在变量前面时,我们可以称为前置递增(递减)运算符放在变量后面时,我们可以称为后置递增(递减)运算符
Tip: 递增和递减运算符必须和变量配合使用。

3.2 递增运算符

3.2.1 前置递增运算符

++num 前置递增,就是自加1,类似于 num = num + 1,但是++num写起来更简单。
使用口诀:先自加,后返回值

3.2.2 后置递增运算符

num++ 后置递增,就是自加1,类似于 num = num + 1,但是num++ 写起来更简单。
使用口诀:先返回值,后自加

  • 前置递增和后置递增如果单独使用效果是一样的
  • var num = 10;
    console.log(++num + 10); // 21 console.log(num++ + 10); // 20 num都变为11

3.2.3 递增运算符练习

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>递增运算符练习</title>
    <script>
        // 前置递增
        var a = 10;
        ++a; // ++a = 11    a = 11
        var b = ++a + 2; // a=12    ++a = 12
        console.log(b); // 14

        // 后置递增 先表达式返回原值 后面变量再自加1
        var c = 10;
        c++; // c++ = 11    c = 11
        var d = c++ + 2; //c++ = 11    c = 12
        console.log(d); // 13

        var e = 10;
        var f = e++ + ++e; //1. e++ = 10,e = 11 2. ++e = 12,e = 12
        console.log(f); // 22
    </script>
</head>

<body>

</body>

</html>

3.3 前置递增和后置递增小结

请添加图片描述

4. 比较运算符

4.1 比较运算符概述

概念: 比较运算符(关系运算符)是两个数据进行比较时所使用的运算符,比较运算后,会返回一个布尔值(true / false)作为比较运算的结果。
请添加图片描述

4.2 = 小结

请添加图片描述

  • 等于符号( == )默认会转换数据类型,会把字符串型的数据转换为数字型。只要求值相等就可以。
  • 全等符号( === )要求两侧的值还有数据类型完全一致才可以 true

请添加图片描述

5. 逻辑运算符

5.1 逻辑运算符概述

概念:逻辑运算符是用来进行布尔值运算的运算符,其返回值也是布尔值。后面开发中经常用于多个条件的判断
请添加图片描述

5.2 逻辑与 &&

两边都是true才返回true,否则返回false
请添加图片描述

5.3 逻辑或 ||

两边都是false才返回false,否则返回true
请添加图片描述

5.4 逻辑非 !

逻辑非( )也叫作取反符,用来取一个布尔值相反的值,如true的相反值是false
请添加图片描述

5.5 短路运算(逻辑中断)

短路运算的原理: 当有多个表达式(值)时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。

5.5.1 逻辑与

  • 语法:表达式1 && 表达式2
  • 如果第一个表达式的值为真,则返回表达式2
  • 如果第一个表达式的值为假,则返回表达式1
  • 如果是空的或者否定的 (0、’ '、null、undefined、NaN),其余为真的

5.5.2 逻辑或

  • 语法:表达式1 || 表达式2
  • 如果第一个表达式的值为真,则返回表达式1
  • 如果第一个表达式的值为假,则返回表达式2

请添加图片描述
逻辑中断很重要,它会影响我们程序的运行结果
请添加图片描述

6. 赋值运算符

概念:用来把数据赋值给变量的运算符。
请添加图片描述
请添加图片描述

7. 运算符优先级

请添加图片描述

  • 一元运算符(只有一个操作数)里面的逻辑非优先级很高
  • 逻辑与比逻辑或优先级高

二、JavaScript 流程控制-分支

1. 流程控制

在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能。
简单理解:流程控制就是来控制我们的代码按照什么结构顺序来执行
流程控制主要有三种结构,分别是顺序结构分支结构循环结构,这三种结构代表三种代码执行的顺序。
请添加图片描述

2. 顺序流程控制

顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

3. 分支流程控制 if 语句

3.1 分支机构

由上到下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果
JS语言提供了两种分支结构语句

  • if 语句
  • switch 语句

3.2 if 语句

3.2.1 语法结构

请添加图片描述
语句可以理解为一个行为,循环语句和分支语句就是典型的语句。一个程序由很多个语句组成,一般情况下,会分割成一个一个的语句。

3.3.2 if else语句(双分支语句)

语法结构
请添加图片描述

3.2.3 案例1:进入网吧

弹出一个输入框,要求用户输入年龄,如果年龄大于等于18岁,允许进入网吧。

案例分析
请添加图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>进入网吧案例</title>
    <script>
        var age = prompt('请输入您的年龄:');
        if (age >= 18) {
            alert('请进入网吧');
        } else {
            alert('小屁孩,你还未成年了,不能进入网吧哦。');
        }
    </script>
</head>

<body>

</body>

</html>

请添加图片描述

3.2.4 案例2:判断闰年

接收用户输入的年份,如果是闰年就弹出闰年,否则弹出是平年
请添加图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>判断闰年案例</title>
    <script>
        var year = prompt('请输入您要检测的年份:');
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            alert(year + '年是闰年');
        } else {
            alert(year + '年是平年');
        }
    </script>
</head>

<body>

</body>

</html>

请添加图片描述

3.2.5 if else if 语句(多分支语句)

语法结构
请添加图片描述
请添加图片描述

3.2.6 案例:判断成绩级别

请添加图片描述
请添加图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>判断成绩级别案例</title>
    <script>
        var score = prompt('请输入您的成绩:');
        if (score >= 90) {
            alert('您的成绩级别为 A');
        } else if (score >= 80) {
            alert('您的成绩级别为 B');
        } else if (score >= 70) {
            alert('您的成绩级别为 C');
        } else if (score >= 60) {
            alert('您的成绩级别为 D');
        } else {
            alert('您的成绩级别为 E');
        }
    </script>
</head>

<body>

</body>

</html>

请添加图片描述

4. 三元表达式

三元表达式也能做一些简单的条件选择。有三元运算符组成的式子称为三元表达式

4.1 语法结构

条件表达式 ? 表达式1 : 表达式2

4.2 执行思路

如果条件表达式结果为真,则返回表达式1的值。如果条件表达式结果为假,则返回表达式2的值

4.3 代码体验

以下代码展示将省略HTML代码框架

var num = 10;
var result = num > 5 ? '是的' : '不是的'; // 表达式是有返回值的 
console.log(result); // result = '是的'
// if (num > 5) {
//		result = '是的';
//} else {
//		result = '不是的';
//}

4.4 案例:数字补0

用户输入数字,如果数字小于10,则在前面补0,比如01,09,如果数字大于10,则不需要补,比如20。
请添加图片描述

var time = prompt('请您输入一个 0 ~ 59 之间的一个数字');
// 三元表达式 用拼接的方法来补0
var result = time < 10 ? '0' + time : time; // 把返回值赋值给一个变量
alert(result);

请添加图片描述

5. 分支流程控制 switch 语句

5.1 语法结构

switch语句也是多分支语句,它用于基于不同的条件执行不同的代码。当要针对变量设置一系列的特定值的选项时,就可以使用switch。
请添加图片描述

5.2 注意事项

  • 在开发里,我们经常把括号里的表达式写成变量
  • 变量的值和case里面的值相匹配时必须是 全等( === )才行。必须是值和数据类型一致才可以
  • 如果匹配到的case里面没有break,则不会退出switch,而是继续执行下一个case,直至遇到break或全部执行完

5.3 案例:查询水果

用户在弹出框里面输入一个水果,如果有就弹出该水果的价格,如果没有该水果就弹出“没有此水果”。

var fruit = prompt('请输入您要查询的水果:');
switch (fruit) {
    case '苹果':
        alert('苹果的价格是 3.5元/斤');
        break;
    case '榴莲':
        alert('榴莲的价格是 20元/斤');
        break;
    case '香蕉':
        alert('香蕉的价格是 2元/斤');
        break;
    case '车厘子':
        alert('车厘子的价格是 35元/斤');
        break;
    default:
        alert('没有此水果');
}

请添加图片描述

5.4 switch 语句和if else if 语句的区别

请添加图片描述

三、JavaScript 流程控制-循环

1. 循环

1.1 循环的目的

循环目的

  • 在实际问题中,有许多具有规律性的重复操作,因此在程序中要完成这类操作就需要重复执行某些语句

1.2 JS中的循环

在JS中,主要有三种类型的循环语句:

  • for 循环
  • while 循环
  • do…while 循环

2. for 循环

在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件。由循环体及循环的终止条件组成的语句,被称之为 循环语句

2.1 语法结构

for 循环主要用于把某些代码循环若干次,通常跟计数有关系。其语法结构如下:
请添加图片描述

  1. for 重复执行某些代码,通常跟计数有关系
  2. 初始化变量 就是用var 声明的一个普通变量,通常用作为计数器使用
  3. 条件表达式 就是用来决定每一次循环是否继续执行,就是终止条件
  4. 操作表达式 是每次循环最后执行的代码 经常用于我们计数器变量进行更新(递增或递减)

2.2 for循环的执行过程

for (var i = 1; i <= 100; i++) {
    console.log('你好');
}
  1. 首先执行里面的 计数器变量,var i = 1,但是这个代码在for循环里面 只执行一次
  2. 然后到 条件表达式 i <= 100 来判断是否满足条件,如果满足条件就执行循环体,否则退出循环
  3. 最后执行 操作表达式 i++, i++是单独写的代码,故自增1 【第一轮循环结束】
  4. 接着根据条件表达式 i <= 100 来判断是否满足条件,如果满足条件就执行循环体,否则退出循环 【第二轮】

2.3 断点调试

请添加图片描述

2.4 课堂案例1:求1~100之间所有整数的累加和

请添加图片描述

var sum = 0;
for (var i = 1; i <= 100; i++) {
    sum += i;
}
console.log(sum);  //sum=5050

2.5 课堂案例2

// 1. 求 1~100 之间所有数的平均值 1~100累加后的结果sum除以个数100得到平均数average
var sum = 0, average = 0;
for (var i = 1; i <= 100; i++) {
    sum += i;
}
average = sum / 100;
console.log(average);  // average = 50.5

// 2. 求 1~100 之间所有偶数和奇数的和 偶数变量even  奇数变量odd
var even = 0, odd = 0;
for (var i = 1; i <= 100; i++) {
    if (i % 2 == 0) {
        even += i;
    } else {
        odd += i;
    }
}
console.log('1~100 之间所有偶数和是:' + even); // even=2550
console.log('1~100 之间所有奇数和是:' + odd);  // odd=2500

// 3. 求 1~100 之间所有能被3整除的数字的和
var result = 0;
for (i = 1; i <= 100; i++) {
    if (i % 3 == 0) {
        result += i;
    }
}
console.log('1~100 之间所有能被3整除的数字的和是:' + result); // result=1683

在这里插入图片描述

2.6 课堂案例3:求学生成绩

要求用户输入班级人数,之后依次输入每个学生的成绩,最后打印出该班级总的成绩以及平均成绩。
请添加图片描述

var num = prompt('请输入班级总人数:');
var sum = 0, average = 0;
for (var i = 1; i <= num; i++) {
    var score = prompt('请输入第' + i + '个学生的成绩:');
    // 因为从prompt取过来的数据是 字符串型的需要转换为数字型
    sum += parseFloat(score);
}
average = sum / num;
alert('班级总的成绩是:' + sum);
alert('班级总的平均成绩是:' + average);

请添加图片描述

2.7 案例:一行打印五个星星

我们采取追加字符串的方式,这样可以打印到控制台上。

for (var i = 1; i <= 5; i++) {
    console.log('★');
}
var str = '';
for (var i = 1; i <= 5; i++) {
    str += '★';
}
console.log(str);

在这里插入图片描述

3. 双重 for 循环

3.1 双重 for 循环概述

很多情况下,单层 for 循环并不能满足我们的需求,比如我们要打印一个5行5列的图形、打印一个倒直角三角形等,此时就可以通过循环嵌套来实现。
请添加图片描述

3.2 打印五行五列星星案例

核心:

  1. 内层循环负责一行打印五个星星
  2. 外层循环负责打印五行
var str = '';
for (var i = 1; i <= 5; i++) {     // 外层循环负责打印五行
    for (var j = 1; j <= 5; j++) { // 里程循环负责一行打印五个星星
        str += '★';
    }
    //如果一行打印完毕5个星星就要另起一行 加 \n
    str += '\n';
}
console.log(str);

在这里插入图片描述

3.3 课堂案例1:打印n行n列的星星

要求用户输入行数和列数,之后在控制台打印出用户输入行数和列数的星星。

var rows = prompt('请您输入要打印星星组成图案的行数:');
var cols = prompt('请您输入要打印星星组成图案的列数:');
var str = '';
for (var i = 1; i <= rows; i++) {
    for (var j = 1; j <= cols; j++) {
        str += '★';
    }
    str += '\n';
}
alert(str);

请添加图片描述

3.4 课堂案例2:打印直角三角形

var str = '';
for (var i = 1; i <= 10; i++) {
    for (var j = 1; j <= i; j++) {
        str += '★';
    }
    str += '\n';
}
console.log(str);

在这里插入图片描述

3.5 课堂案例3:打印倒直角三角形

方法一:

var str = '';
for (var i = 1; i <= 10; i++) { // 外层循环控制行数
    for (var j = i; j <= 10; j++) {  // 里层循环打印的个数不同 j = i
        str += '★';
    }
    str += '\n';
}
console.log(str);

方法二:

var str = '';
for (var i = 1; i <= 10; i++) { // 外层循环控制行数
    for (var j = 10; j >= i; j--) {  // 里层循环打印的个数不同 
        str += '★';
    }
    str += '\n';
}
console.log(str);

在这里插入图片描述

3.6 课堂案例4:打印九九乘法表

请添加图片描述

var str = '';
for (var i = 1; i <= 9; i++) { //外层循环控制行数
    for (var j = 1; j <= i; j++) { //里层循环控制每一行的个数 j <= i
        str += j + '×' + i + '=' + i * j + '\t';
    }
    str += '\n';
}
console.log(str);

在这里插入图片描述

3.7 for 循环小结

请添加图片描述

4. while 循环

请添加图片描述

4.1 while 循环案例

// 1. 打印人的一生,从1岁到100岁
        var i = 1;
        while (i <= 100) {
            console.log('这个人今年' + i + '岁了');
            i++;
        }

        // 2. 计算 1~100 之间所有整数的和
        var sum = 0, j = 1;
        while (j <= 100) {
            sum += j;
            j++;
        }
        console.log(sum);

        // 3. 弹出一个提示框:你爱我吗? 如果输入我爱你,就提示结束,否则一直询问。
        var message = prompt('你爱我吗?');
        while (message !== '我爱你') {
            message = prompt('你爱我吗?');
        }
        alert('我也爱你啊!');

请添加图片描述

5. do while 循环

请添加图片描述

5.1 do while 循环案例

// 1. 打印人的一生,从1岁到100岁
var i = 1;
do {
    console.log('这个人今年' + i + '岁了');
    i++;
} while (i <= 100)

// 2. 计算 1~100 之间所有整数的和
var sum = 0, j = 1;
do {
    sum += j;
    j++;
} while (j <= 100)
console.log(sum);

// 3. 弹出一个提示框:你爱我吗? 如果输入我爱你,就提示结束,否则一直询问。
do {
    var message = prompt('你爱我吗?');
} while (message !== '我爱你')
alert('我也爱你啊!');

5.2 循环小结

请添加图片描述

6. continue break

6.1 continue 关键字

continue 关键字 用于立即 跳出本次循环继续下一次循环 (本次循环体中continue之后的代码就会少执行一次)。

// 1. 吃5个包子,第3个包子有虫子,就扔掉第3个,继续吃第4个第5个包子
for (var i = 1; i <= 5; i++) {
    if (i == 3) {
        continue; //只要遇见 continue就退出本次循环 直接跳到 i++
    }
    console.log('我正在吃第' + i + '个包子');
}

// 2. 求 1~100 之间,除了能被7整除之外的整数和
var sum = 0;
for (var i = 1; i <= 100; i++) {
    if (i % 7 == 0) {
        continue;
    }
    sum += i;
}
console.log(sum);

在这里插入图片描述

6.2 break 关键字

break关键字用于 立即 跳出最近一层的循环(循环结束)。

7. JavaScript 命名规范以及语法格式

7.1 标识符命名规范

  • 变量、函数的命名必须要有意义
  • 变量的名称一般用名词
  • 函数的名称一般用动词

7.2 操作符命名规范

请添加图片描述

7.3 单行注释规范

请添加图片描述

7.4 其他规范

请添加图片描述

8. 设计作业:简易ATM

var money = 100;
do {
    var num = prompt('请输入您要的操作:\n1.存钱\n2.取钱\n3.显示余额\n4.退出');
    num = parseInt(num); //输入的数都为字符串型,需要比较所以要转换为数字型
    console.log(num);
    switch (num) {
        case 1:
            var deposit = prompt('请您输入要存的金额数:'); //deposit存款
            money += parseInt(deposit); //输入的数都为字符串型,需要算术运算就要转换为数字型
            alert('您现在的金额数为:' + money);
            break;
        case 2:
            var withdrawal = prompt('请您输入要取的金额数:'); //withdrawal取款
            withdrawal = parseInt(withdrawal);
            if (withdrawal > money) {
                alert('您的存款为' + money + '\n您要取的金额数超过您的存款,请重新输入您要取的金额数');
            } else {
                money -= withdrawal;
                alert('您现在的金额数为:' + money);
            }
            break;
        case 3:
            alert('您现在的金额数为:' + money);
            break;
        case 4:
            alert('您正在退出!');
            break;
        default:
            alert('请输入正确的操作数');
    }
} while (num != 4);

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值