流程控制:分支(条件)、循环
1.分支语句
1.1条件语句
if语句
只有当指定条件(condition)为true时,该语句才会执行代码
if (condition)
{
当条件为 true 时执行的代码
}
if…else语句
使用 if…else 语句在条件为 true 时执行代码,在条件为 false 时执行其他代码。
if (condition)
{
当条件为 true 时执行的代码
}
else
{
当条件不为 true 时执行的代码
}
if…else if…else语句
使用 if…else if…else 语句来选择多个代码块之一来执行。
if (condition1)
{
statement1
当条件 1 为 true 时执行的代码
}
else if (condition2)
{
statement2
当条件 2 为 true 时执行的代码
}
else
{
statement3
当条件 1 和 条件 2 都不为 true 时执行的代码
}
switch语句
用于基于不同的条件来执行不同的动作
使用switch语句来选择要执行的多个代码块之一
switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
与 case 1 和 case 2 不同时执行的代码
}
default 关键词
请使用 default 关键词来规定匹配不存在时做的事情:
var d = new Date().getDay();
// 使用switch case语句做判断
switch (obj) {
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;
// 当所有条件都不满足,执行default
default:
console.log("期待周末");
break;
}
注意:
-
case代码块中break不能省略
-
default可以放到代码任意位置,break不能省略,最后位置可以省略break;
-
变量与常量对比使用”===“
建议:
做等值比较的分支控制建议使用switch,非等值的判断建议使用If
循环语句
循环可以指定代码块执行的次数。
不同类型的循环
JavaScript 支持不同类型的循环:
- for - 循环代码块一定的次数
- for/in - 循环遍历对象的属性
- while - 当指定的条件为 true 时循环指定的代码块
- do/while - 同样当指定的条件为 true 时循环指定的代码块
for循环
下面是 for 循环的语法:
for (*语句 1*; *语句 2*; *语句 3*)
{
*被执行的代码块*
}
for (var i=0; i<5; i++)
{
console.log(i);
}
语句1 在开始前执行
语句2 定义运行循环代码块的条件
语句3 在循环代码块已被执行之后执行
for循环的算法案例:
1-100偶数和
var result = 0;
for(var i=0;i<=100;i++){
if(i%2==0){
result += i;
}
}
console.log(result);
冒泡排序
//1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。
//2、比较完第一轮的时候,最后一个元素是最大的元素。
//3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。
// 第一次循环
/* 19<11 false [11,19,20,6,10]
19<20 true [11,19,20,6,10]
20<6 false [11,19,6,20,10]
20<10 false [11,19,6,10,20]*/
// 新建一个方法 冒泡排序
function bSort(arr) {
// 定义一个变量,接收数组的长度
var len=arr.length;
// for循环实现冒泡排序
for(var i=0;i<len-1;i++)
{
for(var j=0;j<len-1;j++)
{
// 比较前后元素,如果前面的大交换位置
if(arr[j]>arr[j+1]){
// 创建一个中间量进行值得转换
var x=arr[j];
arr[j]=arr[j+1];
arr[j+1]=x;
}
}
}
// 经过排序之后再将arr返回出去
return arr;
}
var arr=[19,11,20,6,10];
// console.log(bSort(arr));
特殊的for循环条件
// 逗号效应条件中有逗号,最终以最右边的条件(最靠近分号的条件)作为终止循环条件
for(i=0,j=0;i<10,j<18;i++,j++)
{
x=i+j;
}
console.log(x);//34
关键字 break
如果想在所有迭代前退出,即可使用break。当执行break后,会立即跳出循环体。
关键字 continue与break不同的是,continue不会跳出循环。而是立即结束当前循环,进入下一次循环。
for … in ——增强版for循环
for…in用于遍历数组或者对象的属性
for(自定义变量名 in 数组/对象){
执行代码
}
“自定义变量名”用来指定是数组的元素索引,也可以是对象的属性
// for...in...循环
for (var arrIndex in bSort(arr)) {
console.log(arrIndex + '---' + arr[arrIndex]);
}
while循环
while循环会在指定条件为真 (true)时循环执行代码块
语法
while (*条件*)
{
*需要执行的代码*
}
while (i<5)
{
console.log(i);
i++;
}
// 求1-100的和
var result=0;
// 起始条件
var i=1;
// 循环结束条件
while(i<=100)
{
result+=i;
// 起始条件自增或自减,写在最后面
i++;
}
console.log(result);
do-while循环
do/while循环会在检查条件是否为真之前执行一次代码,因此及时为假(false)也会执行一次,如果条件为真则会重复循环。
do
{
需要执行的代码
}
while (条件);
// 求1-100的和
var result = 0;
var i = 1;
do{
result += i;
i++;
} while(i<=100);
console.log(result);
递归
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
//函数自己调用自己
//需要有 跳出的条件
// 递归实现阶乘
function fc(n) {
// 跳出条件
if(n==1)
{
return 1;
}
// 使用递归 执行阶乘
return fc(n-1)*n;
}
console.log(fc(10));
算法实例拓展:
1.阶乘的实现:
var n = 1;
// 1.while循环
var m1=1;
while (n <= 10) {
var m1 = m1 * n
n++;
}
console.log(m1);
// 2.do-while循环
var m2=1;
do{
var m2=m2*n;
n++;
}while(n<=10)
// 3.for循环
var m3=1;
for(var n=1;n<=10;n++){
var m3=m3*n;
}
console.log(m);
//递归方法
function fc(n) {
// 跳出条件
if(n==1)
{
return 1;
}
// 使用递归 执行阶乘
return fc(n-1)*n;
}
console.log(fc(10));
2.99乘法表的实现
// 利用for循环
for (var n = 1; n <= 9; n++) {
for (var m = 1; m<=n ; m++) {
var result = n * m;
document.write(m + '*' + n + '=' + result+' ');
}
document.write("<br>");
}
// 利用do/while循环
var n = 9;
do {
var m = 1;
do {
var result = n * m;
document.write(m + '*' + n + '=' + result + ' ');
m++;
} while (m <= n)
n--;
document.write('<br>');
} while (n >= 1)
// 利用while循环
var n = 9;
while (n >= 1) {
var m = 1;
while (m <= n) {
var result = n * m;
document.write(m + '*' + n + '=' + result + ' ')
m++;
}
n--;
document.write('<br>');
}
3.由1,2,3,4组成的无重复数字的三位数
var arr = [1, 2, 3, 4]
var sum =0;
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
if (i != j) {
for (var k = 0; k < arr.length; k++) {
if (j != k && i!=k) {
var result = arr[i] * 100 + arr[j] * 10 + arr[k];
console.log(result);
sum++;
}
}
}
}
}
console.log(sum);
4.打印出101-200的素数
var count = 0;
for (var i = 101; i <= 200; i++) {
// var flag = true;
for (var j = 2; j < i; j++) {
var result = i % j;
if (result == 0) {
// flag = false;
break;
}
}
if (result != 0) {
console.log(i);
count++;
}
}
console.log(count);
5.100-1000的水仙花数 例如 153=111+555+333
for (var i = 100; i < 1000; i++) {
// 百位数
var num1=parseInt(i/100) ;
// 十位数
var num2=parseInt((i%100)/10);
// 个位数
var num3=parseInt(i%100%10);
var Num=Math.pow(num1,3)+Math.pow(num2,3)+Math.pow(num3,3);
if(Num==i)
{
console.log(Num);
}
}
6.1-1000的完美数 , 例如6=1+2+3;1,2,3是6的因数;
for(var i=1;i<=1000;i++)
{
var sum=0;
for(var j=1;j<i;j++)
{
if(i%j==0)
{
sum+=j;
}
}
if(sum==i){
console.log(i);
}
}