博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript面向对象程序设计(2): 数组
阅读量:5937 次
发布时间:2019-06-19

本文共 2542 字,大约阅读时间需要 8 分钟。

或许你会奇怪,面向对象的程序设计为什么从数组开始讲起?这是因为……其间的种种关系吧……嘿嘿,这里先卖个关子,先来看看我们熟悉的数组在JavaScript里面是什么样子的。
 
1. 创建数组
 
在JavaScript中有很多创建数组的方法。比如使用Array函数。不过这不是现在我们要讲述的。现在我们使用简单的方括号“[]”的办法来创建数组。
 
var objAyyar = []; 
// 1 

var objAyyar = [2]; 
// 2 

var objAyyar = [
"a"
"b"
"c"]; 
// 3 

var objAyyar = [
new Date(), 123, 
"abc"]; 
// 4
 
这里有四个创建数组的语句。下面来一一解释一下:
 
第一句,创建一个空的数组;
 
第二句,创建一个数组,数组元素只有一个2;
 
第三句,创建一个数组,数组的元素分别初始化为"a", "b", "c";
 
第四句,创建一个数组,其中第一个元素为一个Date类型的对象,第二个元素是数字123,第三个元素是字符串"abc"。
 
回顾一下,在Java或者C++语言中,数组是具有相同的数据类型的元素的集合。比如使用Java语言的下面语句
 
int[] array = 
new 
int[10];
 
将创建一个能放入10个int类型的元素的数组。数组和其他类型的集合的一个很大的区别是,数组里面只能存放相同数据类型的元素(使用泛型的集合除外)。但是,像上面的第四句,JavaScript的数组怎么能存放不同类型的元素呢?这是因为,JavaScript是弱类型的语言,没有很大的数据类型的差别,所以数组的元素可以放入不同的类型。
 
2. 操作数组
 
数组是元素的有序集合。数组中的元素是有序的,这就可以通过下标访问到数组中的每个元素。而且,JavaScript的数组相当的灵活。当你习惯了Java或者C++的数组之后,或许并不习惯JavaScript的数组。在一定程度上,这种数组可以称为一种动态数组。看这样一段代码:
 
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中是完全合法的。
本文转自 FinderCheng 51CTO博客,原文链接:
http://blog.51cto.com/devbean/163574

转载地址:http://arjtx.baihongyu.com/

你可能感兴趣的文章
城市智慧商圈将进行试点建设
查看>>
评论:是什么能够让英特尔、清华大学等三方携手?
查看>>
携手易维帮助台,神州数码轻松搞定IT外包服务
查看>>
珠海航展将首次利用大数据技术进行交通诱导
查看>>
梅耶尔将对雅虎“开刀”:裁员15%,关闭部分业务
查看>>
小网站架构优化-提升抗并发能力:子应用程序分离方案
查看>>
澳大利亚初创公司SalesPreso获得200万美元种子投资
查看>>
运营商的“大网”怎么建? 三大运营商纷纷SDN/NFV三步走
查看>>
通辽智慧城市建设总体规划和顶层设计专家评审会召开
查看>>
未来营销闯关标配:大数据+智能硬件
查看>>
互动性可视化,打通大数据最后一公里
查看>>
为什么媒体如此惧怕 Facebook?
查看>>
我眼中的性能测试工程师
查看>>
台积电与ARM合作开发7纳米芯片 或用于iPhone 8
查看>>
大数据窥探:关于大数据的15条干货思考
查看>>
随谈10年的技术生涯和技术成长
查看>>
《交互式程序设计 第2版》一1.1 本书读者对象
查看>>
各省光伏十三五规划汇总:总规模将超130GW
查看>>
《大数据时代》作者:当下数据隐私保护方式是完全错误的
查看>>
光伏亟待资本注入 业界呼吁第三方“风险评级”
查看>>