JavaScript基础知识五

1、数组
  1、数组是引用类型的对象
        1、原始类型(基本类型/值类型) :将数据保存在内存的栈(stack)中的
        2、引用类型:将真正的数据保存在内存的堆(heap)中,在栈中会对堆中的地址进行 引用
        3、undefined 与 null
            1、undefined :声明变量未赋值
            2、null :空,即让当前对象不再指向任何的空间,主动释放空间.在程序中,如果不再使用某对象的话,尽可能将其设置为 null
        4、面试题
            1、有如下代码 分析结果
                <script>
                    function changeArray(arr){
                        arr[0] = "鲁班七号";
                        arr[1] = "程咬金";
                    }

                    var array = ["大乔","小乔"];
                    changeArray(array);
                    console.log(array); //结果:鲁班七号,程咬金
                </script>

如图所示:


                    
            2、有如下代码 分析结果
                <script>
                    function changeArray(arr){
                        arr = new Array("鲁班七号","程咬金");
                    }
                    var array = ["大乔","小乔"];
                    changeArray(array);
                    console.log(array); //结果:大乔,小乔
                </script>
            原因:按引用传递
                引用类型的数据在做参数传递时,实际上传递的是地址(副本),而不是真正的值

如图所示:




    2、关联数组
        php中:$array=["name"=>"西门庆"];
        以数字作为下标的数组,称为"索引数组"
        以字符串作为下标的数组,称为"关联数组"
        在JS中的关联数组:
            var array = [];
            array["字符串下标"]=值;
            ex:
                var array = [];
                array["西游记"] = "古代神话故事";
                array["红楼梦"] = "古代爱情故事";
                array["水浒传"] = ["西门庆","潘金莲","武大郎"];

                console.log(array.length); 结果:0
            注意:
                1、关联数组中,字符串下标的内容是不记录到length中的
                2、关联数组中,只能使用字符串作为下标取值,索引下标不能用
    3、for ... in
        遍历出任意数组中的字符串下标和索引下标
        语法:
            for(var 变量 in 数组){
                变量:字符串下标 或 索引下标
                注意:变量的数据类型为 string
            }
    4、排序 - 冒泡排序
        1、什么是冒泡排序
            将一组数字,按照从小到大的方式排列
            原理:
                两两比较,小的靠前
            特点:
                var arr = [23,9,78,6,45];
                1、n个数字,比较了n-1轮(外层循环)
                    for(var i=1;i<arr.length;i++){}
                2、每轮中的比较次数(内层循环)
                    随着轮数的增加,比较次数在减少
                    第一轮:比较的次数,比轮数少1次
                    第二轮:比较的次数,比轮数少2次
                    for(var j=0;j<arr.length-i;j++){}
                3、每次比较时,如果第一个数字大于第二个数字,则交换位置
                    if(arr[j] > arr[j+1]){
                        交换 arr[j] 和 arr[j+1] 的位置
                    }

2、数组中的常用方法
     1、toString()
        作用:将一个数组转换为字符串,并返回转换后的结果
        语法: var str = 数组对象.toString();

    2、join()
        作用:将数组的元素通过指定的字符串连接到一起,并返回连接后的字符串
        语法:var str = 数组对象.join("字符串");

    3、concat()
        作用:拼接两个或更多的数组,并返回拼接后的结果
        语法:
            var result = 数组对象.concat(数组1,数组2,... ...);
        注意:
            1、concat不会改变现有数组,而是返回拼接后的结果
            2、要拼接的数据不一定是数组,也可以是其它类型的数据

    4、slice()
        作用:截取子数组,从指定的数组中,截取几个连续的元素组成一个新数组
        语法:
            var arr = 数组名.slice(start,end);
            start:从哪个下标位置处开始截取,取值为正,从前向后算,取值为负,从后向前算
                       0      1        2       3
            var arr=["中国","美国","俄罗斯","加拿大"];
                       -4     -3       -2      -1
            end : 指定结束位置处的下标(不包含),该参数可以省略,省略的话相当于是从 start 一直截取到 结束;
        注意:
            1、该函数不会影响现有数组,会返回新的子数组

    5、splice()
        作用:允许从指定数组中,删除一部分元素,同时再添加另一部分元素
        语法:arr.splice(start,count,e1,e2,... ...);
            start : 要添加或删除元素的起始下标位置
            count : 指定要删除的元素个数,取值为0表示不删除
            e1,e2,... : 要增加的元素们(可选的)
            
            返回值:返回一个由删除的元素所组成的数组
        注意:该函数会改变现有数组的结构

    6、reverse()
        作用:将数组进行反转
        语法:数组名.reverse();
        注意:该函数会改变当前数组的内容
    7、sort()
        作用:排序,默认情况下,按照数组的元素们的Unicode码进行升序排序。(默认按照字符串的方式去排列的)
        语法:数组名.sort();
        注意:该函数会改变当前数组的内容

        特殊:允许自定义排序规则(排序函数),从而实现对数字的升降序排序
            语法:数组名.sort(排序函数);
        ex:
            1、将数字升序排序
                var arr = [78,165,92,8,34,13];
                //定义升序的排序函数
                function sortAsc(a,b){
                    return a-b;
                }
                //为arr排序指定排序函数
                arr.sort(sortAsc);
                原理:
                    1、指定排序函数-sortAsc,定义两个参数a,b,表示的是数组中相邻的两个数字
                    2、将排序函数指定给数组的sort()函数。数组会自动传递数据到sortAsc()中,如果sortAsc函数的返回值>0的话,则交换两个数字的位置,否则不变
        
        使用匿名函数指定排序函数:
            匿名函数:是一个没有名称的函数,只针对某一功能而存在
            arr.sort(排序函数);

            匿名函数:
            arr.sort( function(a,b){return a-b;} );
posted @ 2020-08-21 18:40  柒涩波  阅读(162)  评论(0编辑  收藏  举报