第五章:引用类型(一)-Object和Array

引用类型
    引用类型的值(对象)是引用类型的一个实例
    引用类型是一种数据结构,用于将数据与功能组织在一起
    也常被称为类,

Object
    对象的两种创建方式
        使用new操作符
        对象字面量表示法

Array
    数组的length不是只读的,还可设置,没有被赋值的地方为undefined
    检测是否为数组
        console.log([] instanceof Object);//检测对象的数据类型
        console.log([].constructor.name);//Array
        console.log(Array.isArray([])) //true


     !(function () {
            var people1 = {
                toLocaleString(){
                    return 'people1.1'
                },
                toString(){
                    return 'people1.2'
                }
            }
            var people2
                = {
                toLocaleString(){
                    return 'people21'
                },
                toString(){
                    return 'people22'
                }
            }

            var people=[people1,people2];
            console.log(people);
            alert(people);//people1.2,people22
            alert(people.toLocaleString());//people1.1,people21

        })()
 !(function () {
        /*栈方法(栈的插入(推入)与删除(弹出)只发生在一个位置(栈的顶部))*/
        /*push()推入 pop()弹出*/
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        console.log(arr.push(0, 1, 5, 77)); //尾部增加 返回值为数组长度
        console.log(arr);
        console.log(arr.pop());//尾部删除  返回值是删除的内容
        console.log(arr);
    })()

    !(function () {
        /*队列方法*/
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        console.log(arr.shift());//数组中移除第一项 返回值是移除的数组
        console.log(arr);
        console.log(arr.unshift(1, 1, 1)); //返回值为数组的长度 前面添加元素
        console.log(arr)
    })()

    !(function () {
        /*重排序*/
        var arr = [1, 9, 99, 4, 44, 6, 66, 5, 9];
//        reverse() 翻转数组
        console.log(arr.reverse());//返回值为翻转之后的数组
        console.log(arr);
        console.log(arr.sort());//会根据数字首数字大小排序,小到大,
        console.log(arr.sort(function (a, b) {
            return a - b;//正序
        }));
        console.log(arr.sort(function (a, b) {
            return -(a - b)//倒序
        }))


    })();

    !(function () {
        console.log('操作方法');
        /*操作方法*/
        //操作包含在数组中的项
        var arr = [1, 2, 3];
        console.log(arr);
        /*concat()会创建当前数组的一个副本然后将接受到的参数天津爱到这个副本的末尾最后但是重新构建的数组*/
        console.log(arr.concat(11, 22, 33, [444, 555], {name: 'hxq'})); //返回值为改变之后的数组 因为赋值了一个对象副本,所以不改变原数组
        //可添加多个参数,数组会直接加入其中每个元素,但是对象就是添加对象 (9) [1, 2, 3, 11, 22, 33, 444, 555, {…}];
        console.log(arr);//[1, 2, 3]

        /*slice()
         *   基于当前数组的一个或者多个项(不会改变原数据)
         **/
        console.log(arr.slice(1, 2));//数组的截取 从第一位到第二位
        console.log(arr); //[1, 2, 3]
        console.log(arr.slice(-3, -1));//从倒着数第三位到倒着数第一位截取 ,
        //如果参数一大于参数二 则返回的是空数组

        /*splice()*/
        //一个强大的方法有很多用法
        /*
         *   一个参数:从参数一节渠道最后一位;
         *   两个参数:从参数一往后截取参数二位,
         *   三个参数或更多:参数一往后就去参数二位,将后面的元素替换掉截取的部分
         *   */
        console.log('splice');
        var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        console.log(arr1.splice(2, 4));//[3, 4, 5, 6] (从第二位开始往后截取四位)
        console.log(arr1);//[1, 2, 7, 8, 9] (原数组会受到改变)
        console.log(arr1.splice(1));
        console.log(arr1);
        var arr2 = [1, 2, 3, 4];
        console.log(arr2.splice(1, 2, 88, 88, 88));
        console.log(arr2);


    })()

    !(function () {
//        位置方法
        /*  indexOf()
         * lastIndexOf()
         *     用的是=== 做比较
         *     参数一:要查找的元素;
         *     参数二:从第几个元素开始查找
         * */
        console.log('位置方法');
        var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
        console.log(arr.indexOf(4, 3));
        console.log(arr.lastIndexOf(2));

    })()

    !(function () {
        /*数组的迭代方法
         *   every() ; 数组中所有元素满足迭代条件则为true;
         *   some() ;数组咋弄有一个元素满足迭代器条件则返回true
         *   filter() ;返回满足条件得数组;
         *   forEach() ;遍历操作,本质上与for循环一致
         *   map() ;遍历操作 返回的数组中每个元素都可以在迭代器中修改
         * */
        console.log('迭代方法');
        var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
        var result = arr.every(function (v,k,ele) {
           console.log(1);
           return v>-2;//必须要有这句 不然不会迭代
        })
        console.log(result);//数组中每个元素都满足迭代中的条件则为true;

        result=arr.filter(function (v,k,ele) {
            return v>5;
        });
        console.log(result);

    })()
    !(function () {
            /*归并方法
             *   reduce()
             *      参数1:第一次遍历是数组的第一项,然后就是迭代器返回的值
             *      参数2:从数组的第二项开始一直往后
             *      参数3:参数2的下标
             *      参数4:数组本身
             *          返回值是最后的返回值
             *   reduceRight()
             *   */
            console.log('归并');
            var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    
    
    //        var result=arr.reduce(function (a,b,c,d) {
    //
    ////            console.log(1);//里面执行的次数是数组的长度-1次
    //            console.log(a,b,c,d);
    //            return a+b;
    //        })
    //        console.log(result)
            var result=arr.reduceRight(function (a,b,c,d) {
    //
    //            console.log(1);//里面执行的次数是数组的长度-1次
                console.log(a,b,c,d);
                return a+b;
            })
            console.log(result)
        })()
原文地址:https://www.cnblogs.com/aqigogogo/p/7601602.html