数组是一组按序排列的值,相对地,对象的属性名称是无序的。从本质上讲,数组使用数字作为查找键,而对象拥有用户自定义的属性名。javascript没有真正的关联数组,但对象可用于实现关联的功能
Array()仅仅是一种特殊类型的Object(),也就是说,Array()实例基本上是拥有一些额外功能的Object()实例。数组可以保存任何类型的值,这些值可以随时更新或删除,且数组的大小是动态调整的
一、数组创建
与Javascript中的大多数对象一样,可以使用new操作符连同Array()构造函数,或者通过使用字面量语法来创建数组对象
【1】使用Array构造函数(在使用Array构造函数时,也可以省略New操作符),可以将数组实例的值传递给构造函数,以逗号分隔作为参数,Array()构造函数可以接收4294967295(大约43亿)个参数
如果只有一个参数:若传递的是数值,它将用来设置数组的长度;若传递的是其他类型的参数,则会创建包含那个值的只有一项的数组
var colors; console.log(colors = new Array(),colors.length);//[] 0 console.log(colors = new Array('red','blue','green'),colors.length);//['red','blue','green'] 3 console.log(colors = new Array(20),colors.length);//[] 20 console.log(colors = new Array('red'),colors.length);//['red'] 1
var foo = new Array(1,2,3); var bar = new Array(100); console.log(foo[0],foo[2]);//1 3 console.log(bar[0],bar.length);//undefined 100
【2】使用数组字面量表示法
var colors = ['red','blue','green']; var colors = []; //Array构造函数 var myArray1 = new Array('blue','green','orange','red'); console.log(myArray1);//['blue','green','orange','red'] //数组字面量表示法 var myArray2 = ['blue','green','orange','red']; console.log(myArray2);//['blue','green','orange','red'] var colors = [1,2,]; //在IE8及以前中会包含一个三个项目,且每个项目为1、2和undefined的数组。在其他浏览器中为只包含1和2的数组 var colors = [,,,]; //在IE8及以前会创建4项的数组,而在其他浏览器中会创建3项的数组
二、数组操作
在读取和设置数组的值时,要使用方括号并提供相应值的基于0的数字索引
数组的长度length属性表示数组中值的数量,而数组的数字索引是从0开始的;且length属性可读可写,通过设置数组的Length属性,可以从数组的末尾移除项或向数组中添加新项。如果设置的长度高于数组中值的实际数量,将向数组中添加undefined值;若将长度值的数量设置为少于数组中的值的数量,可能会删除数组中的值
var myArray = ['blue','green','orange','red']; console.log(myArray.length);//4 myArray.length = 99; console.log(myArray.length);//99 myArray.length = 1; console.log(myArray[1]);//undefined console.log(myArray);//['blue'] var colors = ['red','blue','green']; colors.length = 2; alert(colors[2]);//undefined colors.length = 4; alert(colors[3]);//undefined
当把一个值放在超出数组大小的位置上时,数组就会重新计算其长度值,即长度值等于最后一项的索引加1,Javascript将会使用undefined值填充当前索引之前的所有索引
var myArray = []; myArray[50] = 'blue'; console.log(myArray.length);//51 var colors = ['red','blue','green']; colors[99] = 'black'; console.log(colors.length);//100
[tips]利用length属性可以方便地在数组末尾添加新项
colors[colors.length] = 'black';
三、继承的方法
toString()
返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串
valueof()
返回的还是数组
var colors = ['red','blue','green']; console.log(colors.valueOf());//['red','blue','green'] alert(colors.valueOf());//'red,blue,green' alert(colors.toString());//'red,blue,green' alert(colors);//'red,blue,green'[注意]由于alert()要接收字符串参数,它会在后台调用toString()方法,会得到与toString()方法相同的结果
toLocaleString()
调用该方法时,数组的每一项的值调用的是toLocaleString()方法
var person1 = { toLocaleString: function(){ return 'Nikolaos'; }, toString: function(){ return 'Nicholas'; } }; var person2 = { toLocaleString: function(){ return 'Grigorios'; }, toString: function(){ return 'Greg'; } }; var people = [person1,person2]; alert(people);//Nicholas,Greg alert(people.toString());//Nicholas,Greg alert(people.toLocaleString());//Nikolaos,Grigorios
四、实例方法
数组转换
join()
数组继承的toLocaleString()、toString()、valueOf()方法,在默认情况下都会以逗号分隔的字符形式返回数组项;而join()方法可以使用不同的分隔符来构建这个字符串,join()方法只接收一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串。如果不给join()方法传入任何值,或者传入undefined,则使用逗号作为分隔符