【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

 

posted @ 2016-08-24 21:39  Carolina  阅读(173)  评论(0编辑  收藏  举报