目录
一、代码块
使用 { } 来创建代码块,代码块可以用来对代码进行分组
同一个代码块中的代码,就是同一组代码,一个代码块中的代码要么都执行要么都不执行
let 和 var的区别
-在JS中,使用 let 声明的变量具有块作用域
在代码块中声明的变量无法在代码块的外部访问
<script>
{let a = 5
}
console.log(a)//无法输出打印a,因为let声明的变量具有块作用域
</script>
- 使用 var 声明的变量,不具有块作用域
流程控制语句可以用来改变程序执行的顺序
1.条件判断语句
2.条件分支语句
3.循环语句
二、if语句(条件判断语句)
语法:if(表达式){
语句...
}
执行流程:if语句在执行会对 if 后的条件表达式进行求值判断,
如果结果为 true,则执行 if 后的语句;
如果为 false,则不执行。
if语句只会控制紧随其后的那一行代码,如果希望可以控制多行代码,可以使用 { } 将语句括起来。
最佳实践:即使 if 后只有1行代码,我们也应该编写代码块,这样结构会更加清晰
如果 if 后添加的表达式不是布尔值,会转换为布尔值然后再运算
<script>
let a = 100
if(a > 10){
alert('a大于10')
alert(122)
}//添加{}形成代码块
if(100){
alert('你猜我执行吗?')//执行,表达式不是布尔值,则转换为布尔值再运算
}
</script>
三、if-else语句(条件分支语句)
1. if-else语句:
- 语法:if(条件表达式){
语句...
}else{
语句...
}
- 执行流程:if-else 执行时,先对条件表达式进行求值判断,
如果为 true,则执行 if 后的语句;
如果结果 false,则执行 else 后的语句。
2. if-else if-else语句:
语法:if(条件表达式){
语句...
}else if(条件表达式){
语句...
}else if(条件表达式){
语句...
}else{
语句...
}
执行流程:if-else if-else语句,会自上向下依次对 if 后的条件表达式进行求值判断:
如果条件表达式为 true,则执行当前 if 后的语句,执行完毕语句结束
如果条件表达式为 false,则继续向下判断,直到找到 true为止
如果所有的条件表达式都是 false,则执行 else 后的语句
注意:if-else if-else语句中只会有一个代码块被执行,一旦有执行的代码块,下边的条件都不会再继续判断了,所以一定要注意条件的编写顺序
四、if练习(prompt()函数、isNaN()函数)
prompt()函数可以用来获取拥护输入的内容,它会将用户输入的内容以字符串的形式返回,可以通过变量来接收。可以在括号里写提示文字,prompt("请输入一个整数:")
如何获取用户输入内容:let num = +prompt("请输入一个整数:") //进行了类型转换,转换为数值
isNaN()函数来检查一个值是否是NaN,若是则返回 true,否则返回 false.
练习1:编写一个程序,获取一个用户输入的整数,然后通过程序显示这个数是奇数还是偶数。
<script>
// let num = +prompt("请输入一个整数")
let num = parseInt(prompt("请输入一个整数"))//可以对输入的小数取整
//验证一下,用户输入是否合法,只有是有效数字时,我们才检查它是否是偶数
//我们不能使用==或===来检查一个值是否是NaN
// 可以通过使用isNaN()函数来检查一个值是否是NaN
if(isNaN(num)){
alert('你的输入有问题,请输入整数')
}else{
if(num % 2 == 0){
alert(`${num}是偶数`)//反单引号
}else{
alert(`${num}是奇数`)
}
}
</script>
1.使用+prompt()可以将用户输入内容转换为数值,但是若用户输入为小数时,接着进行运算是错误,会输出小数也是奇数,而之前学过parseInt()函数可以将字符串转换为整数。
2.因为用户输入的内容可能不是合法的有效数字(如“abc”),转换为数值时会将其转换为NaN,但是我们不能使用==或===来判断一个值是否是NaN(因为NaN与任何值包括它自身都不相等),可以使用isNaN()函数来检查一个值是否是NaN,若是则返回true,否则返回false.
更优:把用户输入的小数也检查了,若其是小数,则与1的余数不等于0
<script>
let num = +prompt("请输入一个整数")
if(isNaN(num) || num % 1 !== 0){//输入的字符串不是合法的有效数字或者是小数的情况
alert('你的输入有问题,请输入整数')
}else{
if(num % 2 == 0){
alert(`${num}是偶数`)//反单引号
}else{
alert(`${num}是奇数`)
}
}
</script>
练习2:
从键盘输入小明的成绩:
当成绩为100时,‘奖励一辆BMW’
当成绩为[80-99]时,‘奖励一台iphone’
当成绩为[60-79]时,‘奖励一本参考书’
其他时,什么奖励也没有
<script>
let grade = +prompt("请输入小明的期末成绩")
// 检查grade是否合法,成绩应为0-100之间的数字
if(isNaN(grade) || grade > 100 || grade < 0){
alert("你输入的成绩有误,请输入0—100之间的数字")
}else{
if(grade === 100){
alert("奖励一台BMW")
}else if(grade >= 80){
alert("奖励一台iphone")
}else if(grade >= 60){
alert("奖励一本参考书")
}else{
alert("什么奖励也没有")
}
}
</script>
注意:限制分数是在0-100之间,且应该是0-100的数字。
练习3:
高:180cm以上,富:1000万以上,帅:500以上
如果这三个条件同时满足,则:“我一定要嫁给他”
如果这三个条件有为真的情况,则:“嫁吧,比上不足,比下有余”
如果这三个条件都不满足,则:“不嫁”
<script>
// 获取男生的数据
let height = +prompt("请输入身高(cm)")
let health = +prompt("请输入财富(万)")
let handsome = +prompt("请输入颜值(像素)")
if(isNaN(height) || isNaN(health) || isNaN(handsome)){
alert("您的输入有误")
}else{
if(height > 180 && health > 1000 && handsome > 500){
//如果这三个条件同时满足,则:“我一定要嫁给他”
alert("我一定要嫁给他")
}else if(height > 180 || health > 1000 || handsome > 500){
//如果这三个条件有为真的情况,则:“嫁吧,比上不足,比下有余”
alert("嫁吧,比上不足,比下有余")
}else{
//如果这三个条件都不满足,则:“不嫁”
alert("不嫁")
}
}
</script>
五、switch语句(条件分支语句)
语法:switch(表达式){
case 表达式:
代码...
(break)
case 表达式:
代码...
(break)
default:
代码...
(break)
}
执行流程:switch语句在执行时,会依次将 switch 后的表达式和 case 后的表达式进行全等比较
如果比较结果为true,则自当前case处开始执行代码
如果比较结果为false,则继续比较其他case后的表达式,直到找到true为止
如果所有结果都是false,则执行default后的语句,default语句可以放在任意位置
注意:当比较结果为true时,会从当前case处开始执行代码,也就是说case是代码执行的起始位置
这就意味着只要是当前case后面的代码都会执行,可以使用break来避免执行其他的case.
条件表达式与表达式的区别:条件表达式返回的是布尔值(if语句中用条件表达式),而表达式返回啥值都可(switch语句用表达式)
总结:switch语句和if语句的功能是重复,switch能做的事if也能做,反之亦然。
它们最大的不同在于,switch在多个全等判断时,结构比较清晰。
如:想根据用户输入的数字显示中文,1显示壹,2显示贰,3显示叁等(两个语句代码如下,switch结构更清晰。)
使用if语句:
<script>
let num = +prompt('请输入一个数字');
if(num === 1){
alert('壹')
}else if(num === 2){
alert('贰')
}else if(num === 3){
alert('叁')
}
</script>
使用switch语句:
<script>
let num = +prompt('请输入一个数字');
switch(num){
case 1:
alert('壹')
break//break可以用来结束switch语句
case 2:
alert('贰')
break
case 3:
alert('叁')
break
}
</script>
六、while循环(循环语句)和练习
通过循环语句可以使指定的代码反复执行
JS中一共有三种循环语句
while语句
do-while语句
for语句
while语句:
语法: while(条件表达式){
语句...
}
执行流程:while语句在执行时,会先对条件表达式进行判断,
如果结果为true,则执行循环体,执行完毕,继续判断;
如果为true,则再次执行循环体,执行完毕,继续判断,如此重复;
直到条件表达式结果为false时,循环结束。
当一个循环的条件表达式恒为true时,这个循环就是一个死循环,会一直执行(慎用)。
通常编写一个循环,需要三个要件:
1.初始化表达式(初始化变量)
2.条件表达式(设置循环运行的条件)
3.更新表达式(修改初始化变量)
<script>
// 初始化表达式
let a = 0;
//条件表达式
while(a < 5){
alert(a)
a ++//更新表达式
}
</script>
下面是其另一种写法,并没有将变量写入条件表达式中,而是在循环体中写一个if语句来判断循环是否结束。
<script>
// 初始化表达式
let i = 0;
//条件表达式
while(1){
console.log(i)
i ++//更新表达式
if(i == 5){
break
}
}
</script>
练习:假设银行存款的年利率为5%,问1000块钱存多少年可以变成5000块。
两种写法:
<script>
let i = 1;
//条件表达式
let money = 1000
while(1){
money = money + money * 0.05
if(money >= 5000){
console.log(i)
break
}
i ++//更新表达式
}
</script>
<script>
//创建一个变量表示钱数
let money = 1000
//创建一个计数器来记录循环执行的次数
let year = 0
//编写循环,计算存款的年数
while(money < 5000){
money *= 1.05//循环每执行一次,就相当于钱存了一年
year++
}
console.log(`需要存${year}年,最终的钱数为${money}元`)//反单引号
</script>
七、do-while循环
语法:do{
语句...
}while(条件表达式)
执行顺序:do-while语句在执行时,会先执行do后的循环体,
执行完毕后,会对while后的条件表达式进行判断;
如果为false,则循环终止;
如果为true,则继续执行循环体,依次类推。
和while的区别:
while语句是先判断再执行
do-while语句是先执行再判断
实质的区别:
do-while语句可以保证循环至少执行一次
<script>
let i = 0
do{
console.log(i)
i++
}while(i < 5)
</script>
八、for循环
for循环和while循环没有本质区别,都是用来反复执行代码
不同点就是语法结构,for循环更加清晰
语法:for(初始化表达式;条件表达式;更新表达式){
语句...
}
执行流程:
1.执行初始化表达式,初始化变量
2.执行条件表达式,判断循环是否执行(true执行,false终止)
3.判断结果为true,则执行循环体
4.执行更新表达式,对初始化变量进行修改
5.重复2,直到判断为false为止
例子:
<script>
for(let i=0; i<5;i++){
console.log(i)
}
</script>
初始化表达式,在循环的整个生命周期中只会执行1次
for循环中的三个表达式都可以省略,如for(;;)则是死循环
使用 let 在for循环的()中声明的变量是局部变量,只能在for循环内部访问
使用var在for循环的()中声明的变量可以在for循环的外部访问
创建死循环的方式:
while(1){}
for(;;){}