【JS笔记】5.2 Array类型
1. Array引用类型的特点
- 每一项可以保存任意类型的数据;
- 数组大小可以动态调整
2.创建数组的方式
方法一:用Array()构造函数
无参数
var colors = new Array();//空数组
自然数参数
var colors = new Array(20);//20用来设置length属性的值,创建一个包含20个undefined的数组
注:若参数数据类型不是数,则会创建一个包含一项元素的数组,如果是自然数,创建一个该数指定大小的每项都是undefined的数组
项参数
var colors = new Array("red","green", "purple");
方法二:数组字面量表示法
var colors = [];//空数组
var colors = ["red", 'blue','black'];
var values = [1,2,]//2项或3项 第3项为undefined
var values = [,,]//2项或3项 每项都是undefined
IE8以及以前有bug,两values都是3项
IE9+以及其他浏览器都是2项
3.读取数组项
索引小于数组中的项数,返回对应项
索引大于等于数组中的项数,返回undefined
4.检测数组
方法一:在同一全局作用域中时:检测数组的构造函数是否为Array
if(value instanceof Array)
方法二:低版本浏览器不支持:Array.isArray()方法(ES5添加,支持浏览器:IE9+,FIREFOX 4+,SAFARI 5+ ,OPERA 10.5+,CHROME)
if(Array.isArray(value))
方法三:普适:Object.prototype.toString.call(value)方法(该方法返回一个字符串,格式为 [object NativeConstructorName], 该函数无法识别非原生构造函数名,因此若对象的构造函数不是原生的,一律返回[object Object])
function isArray(value){
return Object.prototype.toString.call(value) == "[object Array]";
}
5. 操作数组方法
5.1索引操作
5.1.1索引小于项数:替换原值
5.1.2索引大于等于项数:length = 索引值+1,并设置该值,且中间的项为undefined
应用:在数组末尾添加新项:colors[colors.length] = "black";
5.1.3设置length的值:移除或添加项,添加的项的值是undefined
5.2 方法操作
5.2.1 push()//返回新的数组长度
5.2.2 unshift()//返回新的数组长度 colors.unshift("blue","red");//blue,red,black,purple(顺序不变)
5.2.3 pop()//返回删除项
5.2.4 shift()//返回删除项
5.2.5 concat()(不改变原数组)
- 没有传递参数:复制当前数组并返回副本
- 参数为一个或多个数组:将这些数组中的每一项都添加到数组副本末尾并返回
- 参数不是数组:将这些值添加到数组副本末尾并返回
注:数组和非数值参数可以混用
5.2.6 slice() (不改变原数组)
var numbers = [0,1,2,3,4,5];
var numbers2 = numbers.slice(2,4);[2,3](没有4!)
var numbers3 = numbers.slice(2);[2,3,4,5]
注:
- 若参数中存在负值,那么将该负值加数组长度变为正值确定位置
- 若参数2小于等于参数1,返回空数组
5.2.7 splice(begin, num, insert1,insert2,insert3.....)
begin:要删除或插入的第一个元素的位置(从0开始)
num:删除项数
insertn:插入项(第一项的位置是begin)
5.2.8 reverse() 反转数组顺序,改变数组
5.2.9 sort([callback])
无参数时:
调用数组每一项的toString()方法,然后比较得到的字符串,升序排序,如[0,10,5];
传参数时:回调函数 compare(value1, value2)
如果第一个参数应该在第二个参数之前,返回负数;
如果第一个参数应该在第二个参数之后,返回正数;
如果相等,返回0;
升序比较函数:
function compare(value1, value2){
if(value1<value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
简化版:
function compare(value1,value2){
return value1 - value2;
}
5.3 转换数组方法
toString(),valueOf()调用数组每一项的toString()方法
alert()接受字符串参数,也会对每一项调用toString()方法
toLocaleString()方法:调用数组每一项的toLocaleString()方法
alert(colors.toString());//red,blue,green
join()方法:改变分隔符
alert(colors.join("||"));//red||blue||green
5.4 位置方法 (支持浏览器:IE9+,......................)
indexOf(term,[start])
lastIndexOf(term,[startRight])
使用“===”符号查找,返回查找的项的索引
5.5 迭代方法 (IE9+,.......................)
every:numbers.every(function(term,index,array)){...}
filter:返回 返回值为true的项所组成的数组
forEach:无返回值
map:返回 返回值组成的数组
some
5.6 缩小方法
reduce() reduceRight()
从第二项或者倒数第二项开始迭代,最终构建一个返回值
初始值(第一次迭代的pre值默认是第一项或倒数第一项,也可以作为第二个参数传入设置初始值)
var values = [1,2,3,4,5];
var sum = values.reduce(function(pre, cur, index, array)){
return pre + cur;//成为下一次迭代的pre
});//sum = 15