[Javascript 高级程序设计]学习心得记录7 引用类型(上)

来源:互联网 发布:工作记录软件 编辑:程序博客网 时间:2024/06/06 06:32

    js引用类型的值(对象)是引用类型的实例,引用类型和类很像但是又不是同一个东西,引用类型被称为対象定义,描述一类对象所具有的属性和方法。

    一,object类型

    object类型是js基础原生类型,创建该类型实例有两种方法:new和对象字面量表示法。

        var person = new Object();  // var person = {}; 一个效果        person.name = "Nicholas";        person.age = 29;
        var person = {            name : "Nicholas",            age : 29        };
    对象字面量是向函数传递大量可选参数的首选方式。

    访问也有两种方式:person.name和person['name']。建议使用后种,可以使用变量来访问属性。

    二,Array类型

    创建方式也有两种

        var colors = new Array(3);      //create an array with three items        var names = new Array("Greg");  //create an array with one item, the string "Greg"        alert(colors.length);        alert(names.length);
        var colors = ["red", "blue", "green"]; //creates an array with three strings        var names = [];                        //creates an empty array        var values = [1,2,];                   //AVOID! Creates an array with 2 or 3 items        var options = [,,,,,];                 //AVOID! creates an array with 5 or 6 items                alert(colors.length);    //3        alert(names.length);     //0        alert(values.length);    //2 (FF, Safari, Opera) or 3 (IE)        alert(options.length);   //5 (FF, Safari, Opera) or 6 (IE)
    而array的方法也是特别特别多,这对我们处理数据提供了很大的方便。值得注意的一点是,length属性不是只读的,修改length属性可以修改数组长度。

1.检测数组方法

    Array.isarray()方法。虽然instanceof()方法也可以,但是有不同执行环境下,可能存在不同的Array构造函数,这个具体会在后面提到。所以推荐使用isarray()方法

2.转换方法

    所有对象都有的toLocaleString(),toString()和valueOf()方法就不说了。值得注意的是,alert()会自动调toString()方法。

    有一个很实用的方法,join()。可以使用不同的分隔符来构建这个字符串。这个我在日常开发的时候经常用到,非常实用。

        var colors = ["red", "green", "blue"];        alert(colors.join(","));      //red,green,blue        alert(colors.join("||"));     //red||green||blue
3.栈和堆方法

    push(),pop(),shift()三个方法,没什么特别的。主要是平时要记得灵活使用,很多时候都忘了这几个方法。

        var colors = ["red", "blue"];        colors.push("brown");              //add another item        colors[3] = "black";               //add an item        alert(colors.length);  //4                var item = colors.pop();           //get the last item        alert(item);  //"black"var item = colors.shift();                     //get the first item        alert(item);   //"red"        alert(colors.length);  //1
 4.重排序方法

有reverse ()翻转数组顺序的方法,还有sort()排序方法。值得注意的一点是,sort()方法可以加一个比较函数作为参数,这样可以自定义排序规则,其实在前面的心得3就是这个方法http://blog.csdn.net/m0_37645820/article/details/77867965,有兴趣可以看看,给对象数组排序。

        function compare(value1, value2) {            if (value1 < value2) {                return 1;            } else if (value1 > value2) {                return -1;            } else {                return 0;            }        }                var values = [0, 1, 5, 10, 15];        values.sort(compare);        alert(values);    //15,10,5,1,0
5.操作方法

    主要有三个,concat()方法会创建一个当前数组的副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。和push()的区别就是,push操作的是数组的本体,而concat是构成一个新的数组,这点是值得注意的。

        var colors = ["red", "green", "blue"];        var colors2 = colors.concat("yellow", ["black", "brown"]);                alert(colors);     //red,green,blue                alert(colors2);    //red,green,blue,yellow,black,brown
        slice()方法,可以基于当前数组中的一个或者多个项,创建一个新的数组。而不会影响原来的数组,和concat一样。

        var colors = ["red", "green", "blue", "yellow", "purple"];        var colors2 = colors.slice(1);        var colors3 = colors.slice(1,4);                alert(colors2);   //green,blue,yellow,purple        alert(colors3);   //green,blue,yellow
        splice()方法是操作数组本体的,可以删除,插入和替换数组的元素。返回从原始数组中删除的项。

        var colors = ["red", "green", "blue"];        var removed = colors.splice(0,1);              //remove the first item        alert(colors);     //green,blue        alert(removed);    //red - one item array                removed = colors.splice(1, 0, "yellow", "orange");  //insert two items at position 1        alert(colors);     //green,yellow,orange,blue        alert(removed);    //empty array        removed = colors.splice(1, 1, "red", "purple");    //insert two values, remove one        alert(colors);     //green,red,purple,orange,blue        alert(removed);    //yellow - one item array
    熟练掌握这三个方法和前面的栈堆方法,基本上就可以对数组为所欲为了。

6.位置方法

    一个很简单而且实用的方法,indexOf(),返回查找值在数组中的位置,找不到返回-1。值得注意的是,是按全等匹配的。

        var numbers = [1,2,3,4,5,4,3,2,1];                alert(numbers.indexOf(4));        //3        alert(numbers.lastIndexOf(4));    //5                alert(numbers.indexOf(4, 4));     //5        alert(numbers.lastIndexOf(4, 4)); //3               var person = { name: "Nicholas" };        var people = [{ name: "Nicholas" }];        var morePeople = [person];                alert(people.indexOf(person));     //-1        alert(morePeople.indexOf(person)); //0
7,迭代方法

    js数组有5个迭代方法,接收两个参数:要在每一项运行的函数和运行该函数的作用域(可选)。传入的这个函数有三个参数:数组项的值(intem),该项在数组的位置(index)和数组(array)本身。

        1、every(): 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则结果返回true。
        2、filter(): 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
        3、forEach(): 对数组中的每一项运行给定函数,这个方法没有返回值。
        4、map(): 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
        5、some(): 对数组中的每一项运行给定函数,如果该函数任意一项返回true,则返回true。
        根据应用场景,可以分为三种。

        首先是检验用的every和some方法,every是数组每项都通过才返回true,some是只要有通过的就返回true。

        var numbers = [1,2,3,4,5,4,3,2,1];                var everyResult = numbers.every(function(item, index, array){            return (item > 2);        });                alert(everyResult);       //false                var someResult = numbers.some(function(item, index, array){            return (item > 2);        });                alert(someResult);       //true
    然后是筛选用的filter方法,返回通过的数组元素组成的数组。

        var numbers = [1,2,3,4,5,4,3,2,1];                var filterResult = numbers.filter(function(item, index, array){            return (item > 2);        });                alert(filterResult);   //[3,4,5,4,3]
    最后是循环操作的方法,map和forEach。forEach和for循环的效果其实是一样的,没有返回值。

        array.forEach(function(item, index, array)){              //执行某些操作        }
    而map的区别是,map是返回一个新的数组,不会影响原来的数组。

        var numbers = [1,2,3,4,5,4,3,2,1];                var mapResult = numbers.map(function(item, index, array){            return item * 2;        });                alert(mapResult);   //[2,4,6,8,10,8,6,4,2]
8. 归并方法

    js数组提供了归并方法,reduce()。两个参数:一个在每一项上都调用的函数和作为归并基础的初始值(可选)。这个函数有四个参数:前一个值,当前值,项的索引和数组本身。所以归并实际上是从数组的第二项开始的。对于算累加,累乘等操作很方便。

        var values = [1,2,3,4,5];        var sum = values.reduce(function(prev, cur, index, array){            return prev + cur;        });        alert(sum);//15


后面还有RegExp类型,函数类型和基本包装类型,下次再写。









阅读全文
0 0