1、引用类型概述
引用类型的值(对象)是引用类型的一个实例,引用类型是一种数据结构,将数据和功能封装在一起。
2、数组概述
数组是JS中很常用的引用类型,它是数据的有序列表。和其他语言不同的是,同一个数组的数组项可以存任意一种类型的数据。
2.1 数组的创建 :
1)通过Array构造函数
var arr = new Array();
可以构造函数可以传递参数,如果传递的是一个数值,就会创建等于该数值数量长度的数组。如果参数是其他非数值数据类型,或参数在两个及两个以上的数据任意类型,传递的参数就会作为数组的数据项。
2)通过数组字面量
var arr = [ ] //创建空数组
var arr1 = [ 'red', 'yellow'] //数据项之间用逗号分隔
var arr2 = [1 ,2 3,4 5,6 , ] //不推荐这样创建,有的浏览器会把最后一个空项自动屏蔽,有的不会,所以这是一个可能长度是6或7的数组
3)需要注意的是,通过字面量创建的数组是不调用并执行数组的构造函数的
2.2 数组的设置与读取
arr[index] //取第index+1 项数组项,index 为从零开始的数字,index小于数组长度,否则会返回undefined
arr[index] = 'someThing' //index 小于数组长度时,新的值替换旧的值,index等于数组长度时,数组添加数据项,长度加一,index大于数组长度时,未设置的值为undefined,数组长度为index+1
2.3 数组的属性: length
数组的length食用指南之一就是length属性并不是只读的,可以通过设置length属性为数组删除数组项,或者添加数据项,如果length大于数组长度,未设置的项为undefined
三、数组方法
3.1 检测是不是数组
判断一个变量是不是数组可以使用instanceof操作符,以变量value为例,value instanceof Array 会返回true或者false,一般情况下,true表示判断得是数组,false表示不是一个数组。
但是instanceof 有局限性,即它只认定有一个全局执行环境,如果页面中有多个框架,那就有多个全局执行环境,将一个框架的数组传入另一个框架中使用, 那么传递的数组与第二个框架中原生创建的数组就有不同的构造函数,结果为false不一定就不是数组
为了解决这个问题,es5新添了一个方法,Array.isArray(value),不管数组是在哪个环境中创建的,都会有正确的结果,不过,好用的东西总会有一个通用的局限性,浏览器兼容问题,IE9以下是不能用的哦
3.2 转换方法
1)toString()
会返回每一个数据项以逗号连接的字符串,其实为每一项调用每一项的toString()方法
2)toLocaleString()
会返回每一个数据项以逗号连接的字符串,其实为每一项调用每一项的toLocaleString()方法
3)valueOf()
会返回这个数组本身
4)join(separator),
数组项以传入的参数将每个数组项拼成一个字符串,如果传入的值为null,undefined或不传参数,则默认为逗号
3.3 栈方法
模拟数据结构中的栈操作,先入后出。
1)pop()
弹出数组最后一项,返回值为弹出项的值,并减少数组的长度
2)push(argument)
参数可以为任意数量,逐个将参数推入数组的末尾,增加数组的长度,并将数组的长度作为返回值
3.4 队列方法
模拟数据结构中的队列,先入先出
1)shift()
删除数组第一项,并返回这一项的内容,数组长度减一
2)unshift()
在数组首部添加任意数量的数组项,并返回并改变数组的长度
3.5 重排序方法
1)reverse()
反转数组
2)sort()
排序,默认升序,会调用每项的toString方法,比较的是字符串,可以传递一个比较函数作为参数,如果需要交换返回1,不需要交换返回值为-1,其他的返回值我没试过。
3.6操作方法
1)concat
创建当前数组的副本并返回,如果有参数,则将参数push到数组中去,参数可以为数组项或是数组,并不改变数组实例
2)slice
可以有一到两个参数,数值型,如果是一个,则返回从第一个数值位置到末尾的数组,如果是两个,就返回下标在参数区间内的项,包左不包右[ m, n )
3) splice
可以传递两到多个参数,第一个是要操作的项的起始位置,第二个是要删除的项数,其他是要在起始位置添加的项数
3.7 位置方法(略)
3.8 迭代方法
每个函数都接受一个回调函数,这个回调函数有三个参数,分别是每个数组项,下标和数组
forEach 无返回值,为每个数组项执行回调函数
filter 返回值为Array类型。为每个数组项执行函数,返回函数执行返回值为true的数组项
every 返回值为Boolean类型。每个数组项执行函数后都返回true为true
map 返回值为Array类型。为每项数组项执行函数,将返回的结果作为对相应的数组项
some 返回值为Boolean类型。有一个数组项执行函数后返回true就为true