js高级第三版(第五章 引用类型)一

引用类型的值(对象)是引用类型的一个实例。

ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起。--》类(但不具备类和接口的基本结构)

引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。

    5.1 Object 类型

对于在应用程序中存储和传输数据而言,它们确实是非常理想的选择。

创建 Object 实例的方式有两种。

    第一种是使用 new 操作符后跟 Object 构造函数

            var obj= new Object();

    另一种方式是使用对象字面量表示法。

            var obj={  };

   这种传递参数的模式最适合需要向函数传入大量可选参数的情形。一般来讲,命名参数虽然容易处理,但在有多个可选参数的情况下就会显示不够灵活。最好的做法是对那些必需值使用命名参数,而使用对象字面量来封装多个可选参数。 

    一般来说,访问对象属性时使用的都是点表示法,这也是很多面向对象语言中通用的语法。不过,在 JavaScript 也可以使用方括号表示法来访问对象的属性。在使用方括号语法时,应该将要访问的属性以字符串的形式放在方括号中。

    从功能上看,这两种访问对象属性的方法没有任何区别。但方括号语法的主要优点是可以通过变量来访问属性

    如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号表示法

    属性名中包含空格,也可以用方括号表示法

    属性名中是可以包含非字母非数字的,这时候就可以使用方括号表示法来访问它们。

    5.2 Array 类型

    ECMAScript 数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的是,ECMAScript 数组的每一项可以保存任何类型的数据。

    创建数组的基本方式有两种。

    第一种是使用 Array 构造函数,

    var colors = new Array();                    //创建空数组

    var colors = new Array(20);                //创建20个元素的数组

    var colors = new Array("red", "blue", "green");        //创建元素为red,blue,green的数组

    在使用 Array 构造函数时也可以省略 new 操作符。

    第二种基本方式是使用数组字面量表示法。

    var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组

    var names = []; // 创建一个空数组

    var values = [1,2,]; // 不要这样!这样会创建一个包含 2 或 3 项的数组

    var options = [,,,,,]; // 不要这样!这样会创建一个包含 5 或 6 项的数组

    注:与对象一样,在使用数组字面量表示法时,也不会调用 Array 构造函数(Firefox 3及更早版本除外)。

    数组的 length 属性很有特点——它不是只读的。因此,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。

    数组最多可以包含 4 294 967 295 个项,这几乎已经能够满足任何编程需求了。如果想添加的项数超过这个上限值,就会发生异常。而创建一个初始大小与这个上限值接近的数组,则可能会导致运行时间超长的脚本错误。

    5.2.1 检测数组

    ECMAScript 3-->  instanceof

    ECMAScript 5 --> Array.isArray()

    5.2.2 转换方法

    所有对象都具有 toLocaleString()、toString()和 valueOf()方法。

    实际上,为了创建这个字符串会调用数组每一项的 toString()方法。

   toLocaleString()方法经常也会返回与 toString()和 valueOf()方法相同的值,但也不总是如此。当调用数组的 toLocaleString()方法时,它也会创建一个数组值的以逗号分隔的字符串。而与前两个方法唯一的不同之处在于,这一次为了取得每一项的值,调用的是每一项的 toLocaleString()方法,而不是toString()方法

    如果数组中的某一项的值是 null 或者 undefined,那么该值在 join()、toLocaleString()、toString()和 valueOf()方法返回的结果中以空字符串表示。

    5.2.3 栈方法(后进先出)

    ECMAScript 为数组专门提供了 push()和 pop()方法,以便实现类似栈的行为。

    push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。

    pop()方法则从数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项。

    5.2.4 队列方法(先进先出)

    shift(),它能够移除数组中的第一个项并返回该项,同时将数组长度减 1。

    5.2.5 重排序方法

    数组中已经存在两个可以直接用来重排序的方法:reverse()和 sort()。

    reverse()方法会反转数组项的顺序。

    sort()方法按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。

    reverse()和 sort()方法的返回值是经过排序之后的数组。

    5.2.6 操作方法

    concat()方法可以基于当前数组中的所有项创建一个新数组。

        这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。

    slice(),它能够基于当前数组中的一或多个项创建一个新数组。

        slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。

        在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。

        如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项。

        如果 slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置。

        注意,slice()方法不会影响原始数组。

    splice()的主要用途是向数组的中部插入项,但使用这种方法的方式则有如下 3 种。

         删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如,splice(0,2)会删除数组中的前两项。

         插入:可以向指定位置插入任意数量的项,只需提供 3 个参数起始位置0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。例如,splice(2,0,"red","green")会从当前数组的位置 2 开始插入字符串"red"和"green"。

         替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,"red","green")会删除当前数组位置 2 的项,然后再从位置 2 开始插入字符串"red"和"green"。

    splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则返回一个空数组)。

    splice(起始位置 , 要删除项数,插入项……)

    起始位置:操作开始的位置;

    要删除项数:确认要删除几项(开始位置删除0项,表示插入);

    插入项:插入的数据,如果省略,表示该函数为只删除元素。

    5.2.7 位置方法

    ECMAScript 5 为数组实例添加了两个位置方法:indexOf()和 lastIndexOf()。

    indexOf()方法从数组的开头(位置 0)开始向后查找,

    lastIndexOf()方法则从数组的末尾开始向前查找。

    这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。

    5.2.8 迭代方法

    ECMAScript 5 为数组定义了 5 个迭代方法。

     every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。

     filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。

     forEach():对数组中的每一项运行给定函数。这个方法没有返回值。

     map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

     some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。

    传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身

    5.2.9 归并方法

    ECMAScript 5 还新增了两个归并数组的方法:reduce()和 reduceRight()。

    reduce()方法从数组的第一项开始,逐个遍历到最后。

    reduceRight()则从数组的最后一项开始,向前遍历到第一项。

    函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。    

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

猜你喜欢

转载自blog.csdn.net/lugr_shx/article/details/80754850