目录
一、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 循环主要用于把某些代码循环若干次,通常跟计数有关系。其语法结构如下:
- for 重复执行某些代码,通常跟计数有关系
- 初始化变量 就是用var 声明的一个普通变量,通常用作为计数器使用
- 条件表达式 就是用来决定每一次循环是否继续执行,就是终止条件
- 操作表达式 是每次循环最后执行的代码 经常用于我们计数器变量进行更新(递增或递减)
2.2 for循环的执行过程
for (var i = 1; i <= 100; i++) {
console.log('你好');
}
- 首先执行里面的 计数器变量,var i = 1,但是这个代码在for循环里面 只执行一次
- 然后到 条件表达式 i <= 100 来判断是否满足条件,如果满足条件就执行循环体,否则退出循环
- 最后执行 操作表达式 i++, i++是单独写的代码,故自增1 【第一轮循环结束】
- 接着根据条件表达式 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 打印五行五列星星案例
核心:
- 内层循环负责一行打印五个星星
- 外层循环负责打印五行
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);