JavaScript之Array类型(引用类型)

  • Post author:
  • Post category:java


Array类型


数组是除了Object之外最常用的数据类型,javascript中的数组可以保存任何类型的数据,如:第一个位置可以保存数字,第二个位置可以保存字符串,第三个位置可以保存对象等。数组的长度(大小)随着数据的新增加而自动增大。

数组的创建

数组的创建如果细致分的话,可以分为5种方法,

第一种是通过关键字new后跟构造函数Array()创建

var arr1 = new Array();


第二种,如果

预先知道数组的长度即要保存的项目的数量

,也可以向构造函数传递数量:
var arr2 = new Array(5); //预先知道数组的长度为5

第三种,可以向构造函数中传递要保存的项目(数据):
var ayy3 = new Array("Tom", "Bob", "color", 2);








注:有多个项目用逗号隔开,最后一个项目后面不用逗号。


第四种,可以省略关键字new,只通过构造函数Array()来创建:
var arr4 = Array(5); //可以传递项目的长度


第五种,可以用字面量法创建数组:使用中括号把项目内容括起来即可,最后一个项目后面不加逗号。
var arr5 = ["Tom", "Bob", "color", 2]

数组的访问及值的设置

在读取和设置数组的值时,要使用方括号并提供相应值的基于0的数字索引,如:
var arr6 = ["blue", "red", "yellow"];

alert(arr6[0]); //访问第一个位置的值并弹出blue
alert(arr6[2]); /访问第三个位置的值并/弹出yellow

arr6[2] = "orange"; //设置或改变第三个位置的值

设置后的数组为:
var arr6 = ["blue", "red", "orange"];

索引是从0开始的,所以要访问或设置某个位置的值时,索引要加1。
数组的

length

属性可以得到数组的长度或者说是组成数组的项目的个数。
var arr7 = ["blue", "red", "yellow"];

alert(arr7.length); //弹出3,数组的长度为3,由3个项目组成


也可以通过length属性来设置数组的值,一般是在数组的最后一个项目后面新增一个项目。
var arr6 = ["blue", "red", "yellow"];

arr6[arr6.length] = "orange"; //意义为在arr6[3]的位置新增项目orange

设置后的结果为:
var arr6 = ["blue", "red", "yellow", "orange"];

我们也可以通过length属性来控制数组的长度:先是减少长度
var arr6 = ["blue", "red", "yellow"];

arr6.length = 2;

控制之后原数组变成了:

var arr6 = ["blue", "red"]; //长度为2,数组中包含两个项目,后后截断内容。

此时访问arr6[2]的值:
var arr6 = ["blue", "red", "yellow"];

arr6.length = 2;

alert(arr6[2]); //undefined 此时第三个位置没有值了

接着通过length属性增加数组的长度:
var arr6 = ["blue", "red", "yellow"];

arr6.length = 4;

alert(arr6[3]); //undefined

相当于:

var arr6 = ["blue", "red", "yellow", "undefined"];

虽然将数组的长度增加到了4,但未对第四个位置赋值,所以值是undefined。

数组的最后一项索引始终是length-1,如果我们为某个索引位置赋值,则数组的长度为某个索引+1,即:
var arr6 = ["blue", "red", "yellow"];

arr6[99] = "orange";

alert(arr6.length); //此时数组的长度为100,弹出100

检测数组

用instanceof来检测某个对象是不是数组。
var arr6 = ["blue", "red", "yellow"];

if (arr6 instanceof Array) {
    alert(arr6[1]); //弹出red
}


instanceof

在只有一个全局环境中执行,当有两个全局执行环境的情况下,构造函数的版本不同。


Array.isArray()

检测某个值是不是数组。可以解决不同全局环境的情况。

转换方法

所有对象都具有

toLocalString()



toString()



valueOf()

方法。


toString()

方法返回由数组中

每个值的字符串

形式拼接而成的一个

以逗号隔开的字符串


valueOf()

方法返回的还是

数组

实际上,为了创建这个新成的字符串会

调用数组第一项的toString()

方法。

var colors = ["red", "blue", "yellow"];

alert(colors.toString()); //red,blue,yellow  返回的是每个值的字符串形式拼接成的以逗号隔开的字符串

alert(colors.valueOf()); // red,blue,yellow 返回的还是数组

alert(colors); //red,blue,yellow 后台调用toString()方法


alert()要接收字符串参数,后台会调用toString()方法。

toString()方法、valueOf()方法、alert()都会调用数组的第一项的toString()方法。

toLocalString()

方法也返回与前两个方法类似相同的值,唯一的区别在于toLocalString()方法会

调用数组第一项的toLocalString()方法

join()方法

前面三种方法,在默认情况下是以逗号隔开字符串的,join()方法可以自定义用分隔符隔开字符串,可以使用不同的分隔符来构建这个字符串。

var colors = ["red", "blue", "yellow"];

alert(colors.join("-")); //返回red-blue-yellow

alert(colors.join("||")); //返回red||blue||yellow


如果不给join()方法传入参数或者传入undefined,则默认使用逗号隔开字符串。

如果数组中的某一项是null或undefined,使用以上四种方法返回的结果中是以

空字符

表示的。



版权声明:本文为h15882065951原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。