javascript面向对象技术基础(二)

作者:sdcyst 来源:javaeye 时间:2010-02-07 13:09:00 

数组

我们已经提到过,对象是无序数据的集合,而数组则是有序数据的集合,数组中的数据(元素)通过索引(从0开始)来访问,数组中的数据可以是任何的数据类型.数组本身仍旧是对象,但是由于数组的很多特性,通常情况下把数组和对象区别开来分别对待(Throughout this book, objects and arrays are often treated as distinct datatypes.This is a useful and reasonable simplification; you can treat objects and arrays as separate types
for most of your JavaScript programming.To fully understand the behavior of objects and arrays, however, you have to know the truth: an array is nothing more than an object with a thin layer of extra functionality. You can see this with the typeof operator: applied to an array value, it returns the string "object".  --section7.5).

创建数组可以用"[]"操作符,或者是用Array()构造函数来new一个.


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,看下面的例子.

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.

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)来得到值.数组本身也是一个对象,所以对象属性的操作也完全适合于数组.

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

标签:面向对象,数组,JavaScript
0
投稿

猜你喜欢

  • 深入研究Application和Session对象

    2008-10-13 08:30:00
  • CPQuery 解决拼接SQL的新方法

    2012-11-30 20:01:46
  • 百度百科的图片轮播代码

    2009-05-06 12:58:00
  • 能否推荐一个论坛用的数据库结构?

    2009-11-01 18:09:00
  • 用户是如何浏览你的网站的

    2010-05-03 14:26:00
  • JMail(4.3版本)发信asp代码

    2007-08-03 12:40:00
  • 输入法下keyup失效的解决方案

    2007-11-01 12:57:00
  • 搜索结果页(SERP)之:不要被F型浏览忽悠了

    2009-09-07 12:34:00
  • ASP日期和时间函数用法详解

    2007-10-13 19:33:00
  • SQL学习笔记七函数 数字,日期,类型转换,空值处理,case

    2011-09-30 11:48:25
  • oracle数据库下统计专营店的男女数量的语句

    2012-07-11 16:01:17
  • 清理你的CSS

    2009-10-06 15:11:00
  • 段正淳的css笔记(7)-表单在各浏览器的表现统一

    2008-01-14 02:47:00
  • Cookies 欺骗漏洞的防范方法(vbs+js 实现)

    2011-03-09 11:09:00
  • insert select与select into 的用法使用说明

    2012-01-05 18:47:58
  • 利用SQL语言有没有办法查到表中哪些记录中的全部

    2009-04-10 18:29:00
  • Facebook的特别之处是什么?

    2008-08-04 12:57:00
  • asp连接MYSQL数据库的连接字符串(参数OPTION)

    2009-03-09 18:24:00
  • 使用cmd命令行窗口操作SqlServer的方法

    2012-07-21 14:24:06
  • ajax xmlhttp getResponseHeader实例教程

    2009-02-04 10:46:00
  • asp之家 网络编程 m.aspxhome.com