JavaScript面向对象程序设计(2): 数组
2009-09-11 00:00:00 来源:WEB开发网var arr = [1, 2, 3, 4, 5];
alert(arr.length); // 数组长度为5
alert(arr[3]); // arr[3] = 4
arr[9] = 10; // 改变了数组的长度为10
alert(arr[7]);
alert(arr.length);
首先创建一个数组arr,可以看到它的长度是5,arr[3]是4。这些都是很常见的。那么第三句,arr[9] = 10;就有点意思了——在Java中,这句操作将导致数组越界的异常,在C++中,这种操作是极其危险的。但是在JavaScript中,这样的操作是正常的——你可以动态的改变数组的大小!虽然你在创建数组时并没有这么大的长度,但是,你可以在创建之后指定它!这时的arr.length已经自动的变成 10了。那么,arr[7]又会是什么呢?经过运行代码我们会看到,arr[7]是undefined。也就是说,虽然arr[9]有了值,但是其中从 arr[5]到arr[8]这几个元素都是未定义的,也就是undefined。如果你问JavaScript怎么不给个初始值?唉,饶了它吧!JavaScript并不知道你想要它初始化成什么值啊!万一错了呢?干脆还是别了吧……
var arr = [1, 2, 3, 4, 5];
alert(arr.length); // 数组长度为5
delete arr[3]; // 删掉第4个元素
alert(arr.length); // 长度不变
alert(arr[3]); // arr[3] = undefined
arr.length = 4; // 缩短长度
alert(arr[4]);
arr.length = 10; // 增加长度
alert(arr[6]);
上面的代码也很有意思:使用delete操作符可以删除任意一个数组元素,但是长度并不改变。
Java的数组也有一个length属性,用来显示数组的长度。JavaScript的数组也有这个属性。但是,和Java不同的是,后者的 length属性并不是只读的!你可以任意的设置数组的length属性的值,无论是扩大还是缩小!只是如上面的代码所示,改变了length之后,越界的元素或者以前没有定义的元素都将成为undefined。也就是说,当length大于原始长度时,从原长度到length - 1的元素都将成为undefined;当length小于原始长度时,从length到原长度 - 1的元素也都会清除设置为undefined。
3. 非数字的下标?
如果动态的length属性还不够灵活的话,那么,JavaScript的数组还有另外的能力。
你见到过用字符串做数组下标的吗?Java行吗?C++行吗?JavaScript就行!看看下面的语句:
var arr = [1, 2, 3];
alert(arr[1] == arr["1"]);
arr["js"] = 4;
alert(arr["js"]);
上面的语句看到,arr[1]和arr["1"]实际是一样的效果!这是怎么回事呢?我们用下面的语句验证一下:
alert(1 == "1"); // true
alert(1 === "1"); // false
由于JavaScript是弱类型语言,所以在使用变量的时候,JavaScript会尽可能的将它转换成所需要的类型。比如数组下面需要数字,那么提供一个字符串,将会试图把字符串转换成数字。这里的"1"就成功的转换成了数字1,于是这个语句就成立了。这就是使用 == 操作符返回true的原因。而 === 操作符不允许这样的类型转换,所以会返回false。
那么,这个arr["js"]怎么也能成立呢?这就不是上面的问题了。也就是说,JavaScript实际是允许将字符串作为数字下标的。这在JavaScript中是完全合法的。
出处: http://devbean.blog.51cto.com/448512/163574
编缉推荐阅读以下文章
- JavaScript面向对象程序设计(8): 优雅的封装还是执行的效率?
- JavaScript面向对象程序设计(7): 闭包
- JavaScript面向对象程序设计(6): 封装
- JavaScript面向对象程序设计(5): 类
- JavaScript面向对象程序设计(4): 函数
- JavaScript面向对象程序设计(3): 对象
- JavaScript面向对象程序设计(1): 前言
- 理解JavaScript面向对象的思路
- Javascript面向对象详解(第一部分)
- JavaScript面向对象的支持(下)
Tags:JavaScript 面向 对象
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接