数组
内建对象
宿主对象对象
自定义对象
内建对象:有ES标准定义的对象。
数组(Array),数组也是一个对象。它和普通的对象功能类似,也是用来存储一些值的。
不同的是,普通对象是使用字符串作为属性名的,数组使用数字作为索引操作元素。
索引:从0开始的整数。
数组的存储性能比普通对象更好。在开发中经常使用数组来存储一些数据。
创建数组:
var arr = Array();
添加数组:
arr[0] = 10;
arr[1] = 33;
若读取不存在的索引,不会报错,而是返回undefined。
获取数组长度:
使用length属性
console.log(arr.length);
对于非连续的数组,使用length会返回最大索引的值+1。尽量不要创建非连续的数组。
也可以用length设置数组的长度。
arr.length = 10;
如果修改的length多于原长度,则多出部分会空出来。
如果修改的length小于原长度,则多出来的元素会被删除。
添加元素:
arr[arr.length] = 添加值;
总会添加在最后。
数组字面量
使用字面量来创建数组:
var arr = [1, 2, 3, 4, 5, 10];
使用构造函数创建数组,也可以添加元素:
var arr = new Arrary(1, 2, 3);
创建一个数组,数组中只有一个元素10
arr = [10]; //创建一个只有10的数组
var arr2 = new Array(10); //创建一个长度为10的数组
数组不只能存储数值,也可以是任意类型(包括对象(数组))。
数组方法
push()方法:该方法可以向数组末尾添加一个或多个元素,并返回数组新的长度。可以将要添加的元素作为方法的参数传递。
var result = arr.push(‘唐僧’, '孙悟空');
pop()方法:该方法可以删除数组的最后一个元素,并返回删除的元素。
var result = arr.pop();
unshift()方法:向数组开头添加一个或多个元素,并返回数组新的长度。
shift()方法:删除数组开头第一个元素,返回被删除的元素。
数组的遍历
所谓的遍历数组,就是将数组中所有的元素都取出来。
for循环:
i:index
for(var i = 0; i < arr.length; i++){
}
forEach方法:
forEach需要一个函数作为参数。
像这种函数,由我们创建,但不由我们调用的,称为回调函数。
arr.forEach(function(){
console.log();
});
数组中有几个元素,就会执行几次,每次执行时,浏览器会将遍历的元素以实参的形式传递进来。
浏览器会在回调函数中传递了三个参数:
第一个参数-数组元素value
第二个参数-索引index
第三个参数-数组obj
slice()方法
可以从数组中提取指定元素。
array.slice(start, end);
第一个参数是截取开始的索引(包含),第二个参数是截取结束的索引(不包含)。
该方法不会改变元素组,而是将截取到的元素封装到一个新的数组返回。
如果第二个参数不写,就是从start索引开始到结束的所有元素。
参数可以是负数,表示倒数第几个。
splice()方法:
删除数组中的指定元素,并添加新元素。
会影响到原数组,会将指定元素从原数组中删除。
第一个参数,表示开始位置的索引(包括)。
第二个参数表示删除的数量。
第三个参数及以后表示传递的新元素(如果第二个参数为0,则直接是添加元素)。
其他方法
concat()方法:
链接两个或多个数组,并将新的数组返回,不会对原数组产生影响。不仅可以链接数组,还可以链接元素。
var result = arr.concat(arr, arr2, "牛魔王");
join()方法:
可以将数组转化为一个字符串,该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回。
在join()中可以指定一个字符串作为参数,这个字符串会作为数组中元素的连接符。如果不指定,默认为 ,
作为连接符。
reverse()方法:
该方法用来反转数组。该方法会直接修改原数组。
arr.reverse();
sort()方法:
可以用来对数组进行排序。也会影响原数组。默认会按照Unicode编码排序。
即使对于纯数字的数组,使用sort()排序时,也会按照Unicode编码排序,可能会得到错误的结果,如11会比2大。
我们可以自己来指定排序的规则。
在sort中添加一个回调函数,回调函数定义两个形参,浏览器将会分别使用数组中的元素作为实参去调用回调函数,会根据返回值决定元素的顺序。
第一个参数一定在第二个参数前面。
浏览器会根据回调函数的返回值来决定元素的顺序。
如果返回大于0的值没准儿交换位置
如果返回小于等于0的值,则位置不变
srr.sort(function(a, b){
return a-b;
});