2021.12.14周二 二阶段 day_07 js笔记

一、事件处理函数的问题

   // 代码并不永远是从上而下执行的

        console.log(111); // 111

        // 事件处理函数是后面才执行,也就是点击的时候才会执行
        document.onclick = function (){
            console.log(666);
        }

        console.log(222);  // 222




                                           
        function fn(){

            fn2()
            function fn2(){
                return 2
            }

            return 3

        }

        var res = fn();
        console.log(res);  // 3

二、知识点回顾

        // 函数:
        //     形参和实参,不对等的
        //     短路赋值
        //     字符串拼接(返回很多个值的时候,)     

        //     作用域!!!
        //          全局,局部,作用域是相对的(子函数可以访问到父函数的变量 )  
        //      形参:本质就是一个局部变量
        //      预编译
        //          提升var和具名函数
        //      函数:一种数据类型
        //      系统函数  prompt()   confirm()  eval()
        //      递归:传递与回归,自己调用自己

三、欧几里得求最大公约数

        // 欧几里得求最大公约数

        // 8 12 
        // 8 / 12    8
        // 12 / 8    4
        // 8 / 4     0
        // 4 / 0



        // 3 7 
        // 3 / 7  3
        // 7 / 3  1
        // 3 / 1  0
        // 1 / 0  

        // a % b === 0  b就是最大公约数

        function gcd(a , b){
            // if(a % b === 0){
            //     return b 
            // }    
            // return gcd(b , a % b)

            return a % b === 0 ? b : gcd(b , a % b);
        }

        // b为0的时候,a就是他们的最大公约数
        // function gcd(a , b){
        //      return b === 0 ? a : gcd(b , a % b);
        //}


        var res = gcd(28,18)
        console.log(res);

四、作业-随机产生0-100的数,多少次能抓到0

            //随机产生0-100之间的数,多少次才会抓到0 -- 递归?

            // for 循环求解
            // var count = 0 ;
            // for(var i = 0 ; ; i++){
            //     var a = parseInt(Math.random() * 100);
            //     count++ ;
            //     if(a === 0){
            //         break;
            //     }
            // }
            // console.log(count);


            
            //递归求解
            var count = 0;
            function randZero(){
                var a = parseInt(Math.random()*100);
                count++;
                if(a == 0){
                    return count
                }
                return randZero()
            }

            console.log(randZero());

五、arguments

        // console.log(1);     // 1

        // console.log(1,2);   // 1 2

        // console.log(1,2,3); // 1 2 3 

        // function sum(a,b){
        //     return a + b 
        // }

        // console.log(sum(1,2,3,4));  // 打印结果为3 后两个参数不接收

        // 一般情况下,使用形参来接受实参的值

        // 话可以使用arguments来接受实参 

        function log(){
            // 伪数组 / 类数组
            console.log(arguments);        // [1,2]  
            console.log(arguments[0]);     // 1
            console.log(arguments[1]);     // 2
            console.log(arguments[2]);     // undefined
            console.log(arguments.length); // 2
        }
        log(1,2)

六、数组

        // var a = 1 ;
        // var b = 3 ;
        // var c = 4 ;
        // var d = 5 ;
        // 数组:存储一组相同数据类型的数据
        var arr = [1,3,5,,2] ;
        console.log(arr);  // 打印 [1,3,5,2] 打不出空值

        // 数组下标   访问数组的值的方法:arr[index] 
        console.log(arr[0]);// 1

        // 数组的长度 
        console.log(arr.length); // 5

        console.log(arr[3]); // undefined 因为是空值

        var arr = ['a' , 'b' , 'c'];

        var arr = [1,2,'a','b',true];  // 不太规范

七、数组的长度

        var arr = [1,2,3] ;

        console.log(arr[10]); // undefined
      

        // [1,2,3,,,,,,,20]
        // 实际上变相的加长了数组的长度
        arr[10] = 20 ;

        console.log(arr[10]); // 20

        console.log(arr.length); // 11

        console.log(arr); // [1,2,3, , , , , , , ,20]

八、数组的声明

        // var arr = [1,2,3]    // 字面量声明

        // 数组是一个对象
        // var arr = new Array(1,2,3); // 实例化一个对象Array构造函数(用于创建对象的)

        // console.log(arr.length); // 3

        // console.log(arr); // [1,2,3]


        // var a = 1 ; // 字面量声明

        // var b = new Number(2) ; //实例化一个对象

        // console.log(a);  // 1
        // console.log(b);  // Number

        // var c = 'hello' ; 
        // var d = new String('hello');

        // console.log(c);  // hello
        // console.log(d);  // String

        // 当Array只有一个参数的时候,表示数组的长度
        // var arr2 = new Array(10);
        // console.log(arr2);  // length:10


        // 声明一个空数组,向数组中追加值
        var arr = [];
        arr[0] = 'a' ;
        arr[1] = 'b' ; 
        arr[2] = 'c' ;
        arr[10] = 'f' 

        console.log(arr); // length:11

十、生成十个随机数

        // 生成10个数,存入数组
        //      生一个,存一个

        //  创建一个空数组

        var arr = [];
        for(var i = 0 ; i < 10 ; i++){
            // arr[i] = rand(0,100);
            arr[arr.length] = rand(0,100);
        }
        console.log(arr);

十一、数组的遍历

        // 遍历:读取数组中的每一个值           

        var arr = [1,2,3,4,,,,5] ;
        console.log(arr[0]);   // 1
        console.log(arr[1]);   // 2
        console.log(arr[2]);   // 3


        // 循环遍历
            // for(var i = 0 ; i < arr.length ; i++){
            //     console.log(arr[i]);
            // }
            //长度为6 , 索引为5


        // for in 用于遍历对角的角标  --  bug(自动过滤掉空值)
        // for(var i in arr){
        //      console.log(arr[i]);
        // }



        // for of 遍历对象 的值
        // for(var v of arr){
        //     console.log(v);
        // }                    

十二、存入10个数,取平均数

        // var arr = [];
        // 抓10个数字,放进数组
        // var n1 = rand(0,100);
        // arr[0] = n1 ;
        
        // var n1 = rand(0,100);
        // arr[1] = n2 ;

        // var n3 = rand(0,100);
        // arr[2] = n3 ;

        // var n4 = rand(0,100);
        // arr[3] = n4 ;
        
        // for(var i = 0 ; i < 10 ; i++){
        //     // arr[arr.length] = rand(0,100)
        //     arr[i] = rand(0,100)
        // }
        // console.log(arr);


        
        // 1-100存入数组
        // var arr = [1,2,3,4,5,6,7....100]        
        var arr = [];
        // arr[0] = 1 ;
        // arr[1] = 2 ;
        // ...

        for(var i = 0 ; i < 100 ; i++){
            arr[i] = i + 1 ;
        }
        console.log(arr);


        // 把数组中所有数求和
        var sum = 0 ;
        // 遍历数组 
        for(var i in arr){
            sum += arr[i]
        }
        var res = sum / arr.length;
        console.log(res);

十三、数组随机取值

        //  封装函数:求数组中的平均数
        //      参数,返回值

        function averageArr(arr){
            //数组中的所有数求和
            var sum = 0 ;
            //遍历数组
            for(var v of arr){
                sum += v 
            }
            //求平均数
            return sum / arr.length
        }

        var arr = [];
        for(var i = 0 ; i < 10 ; i++){
            // var n = rand(0,100);
            // arr[i] =  n ;
            // 每次赋值之后,数组的长度都会发生改变
            arr[arr.length] = rand(0,100);
        }

        console.log(arr);
        var res = averageArr(arr)
        console.log(res);

十四、随机验证码

        function rand(min,max){
            return  parseInt(Math.random()*(max-min)+min)
        }

        var arr = ['a','b','c','d','1','2','3','4','A','B','C','D'];

        var res = '';
        for(var i = 0 ; i < 4; i++){
            // var j = rand(0,arr.length);
            // var v = arry[j] ;
            // res += v ;
            res += arr[rand(0,arr.length)];

        }
        console.log(res);

十五、找到数组中的最大值

        // // 找到数组中的最大值
        //      一一比较
        //      假设第一个值最大

        //    9 8 6 3 1
        //    假设第一个值最大  max = 9 ;
        //      9  8 比较  9


        // var arr = [6,3,2,12,34,56,5];

        // // 假设第一个值最大
        // // 然后两两比较 把较大的值赋给max
        // var max = arr[0] ;
        // 拿他和后面的所有数比较
        // for(var i = 1 ; i < arr.length ; i++){
        //     // 如果这个数比后面的数要小
        //     if(max < arr[i]){
        //         //  max 只存储最大的那个数
        //         max = arr[i]
        //     }
        // }
        // console.log(max);



        function maxArr(arr){
            // 找到最大值
            // var arr = [6,3,2,12,34,56,5];
    
            // 假设第一个值最大
            // 然后两两比较 把较大的值赋给max
            var max = arr[0] ;

            for(var i = 1 ; i < arr.length ; i++){
                //如果这个数比后面的数要小
                if(max < arr[i]){
                    // max 只存储最大的那个数
                    max = arr[i]
                }
            }
            console.log(max);
            return max 
        }

        maxArr([1,4,5,632,234,23,4])




        //找到最小值

        // var min = arr[0];
        // for(var i = 1 ; i < arr.length ; i++){
        //     if(min > arr[i]){
        //         min = arr[i]  //把较小的值赋给min
        //     }
        // }
        // console.log(min);

        //  找到数组中是否存在某个值  [1,2,3,4,56]  3

        //  把数组中的值拼接成字符串  [1,2,3,4]   '1,2,3,4'





十六、找到数组中是否存在某个值


        // 找到数组中是否存在某个值
        //   把要找的这个值与数组中的每一个值作比较
        // var arr = [1,2,3,4,5] ; 

        // // //  因为找到他存在的证据很容易
        //  var flag = false ;

        // // // 遍历数组
        //  for(var v of arr){
        //     if(55 === v ) {
        //          // alert('存在')
        //          flag = true ;
        //      }
        // }
        // // //比较结束以后,才能说找不到
        //  alert(flag)


        function includes(arr,n){         

            // // //  因为找到他存在的证据很容易
            //  var flag = false ;

            //遍历数组
            for(var v of arr){
                if(n === v ) {
                    // alert('存在')
                    // flag = true ;
                    // 如果已经找到了就需要继续找
                    // break;
                    return true
                }
            }
            // 比较结束以后,才能说找不到
            // return flag
            return false
        }
        var res = includes([1,2,3,4],12)
        console.log(res);

十七、数组拼接成字符串

        // 把数组中的值拼接成字符串 [1,2,3,4]  ->  1,2,3,4

        // 思路:把数组中的每一个值拼接到字符串中

        var arr = [1,2,3,4];
        var res = '' ;
        // for (var i in arr){
        //     // 最后一个不加逗号
        //     console.log(i); // for in 一般用于遍历对象,字符串

        //     if( i == arr.length - 1){
        //         res += arr[i] 
        //     }else{
        //         res += arr[i] + ','
        //     }
        // }
        // console.log(res);


        // 一般,数组的遍历直接使用for循环
        // for(var i = 0 ; i < arr.length ; i++){
        //         // 最后一个不加逗号
        //         console.log(i); //字符串
        //         res += i < arr.length-1 ? arr[i] + ',': arr [i] 

        // }
        // console.log(res);

            function join(arr,f){
                for(var i = 0 ; i < arr.length ;i++){
                    // 最后一个不加逗号
                    // console.log(i) ; //字符串
                    res  += i < arr.length-1 ? arr[i] + f : arr [i] 
                }
                console.log(res);
                return res 

            }
            join([1,2,3,4] , '#')
            

十八、冒泡排序

        // 数组中的值从小到大排序
        var arr = [8,5,3,2,1];

        //  思路
        //  第一轮  拿到最大值放在最后面
        //  8 5   5 8 3 2 1
        //  8 3   5 3 8 2 1
        //  8 2   5 3 2 8 1
        //  8 1   5 3 2 1 8

        //  第二轮   拿到第二大的值放在倒数第二个
        //  5 3   3 5 2 1 8
        //  5 2   3 2 8 2 1
        //  5 1   3 2 1 5 8     
        //  5 8   3 2 1 5 8     多余的一次

        //  第三轮
        //  3 2   2 3 1 5 8
        //  3 1   2 1 3 5 8
        //  3 5                 多余两次
        //  5 8

        //  第四轮
        //  2 1   1 2 3 5 8
        //  2 3                 多余三次
        //  3 5
        //  5 8


        //比较的轮数  5个数比较4次
        
        for(var i = 0 ; i < arr.length - 1; i++){
            // 每两个相邻的值做比较(大的向后交换)
            for(var j = 0 ; j < arr.length - 1 - i ; j++){
                if(arr[j] > arr[j + 1]) {
                    var t = arr[j] ;
                    arr[j] = arr[j + 1]
                    arr[j + 1] = t          // 交换
                }       
            }
            //每一轮拿到一次最大值
            console.log(arr);
        }
        console.log(arr);

十九、选择排序

        var arr = [8,5,3,2,1] ;

        // 第一轮
        // // 先找到最小值,再和第一个位置进行交换

        // // 假设第一个位置上的数最小 
        var min = 0 ;
        //    拿第一个位置上的数与后面的所有值做比较
        for(var i = 1 ; i < arr.length ; i++){
            if(arr[min] > arr[i]){
                min = i
            }
        }

        console.log(min);

        //拿到最小值以后,与第一个位置上的值交换
        var t = arr[0];
        arr[0] = arr[min];
        arr[min] = t ;

        // 1 5 3 2 8

        //  假设第二个位置上的数最小
        var min = 1 ;
        for(var i = 2 ; i < arr.length ; i++) {
            if(arr[min] > arr[i]) {
                min = i 
            }
        }
        console.log(min);

        // 拿到最小值以后,与第一个位置上的值交换
        var t = arr[1] ;
        arr[1] = arr[min] ;
        arr[min] = t ;


        // 1 2 3 5 8


        // 第三轮
        //   假设第三个位置上的数最小



        // 第四轮



        var arr = [1,4,2,7,3,6];

        for(var i = 0 ; i < arr.length - 1; i++){
            // 假设第i个位置上的数是最小的
            var min = i ;
            // 拿这个最小的值和后面所有的数进行比较
            for(var j = i + 1 ; j < arr.length ; j++){
                //min对应的数比后面的大
                if(arr[min] > arr[j]) {
                    min = j 
                }
            }
            console.log(min);
            // 拿到最小值以后,与第一个位置上的值交换
            if(min !== i) {          
                var t = arr[i];    // 交换
                arr[i] = arr[min];
                arr[min] = t ;
            }
        }

        console.log(arr);

二十、数组的基本方法

        // push(v1,v2,v3...) 向数组尾部追加值 
        // pop()  在数组尾部删除一个值

        // unshift()  向数组的头部追加值
        // shift()    向数组的头部删除一个值 

        var arr = [1,2,3];
        // arr[3] = 'a' ;
        arr.push('a' , 'b' , 'c');
        console.log(arr);  //尾部追加
        arr.pop();
        console.log(arr);  //尾部删除

        arr.unshift('hello' , 'hi');
        console.log(arr);  //头部追加
        arr.shift();      
        console.log(arr);  //头部删除


        //用push 向尾部追加值的方法 实现在数组里放10个数
        var arr2=[];
        for(var i = 0 ; i < 10 ; i++ ){
            // arr2[i] = i;
            arr2.push(i)
        }
        console.log(arr2);

二十一、push封装

        // 向一个数组中追加数据

        // var arr = [1,2,3,4];
        // arr[arr.length] = 'hello';
        // console.log(arr);   // [1,2,3,4,'hello']



        // function push(n , n2 , n3){
        //     var arr = [1,2,3,4]
        //     arr[arr.length] = n ;
        //     arr[arr.length] = n2 ;
        //     arr[arr.length] = n3 ;
        //     console.log(arr);
        // }

        // push('a','b','h','t')

        function push(){
            var arr = [1,2,3,4];
            // 用于接收实参列表  --- 伪数组
            console.log(arguments);
            for(var i = 0;i < arguments.length;i++){
                console.log(arguments[i]);
                arr[arr.length] = arguments[i];
            }
            console.log(arr);
        }
        push('a','b','h','t')

 二十二、pop封装

    // 删除数组中的最后一个值
        function pop(){
            var arr = [1,2,3,4,5]
            var arr2 = []
            //因为要娶不到最后一个5 
            for(var i = 0 ; i < arr.length-1 ;  i++){
                arr2.push(arr[i])
            }
            console.log(arr2);
        }
      pop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值