一、数组(Array):
- 数组也是对象(内建对象)
- 它和我们普通对象功能类似,也是用来存储一些值的
- 不同的是普通对象使用字符串作为属性名
而数组是使用数字来作为索引操作元素
- 索引:
从0开始的整数就是索引
- 数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据
二、创建数组对象
向数组中添加元素
语法:数组[索引] = 值
var obj=new Object();
obj["name"]="zhangsan";
obj["age"]=23;
读取数组中的元素
语法:数组[索引]
如果读取不存在的索引,不会报错而是返回undefined
获取数组的长度,可以使用length这个属性获取
语法:数组.length
对于连续的数组,使用length可以获取到数组的长度(元素的个数)
对于非连续的数组,使用length汇获取到数组的最大的(索引+1)
尽量不要创建非连续数组
修改length
- 如果修改的length大于原长度,则多出部分会空出来
- 如果修改的length小于原长度,则多出的部分会被删除
三、JavaScript数组字面量
1.创建一个数组
var arr=new Array();
/使用字面量来创建数组
var arr1=[];
//语法:[]
使用字面量创建数组时,可以在创建时就指定数组中的元素
var arr2=[12,34,56,7,8,9,0,3,5];
使用构造函数创建数组时,也可以同时添加元素,将要添加的元素作为构造函数的参数传递,元素之间使用,隔开
var arr3=new Array(12,34,56,7,8,9,0,3,5);
创建数组arr4,这个数组中只有一个元素10
var arr4=[10];
//创建一个长度为10的数组
var arr5=new Array(10);
//数组的值可以是任意的数据类型,包含对象的
var arr6=["hello",123,false,undefined,null];
//数组中可以存放函数
var arr7=[function(){alert(123);},function(){alert("helloworld");}];
// arr7[0]();
//二维数组
四、JavaScript数组的遍历foreach
一般我们都是使用for循环去遍历数组,
JS中还为我们提供了一个方法,用来遍历数组
forEach()
- 这个方法只支持IE8以上的浏览器
IE8及以下的浏览器均不支持该方法,所以如果需要兼容IE8,则不要使用forEach
如果考虑到兼容问题还是使用for循环
v ar arr=["小明","小红","小橙","小蓝","小绿"];
forEach()方法需要一个函数作为参数
- 像这种函数,由我们创建但是不由我们调用的,我们称为回调函数
- 数组中有几个元素函数就会执行几次,每次执行时,浏览器将会遍历到的元 素以实参的形式传递 进来,我们可以来定义形参读取这些内容
- 浏览器会在回调函数中传递三个参数:
第一个参数,就是当前正在遍历的元素
第二个参数,就是当前正在遍历的元素的索引
第三个参数,就是正在遍历的数组
arr.forEach(function(value,index,obj){
});
五、JavaScript函数的方法apply与call
call()与apply()
- 这两个方法都是函数对象的方法,需要通过函数对象来调用
- 当对函数调用call()和apply()都会去调用函数执行
- 在调用call()与apply()可以将一个对象指定为第一个参数
此时这个对象将会成为函数执行时的this
- call()方法可以将实参在对象之后依次传递
- apply() 方法需要将实参封装到一个数组中统一传递
this的总结:
1.以函数的形式调用时,this始终都是window对象
2.以方法的形式调用时,this就是调用方法的对象
3.以构造方法的形式调用时,this是新创建的那个对象
4.使用call与apply调用时,this是指定的那个对象
function fun(){
}
fun();
fun.call();
fun.apply();
var obj={
name:"xiaoming",
age:23
};
fun.call(obj);
fun.apply(obj);