JS流程控制语句
## 流程控制语句
**3-1条件语句**
给定一个判断条件,并在程序执行过程中判断该条件是否成立。
*3-1-1单分支语句*
由一个if组成,如果条件成立,则进入代码块开始执行语句。
语法:
if(条件){ //条件为真时执行的代码 } 示例: let age = 20; if(age >= 18){ console.log("你已经是成年人了"); }
如果条件不是一个布尔值,那么会被自动转换为布尔值
示例:
if(1){ console.log("Hello"); }
*3-1-2双分支语句*
就是由两个分支线,如果if条件不成立,那么就会跳入到else语句中,语法时:
if(条件){ //条件为真时要执行的代码 }else{ //条件为假时要执行的代码 } 示例: let age = 16; if(age >= 18){ console.log("你已经是成年人了"); }else{ console.log("你还是未成年人"); }
**三目运算符**
if...else语句的一个缩写方式,就是使用三目运算符 ?:
语法:条件 ? (条件为真时执行的代码):(条件为假时执行的代码)
示例: let age = 16; let result = age>=18 ? "你已经成年了" : "你还是未成年"; console.log(result);//你还是未成年 使用三目运算符找出三个数最大的那个数:
示例: let a = 3,b = 8,c = 5; let max = a>b ? (a>c?a:c) : (b>c?b:c); console.log(max);//8
*3-1-3多分支语句*
多个if...else语句可以组合在一起,形成逻辑决策树,
语法:
if(条件){
//执行语句
}else if(条件){
//执行语句
}else{
//执行语句
}
**switch语句**
有一种比多分支结构更清晰的语句结构,就是switch语句。语法:
switch(条件){
case 1:
//执行语句
break;
case 2:
//执行语句
break;
case 3:
//执行语句
break;
default:
//执行语句
}
*break关键字*
break时用于跳出某个case,如果不书写break的话,进入case以后会继续进入后面的case语句。
*default关键字*
default用于书写默认的条件,如果前面的都不满足的话,就进入到default语句里面。
**3-2循环语句**
*3-2-1while循环*
whlie循环是比较常见的一种,语法为:
whlie(表达式){
//循环体
}
示例:从1加到100 let i = 1,sum = 0; while(i <= 100){ sum += i; i++; } console.log(sum);//5050
无穷循环又叫死循环
*3-2-2do...whlie循环*
首先执行一次循环体,然后检测循环条件表达式的值是否为真,是真的话,则重复执行循环语句。
**3-2-3for循环**
for循环是最常见的一种循环。
语法为:
for(表达式1;表达式2;表达式3){
//循环体
}
执行的顺序为:首先执行表达式1,然后进行表达式2的判断,如果表达式2成立,那么执行循环体,循环体执行结束后,进行表达式3,然后回头再看表达式2是否成立,成立就执行循环体,不成立就循环结束。
示例:for循环实现从1加到100 let sum = 0; for(let i=1;i<=100;i++){ sum += i; } console.log(sum);//5050 另一种方式: let i = 1,sum = 0; for(;i<=100;){ sum += i; i++; } console.log(sum);//5050
*遍历数组*
使用for循环来对数组进行遍历。
示例:
let arr = [1,2,3,4,5]; for(let i=0;i<arr.length;i++){ console.log(arr[i]); }
在使用for循环来遍历数组的时候,使用一个变量来存储数组的长度,这样可以提升程序的小路,因为不用每次都取重新计算数组的长度。
示例:
let arr = [1,2,3,4,5]; for(let i=0,j=arr.length;i<j;i++){ console.log(arr[i]); }
**3-2-4循环的嵌套**
我们可以把一个循环放在另一个循环里面,从而构成循环的嵌套,里面的循环称之为内层循环,外面的循环称之为外层循环,外层循环一次,内层循环就是把自己的全部循环执行完。
循环嵌套示例:打印九九乘法表
let str = ""; for(let i=1;i<=9;i++){ for(let j=1;j<=i;j++){ str += i + "*" + j + "=" + (i*j) + " "; } console.log(str); str = ""; }
使用双层for循环遍历一个二维数组:
let arr = [ ["Bill",20], ["Lucy",23], ["David",25], ["Lily",18] ]; for(let i=0;i<arr.length;i++){ for(let j=0;j<arr[i].length;j++){ console.log(arr[i][j]); } } // Bill // 20 // Lucy // 23 // David // 25 // Lily // 18
**3-2-5break和continue**
*break*
用于跳出switch语句或者循环语句,注意的是:break语句不能直接作用于if语句,除非if语句是被嵌套在循环语句里面的。
语法:
for(表达式1;表达式2;表达式3){
if(条件){
//执行语句
break;
}
}
*continue语句*
结束本次循环(不是终止整个循环),即跳过循环体中的continue语句后面的语句,开始下一次循环。
break语句和continue语句的区别:
continue语句的意思是结束本次循环,break语句是结束整个循环。
示例:
break语句:
for(1,2,3){
a;
b;
c;
break;//执行a,b循环结束
c;
d;
}
continue语句:
for(1,2,3){
a;
b;
continue;//执行a,b后结束本次循环
c;
d;
}
**给数组去重复** let arr = [1, 2, 2, 2, 3, 4, 5, 5, 6, 6, 7, 8]; let newArr = []; outer: for (let i = 0; i < arr.length; i++) { for (let j = 0; j < newArr.length; j++) { if (arr[i] === newArr[j]) { continue outer; //终止名字为outer的循环 } } newArr.push(arr[i]); } console.log(newArr);
for循环示例:
// 求100到200之间的3的所有倍数 // 10个数为一行,打印一次 let j=0; let arr =""; for(let a=100;a<=200;a++){ if(a % 3 == 0){ j++; arr =arr+a+" "; if(j%10==0){ console.log(arr); arr ="";//消除已经打印出来了的,不重复打印 } } } console.log(arr);
// 100-999以内的水仙花数,即一个数字它的每一位数的立方加起来等于这个数,如:153=1*1*1+5*5*5+3*3*3 let i; for(i=100;i<=999;i++){ let bai = parseInt(i / 100); let shi = parseInt(i / 10)%10; let ge = i % 10; if( i == bai*bai*bai+shi*shi*shi+ge*ge*ge){ console.log(i); } }
// 斐波那契数列 // 0,1,1,2,3,5,8,13,21.... // 用户随机输入一个位数,判断这是数列中的哪个数 let readline = require("readline-sync"); console.log("请输入数字:") let bit;//位数 let num1 =0;//第一位数 let num2 =1;//第二位数 let temp =0;//临时变量 bit = parseInt(readline.question("")); for(let i=3;i<=bit;i++){ temp = num2; num2 = num1 + num2; num1 = temp; } console.log("该位数上的数为:",num2);