JavaScript数组
数组(Array)
数组也是对象(内建对象)
它和我们普通对象功能类似,也是用来存储一些值的
不同的是普通对象使用字符串作为属性名
而数组是使用数字来作为索引操作元素
索引:
从0开始的整数就是索引
数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据
向数组中添加元素
语法:数组[索引] = 值
例如:arr[0]=12;
读取数组中的元素
语法:数组[索引]
如果读取不存在的索引,不会报错而是返回undefined
例如:console(arr[0]);
获取数组的长度,可以使用length这个属性获取
语法:数组.length
对于连续的数组,使用length可以获取到数组的长度(元素的个数)
对于非连续的数组,使用length汇获取到数组的最大的(索引+1)
尽量不要创建非连续数组
例如:console.log(arr.length);
修改length
如果修改的length大于原长度,则多出部分会空出来
如果修改的length小于原长度,则多出的部分会被删除
JavaScript数组字面量
- 使用字面量创建数组时,可以在创建时就指定数组中的元素
- 使用构造函数创建数组时,也可以同时添加元素,将要添加的元素作为构造函数的参数传递,元素之间使用 , 隔开
- 数组的值可以是任意的数据类型,包含对象的
- 数组中可以存放函数
- 二维数组
例如: var arr8=[
[1,3,4,5],
[1,4,6,7]
];
console.log(arr8[1][2]);
JavaScript数组的方法
把数组的所有元素串联成一个字符串。元素通过指定的分隔符进行分隔
例如: var str=arr.join("~~");
1.push()
该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度
可以将要添加的元素作为方法的参数传递,这样这些元素将会自动添加到数组的末尾
该方法会将数组新的长度作为返回值返回
例如:var num=arr.push("小白","小黑");
console.log(num);//5
console.log(arr);
2.pop()
- 该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
例如:var result=arr.pop();
console.log("result="+result);
console.log(arr);
3.unshift()
向数组开头添加一个或多个元素,并返回新的数组长度
向前边插入元素以后,其他元素的索引会依次调整
例如:var num=arr.unshift("小白","小黑");
console.log("num="+num);
console.log(arr);
4.shift()
可以删除数组的第一个元素,并将被删除的元素作为返回值返回
可以重复使用
例如:arr.shift();
arr.shift();
arr.shift();
arr.shift();
console.log(arr);
JavaScript数组的遍历
所谓的遍历数组,就是将数组中所有的元素都取出来
创建一个函数,可以将arrPerson中年满18岁的Person提取出来,然后封装到到一个新的数组并返回
function Person(name,age){
this.name=name;
this.age=age;
}
var p1=new Person("小红",12);
var p2=new Person("小橙",17);
var p3=new Person("小黄",19);
var p4=new Person("小绿",32);
var p5=new Person("小青",22);
var p6=new Person("小蓝",24);
var p7=new Person("小紫",42);
var arrPerson=[p1,p2,p3,p4,p5,p6,p7];
法1:function getAdult(arr){
var arrAdult=[];
for(var i=0;i<arr.length;i++){
//如果年满18,就把该对象添加到arrAdult数组中
if(arr[i].age>=18){
arrAdult.push(arr[i]);
}
}
return arrAdult;
}
法2:function getAdult1(arr){
var arrAdult=[];
for(var o in arr){
console.log(arr[o]);
//如果年满18,就把该对象添加到arrAdult数组中
if(arr[o].age>=18){
arrAdult.push(arr[o]);
}
}
return arrAdult;
}
JavaScript数组的遍历foreach
一般我们都是使用for循环去遍历数组,
JS中还为我们提供了一个方法,用来遍历数组
forEach()
这个方法只支持IE8以上的浏览器
IE8及以下的浏览器均不支持该方法,所以如果需要兼容IE8,则不要使用forEach
如果考虑到兼容问题还是使用for循环
forEach()方法需要一个函数作为参数
像这种函数,由我们创建但是不由我们调用的,我们称为回调函数
数组中有几个元素函数就会执行几次,每次执行时,浏览器将会遍历到的元素以实参的形式传递进来,我们可以来定义形参读取这些内容
浏览器会在回调函数中传递三个参数:
第一个参数,就是当前正在遍历的元素
第二个参数,就是当前正在遍历的元素的索引
第三个参数,就是正在遍历的数组
arr.forEach(function(value,index,obj){
console.log(value);
console.log(index);
console.log(obj);
});
JavaScript函数的方法apply与call
call()与apply()
这两个方法都是函数对象的方法,需要通过函数对象来调用
当对函数调用call()和apply()都会去调用函数执行
在调用call()与apply()可以将一个对象指定为第一个参数
此时这个对象将会成为函数执行时的this
call()方法可以将实参在对象之后依次传递
apply() 方法需要将实参封装到一个数组中统一传递
例如:function fun1(a,b){
console.log("a="+a+",b="+b);
console.log(this);
}
fun1(12,34);
fun1.call(obj,12,34);
fun1.apply(obj,[12,34]);
this的总结:
1.以函数的形式调用时,this始终都是window对象
2.以方法的形式调用时,this就是调用方法的对象
3.以构造方法的形式调用时,this是新创建的那个对象
4.使用call与apply调用时,this是指定的那个对象
JavaScript_arguments
在调用函数时,浏览器每次都会传递进来两个隐含的参数:
1.函数的上下文对象 this
2.封装实参的对象arguments
arguments是一个类数组对象,它也可以通过索引来操作数组,也可以获取长度
在调用函数时,我们所传递的实参都会在arguments中保存
arguments.length可以用来获取实参的长度
我们即使不定义形参,也可以通过arguments来使用实参,比较麻烦
arguments[0] 表示第一个实参
arguments[1] 表示第二个实参
它里面有一个属性叫做callee,
这个属性对应一个函数对象,就是当前正在执行的函数对象