一.什么是数组?数组的好处是什么?
1.数组就是由许多名称相同的变量聚集在一起,数组的用法和普通变量是完全一样的,它也可以存入任何数据类型,
唯一的不同点是它在内存中占据的是一块连续的空间,可以依序给它们编号,再依编号来使用它们。数组的好处
在于它可以一次声明和使用多个变量。JAVAScript中使用的时候要用中括号“[]”括起来,不同的变量中间用逗号“,”隔开。
2.数组的存储在堆中的,数组的名字存储在栈中,栈中的引用堆中的,和对象的引用相同。
3.和对象一样,存储在堆中,查找速度快。
二.元素的求和
1.使用遍历的方法求和
var arr=[1,2,3,4,5,6]; var s=0; for(var prop in arr){ s=s+arr[prop]; } console.log(s) 结果: 21
2.使用递归的方法求和(上篇文章讲过了递归)
var arr=[1,2,3,4,5,6]; var sum=function (s,n){ if(!arr[n]) return s; s+=arr[n]; //这里s+=arr[n]; 不能放在上面执行,会造成undefined,进行加法运算,结果会变成NaN. return sum(s,n+1); } console.log(sum(0,0)) 结果: 21
这种匿名函数还可以使用自执行函数,函数名字使用arguments.callee() 来代替。
三.length
length是数组的长度,最大下标+1=length。 因此可以使用length进而操作数组的下标,继而实现数组的删除,增加,截取,清空等功能。
1.增加元素
var arr=[1,2,3,4,5,6]; arr[arr.length]=10; console.log(arr); //利用length给数组添加元素 结果是: [1,2,3,4,5,6,10]
2.替换元素
var arr=[1,2,3,4,5,6]; arr[arr.length-2]=10; console.log(arr); //利用length给数组添加元素 结果是: [1,2,3,4,10,6]
从上面两点可以看出数组的length是可以变化的,因此可以利用legnth来给空数组赋值。
var arr=[]; for(var i=0;i<10;i++){ arr[arr.length]=i } console.log(arr); 结果是: [0,1,2,3,4,5,6,7,8,9]
3.删除元素
var arr=[1,2,3,4,5]; //删除最后一个元素 arr.length--; console.log(arr); 结果:[1,2,3,4]
4.清空数组
var arr=[1,2,3,4,5]; var len=arr.length; //数组长度变化时,length不能被用来直接当做判断条件,因为length就是数组长度,同样变化 for(var i=0;i<len;i++){ arr.length--; } console.log(arr) 结果:[]
第二种方法:
var arr=[1,2,3,4,5];
for(;--arr.length;){ //这里不能用arr.length--;否则会出现负数
console.log(arr[arr.length-1])
}
console.log(arr) 结果:[]
第三种方法:
var arr=[1,2,3,4,5];
arr.length=0;
console.log(arr); 结果:[]
注:数组被清空了,但是数组本身还在,只是元素没了。
如果想要删除数组,要设置arr=null;
如果数组元素是对象,则要先设置对象=null,然后arr=null;因为对象具有引用地址;
5.截取数组
var arr=[1,2,3,4,5]; //从下标0开始到该长度截取下来 arr.length=4; console.log(arr)
四.遍历数组
1)for 遍历
var arr=[1,2,3,,4,null,5,6]; arr.a=10; for(var i=0;i<arr.length;i++){ console.log(i,arr[i]) }
结果:0 1 2 3 4 5 6 7 1,2,3,undefined,4,null,5,6 //没有打印属性 arr.a
2)for in 遍历
var arr=[1,2,3,,4,null,5,6]; arr.a=10; for(var prop in arr){ console.log(prop,arr[prop]) }
结果: 0 1 2 4 5 6 7 a 1 2 3 4 null 5 6 10 //没有打印undefined
两种方法的总结:
for遍历: 按照下标进行遍历,可以遍历出来undefined,结果是数值型
但是遇见arr.a这种可枚举属性时,就不能遍历
for in 遍历: 按照属性和属性值进行遍历,所以不能遍历出没有属性值的undefined ,结果是字符串型
但是遇见arr.a这种可枚举属性时,可以遍历。