集合引用类型之数组

   

1.数组(Araray):Array 应该就是 ECMAScript 中最常用的类型了(除了object)。

ECMAScript中的数组跟其他编程语言的数组有很大区别。而跟其他语言中的数组一样,ECMAScript 数组也是一组有序的数据,但是跟其他语言不同的是,数组中每个槽位可以存储任意类型的数据。这意味着可以创建一个数组,它的第一个元素 是字符串,第二个元素是数值,第三个是对象。ECMAScript 数组也是动态大小的,会随着数据添加而 自动增长。

2.创建数组:在js中有几种基本的方式可以创建数组;

第一种:使用 Array 构造函数,比如:

如果知道数组中元素的数量,那么可以给构造函数传入一个数值,然后 length 属性就会被自动创 建并设置为这个值。比如,下面的代码会创建一个初始 length 为 20 的数组:

也可以给 Array 构造函数传入要保存的元素。比如,下面的代码会创建一个包含 3 个字符串值的数组:

创建数组时可以给构造函数传一个值。这时候就有点问题了,因为如果这个值是数值,则会创建一 个长度为指定数值的数组;而如果这个值是其他类型的,则会创建一个只包含该特定值的数组。下面看一个例子:

在用第一种方法创建数组时也可以省略 new 操作符。结果是一样的,比如:

     

3.第二种方法:使用数组字面量(array literal)表示法,数组字面量是在中括号中包含以 逗号分隔的元素列表,如下面的例子所示:

注意:与对象一样,在使用数组字面量表示法创建数组不会调用 Array 构造函数。

4.数组的索引:与要取得或设置数组的值,需要使用中括号并提供相应值的数字索引,如下所示:

在中括号中提供的索引表示要访问的值。如果索引小于数组包含的元素数,则返回存储在相应位置 的元素,就像示例中 arr1[0]显示"red"一样。设置数组的值方法也是一样的,就是替换指定位置的 值。如果把一个值设置给超过数组最大索引的索引,就像示例中的 arr1[3],则数组长度会自动扩 展到该索引值加 1(示例中设置的索引 3,所以数组长度变成了 4)。 数组中元素的数量保存在 length 属性中,这个属性始终返回 0 或大于 0 的值,如下例所示:

数组 length 属性的独特之处在于,它不是只读的。通过修改 length 属性,可以从数组末尾删除或添加元素。来看下面的例子:

数组 arr4 一开始有 3 个值。将 length 设置为 2,就删除了最后一个(位置 2 的)值, 因此 arr4[2]就没有值了。如果将 length 设置为大于数组元素数的值,则新添加的元素都将以 undefined 填充,如下例所示:

这里将数组 arr4 的 length 设置为 4,虽然数组只包含 3 个元素。位置 3 在数组中不存在,因 此访问其值会返回特殊值 undefined。

使用 length 属性可以方便地向数组末尾添加元素,如下例所示:

数组中最后一个元素的索引始终是 length - 1,因此下一个新增槽位的索引就是 length。每次 在数组最后一个元素后面新增一项,数组的 length 属性都会自动更新,以反映变化。这意味着第二行 的 arr1[arr1.length]会在位置 3 添加一个新元素,下一行则会在位置 4 添加一个新元素。新的 长度会在新增元素被添加到当前数组外部的位置上时自动更新。换句话说,就是 length 属性会更新为 位置加上 1,如下例所示:

这里,arr2数组有一个值被插入到位置 99,结果新 length 就变成了 100(99 + 1)。这中间的 所有元素,即位置 3~98,实际上并不存在,因此在访问时会返回 undefined。

注意:数组最多可以包含 4 294 967 295 个元素,这对于大多数编程任务应该足够了。如果 尝试添加更多项,则会导致抛出错误。以这个最大值作为初始值创建数组,可能导致脚本 运行时间过长的错误。

5.检测数组:个经典的 ECMAScript 问题是判断一个对象是不是数组。在只有一个网页(因而只有一个全局作 用域)的情况下,使用 instanceof 操作符就可以了:

使用 instanceof 的问题是假定只有一个全局执行上下文。如果网页里有多个框架,则可能涉及两 个不同的全局执行上下文,因此就会有两个不同版本的 Array 构造函数。如果要把数组从一个框架传 给另一个框架,则这个数组的构造函数将有别于在第二个框架内本地创建的数组。

为解决这个问题,ECMAScript 提供了 Array.isArray()方法。这个方法的目的就是确定一个值是 否为数组,而不用管它是在哪个全局执行上下文中创建的。来看下面的例子:

6.队列方法:ECMAScript 给数组提供几个方法,让它看起来像是另外一种数据结构。数组对象可以像栈一样, 也就是一种限制插入和删除项的数据结构。栈是一种后进先出(LIFO,Last-In-First-Out)的结构,也就 是最近添加的项先被删除。数据项的插入(称为推入,push)和删除(称为弹出,pop)只在栈的一个 地方发生,即栈顶。ECMAScript 数组提供了 push()和 pop()方法,以实现类似栈的行为。 push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度。pop()方法则 用于删除数组的最后一项,同时减少数组的 length 值,返回被删除的项。来看下面的例子:

以上就是我所学到的引用类型中数组的知识,希望能对你有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值