数组对象的作用是:使用单独的变量名来存储一系列的值。
本文从数组定义、读写和常用方法几个方面来对JS中数组的相关知识进行整理总结
1. 定义数组
. new Array(length/content);
var arr = new Array(1,2,4);//多个参数时,里面参数表示数组各项
var arr = new Array(6);//只有一个参数时,里面的参数表示数组长度length,而且只能是整数,不能小数. []字面量
var arr = [1,2]2. 数组读和写
. arr[num] //不可以溢出读,结果是undefined.
arr[num] = xxx; //可以溢出写
var arr = [];
arr[10]; //空数组,直接查第10位不会报错,会打印undefined,
//这里会打印undefined, 不会报错,因为数组也是对象的一种,例如查询对象某个没有的属性obj[prop]时,如果忏悔没有,也不会报错,而是会打印出undefined3. 数组常用方法
es3.0方法(改变原数组、不改变原数组)
【改变原数组】
. push、pop、shift、unshift、sort、reverse
. splice
//push:在数组最后一位添加,可以带一个或多个参数【改变原数组】
var arr = [];
arr.push(1,2);
arr; //[1,2]
//模拟系统push方法
Array.prototype.push = function() {
for(var i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i];
} return this.length;
}
========================================================
//pop:把数组最后一位剪切出来,不用带参数,传参无用【改变原数组】
var arr = [1,2,3];
arr.pop(); //返回的是剪切项
arr; //[1,2]
arr.pop(1,2);//这里传1,2无用,还是只会剪切数组最后一位,操作后再访问数组就是[1]
arr; //[1]
=======================================================
//unshift:在数组第一位添加,跟push类似,只是方向相反,可以带一个或多个参数【改变原数组】
var arr = [1,2,3];
arr.unshift(4,5);
arr; //[4,5,1,2,3]
=============================================
//shift:把数组第一位剪切出来,跟pop类似,只是方向相反,不用带参数,传参无用【改变原数组】
var arr = [1,2,3];
arr.shift();//返回的是剪切项
arr; //[2,3]
arr.shift(2,3);//这里传2,3无用,还是只会剪切数组第一位,操作后再访问数组就是[3]
arr; //[3]
============================================
//reverse:把原数组逆转顺序反过来【改变原数组】
var arr = [1,2,3];
arr.reverse(); //返回的是反转过来的数组
arr; //[3,2,1]
============================================
//splice:可以删除/添加/替换元素。有三个参数,第三个参数其实可以无限添加,【改变原数组】
//arr.splice(从第几位索引开始, 截取多少的长度, 在切口处添加新的数据)
//如果第二位为0,即不截取时,第一个参数就是表示要添加数据开始的位置
//删除元素:第二个参数传入想要删除几个元素(如果没有传,就删除后面所有元素)
//替换元素:第二个参数传入想要替换几个元素,第三个参数就是用于替换前面的元素
//添加元素:第二个参数传入0,表示不删除元素,第三个参数就是用于追加的元素
var arr = [1,2,3];
arr.splice(1,2); //[2,3]从第1位索引开始,截取2个长度,返回截取到的数组
arr; //[1],返回经过截取后的数组,改变了原数组arr.splice(0,1,3,4,5,6);//
arr; //[3,4,5,6]
arr.splice(2,0,111,222);
arr; //[3,4,111,222,5,6]
===========================================
//sort:给数组排序,直接调用不加参数的时候,按自小到大(但这里是按照字符串ASIIC码排序的,不能达到要求),升序排列【改变原数组】
//sort留了一个编程接口,里面可以传方法function,可按自己要求进行各种排序都行
var arr = [1,10,4,0,-1,9];
arr.sort();//[-1, 0, 1, 10, 4, 9],返回升序的数组
arr; //[-1, 0, 1, 10, 4, 9]
/*sort传方法function*/
//1. function必须写两个形参
//2. 看返回值:
// 1)当返回值为负数时,那么前面的数放在前
// 2)当返回值为正数时,那么后面的数在前
// 3)当返回值为0时,顺序不变
var arr = [1,10,4,0,-1,9];
arr.sort(function(a, b){
//升序
/*if(a > b) {
return 1;
}else {
return -1;
}*/
//或:
/*if(a > b){
return a - b;
}else{
return a - b;
} */
//或:
/*
return a - b;
*/
//降序
//return b - a;(同理)
});
//给一个有序的数组,乱序,如何解答呢?有知道的小伙子也可以在楼下试试?
var arr = [1,2,3,4,5,6,7];【不改变原数组】
. concat、join ——>split、toString、slice
//concat:连接两个数组【不改变原数组】
var arr1 = [1,2,3];
var arr2 = [3,4,5];
arr1.concat(arr2); //[1,2,3,4,5,6],返回新的数组,原数组不变
arr1; //[1,2,3]
arr2; //[3,4,5]
======================================
//toString:把数组转换成字符串【不改变原数组】
var arr = [1,2,3]
arr.toString();
=====================================
//slice:截取数组//slice(从该位索引开始截取,截取到该位索引【该位置不取,取到该位置前一位索引】)
//只有一个参数的时候,从参数位索引开始截取,截取到末尾
//如果是负数的话,直接加上length再计算位置
//如果不写参数,就是整个数组截取
var arr = [1,2,3]
arr.slice(); //[1,2,3]
arr.slice(0,1); //[1]
arr.slice(-1); //[3]
arr; //[1,2,3]
=====================================
//join:数组转换成字符串,可以传参数,字符串用传的参数字符拼接【不改变原数组】
//不写参数的话,直接还是用逗号(,)连接
var arr = [1,2,3]
arr.join(‘:');//“1:2:3”,返回字符串
arr; //[1,2,3]另外,在这里提到一个字符串相关的方法split,也跟数组有一定的关系
/*split方法:按参数拆分数组*/
//是字符串方法,但是和数组join方法是可逆的),即把字符串转换成数组
//var arr = [1,2,3]
arr.join();//“1:2:3”,返回字符串
arr.join().split(); //[1,2,3]
var arr = [1,2,3]
arr.join(‘-').split(‘-'); //[‘1’,’2’,’3']
arr.join(‘-').split(‘:'); //['1-2-3’],因为join转换成’-‘连接的字符串后,再拆分的时候是没有“:”,所以整体变成数组了