流程控制语句
流程控制:分支(条件)、循环
1.分支语句
1.1 if 语句
只有当指定条件为true时,语句才会执行代码
if (condition)
{
当条件为 true 时执行的代码
}
1.2 if…else 语句
在条件为true时执行代码,条件为false时执行其他代码。
if (condition)
{
当条件为 true 时执行的代码
}
else
{
当条件不为 true 时执行的代码
}
1.3 if…else if…else 语句
if (condition1)
{
statement1
当条件 1 为 true 时执行的代码
}
else if (condition2)
{
statement2
当条件 2 为 true 时执行的代码
}
else
{
statement3
当条件 1 和 条件 2 都不为 true 时执行的代码
}
案例:
function exchange(num) {
if (num && typeof num == 'number') {
//typeof num=='number' && 0<num and num<=10
if (num > 0 && num <= 10) {
if (num == 1) {
result = "壹";
} else if (num == 2) {
result = "贰";
} else if (num == 3) {
result = "叁";
} else if (num == 4) {
result = "肆";
} else if (num == 5) {
result = "伍";
} else if (num == 6) {
result = "陆";
} else if (num == 7) {
result = "柒";
} else if (num == 8) {
result = "捌";
} else if (num == 9) {
result = "玖";
} else {
result = "拾";
}
} else if(num > 10) {
result = "请输入不大于10的数字";
} else{
result = "请输入不小于0的数字";
}
} else if (num == 0) {
result = "零";
} else {
result = "请输入数字";
}
console.log(result);
}
exchange(0);
exchange(-120);
exchange(100);
exchange('as');
exchange();
1.4 switch 语句
用于基于不同的条件来执行不同的动作
switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
与 case 1 和 case 2 不同时执行的代码
}
案例:
var d=new Date().getDay();
switch (d)
{
case 0:
console.log('周日');
break;
case 1:
console.log('周一');
break;
case 2:
console.log('周二');
break;
case 3:
console.log('周三');
break;
case 4:
console.log('周四');
break;
case 5:
console.log('周五');
break;
case 6:
console.log('周六');
break;
}
1.5 default 关键词
var d = new Date().getDay();
switch (d) {
case 4:
console.log('周四');
break;
case 5:
console.log('周五');
break;
default:
console.log('期待周末');
}
注意:
- case代码块中break不能省略
- default可以放到代码任意位置,break不能省略,最后位置可以省略break;
- 变量与常量对比使用”===“
- 做等值比较的分支控制建议使用switch,非等值的判断建议使用If
2.循环语句
2.1 For循环
for (*语句 1*; *语句 2*; *语句 3*)
{
*被执行的代码块*
}
for (var i=0; i<5; i++)
{
console.log(i);
}
//1-100偶数和
var result = 0;
for(var i = 0;i < 101; i++){
if(i % 2 == 0){
result = result + i;
}
}
console.log(result);
// 冒泡排序
//1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。
//2、比较完第一轮的时候,最后一个元素是最大的元素。
//3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。
function bubbleSort(arr) {
var len = arr.length;
//外层控制循环多少趟
for (var i = 0; i < len-1; i++) {
//内层控制每一趟的循环次数
for (var j = 0; j < len - 1 - i; j++) {
// 相邻元素两两对比,元素交换,大的元素交换到后面
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
//举个数组
var arr = [20,18,27,19,35];
//使用函数
bubbleSort(arr)
2.2 关键字
立即跳出循环
for(var i=0;;i++){
console.log(i);
if(i==5){
break;
}
}
2.3 for…in…
用于遍历数组或者对象的属性
格式:
for(自定义变量名(数组的元素索引/对象的属性) in 数组/对象){
执行代码
}
//循环数组
var arr=[10,'aa',20,30,40];
for(var i=0;i<arr.length;i++){
console.log(i+"--"+arr[i]);
}
for(var key in arr){
console.log(key+"--"+arr[key]);
}
//循环对象属性:
var obj = {
name:"briup",
age:12,
salary:10000
};
/*
两种方式访问属性:
objectName.propertyName
或者
objectName["propertyName"]
*/
console.log(obj.name);
console.log(obj["age"]);
console.log(obj.salary);
for(var key in obj){
console.log(key+"--"+obj[key]);
}
2.4 while循环
while (*条件*)
{
*需要执行的代码*
}
while (i<5)
{
console.log(i);
i++;
}
//求1-100的和
var res = 0;
var i = 1;
while(i<101){
res = res + 1;
i++;
}
console.log(res);
2.5 do/while 循环
do
{
需要执行的代码
}
while (条件);
//求1-100和
var res = 0;
var i = 1;
do{
res = res + 1;
i++;
}while(i < 101);
console.log(res);
2.6 递归
// 递归 通俗理解
// 函数自己调用自己 停不下来
// 需要有 跳出的条件
/*
使用递归 求n的阶乘
假设 写好了一个函数 factorial
1 => 1
2 => 1*2 ->factorial(1)*2
3 => 1*2*3 ->factorial(2)*3
4 => 1*2*3*4 ->factorial(3)*4
...
n => 1*2*3...*n ->factorial(n-1)*n
*/
function factorial(n) {
// 跳出条件
if (n == 1) {
return 1;
}
return factorial(n - 1) * n;
}
var result = factorial(4);
console.log(result);