引用类型之Array(一)
Array类型
除了Object之外,Array类型在ECMAScript中也很常用。ECMAScript中的数组与其他多数语言中的数组有着相当大的区别。ECMAScript数组的每一项可以保存任何类型的数据。也就是说,可以用数组第一个位置来保存字符串,用第二位置来保存数值,用第三位置来保存对象,以此类推。而且ECMAScript数组的大小是可以动态调整的,即可以随着数据添加自动增长以容纳新增数据。
语法
创建数组的基本方式有两种。第一种是使用Array构造函数,代码如下
var colors=new Array();
如果预先知道数组要保存的项目数量,也可以给构造函数传递该数组,而且该数值会自动变成length属性的值。例如,下面的代码将创建length值为20的数组
var colors=new Array(20);
也可以向Array构造函数传递数组中应该包括的项。
//以下代码创建了一个包括三个字符串值得数组
var colors=new Array("red","blue","pink")
给构造函数传递一个值也可以创建数组,如果传递的是数值,那么就会创建length为这个数值的数组,如果传递的是其他类型的参数,则会创建包含那个值的只有一项的数组。例子如下
var colors=new Array(3); //创建一个包含3项的数组
var names=new Array("breeze"); //创建一个包含1项,即字符串"breeze"的数组
另外,在使用Array构造函数时也可以省略new操作符,如下
var colors=Array(3);
var names=Array("breeze");
创建数组的第二种基本方法是使用数组字面量表司法。数组字面量由一对包括数组项的方括号表示,多个数组项之间以逗号隔开,如下所示
var colors=["red","blue","green"];
var names=[];
读取和修改
使用方括号并提供响应值的基于0的数字索引,如下所示:
var colors=["red","blue","green"];
alert(colors[0]); //"red"
colors[2]="black"; //修改第三项
colors[3]="white"; //增加第四项
方括号中的索引表示要访问的值。如果索引小于数组中的项数,则返回对应项的值,所以colors[0]会返回"red"。设置数组的值也使用同样的语法,但会替换原来的值。如果索引数超过数组长度,则是新增。
数组的length属性
数组的项数保存在length属性中,这个属性始终会返回0或更大的值,如下面这个例子所示:
var colors=["red","blue","pink]; //创建一个包括3个字符串的数组
var names=[]; //创建一个空数组
alert(colors.length); //3
alert(names.length); //0
数组的length属性很有特点—— 它不是只读的。因此,通过设置这个属性,我们可以从数组的末尾移除或向数组中添加新项。请看下例
var colors=["red","blue","pink"]; //创建一个包括3个字符串的数组
colors.length=2;
alert(colors[2]); //undefined
这个例子中的数组colors一开始有三个值。将其length属性设置为2会移除最后一项,结果再访问colors[2]就会显示undefined了。如果将length属性设置为大于数组项数的值,则新增的每一项都会取得undefined,如下
var colors=["red","blue","pink"]; //创建一个包括3个字符串的数组
colors.length=4;
alert(colors[3]); //undefined
虽然colors数组包括3个项,但把它的length属性设置成了4。这数组不存在位置3,所以访问这个位置的值就得到了特殊值undefined。
利用length属性也可以在数组末尾添加新项,如下
var colors=["red","blue","pink"];
colors[colors.length]="black"; //在位置3添加新项
colors[colors.length]="white"; //在位置4添加新项
原理:由于数组的最后一项的索引都是length-1,因此新项的下一个位置都是length这个值。
当把一个值放在超出当前数组大小的位置上时,数组就会重新计算长度,即长度值等于最后一项的索引加1,如下
var colors=["red","blue","pink"];
colors[99]="black";
alert(colors.length); //100
在这个例子中,我们向colors数组的位置99插入了一个值,结果数组新长度length就是100(99+1)。而位置3到位置98实际上都是不存在的所以我们访问它们都将返回undefined。
引用类型之Array(一)的更多相关文章
- JavaScript高级编程——引用类型、Array数组使用、栈方法
JavaScript高级编程——引用类型.Array数组使用.栈方法 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999 ...
- JavaScript引用类型之Array类型一
一.简介 除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了.下面就来分析ECMAScript中的数组与其他语言中的数组的异同性: 1.相同点: (1)他们都是数据的有序列 ...
- 引用类型之Array类型
Array类型 ECMAScript数组与其它语言数组一样,都是数据的有序列表.但是ECMAScript数组的每一项可以保存任何类型的数据.而且,ECMAScript数组是可以动态调整的. 1.创建和 ...
- JavaScript引用类型之Array数组之强大的splice()方法
splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...
- JavaScript引用类型之Array数组的排序方法
数组中已经存在两个JavaScript给我们定义好的重排序的方法:reverse()和sort()方法,下面来简单分析下: 1.reverse() 用于反转数组项的顺序,代码如下: <sc ...
- JavaScript引用类型之Array数组的栈方法与队列方法
一.栈方法 ECMAScript数组也提供了一种让数组的行为类似与其他数据结构的方法.具体的来说,数组可以变现的向栈一样,栈就是一种可以限制插入和删除向的数据结构.栈是一种LIFO(Last In F ...
- JavaScript引用类型之Array数组的toString()和valueof()方法的区别
一.转换方法 1.在JavaScript中几乎所有对象都具有toLocaleString().toString和valueof()方法,因为,所有的对象都继承自Object,而前面所说的方法都是Obj ...
- JavaScript引用类型之Array类型API详解
Array类型也是ECMASCRIPT中最常见的数据类型,而且数据的每一项可以保存任何类型的数值,而且数组的大小是可以动态调整的,可以随着数据的添加自动增长以容纳新的数据.下面,总结数据的一些常用方法 ...
- 初心不负 笔记-JS高级程序设计-引用类型篇-Array
ES3方法集合: 1join()方法,将一个数组里面的所有元素转换成字符串,然后再将他们连接起来返回一个字符串,通过制定的符号,默认值为逗号.不会改变原数组 ,,,,]; a.join(); &quo ...
- JS引用类型之Array
ECMAScript中的数组可以说是比较神奇了, ECMAScript中定义的数组每一项可以保存不同的数据类型,如第一项为字符串,第二项为数值等等 1. 那怎么创建一个数组呢? 方法和创建对象实例类似 ...
随机推荐
- Netty源码分析之ByteBuf(一)—ByteBuf中API及类型概述
ByteBuf是Netty中主要的数据容器与操作工具,也是Netty内存管理优化的具体实现,本章我们先从整体上对ByteBuf进行一个概述: AbstractByteBuf是整个ByteBuf的框架类 ...
- 03 . Go开发一个日志平台之Elasticsearch使用及kafka消费消息发送到Elasticsearch
Elasticsearch使用 详细使用请看我写的Go操作Elasticsearch专篇 https://www.cnblogs.com/you-men/p/13391265.html example ...
- Python画图库Turtle库详解篇
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...
- boot磁盘空间大于80警报
WARNING=80SPACE_USED=`df |grep '^/dev/sda' |tr -s ' ' %|cut -d% -f5|sort -n|tail -n1`[ "$SPACE_ ...
- Kubernetes-14:一文详解Pod、Node调度规则(亲和性、污点、容忍、固定节点)
Kubernetes Pod调度说明 简介 Scheduler 是 Kubernetes 的调度器,主要任务是把定义的Pod分配到集群的节点上,听起来非常简单,但要考虑需要方面的问题: 公平:如何保证 ...
- 【jmespath】—3. 进阶 Object Projections
继续,来看Object Projections. 一.Object Projections 上面说的是列表投影,只适用于列表.那么对于json对象,可以用对象投影. 投影最终返回的仍然是个列表,只不过 ...
- Mysql批量导入
这应该是我写Mysql技术的最后一章了吧,短时间内应该不会再写Mysql的文章了,当然疑难杂症除外 insert语句优化 因为之前我也遇到过这样的问题,是我在做数据库适配的时候碰见的,那是我的数据还是 ...
- STS 使用lombox.jar
在Maven本地仓库中找到 将lombox.jar放在与STS.exe平级的目录下, 然后安装完了以后可能会出先打不开的情况.这个时候只要打开STS.ini文件. 然后修改文件保存
- JavaScript函数及面向对象
函数及面向对象 目录 函数及面向对象 1. 定义函数 1. 定义方式一 2. 定义方式二 2. 调用函数 1. 参数问题 2. arguments 3. rest 3. 变量的作用域 1 . var的 ...
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...