JS笔记之第三天

break关键字:如果在循环中使用,遇到了break,则立刻跳出当前所在的循环

例子:

找到100到200之间第一个可以被7整除的数字

for(var i=100;i<=200;i++){
      if(i%7==0){
          console.log(i);
          break;
     }
  }

continue关键字:在循环中如果遇到continue关键字,直接开始下一次循环

例子:

求100-200之间奇数的和(用continue)

var sum=0;
var i=100;
while (i<=200){
   //判断是不是偶数
   if (i%2==0){
    i++;//这里的i++不能去掉,否则会变成死循环
  //如果是偶数,则跳过这个数字
   continue;
  }
    sum+=i;
    i++;
 }
console.log(sum);

求个位数为多少:  %10

扫描二维码关注公众号,回复: 10204092 查看本文章

例子:求整数1-100的累加值,但要求跳过个位数为3的数

var sum=0
var i=1;
while (i<=100){
    if (i%10==3){
    i++;
    continue;
   }
    sum+=i;
    i++;
  }
console.log(sum);

 

数组

数组:一组有序的数据

数组的作用:可以一次性存储多个数据

数组的定义:

1.通过构造函数创建数组

语法:

var  数组名=new Array();

(数组名是自定义的,相当于变量名,只是换了个说法)

数组的名字如果直接输出,那么直接就可以把数组中的数据显示出来,如果没有数据,就看不到数据

构造函数的方式创建数组的时候,如果是Array(一个数字),则表示的是数组的长度(数组元素的个数)数组中的每个值是undefined。

如果在Array(多个值);这个数组中就有数据了,数组的长度就是这些数据的个数

例如:var  array=new Array();//定义了一个数组

通过构造函数的方式定义一个数组

var array=new Array();//()里面没有数据,是一个空数组

var 数组名=new  Array(长度);//有多少个数字,就代表了这个数组的长度有多长

2.通过字面量的方式创建数组

var  数组名=【】;//空数组

无论是构造函数的方式还是字面量的方式定义数组,如果没有长度,那么默认是undefined

数组:一组有序的数据

数组元素:数组中存储的每个数据,都可以叫数组的元素。比如:存储了3个数据,数组中有3个元素

数组长度:就是数组的元素的个数,比如有3个元素,就说这个数组的长度是3

数组索引(下标):用来存储或者访问数组中的数据的

数组的索引和数组的长度的关系:长度减1就是最大的索引值

如何设置数组中某个位置的值

数组名【下标】=值;

arr【3】=100;

如何获取数组中某个位置的值

var  result=数组名【下标】;

console.log(result);

例如:

var arr=new  Array();//构造函数的方式定义一个数组,里面是空数组

var arr=new  Array(5);//构造函数的方式定义一个数组,数组中有5个元素,数组成度是5,

每个数据是undefined

数组中存储的数据类型可以不一样(为了方便所以类型是一样的)

var  arr=[10,“哈哈”,ture,null,undefined,new object()];

数组的长度是可以改变,通过索引来设置数组中的元素的值,获取元素的值,通过索引的方式

总结:

数组:存储一组有序的数据

数组的作用:一次性存储多个数据

数组的定义方式:

1.构造函数定义数组:var 数组名=newArray();

2.字面量方式定义数组:var 数组名=【】;

var  数组名=new Array();空数组

var  数组名=new Array(值);数组定义了,有长度

var  数组名=new Array(值1,值2,值3);定义数组并且有多个数据

var  数组名=【】;空数组

var  数组名=【3】;有三个数据

数组元素:就是数组中存储的数据

数组长度:就是数组中元素的个数

数组索引(下标):从0开始。到数组的长度减1结束

通过下标设置数组的元素值:数组名【索引】=值

通过下标访问数组的元素值;数组名【索引】

通过for循环遍布数组

 var arr=[10,20,30,40,50]//定义一个有长度的数组

    for(var i=0,i<arr.length;i++){

//用循环的方式显示每一个数组的数据显示出来

//arr.length数组的长度

//下标是从0开始算起的,所以相当于i=0;

         console.log(i);

    }

 例:

1:求数组中所有元素的和
2:求数组中所有元素的平均值
3:求数组中所有元素中的最大值
4:求数组中所有元素中的最小值
5:倒序遍历数组
6:把数组中每个元素用"|"拼接到一起产生一个字符串并输出
7:去掉数组中重复的0
8:提示用户输入班级人数,求总成绩,平均值,最高分,最低分
9:反转数组
10:冒泡排序

1:求数组中所有元素的和

var arr1=[1,2,3,4,5];//用字面量的方式创建数组
var sum1=0;//定义变量并初始化,里面用来存储arr这个数组相加的和
for (var i=0;i<arr1.length;i++){
    //用for创建循环,i从0开始算起。
    /* i要小于arr1的长度(计算长度.length),索引是从0开始算起的,所以这里的i<0,
        可以写成i<arr1.length。*/
    // i++循环
    sum1+=arr1[i];//arr1[i]访问数组元素值,将里面所有的数字都相加
}
console.log(sum1);//显示sum1最终的结果

2:求数组中所有元素的平均值

var arr2=[1,2,3,4,5];
var sum2=0;
for (var i=0;i<arr2.length;i++){
    sum2+=arr2[i];
}
console.log(sum2/arr2.length);//arr2.length数组的长度
/*循环完之后,sum2是总和,arr2.length是这个arr2数组的长度,用总和除以arr2这个
数组一个有多少个数字,得出平均值。相当于数学的求平均值公式,只是方法不一样*/

3:求数组中所有元素中的最大值

var arr3=[1,2,3,4,5];
//假设,max是最大值,那么max就要与arr3里面的数字做对比,如果max比arr3大,
//那么就不存储,小的话就存储最大值
var max=arr3[0];
for (var i=0;i<arr3.length;i++){
if (max<arr3[i]){//判断这个变量的值和数组中每个元素的值是不是最大值
/*给定条件,如果max小于arr3【i】,证明max比arr3【i】小,所以执行
max=arr3【i】,如果max比arr3【i】大,就不执行*/
max=arr3[i];
}
}
console.log(max);//输出最大值
//不要写成max=0;这样会有bug的,因为 var arr1=[-1,-2,-3,-4];那么最大的值是0,数字里面没有0,所以这就是一个bug

4:求数组中所有元素中的最小值

var arr4=[1,2,3,4,5];
//假设,max是最小值,那么max就要与arr4里面的数字做对比,如果max比arr4小,那么就存储,存储最小值
var min=arr4[0];
for (var i=0;i<arr4.length;i++){
    if (min>arr4[i]){//这里要小于,如果是大于的话就变成了最大值了
        min=arr4[i]
    }
}
console.log(min);

5:倒序遍历数组

var arr5=[1,2,3,4,5];
//正序
for (var i=0;i<arr5.length;i++){
    console.log(arr5[i]);
}
//倒序
var arr5=[1,2,3,4,5];
for (var i=arr5.length-1;i>=0;i--){
    console.log(arr5[i]);
}//原来的位置没有改变,只是倒着从后面开始数起输出,不是真正的反转。

6:把数组中每个元素用"|"拼接到一起产生一个字符串并输出

var names=["小明","小红","小苏","小天","小田","小苏","小白","小黑",];
var splicing="";//空的字符串
for (var i=0;i<names.length-1;i++){
    console.log(names[i]);//用索引的方式显示出来,由于names.length-1;所以会少一个
    splicing+=names[i]+"|";
}
/*console.log(splicing+names[names.length-1]);
names[]表示索引;names.length表示数组的长度,[names.length]索引里面是数组的长度,
[names.length-1]数组的长度减1等于索引的长度,
索引是从0开始的,到数组的长度减1结束,所以这就是为什么【names1.length-1】会等于小黑
* */
console.log(splicing+names[names.length-1]);

7:去掉数组中重复的0

var zero=[10,0,20,0,30,0,50];
var array1=[];//新数组,用来存储第一个数组里面所有非0的数字
for (var i=0;i<zero.length-1;i++){
    if (zero[i]!=0){
        /*zero[i]!=0当zero里面的数字不等于0则执行下面代码
            array1[array1.length]=zero[i];当数字不等于0时,新数组array1用来存储数据
            array1[array1.length]  array1是数组,array1[]变成了索引,array1.length数组的长度
            array1[array1.length]当for循环执行第一次时,数组的索引是0,数组的长度的第一个数字不是0,所以将10放到array1里面
            当for循环执行第二次时,数组的索引是1,数组的长度的第二个数字是0;此时将跳过zero[i]!=0这个条件直接执行下一次循环
             */
        array1[array1.length]=zero[i];
    }
}
//把新数组的长度作为下标使用,数组的长度是可以改变的
console.log(array1);

8:提示用户输入班级人数,求总成绩,平均值,最高分,最低分

var perCount=parseInt(prompt("请您输入班级的人数"));//创建一个数据组,用于提示用户输入班级人数
var perScores=[];//定义一个新的空数组,用于存储班级每个人的成绩
//用循环的方式录入每个人的成绩
for(var i=0;i<perCount;i++){
    //perScores=[]这个空数组用来存储用户输入每个人的成绩
    perScores[perScores.length]=parseInt(prompt("请输入第"+(i+1)+"个人的成绩"));
}
console.log(perScores);//显示用户输入的每个人的成绩
var sum5=0;//总成绩
var max=perScores[0];//最大值
var min=perScores[0];//最小值
for (var i=0;i<perScores.length;i++){
    sum5+=perScores[i];
    var avg=sum5/perScores.length;//平均值(代码是从上到下执行的,所有不能写着上面,否则不执行)
    if (max<perScores[i]){
        max=perScores[i];
    }
    if (min>perScores[i]){
        min=perScores[i];
    }
}
console.log("总成绩"+sum5);
console.log("平均值:"+avg);
console.log("最大值:"+max);
console.log("最小值:"+min);
/*
* 不要把总成绩、平均值、最小值和最大值写到for(var i=0;i<perCount;i++)这里面,perCount是用户输入的人数,
* perScore这个新定义的数组才是用来存储用户输入每个人的分数,要计算的是perScore这个数组里面所有数值的和、平均值
* 最大值和最小值。i<perScore.length这个才是用来计算所需要的总和、平均值、最大值和最小值。
* */

9:反转数组

var array=[10,20,30,40,50];
//循环的目的是控制交换的次数
for (var i=0;i<array.length/2;i++){
    //先把第一个元素的值放在第三方变量中
    var temp=array[i];
    /*array.length-1-i这里的要减i;如果不减i只单单减1,那么最后一个
       值跑到了第一个代替了第一个值,再次循环的话倒数第二个就不会跑到前面去
       ,所以这里要减i;循环第一次是0,循环第二次是1*/
    array[i]=array[array.length-1-i];
    //把第三方变量的值拿出来,这样第一个数字就变成了最后一个数字
    array[array.length-1-i]=temp;
}
console.log(array);
这里的反转才是位置发生改变的反转。原来的位置也发生了改变。


10:冒泡排序

按照一定的顺序排序这些数字。(从大到小或者从小到大)

依次比较相邻的两个值,如果后面的比前面的小(大),这将小(大)的元素排到前面,依照这个规则进行多次递减的迭代,直到顺序正确。

需要有两个循环来控制

图解:

 

实现代码:

var arr=[5,4,3,2,1];
for(var i=0;i<arr.length-1;i++) {//循环控制轮数。
    for (var j=0;j<arr.length-1-i;j++) {//循环控制轮数的次数。j<arr.length-1-i,-i是比较的次数越来越少
        if (arr[j]>arr[j+1]) {
            /*判断,第一个元素和二个元素做判断,第二个元素和第三个元素做判断,依次类推
               * 当j=0的时候,此时需要与j+1作比较
               * 如果要从最小值排到最大值,那么 arr[j]>arr[j+1]需要写成大于号*/
            var temp5 = arr[j];
            //定义第三方变量用于交换位置。前面的比后面的数字大,那么前面的数字就和后面的数字调换位置
            arr[j] = arr[j + 1];
            arr[j + 1] = temp5;
        }
    }
}
console.log(arr);
/*for(var i=0;i<arr.length-1;i++) {}
   *循环控制比较的轮数
   *第一轮是从5开始与后面的数字做比较,如果5比后面的4、3、2、1大,那么5要依次于4、3、2、1对调位置,
     最后变成4、3、2、1、5,比较了4次
   *第二轮是从4开始与前面后面的数字做比较,如果4比后面的3、2、1大,那么4要依次于3、2、1对调位置,
     最后变成3、2、1、3、4、5,比较了3次.5比4大,所以不用对调位置
   *第三轮是从3开始与前面后面的数字做比较,如果3比后面的2、1大,那么3要依次于2、1对调位置,
     最后变成2、1、3、4、5,比较了2次.
   *第四轮是从2开始与前面后面的数字做比较,如果2比后面的31大,那么2要依次于1对调位置,
     最后变成1、2、3、4、5,比较了1次.
     */
/*for(var i=0;i<arr.length-1;i++) {//循环控制轮数。for (var j=0;j<arr.length-1-i;j++) {} }
for (var j=0;j<arr.length-1-i;j++) {循环控制轮数的次数。j<arr.length-1-i,-i是比较的次数越来越少}
* 第一轮比较了4次。5和4比较、5和3比较、5和2比较、5和1比较,共4次比较
* 第二轮比较了3次。4和3比较、4和2比较、4和1比较,共3次比较
* 第三轮比较了2次。3和2比较、3和1比较,共2次比较
* 第四轮比较了1次。2和1比较,共1次比较
* */

函数

函数:把一堆重复的代码封装,在有需要的时候调用即可

函数的作用:代码的重用(重复使用)

函数的定义

function  函数名字(){

    函数体--->用于放置一堆重复的代码

}

函数的调用:函数名();括号不能漏掉。

例如:

function cool() {//函数定义

   console.log("切菜");

   console.log("放油");

   console.log("炒菜");

   console.log("下盐");

   console.log("装盘");

  }//打开浏览器是看不了的,要调用才能看到

 

//函数调用

  console.log("早饭————————");

  cool();

  console.log("午饭————————");

  cool();

  console.log("晚饭————————");

  cool();

总结:

1.函数需要先定义,然后才能使用

2.函数名字:要遵循驼峰命名法

3.函数一旦重名,后面的会把前面的函数覆盖

4.一个函数最好就是一个功能

函数的参数:

在函数定义的时候,函数名字后面的小括号里的变量就是参数,目的是函数在调用的时候,对用户传过来的值操作。

此时函数定义的时候后面的小括号里的变量叫参数;写了两个变量,就有两个参数。

在函数调用的时候,按照提示的方式,给变量赋值----->就叫传值,把这个值传到了变量(参数)中。

形参:函数在定义的时候小括号里的变量叫形参;

实参:函数在调用的时候小括号里传入的值叫实参。实参可以是变量也可以是值。

(function  consoleSun(x,y)){ }这个是函数的定义,括号里面的变量x和y就是参数,x和y是两个参数。如果在再括号里面再加一个变量z,那么就是三个参数。括号里面的变量不用写var,否则就会出现报错。

function  consoleSun(x,y)小括号里面的变量x和y叫形参。

调用consoleSun(x,y)小括号里传入的值叫实参     可以选择不写进去)

//函数定义
function  consoleSun(x,y){
/*这个是函数的定义,括号里面的变量x和y就是参数,x和y是两个参数。
 如果在再括号里面再加一个变量z,那么就是三个参数。括号里面的变量不用写var,否则就会出现报错。 */
      var sum=x+y;//计算和。第一个功能
      console.log(sum);//输出和。第二个功能
 }

//函数调用
 consoleSun(10,20);//小括号里面的变量x和y叫形参。调用consoleSun(x,y)小括号里传入的值叫实参

也可用下面的写法:

//函数定义
function  consoleSun(x,y){
/*这个是函数的定义,括号里面的变量x和y就是参数,x和y是两个参数。
如果在再括号里面再加一个变量z,那么就是三个参数。括号里面的变量不用写var,否则就会出现报错。 */
    var sum=x+y;//计算和。第一个功能
    console.log(sum);//输出和。第二个功能
}

//函数调用
  var num1=parseInt(prompt("请输入第一个数字"));
  var num2=parseInt(prompt("请输入第二个数字"));
  consoleSun(num1,num2);//小括号里面的变量x和y叫形参。调用consoleSun(x,y)小括号里传入的值叫实参

set:可以理解为:设置

get:可以理解为:获取

后面的命名大多数都是以set和get设置的

函数的返回值:

在函数内部有return关键字,并且在关键字后面有内容,这个内容被返回了,当函数调用之后,需要这个返回值,那么就定义变量接收即可。(需要值的话调用就行,不需要的话就不调用,但是函数定义里面的代码是会执行的。 )(尽可能保证函数只有一个功能)(注意:是return关键字的后面,不是下一行代码)

 例如:

function getSum(x,y){
   var  sum=x+y;
   return  sum//把和返回
}

//函数调用
var  result=getSum(10,20);
console.log(result);

定义的函数可以改为这样:

function getSum(x,y){
    return x+y;//把和返回
}//不需要在函数里面进行变量了

//函数调用
var  result=getSum(10,20);
console.log(result);

函数的参数和返回值的注意问题:

1.如果一个函数中有reture,那么这个函数就有返回值

如果一个函数中没有reture,那么这个函数就没有返回值

2.如果一个函数中没有明确的返回值,那么调用的时候接收了,结果是undefined。

(没有明确明确返回值:函数中有return,但是return后面没有任何内容)

3.函数没有返回值,但是在调用的时候接收了,那么结果就是undefined

4.变量声明了,没有赋值结果也是undefined

5.如果一个函数有参数,就是有参数的函数

如果一个函数没有参数,就是没有参数的函数

6.形参的个数和实参的个数可以不一致

7.return   下面的代码是不会执行的

案例:

1.求两个数中的最大值

function getMax(num1,num2) {
    return num1>num2?num1:num2;
}
console.log(getMax);//显示函数的代码
console.log(getMax(10,20));

另一种写法:

function getMax(num1, num2) {//num1和num2是形参
    return num1 > num2 ? num1 : num2;
}
var x = 10;
var y = 20;
var result = getMax(x, y);//x和y是实参
console.log(result);
/*x的值是10,num1的值是10; x和y不相等; x和num1相等,此时这行代码var result=getMax(x,y)一执行;是把x变量中的值复制一份出来
赋值给了num1,所以num1变量里面存的是10,此时出现了两块空间,一块是x的空间,一块是num1的空间,总共两块空间。y同理*/

2.求三个数中的最大值(可以写三,但是不要写4个,要写是4的话就要用循环)

function getThreeMax(x, y, z) {
    return x > y ? (x > z ? x : z) : (y > z ? y : z);
}
console.log(getThreeMax(10, 20, 40));

3.判断一个数是否是素数(质数),只能被1和自身整除,质数是从2开始,用这个数字和这个数字前面的所有的数字整除一次(没有1和自身的)

function isPrimeNumber(num) {
    for (var i = 2; i < num; i++) {
        if (num % i == 0) {
            //说明有一个数字整除了,就没有必要向后继续整除了,此时就已经验证出不是质数了
            return false;
        }
    }
    return true;
}
console.log(isPrimeNumber(8) ? "是质数" : "不是质数");
//可以这么写 console.log(isPrimeNumber(prompt("请您输入一个数字"))?"是质数":"不是质数");

4.求两个数字的差

function getSub(x, y) {
   return x - y;
}
console.log(10, 20);

5. 求一组数字中的最大值

方式一:

function getArrarMax(array) {//array这个变量未必存的是一个值,这么写传入的是一个数组
    //定义变量,假设这个变量中存储的是最大值
    var max = array[0];
    for (var i = 0; i < array.length; i++) {
        if (max < array[i]) {
            max = array[i];
        }
    }
    return max;
}

方式二:

var max = getArrarMax([1, 2, 3, 4, 5]);//不用重新定义变量,可以直接把数组输到函数中
console.log(max);

方式三:

console.log(getArrarMax([1, 2, 3, 4, 5]));//也可以这么写,直接把数组输到函数中
//一共三种方式可以选择
后面学JS对象的时候会出现

6.求一组数字中的最小值

function getArrarMin(array) {//array这个变量未必存的是一个值,这么写传入的是一个数组
    //定义变量,假设这个变量中存储的是最小值
    var min = array[0];
    for (var i = 0; i < array.length; i++) {
        if (min > array[i]) {
            min = array[i];
        }
    }
    return min;
}
console.log(getArrarMin([1, 2, 3, 4, 5]));

7.求一组数字的和

function getArraySum(array) {
    var sum = 0;
    for (var i = 0; i < array.length; i++) {
        sum += array[i];
    }
    return sum;
}
console.log(getArraySum([1, 2, 3, 4, 5, 6]));

8.求一个数组中的最大值和最小值还有和

     var max = array[0];//最大值
var min = array[0];//最小值
var sum = 0;//
for (var i = 0; i < array.length; i++) {
    sum += array[i];//求和
    //求最大值
    if (max < array[i]) {
        max = array[i];
    }//end if
    //求最小值
    if (min > array[i]) {
        min = array[i];
    }//end if
}//end for
var arr = [max, min, sum];
return arr;
}
var resultArray = getArrayMaxAndMinAndSum([1, 2, 3, 4, 5, 6, 7]);//不加括号console.log打印直接报错,注意细节
console.log("最大值"+resultArray[0]);
console.log("最小值" + resultArray[1]);
console.log("和" + resultArray[2]);

9.通过函数实现数组反转

function getReversal(arr) {
    for (var i = 0; i < arr.length / 2; i++) {
        var temp = arr[i];
        arr[i] = arr[arr.length - 1 - i];
        arr[arr.length - 1 - i] = temp;
    }
    return arr;
}
console.log(getReversal([1,2,3,4,5]));

10.通过函数实现冒泡排序

function getBubbling(arr2) {
    for (var i = 0; i < arr2.length - 1; i++) {
        for (var j = 0; j < arr2.length - 1 - i; j++) {
            if (arr2[j] > arr2[j + 1]) {
                var temp = arr2[j];
                arr2[j] = arr2[j + 1];
                arr2[j + 1] = temp;
            }
        }
    }
    return arr2;
}
console.log(getBubbling([1,3,4,6,5,2]));

11.求一个数字的阶乘

function getJieCheng(num) {
    var result=1;
    for (var i=1;i<=num;i++){
        result*=i;
    }
    return result;
}
console.log(getJieCheng([5]));

12.求斐波那契数列

function getFbi(num) {
    var num1=1;
    var num2=1;
    var sum=0;
    for (var i=3;i<=num;i++){
        sum=num1+num2;
        num1=num2;
        num2=sum;
    }
    return sum;
}
console.log(getFbi([12]));

13.输入: 年月日,获取这个日期是这一年的第几天

function isLeapYear(year) {
    return year%4==0&&year%100!==0||year%400==0;
}//这个函数放在前面这里或者后面都行
function getDays(year,month,day) {
    //定义变量存储对应得天数
    var days=day;
    //如果用户输入的是1月份,就没有必要向后算天数,直接返回天数
    if (month==1){
        return days;
    }
    //代码执行到这里--->说明用户输入的不是1月份
    //用户输入的如果是4月份23日--->那么前面的1,2,3月份都要相加再加上4月份的23天
    //定义一个数组,存储每个月份的天数
    var months=[31,28,31,30,31,30,31,31,30,31,30,31];
    //小于的数输入的月份-1
    for (var i=0;i<month-1;i++){//当i=4月份的时候,4<4-1,很明显,4比三大,所以不循第4
        days+=months[i];
    }
    //判断这个年份是不是闰年
    if (isLeapYear(year)&&month>2){
        days++;
    }
    return days;
}
console.log(getDays(2020,2,13));

14.求一个数字的阶乘和 (如果输入的是5这个数字,要算:5的阶乘+4的阶乘+3的阶乘+2的阶乘+1的阶乘)

function getJieChengSum(num) {
    var sum=0;//求和
    for (var i=1;i<=num;i++){
        sum+=getJieCheng(i);//函数调用,调用 12.求一个数字的阶乘
    }
    return sum;//最后要的是阶乘的和
}
console.log(getJieChengSum(5));
//1*2*3*4*5=120
//1+2+6+24+120=153      1+(1*2)+(2*3)*(6*4)+(24*5)   阶乘和

猜你喜欢

转载自www.cnblogs.com/haohaogan/p/12553983.html