流程: 代码执行的顺序和方式;
流程控制: 在JS中,用一些特殊的语句控制程序按照我们想要的方式去选择执行(执行一次or重复执行)
1、 顺序结构
2、 选择结构
(1)分支结构
(2)条件结构
3、 循环结构
代码的正常的执行顺序:首先按引入的顺序一块一块执行,在每一块中一条一条语句的去执行。
e.g.先执行代码块1,后执行代码块2
{
console.log("代码块1");
}
{
console.log("代码块1");
}
选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。
注: if 和 else if 使用布尔表达式或布尔值作为分支条件来进行分支控制
条件返回的结果只能是布尔值(其通常是由比较运算符或逻辑运算符组成的表达式所计算的结果值,或返回布尔型的函数等)。若传入其他类型的值,也会自动转换为布尔值。若表达式为true,则执行,否则不执行。
语法结构:
if(表达式){
//当表达式为真时要执行的代码
}
e.g.
注: else语句是if语句的从句,必须和if一起使用,不能单独存在。
语法结构:
if(表达式){
//表达式为真时执行的代码
} else if {
//表达式为假时执行的代码
}
e.g.
拓展:
prompt:是JS中的一个方法,用来显示提示对话框,返回值是字符串。如果用户单击提示框的取消按钮,则返回 null。如果用户单击确认按钮,则返回输入字段当前显示的文本。【注:在调用 prompt() 时,将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句。】
注:没有最后一个else也是可以的,当然可能每条路都不满足,也是存在的。
11. 当没有最后一个else时,多路中所有路都为假时,则不执行;
12. 当有最后一个else时,多路中所有路都为假时,则执行最后一个else{……}中的代码。
语法结构:
if(表达式1){
//表达式1为真时执行的代码
}else if (表达式2){
//表达式2为真时执行的代码
}else {
//当表达式1&&表达式2为假时执行的代码
}
e.g.
var grade = prompt("请输入成绩");
if(grade >= 90 && grade <=100){
console.log("成绩优秀");
}else if(grade >=80 && grade <90){
console.log("成绩良好");
}else if(grade >=60 && grade <80){
console.log("成绩合格");
}else if(grade >=0 && grade <60){
console.log("成绩不合格");
}else {
console.log("输入异常");
}
在一个分支结构中嵌套另一个分支结构。即if语句或else语句后面的代码块中又包含if语句……
var grade = prompt("请输入成绩");
if(grade >= 60 && grade <=100){
console.log("成绩合格");
}else if(grade >=0 && grade <60){
console.log("成绩不合格");
if(grade == 0) {
console.log("成绩为0");
}
}else {
console.log("输入异常");
}
switch语句 switch 语句用于基于不同的条件来执行不同的动作。也就是说,用于测试一个表达时的值,并根据测试结果选择执行相应的分支程序,从而实现分支控制。
switch语句由一个选择表达式和多个case标签组成,case标签后进阶一段代码块。
语法结构:
switch(表达式 n){
case 1:
case "1":
//当 n==1,时执行代码块 1
break;
case 2:
//当 n==1时,执行代码块 2
break;
default:
//当 n 与 case 1 和 case 2 都不同时执行的代码
}
var num1 = prompt("请输入数字1");
var num2 = prompt("请输入数字2");
var ysf = prompt("请输入运算符(+,-,*,/)");
console.log(typeof num1);//string
num1 = parseFloat(num1);//parseFloat:解析一个字符串,并返回一个浮点数
num2 = parseFloat(num2);
switch (ysf) {
case "+":
case "加":
console.log(num1+num2);
break;
case "-":
case "减":
console.log(num1-num2);
break;
case "*":
case "乘":
console.log(num1*num2);
break;
case "/":
case "除":
console.log(num1/num2);
break;
default:
console.log("输入异常");
}
拓展:
parseFloat():此函数可解析一个字符串,并返回一个浮点数。
该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以number类型返回该数字,而不是string类型。
注:
document.write(parseFloat(" 8 2 ")+"
");
document.write(parseFloat("g2 ")+"
");
document.write(parseFloat(" ")+"
");
document.write(parseFloat("2 g")+"
");
document.write(parseFloat("25g")+"
");
document.write(parseFloat("m g")+"
");
document.write(parseFloat("10.33")+"
");
for循环;while循环;do while循环
主要用来控制循环语句的执行。
适用于明确知道重复执行次数的情况,即for语句将循环次数的变量在for语句中预先定义好。
由分号(;)分割成三部分即:循环变量初始化;条件表达式;循环变量自增/自减;
for (var i=0;i<=100;i++){
if(i%2==0){
console.log(i);
}
}
//换一种写法:
for (var i=0;i<=100;i++){
i%2 || console.log(i);
}
var sum = 0;
for(var i=1;i<=100;i++){
sum += i;
}
console.log(sum);
document.write("");
for(var i=1;i<=10;i++){
if(i%2==0){
document.write("");
}else {
document.write(" ");
}
for(var j=0;j<10;j++){
document.write(`第${i}行 第${j+1}列 `);
}
document.write(" ");
}
document.write("
");
拓展:
document.write():
var str = 'hello world';
document.write(str + " " + "嗨,你好");
e.g.
document.write("我爱学习 http://www.woaixuexi.com
")
document.write("");
for(var i=1;i<10;i++){
document.write("- 123
");
document.write("- ");
document.write(i);
document.write("
");
document.write("- "+i+"
");
document.write("- "+(i+1)+"
");
document.write(`- ${i}
`); //ES6新增,模板字符串
document.write(`- ${i+1}
`); //ES6新增,模板字符串
}
document.write("
");
拓展:
模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。【注:如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。】
设定一个布尔型条件,当条件为真时,不断执行一个语句块,直到条件为假。
while (表达式){
//当表达式为真时执行的代码
}
e.g.
//用if条件语句:
var grade = prompt("请输入成绩");
if(!(grade >= 0 && grade <= 100)){
grade = prompt("请输入成绩");//只执行了一次,若第二次输入依旧为假值,就输入不了了
}
//使用while循环语句:
var grade;
while (!(grade >=0 && grade <=100)){
grade = prompt("请输入成绩");//循环执行,直至输入真值
}
do while循环与while循环非常相似,区别在于do while循环表达式的值是在每一次循环结束后检查,so,do while循环语句必定会执行一次。
do{
/*当表达式为真时,要执行的代码*/
} while(/*表达式*/)
e.g.
var grade;
do {
grade = prompt("请输入成绩");
}while (!(grade >=0 && grade <=100))
停止循环,而后不继续,用于跳出循环。
可以将深埋在嵌套循环中的语句退出到指定层数,break是接受一个可选的数字参数决定跳出几重(层)语句。
e.g. 鸡兔同笼,36个头,98只脚,求鸡、兔个数。
设:鸡为i,兔为j
loop1: //loop1给这个循环的命名
for(var i=0;i<=36;i++){
for(var j=36-i;j<=36;j++){
if(i*2+j*4==98){
console.log(`鸡的个数是${i}只,兔的个数是${j}只`);
break loop1; //在这个位置,停止loop1循环的继续
}
}
}
注:只能使用在循环语句内部,功能是跳出该次循环,继续执行下一次循环结构。【对于while和do while语句,continue跳转到循环条件开始出执行;对于for循环,控制变量更新,然后继续执行代码块。】
e.g.
for (var i=0;i<=10;i++) {
if (i==3) continue; //跳过了值 3
console.log(i); //0 1 2 4 5 6 7 8 9 10
}