目录
1、前言 ------------------------------------------------------------------------- 并没有索引
2、Array的创建 ----------------------------------------------------------------- 并没有索引
3、Array对象元素的操作 ------------------------------------------------------- 并没有索引
4、Array对象的属性 ------------------------------------------------------------ 并没有索引
5、Array对象的方法 ------------------------------------------------------------ 并没有索引
1、前言
在讲数组之前我们来聊聊什么是数组。简单来说数组是用来存储相同数据类型的数据集合,该集合存储在堆内存中,由一个引用变量来索引该集合的首地址。(具体的可以去看一门高级编程语言)
组成数组的数据被称为数组的分量、元素或下标变量,个人比较喜欢称为元素。数组中的元素存储在一个连续性的内存块中,并通过索引来访问,也被称为下标。数组第一个元素的下标为0,所以最后的下标为当前长度减一,即应用变量名.length-1,length是数组的长度属性。有多少个元素,其值就为多少。
2、数组的创建 ------ 数组的操作
通过上述的介绍,不明白数组结构的人想必对数组也有了一定的了解,下面我们来正式介绍JavaScript中的Array数组
通过静态的Array对象创建数组对象的有三种方式
创建任意长度的数组对象: 引用变量名 = new Array();
创建指定长度的数组对象: 引用变量名 = new Array(size);
创建指定元素的数组对象: 引用变量名 = new Array(element1,element2,......,elemenN);
JavaScript的Array数组比较特殊,它可以存储不同数据类型的数据。第一种语法创建Array对象时,元素的个数是不确定的,用户可以在赋值时任意定义;第二种语法创建固定数组长度的Array对象,用户在赋值时定义的元素个数不能超过指定的长度;第三种语法在定义Array对象时对数组对象进行赋值,其长度为数组元素的个数,用户可以在当前长度下继续赋值。如果我们只定义Array对象,并不对其进行赋值,那么成为一个空的数组对象。
Test1 = new Array(); Test2 = new Array(5); Test3 = new Array("1",2,"3","4",5); //Test3长度为5 console.log(Test1); Test1[1] = 1; Test1[10] = 10; console.log(Test1); console.log("插入新元素后的Test1数组长度为:"+Test1.length); console.log(Test2); console.log(Test3); console.log("Test3当前数组长度为:"+Test3.length); //往Test3中继续输入元素 Test3[5] = 6; Test3[6] = 7; console.log(Test3); console.log("插入新元素后的Test3数组长度为:"+Test3.length);
3、Array对象元素的操作------Array对象元素的存储和获取
Araay对象元素的存储主要有3种方法,分别如下
(1)、在定义时直接输入数组元素,但该方法只能在数组元素确定的情况下才能使用。
Arr = new Array("a","b","c");
(2)、通过指定下标向数组输入元素,该方法可以任意地将元素插入到指定的数组下标中。但要注意的是:如果Array对象是指定长度的数组对象,那么就要防止插入的下标不能超过制定的长度;如果重复向相同下标中插入元素,那么最后的元素会覆盖掉之前的元素。
Arr = new Array(); Arr[0] = "a"; Arr[1] = "b"; Arr[2] = "c";
(3)、利用循环语向数组批量输入元素。一般用于向Array对象中赋初值。
var num = 5; for(var i = 0;i < num;i++){ Arr[i] = i; }
Array对象元素的获取主要也是3种方法,分别如下
(1)、指定具体下标获取元素值,通常将获取的值存储在一个变量中。
Arr = new Array(1,2,3,4,5); var num1 = Arr[0]; var num2 = Arr[1]; var num3 = Arr[2];
(2)、通过循环语句批量输出
Arr = new Array(1,2,3,4,5,6,7,8,9); 方法一 for(var i in Arr){ document.write(Arr[i]); } 方法二 for(var i=0;i<Arr.length;i++){ document.write(Arr[i]); }
(3)、通过数组引用对象名直接输出所有元素,注意输出的元素之间会用逗号隔开。
Arr = new Array(1,2,3,4,5,6,7,8,9); document.write(Arr);
4、Array对象的属性(不作重点解释)
(1)、length属性用于返回数组的长度,即元素个数。JavaScript数组的length属性是可变的,需要特别注意的是,当length属性被设置得更大时,整个数组的状态事实上不会发生变化,仅仅是length属性变大;当length属性被设置得比原来小时,则原先数组中索引大于或等于length的元素的值全部会丢失。
//创建数组引用对象,当前数组长度为9 var Arr = new Array(1,2,3,4,5,6,7,8,9); //改变数组长度,大于最先的数组长度 Arr.length = 12; //打印改变数组长度后的数组元素和长度 console.log(Arr); console.log("改变后的数组长度为:"+Arr.length); //再次改变数组长度,小于最先的数组长度 Arr.length = 6; //打印第二次改变数组长度后的数组元素和长度 console.log(Arr); console.log("第二次改变后的数组长度为:"+Arr.length); //再次扩容,大于最后一次改变的长度 Arr.length = 10; //打印扩容后的数组元素和长度 console.log(Arr); console.log("第三次改变后的数组长度为:"+Arr.length);
(2)、prototype属性是object共有的,用于向对象添加属性和方法。
//为Array对象添加最大元素值的方法,该方法调用函数array_max获得最大值 Array.prototype.max = array_max; var x = new Array(1,3,5,4,2); var y = x.max(); //存储最大值 document.write(y); //输出最大值 function array_max(){ //注意谁调用,该this就是谁,由于是x引用数组调用故,this[0]为1 //定义起始最大值 var max = this[0]; for(var i=1;i<this.length;i++){ if(max < this[i]){ //将遍历的每个元素都和最大值进行比较 max=this[i]; //更新最大值 } return max; }
(3)、constructor属性返回当前对象的构造函数名
var Arr = new Array(1,2,3,4,5); if (Arr.constructor == Array){ document.write("This is an Array"); }else if (Arr.constructor == Boolean){ document.write("This is a Boolean"); }else if (Arr.constructor == Date){ document.write("This is a Date"); }else if (Arr.constructor == String){ document.write("This is a String"); }
5、Array对象的方法
5.1、数组元素的添加和删除
数组元素的添加和删除可以使用concat()、unshift()、push()和pop()、shift()方法实现
(a)、concat()方法可以将其它数组或元素连接到当前数组的尾端。
语法:Arr1.concat(Arr2 or value)
注意:连接后的结果并没有存储在发起连接的数组对象中,所以要么将连接后的结果赋值给连接对象本身更新数组元素,要么就创建一个新的数组对象来存储连接后的结果。具体看下例代码
var arr1 = new Array(3) arr1[0] = 1 arr1[1] = 2arr1[2] = 3 var arr2 = new Array(3) arr2[0] = 4 arr2[1] = 5 arr2[2] = 6 var arr3 = new Array(3) arr3[0] = 7 arr3[1] = 8 arr3[2] = 9 //数组arr1连接arr2和arr3的结果 console.log(arr1.concat(arr2,arr3)); //检验连接后数组arr1的元素,发现并没有改变 console.log(arr1); //将连接后的数组存储在引用数组对象arr4中 var arr4 = arr1.concat(arr2,arr3); console.log(arr4); //检验arr4数组 //arr4数组连接具体值10、11、12之后将结果赋值给本身 arr4 = arr4.concat(10,11,12); console.log(arr4); //检验连接具体值后的arr4数组
从上述代码可以看出,数组arr1指定固定长度为3,当数组arr1和arr2、arr3连接之后长度为9超过了指定长度,但系统不会报错。这是因为连接对象连接其他对象之后成为了一个新的Array对象,并没有将被连接的元素存储到连接对象的尾端,故不会报错;与之不同的是,如果将连接后的新对象赋值给连接对象arr1,那么arr1就会将之前的指引对象断掉重新指向新的Array对象,这一点涉及到Java的内存分配机制(其他语言不作解释)
(b)、unshift()方法可以在指定数组的头部添加一个或多个元素
语法:Array对象名.unshift(value1,value2,......);
注意:和concat方法不一样的是,元素是实际插入到数组中的,并不受限于数组的长度。
var Arr1 = new Array(3) Arr1[0] = 1 Arr1[1] = 2 Arr1[2] = 3 console.log(Arr1); Arr1.unshift(4,5); ←---- console.log(Arr1);
(c)、push()方法在数组的末尾添加一个多个元素,并返回数组长度
语法:Array对象名.push(value1,value2,......);
注意:和unshift一样,元素是实际插入到数组中的,并不受限于数组的长度。
var Arr1 = new Array(3) Arr1[0] = 1 Arr1[1] = 2 Arr1[2] = 3 console.log(Arr1); Arr1.push(4,5); ←---- console.log(Arr1);
Array对象的删除方法 shift 和 pop 与 unshift 和 push方法一样,只是前者是删除元素,后者是增加元素。这里我就不往下讲解,赶兴趣的同学可以自行学习。
5.2、获取数组中的某段数组元素
Array对象的slice()方法提供了从数组中返回从指定开始到结束下标之间的选定元素。
语法:引用对象名.slice(起始下标,结束下标);
注意:起始下标规定了从那个下标开始取值,如果该值是负数,那么它规定以数组尾部为起点开始逆推,也就是说-1是最后一个元素,-2是倒数第二个元素,以此类推。结束下标规定了从那个下标结束取值,如果该值没有指定,那么切分的数组包含从起点下标开始后的所有的元素;如果该值是负数,那么它的从数组尾部开始算起。
重点在于,截取出来的数组第一个元素就是其实下标元素,而最后一个元素是最终元素的前一个。开始取值和结束取值的含义不同,开始取值包含该元素,而结束取值不包含该元素。另外不管起点和重点的坐标是正数还是负数,起点坐标必须在终点坐标的前面,即无论正负,起点在终点的左边,方向指向右。
var Arr = new Array(1,2,3,4,5,6,7,8,9,10); //以下标2中的元素为起点,到下标4为结束点,即只读取到下标3 console.log(Arr.slice(2,4)); //起点下标必须在终点下标的左边,两者连线方向指向右。 //以起点为正,终点为负。 console.log(Arr.slice(1,-2)); //以起点为负,终点为正。 console.log(Arr.slice(-8,6)); //以起点为负,终点也为负。 console.log(Arr.slice(-6,-3));
和上面的数组连接一样,这里截取出来也是一个新的数组对象,不影响原数组,所以一般将截取后的数组存储在一个引用变量中,例如:var num = Arr.slice(2,6);
5.3、将数组转换成字符串
将数组转换成字符串的方法有toString()、toLocaleString()和join(),这里我们只讲解toString和join方法。
(1)、toString()方法可以将数组转换为字符串,并返回结果
语法:var sum = Arr.toString();
注意:无论是字符串数组还是数值数组均转换为字符串。
var Arr = new Array(1,2,3,4,5,6,7,8); //检验转换前的数组元素和数组类型 console.log(Arr); console.log(typeof Arr); //检验转换后的数组元素和数组类型 var Container = Arr.toString(); //存储对 ←----- console.log(Container); console.log(typeof Container);
(2)、join()方法将数组中的所有元素都放入一个字符串中,可以指定每个元素之间的间隔符。如过没有指定间隔符,则默认使用逗号,如上图效果。
var Arr = new Array(1,2,3,4,5,6,7,8); //检验转换前的数组元素和数组类型 console.log(Arr); console.log(typeof Arr); //检验转换后的数组元素和数组类型 var Container = Arr.join("*"); //存储对象 ←----- console.log(Container); console.log(typeof Container);
这篇文章到这里就介绍完毕了,有问题欢迎指出
------ END ------