数组
我们已经提到过, 对象是无序数据的集合, 而数组则是有序数据的集合, 数组中的数据( 元素) 通过索引( 从0 开始) 来访问, 数组中的数据可以是任何的数据类型. 数组本身仍旧是对象, 但是由于数组的很多特性, 通常情况下把数组和对象区别开来分别对待创建数组可以用"[]" 操作符, 或者是用Array() 构造函数来new 一个。
Js 代码
var array1 = []; // 创建空数组
var array2 = new Array(); // 创建空数组
array1 = [1,"s",[3,4],{"name1":"NAME1"}]; //
alert(array1[2][1]); //4 访问数组中的数组元素
alert(array1[3].name1); //NAME1 访问数组中的对象
alert(array1[8]); //undefined
array2 = [,,]; // 没有数值填入只有逗号, 则对应索引处undefined
alert(array2.length); //3
alert(array2[1]); //undefined
用new Array() 来创建数组时, 可以指定一个默认的大小, 其中的值此时为undefined, 以后可以再给他们赋值. 但是由于javascript 中的数组的长度是可以任意改变的, 同时数组中的内容也是可以任意改变的, 因此这个初始化的长度实际上对数组没有任何的约束力. 对于一个数组, 如果对超过它最大长度的索引赋值, 则会改变数组的长度, 同时会对没有赋值的索引处赋值undefined, 看下面的例子.
Js 代码
var array = new Array(10);
alert(array.length); //10
alert(array[4]); //undefined
array[100] = "100th"; // 这个操作会改变数组的长度, 同时将10-99 索引对应的值设为undefined
alert(array.length); //101
alert(array[87]); //undefined
可以用delete 操作符删除数组的元素, 注意这个删除仅仅是将数组在该位置的元素设为undefined, 数组的长度并没有改变.
我们已经使用过了数组的length 属性,length 属性是一个可以读/ 写的属性, 也就是说我们可以通过改变数组的length 属性来任意的改变数组的长度. 如果将length 设为小于数组长度的值, 则原数组中索引大于length-1 的值都会被删除. 如果length 的值大于原始数组的长度, 则在它们之间的值设为undefined.
Js 代码
var array = new Array("n1","n2","n3","n4","n5"); // 五个元素的数组
var astring = "";
for(var i=0; i<array.length; i++) { // 循环数组元素
astring += array[i];
}
alert(astring); //n1n2n3n4n5
delete array[3]; // 删除数组元素的值
alert(array.length + "_" + array[3]) //5_undefined
array.length = 3; // 缩减数组的长度
alert(array[3]); //undefined
array.length = 8; // 扩充数组的长度
alert(array[4]); //undefined
对于数组的其他方法诸如join/reverse 等等, 在这就不再一一举例.
通过上面的解释, 我们已经知道, 对象的属性值是通过属性的名字( 字符串类型) 来获取, 而数组的元素是通过索引( 整数型 0~~2**32-1) 来得到值. 数组本身也是一个对象, 所以对象属性的操作也完全适合于数组.
Js 代码
var array = new Array("no1","no2");
array["po"] = "props1";
alert(array.length); //2
// 对于数组来说,array[0] 同array["0"] 效果是一样的alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1