数组是经历过优化的对象,用数字索引来访问数组一般来说要比访问常规的对象属性要快很;
数组的直接量允许有可选的结尾的逗号,所以[ , , ]的长度为2;
数组是对象的特殊的方式,使用【】来访问数组元素的时候,就像用方括号访问对象的属性;过程是:JavaScript现将数值1转换成字符串‘1’,在进行属性名来使用;
数组的序号范围0-2 32 -2超过这个范围数组的长度会为稳定在固定的数值不会发生变化,
a[-1.23]为a数组添加一个‘-1.23’的属性
a['1000']为a数组的第1001个元素
a[1.000]和a[1]一样;
字面量声明数组与构造函数声明数组的区别:
var a = [, , , ];
var a1 = new Array(3);
0 in a 返回true;
0 in a1 返回false;
其中字面量创建的数组有元素都是underfined;
但是构造函数创建的数组,只是有length为3其中没有元素;
delete运算符会删除元素但是不会影响元素的长度;
数组的方法:
1.数组尾部的删除和添加:
push尾部添加元素;返回添加后数组的长度
pop尾部删除元素;返回被删除的元素;
2.ES2015的数组遍历的方法forEach
arr.forEach(function(value,index){ 数组操作 });
3.join()将数组转换成字符串规定特定的连字符,默认用逗号链接;返回字符串
4.reverse()将数组翻转;返回翻转后的数组;改变原数组;
5.sort()数组的元素排序;
一般会传递进去一个function函数;参数是a和b函数返回时:return a - b数组按照小到大排序,return b - a时数组按照大到小排序;一般这个方法可以给对象排序;
6.concat()的方法创建 并返回一个新数组;元素包含调用concat()的原始数组的元素和concat的每个参数,如果参数是数组,则会链接数组的元素,这个只支持以为数组的链接;如 :[1,2,3].concat([444],[5,[6]],[7]); return [1,2,3,444,5,[6],7];
7.slice和splice的方法:slice是返回数组的指定的片段或者子数组;参数分别为开始和结束位置;splice是在数组中插入和删除元素的通用方法,第一个参数是指定插入和删除的起始位置,第二个参数是指定从数组删除的元素的个数,省略参数就是从规定的位置删除到数组结尾,
8.pop和push的方法:push是在数组的尾部添加一个或多个元素,返回数组的长度;pop的方法是 删除数组的最后一个元素,返回删除的值;添加的方法可以传递多个参数
9.shift和unshift的方法,unshift在数组的头部添加元素返回数组的长度,shift是删除数组的第一个元素,返回删除的元素;添加的方法可以传递多个参数;
ES5的数组的方法:
1.forEach(function(index, val, [ thisArr ]){ 操作函数});从头到尾遍历数组,为每个元素指定函数;forEach的方法是遍历数组,在数组的所有的元素遍历之前,是不会停止遍历的,如果要提前停止需要将forEach方法放在一个try-catch中,用来接收错误并抛出 ;这里的fotEach方法只是单纯的遍历数组;
2.map()的方法:将调用数组的每个元素传递给指定的函数,返回一个新的数组,他是该函数的返回值;arr.map(function( val是数组的元素 ){ return 返回数组的元素});该方法会保持原数组的特性,原数组稠密就返回稠密数组,原数组稀疏就会返回稀疏的数组;
3.filter()方法:用来筛选数组的元素,满足条件的返回原数组的一个子集数组;回调函数记得加上return;只会返回稠密的数组;
4.every和some方法是对逻辑的判断:every()方法是所有的数组元素都要满足条件;some是判断数组元素部分满足条件;次函数的返回值是true和false;
5.reduce和reduceRight的方法:是用指定的函数将数组元素进行组合返回一个数据;
6.indexOf和lastIndexOf的方法可以判断元素的位置;
7.Array.isArray(变量):ES5新增的方法判断是否数组;之前一直利用instanceof操作符来判断; 变量 instanceof Array判断是否是数组;但是instanceof操作符只能用于简单的情形;
类数组调用数组的方法:利用Function.call的方法;一般有的浏览器自己就封装了函数的方法可以利用Array.prototype.join.call( 伪数组,‘jion的参数’);
字符串的方法可以通用数组的方法;