JavaScript 中的数组,和其他语言中的数组一样,用来存储数据,和java,c,c++一样,数组元素从下标0开始。当然,它有它的特色,如javascript是无类型(untyped language)语言,同一数组中的元素可以是不同类型。顺便插入一下,javascript支持三种基本(primitive)数据类型,即,number,string,boolean,两种tivial data types, 即,null和undefined,还支持复合类型,数组和类。由此,一个数组的每个元素可以是以上类型中的任何一种。下面直入主题:
创建数组
在javascript中,创建数组和c,c++,java一样,也有如下两种创建方式,但是,它的类型无关给它了特别。
var a = new Array();//创建一个空数组
var a = [1,true];
//创建一个数组,第一个元素为number“1”,第二个位boolean类型的“true”
在运用new操作符,有几个构造函数,分叙如下:
//创建一个数组,第一个元素为number“1”,第二个位boolean类型的“true”
在运用new操作符,有几个构造函数,分叙如下:
var a = new Array(10);//创建一个数组,length=10
var a = new Array(4,3,2,1,"test");//创建一个数组,前四个元素初始化为3,2,1,"test"
这个小特别,其实也没有什么太大的与众不同,可是,但当我们发现javascript中的数组的长度可以由通过如下方式,修改属性值length后而改变数组长度,或许我们要另眼看待其灵活。
var a=[1,2,3,4,'2',true];
a.length=5;//a=[1,2,3,4,'2']
除此之外,Array中的元素可以在占用最少资源的情况下,任意增加(元素个数不操过0xFFFFFFFF -1)。这是因为,javascript中保存数组元素时,只保存已赋值的元素,其他元素不分配内存。例如:
a[0] = 1;
a[10000]="this is element 10,000";
//这个相当于在数组中加入一个a[10000]元素,同时,数组长度自然增加
解释器只给a[0]和a[10000]分配内存,中间的9,999元素不分配内存。同时,在不给中间的元素赋值时,它们都是undefined类型。下面是array 的其他方法:
join( );
reverse( );
sort( );
concat( );
slice( );
splice( );
push( ) and pop( );
unshift( ) and shift( );
toString( ) and toLocaleString( )
其中较特别的是splice(),push(),pop(),unshift&shift(),splice()可以删除,增加数组中的元素,或是同时删除和增加数组中的元素;而push()&pop()则是把数组看成为一个stack,把数组的最大标号作为出口;shift()&unshift()也是把数组当作为一个stack,不过是把数组的最小标号元素array[0]作为出口,它们都会自动更新元素的位置。具体如下:
var a = [1,2,3,4,5,6,7,8];
//splice在只有一个参数是,会把该参数之后的元素都删掉
a.splice(4); // Returns [5,6,7,8]; a is [1,2,3,4]
//若有两个参数,第二个参数为删除元素的个数
a.splice(1,2); // Returns [2,3]; a is [1,4]
a.splice(1,1); // Returns [4]; a is [1]
var b = [1,2,3,4,5];
//若有多余两个参数,则从第三个参数开始,都是插入的元素,而且从第一个参数所指示的位置开始插入元素
b.splice(2,0,'a','b'); // Returns []; a is [1,2,'a','b',3,4,5]
b.splice(2,2,[1,2],3); // Returns ['a','b']; a is [1,2,[1,2],3,3,4,5]
//push返回数组的长度,pop返回弹出的值
var stack = []; // stack: []
stack.push(1,2); // stack: [1,2] Returns 2
stack.pop( ); // stack: [1] Returns 2
stack.push(3); // stack: [1,3] Returns 2
stack.pop( ); // stack: [1] Returns 3
//unshift返回数组的长度,shift返回弹出的值
var a = []; // a:[]
a.unshift(1); // a:[1] Returns: 1
a.unshift(22); // a:[22,1] Returns: 2
a.shift( ); // a:[1] Returns: 22