跳至主要內容

03 【流程控制语句】

约 1654 字大约 6 分钟...

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 是一个标签,可以使用 breakcontinue 使程序跳转到这个标签处执行(执行:breakcontinue),从而改变程序的执行流程。

// 注意: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.初识算法

算法:解决方案的准确而完整的描述!

  • 输入
  • 输出
  • 有穷性
  • 确定性
  • 可行性

好的算法还要满足:可读性、健壮性!

已到达文章底部,欢迎留言、表情互动~
  • 赞一个
    0
    赞一个
  • 支持下
    0
    支持下
  • 有点酷
    0
    有点酷
  • 啥玩意
    0
    啥玩意
  • 看不懂
    0
    看不懂
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8