03 【流程控制语句】
03 【流程控制语句】
1.基本介绍
*
* 流程控制语句
* - JS中的程序是从上到下一行一行执行的
* - 通过流程控制语句可以控制程序执行流程,
* 使程序可以根据一定的条件来选择执行
* - 语句的分类:
* 1.条件判断语句
* 2.条件分支语句
* 3.循环语句
*
*
* prompt()可以弹出一个提示框,该提示框中会带有一个文本框,
* 用户可以在文本框中输入一段内容,该函数需要一个字符串作为参数,该字符串将会作为提示框的提示文字
* 用户输入的内容将会作为函数的返回值返回,可以定义一个变量来接收该内容,prompt()函数的返回值是String类型的
*
//score就是小明的期末成绩
var score = prompt("请输入小明的期末成绩(0-100):");
2.if(条件分支语句)
条件判断语句也称为if语句
语法一:
if(条件表达式){
语句...
}
执行流程:
if语句执行时,会先对条件表达式进行求值判断,
如果值为true,则执行if后的语句
如果值为false,则不执行
语法二:
if(条件表达式){
语句...
}else{
语句...
}
执行流程:
if...else语句执行时,会对条件表达式进行求值判断,
如果值为true,则执行if后的语句
如果值为false,则执行else后的语句
语法三:
if(条件表达式){
语句...
}else if(条件表达式){
语句...
}else if(条件表达式){
语句...
}else if(条件表达式){
语句...
}else{
语句...
}
执行流程
if...else if...else语句执行时,会自上至下依次对条件表达式进行求值判断,
如果判断结果为true,则执行当前if后的语句,执行完成后语句结束。
如果判断结果为false,则继续向下判断,直到找到为true的为止。
如果所有的条件表达式都是false,则执行else后的语句
- 条件语句可以嵌套(最好不要嵌套超过三层)
- if-elseif-else 语句注意条件的区间(下一级条件的成立是建立在上一级条件不成立的条件下)
- 可以只有 if 和 else if
3.switch(条件分支语句)
switch语句
语法:
switch (变量/表达式) {
case 常量值/变量/表达式:
语句;
break;
case 常量值/变量/表达式:
语句;
break;
default:
语句;
}
执行流程:
switch...case...语句在执行时,会依次将case后的表达式的值和switch后的表达式的值进行全等比较,
如果比较结果为false,则继续向下比较。如果比较结果为true,则从当前case处开始向下执行代码。
如果所有的case判断结果都为false,则从default处开始执行代码。
- 与其他高级语言不同,在 JS 中 case 后不仅仅只能跟常量值,还可以跟变量和表达式
- 注意 switch 语句的 “开关” 特性(遇见 break 才跳出 switch,否则直接进入下一个 case),合理运用好 break(例如不加 break 可以实现多条 case 共用同一个语句体)
- default 语句不是必须的
4.while 循环语句
通过循环语句可以反复执行某些语句多次
while循环
语法:
while(条件表达式){
语句...
}
执行流程:
while语句在执行时,会先对条件表达式进行求值判断,
如果判断结果为false,则终止循环
如果判断结果为true,则执行循环体
循环体执行完毕,继续对条件表达式进行求值判断,依此类推
do...while循环
语法:
do{
语句...
}while(条件表达式)
执行流程
do...while在执行时,会先执行do后的循环体,然后在对条件表达式进行判断,
如果判断判断结果为false,则终止循环。
如果判断结果为true,则继续执行循环体,依此类推
和while的区别:
while:先判断后执行
do...while: 先执行后判断
do...while可以确保循环体至少执行一次。
5.for 循环语句
for循环
语法:
for(1初始化表达式 ; 2条件表达式 ; 4更新表达式){
3语句...
}
执行流程:
首先执行①初始化表达式,初始化一个变量,
然后对②条件表达式进行求值判断,如果为false则终止循环
如果判断结果为true,则执行③循环体
循环体执行完毕,执行④更新表达式,对变量进行更新。
更新表达式执行完毕重复②
for in 循环
for
循环的一个变体是 for ... in
循环,它可以把一个对象的所有属性依次循环出来:
var o = {
name: "Jerry",
age: 20,
city: "Beijing"
};
for (var key in o) {
console.log(key + ": " + o[key]);
}
/*
"name: Jerry"
"age: 20"
"city: Beijing"
*/
要过滤掉对象继承的属性,用 hasOwnProperty()
来实现:
var o = {
name: "Jerry",
age: 20,
city: "Beijing"
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
console.log(key + ": " + o[key]);
}
}
/*
"name: Jerry"
"age: 20"
"city: Beijing"
*/
由于数组也是对象,而它的每个元素的索引被视为对象的属性,因此,for ... in
循环可以直接循环出数组的索引:
var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i + ": " + a[i]);
}
/*
0: A
1: B
2: C
*/
请注意,for ... in
对数组的循环得到的索引是 String
而不是 Number
。
死循环
while(true){
}
for(;;){
}
6.break 和 continue
break;
:立即终止本层次循环。
continue;
:立即跳过本层次循环,提前进入本层次的下一次循环。
7.label 表达式
label
是一个标签,可以使用 break
或 continue
使程序跳转到这个标签处执行(执行:break
或 continue
),从而改变程序的执行流程。
// 注意:label 不是一个特定的关键字,可以随便取名
label: for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i + j === 6) {
console.log("j=" + j);
break label;
}
}
console.log("i=" + i);
}
/*
j=6
*/
label: for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i + j === 6) {
console.log("j=" + j);
continue label;
}
}
console.log("i=" + i);
}
/*
j=6
j=5
j=4
j=3
j=2
j=1
j=0
i=7
i=8
i=9
*/
// label + break 配合可以用在循环外
label: {
if (1 > 0) {
console.log("1");
break label;
}
console.log("2");
}
/*
1
*/
8.初识算法
算法:解决方案的准确而完整的描述!
- 输入
- 输出
- 有穷性
- 确定性
- 可行性
好的算法还要满足:可读性、健壮性!