2.1 代码块
简介:
以{}为语句进行分组,同一个{}中的语句称为一组,要么都执行,要么都不执行。
使用:
- 只具有分组作用,无其他用途
- 代码块中的内容在外部完全可见(ES5)
- 代码块中的内容在外部不可见(ES6)
2.2 流程控制语句
分类:
- 顺序结构:从上至下依次执行
- 选择结构:对给定条件进行判断,选择性地执行
- 循环结构:在给定条件成立下,循环执行某一段程序
If语句:
eg1:
var a = 20;
if(a > 10){
console.log("a > 10");
}
——————————————————————————————————————
eg2:
var a = 20;
if(a > 18){
console.log("可以上网");
}else{
console.log("不可以上网");
}
——————————————————————————————————————
eg3:
var a = 50;
if(a > 40){
console.log("老年人");
}else if(a>30){
console.log("青年人");
}else if(a>18){
console.log("成年人");
}else{
console.log("未成年人");
}
if语句使用注意点:
- 若只有一条语句,if后的大括号可以省略不用写
- if始终只可以控制其后的一条语句
- “;”也是一条语句,表示一条空语句
- if-else是一个整体,else 匹配 if 时 会匹配离他最近的一个if
- 非布尔类型的值会先转换为布尔类型后,再进行判断
- 判断变量与字面量时,一般建议把字面量写在前面
(eg: if(0 == a){})
这样可以避免将 等于号“==” 误用为 赋值符“=” - if语句可以嵌套使用
eg:var a= 10;
if(a>1){
if(a<20){
console.log(“a大于1且小于20”);
}
}
练习:石头、剪刀、布游戏的实现。
<script>
var player ,computer;
computer = parseInt(Math.random()*3);
player = parseInt(+(window.prompt("请出拳:0->石头;1->剪刀;2->布;")));
if(player < 0 || player >2){
player = parseInt(+(window.prompt("请重新出拳:0->石头;1->剪刀;2->布;")));
}else{
if((player===0 && computer===1)
||(player===1 && computer===2)
||(player===2 && computer===0)){
alert("电脑出拳是:"+computer+" 你赢了");
}else if((player===0 && computer===2)
||(player===1 && computer===0)
||(player===2 && computer===1)){
alert("出拳规则:0->石头;1->剪刀;2->布\n" + "电脑出拳是:"+computer+"\n你出拳是:"+player+"\n你输了");
}else{
alert("电脑出拳是:"+computer+" 平局了");
}
}
</script>
switch语句
简介:
一种选择结构,先对条件进行判断,再根据判断结果选择性执行
格式:
eg:
var a = 20;
switch(20){
case 10:
console.log("不是a");
break;
case 20:
console.log("是a");
break;
default:
console.log("找不到");
break;
}
流程:
- 先计算条件表达式的值,并逐个与case后面表达式的结果值比较
- 当条件表达式的值与某个表达式的值全等时,执行其后的语句,且不再与其它case进行比较
- 如果条件表达式的值与所有case后的表达式均不相同时,则执行default后的语句
注意点:
- case全等问题:比较时会对数值大小与数据类型同时比较;case后可以是字面量也可以是变量
eg:var num = 120;
switch (120){
case num(也可以是120,两者作用相同):
console.log("120");
break;
default:
console.log("default");
break;
}
- 表达式判断问题:
判断时会先执行表达式得出具体的数值,在之后才会进行比较 - case穿透问题:
case之后必须有break 语句,否则程序便会向下继续执行 - default位置问题:
default语句可以省略
default语句可以写在switch语句中的任意位置
if与switch选择:
- 分支比较多且无法穷尽时最好用 if, 其它情况可以视情况而定
- 如果数据量不是很大, 并且数据是固定的可以用Switch
- 理论上Switch的效率比if高
- Switch弊端:比如需要 判断用户输入的数是否大于100 时
2.3 循环
循环的组成要素:
循环条件>>>>给定条件
循环体>>>>反复执行的代码
循环的本质:
- 一次又一次的执行相同的代码块,直到不再满足循环条件
JS中的循环分类:
- while循环、do-while循环、for循环
2.4 while循环
格式:
while ( 条件表达式 ) {
语句1;
语句2;
....
}
eg:
var num = 0;
while (num < 10){
console.log(num);
num++;
}
执行流程:
- 判断条件表达式是否成立
- 执行完循环体并再次判断条件表达式
- 重复执行循环体,直至循环条件不再成立
- 结束
注意点:
- 死循环
- 任何值都有真假性(对于非Boolean类型的值, 会先转换为Boolean类型再判断)
- while 后如果只有一条语句,它可以省略大括号,但是一般不建议省略
- 分号(;)也是一条语句, 代表空语句
- 最简单的死循环(while(1);)
2.5 break关键字
作用:
跳出Switch语句 & 跳出循环语句
注意点:
- 只能用于switch语句与循环语句
- 在多层循环中,一个break语句只向外跳一层
- break后面的语句永远不会被执行
2.6 continue关键字
作用:
- 跳过当前循环体中剩余的语句而继续下一次
注意点:
- 只能用于switch语句与循环语句
- continue后面的语句永远不会被执行
2.7 do-while语句
格式:
do {
语句1;
语句2;
....
} while ( 条件 );
流程:
- 首先会执行一次循环体中的语句
- 接着判断while中的条件表达式是否为真,如果为真再次执行循环体中的语句
- 重复上述过程,直到条件不成立
- 结束while循环
特点:
- 不论条件是否成立,都至少会执行一遍
2.8 for循环
概述:
- 灵活性强,对循环次数确定与不确定的循环语句都可以使用
格式:
for(①初始化表达式;②循环条件表达式;④循环后操作表达式)
{
③执行语句;
}
流程:
-
- for循环开始时,会先执行初始化表达式①,而且在整个循环过程中只执行一次初始化表达式①
-
- 接着判断循环条件表达式②是否为真,如果条件为真,就会执行循环体中的语句③
-
- 循环体③执行完毕后,接下来会执行循环后的操作表达式④
-
- 执行完循环后操作表达式④, 然后再次判断循环条件表达式②是否为真
-
- 如果②条件为真,就会执行循环体中的语句
-
- 重复上述过程,直到条件不成立就结束for循环
for与while如何选择:
- 一般情况下while和for可以互换, 但是如果循环执行完毕之后就不需要使用用于控制循环的增量, 那么用for更好
注意点:
- for循环中初始化表达式,循环条件表达式,循环后操作表达式都可以不写
(此时:循环条件表达式默认为真)即: for( ; ; ) 语句相当于while(1) , 都是死循环
练习1:打印好友列表
for(var i =1;i<3;i++){
console.log("好友列表" + i);
for(var j =1;j<6;j++){
console.log(" 好友" + j);
}
}
练习2:打印99乘法表
- 代码:
- 结果