数组
数组也是对象,和普通对象区别是,普通对象的属性名是字符串,而数组则是索引
//创建数组
var arr = new Array(10,20,30);
//添加元素
arr[索引] = 值;
//读取元素
arr[索引]
//对于连续添加的数组,获取数组长度;非连续数组,会获取最大索引加1
arr.length
//向数组最后一个位置添加元素
arr[arr.length]=值;
修改length,如果修改的length大于原长度,则多出部分会空出来;小于原长度,则多出的会删除
使用数组字面量来创建数组
var arr = [1,2,3,5,6];
数组的十个方法
1、push方法
该方法可以向数组末尾添加一个或者多个元素,并返回数组的新长度。
数组.push(元素)
2、unshift方法
该方法可以向数组开头添加一个或多个元素,并返回数组的新长度。
3、pop方法
删除并返回数组的最后一个元素
4、shift方法
删除并返回数组的第一个元素
5、slice方法
可以用来从数组中提取指定元素,传进两个参数:开始结束位置;第二个元素可以省略默认取到最后,也可以传负数。左闭右开
6、splice方法
可以用于删除数组中的指定元素,并将被删除的元素作为返回值返回,添加新的元素;两个参数。第一个参数表示开始位置索引,第二个位置表示删除的数量,第三个元素及以后,传递新的参数。往指定索引前添加元素。
7、concat方法
连接两个或多个数组,并返回新数组,不会对原数组产生影响。
语法 :arr.concat(arr1,arr2,元素…)
8、join方法
将数组转换成一个字符串,可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符。不改变原有数组,将返回这个转换后的字符串。
9、reverse方法
该方法用来反转数组,会影响原数组。
10、sort方法
对数组的元素进行排序,会影响原数组。默认会按照Unicode编码进行排序
注意:即使对于纯数字的数组,也会按照Unicode编码排序,索引可能会得到错误的结果
可以自己制定排序规则,在sort()中添加一个回调函数,传入两个形参。浏览器将会分别使用数组中的元素作为实参去调用回调函数。
浏览器会根据回调函数的返回值来决定元素的顺序。但是肯定的是a一定在b前面。
如果返回一个大于0的值,则交换位置;小于0和等于0都不交换位置。
arr.sort(function(a,b){
return a-b;//升序 b-a 降序
}
数组遍历
除了使用for循环遍历数组,还可以使用forEach方法(只支持IE8以上的浏览器)。
forEach()方法需要一个函数作为参数,像以下由我们创建但是不由我们调用的,称为回调函数。数组中有几个元素,函数就会执行几次。每次执行,浏览器会将遍历到的元素以实参的形式传递进来
浏览器会在回调函数中传进三个参数:
1、当前正在遍历的元素 currentValue
2、当前正在遍历元素的索引 index
3、正在遍历的数组本身 arr
arr.forEach(function(a,b,c){
console.log("a = "+a);
});
call()、apply()
这两个方法都是函数对象的方法,需要通过函数对象来调用。当对函数调用call和apply都会调用函数执行。
在调用call和apply时可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行的this.
call方法可以将实参在对象之后依次传递,而apply方法需要将实参封装到一个数组中统一传递。
相当于call传一个对象和基本数据类型,apply传两个对象(指定对象和数组对象)
function fun(a,b){
alert(a);
alert(b);
}
fun.call(obj,2,3) // a=2,b=3
fun.apply(obj,[2,3])
function fun(){
alert(this.name);
}
var obj = {name:"obj",
sayName:function(){
alert(this.name)}
};
var obj2 = {name:"obj2"};
fun.apply(obj) //obj
fun.apply(obj2) //obj2
obj.sayName() //obj
obj.sayName.apply(obj2) //obj2
arguments
在调用函数时,除了传进this,还会传进另外一个隐含参数:封装实参的对象arguments,它是一个类数组对象,可以通过索引操作数据(arguments[index]),也可以获取长度(arguments.length)。
在调用函数时,我们所传递的实参都会在arguments中保存.即使不定义形参,也可以通过arguments来使用
其有一个属性:callee,这个属性对应一个函数对象,就是当前正在执行的函数对象