JavaScript学习笔记-数组(1)
数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。JavaScript数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型。数组的元素甚至也可能是对象或其他数组,这允许创建复杂的数据结构。
1.创建数组
使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可。
var empty=[]; //没有元素的数组
var primes=[2,3,5,7,11]; //有5个数值的数组
var misc=[1.1,true,"a",]; //3个不同类型的元素和结尾的逗号
数组直接量中的值不一定要是常量;它们可以是任意的表达式:
var base=1024;
var table=[base,base+1,base+2,base+3];
它可以包含对象直接量或其他数组直接量:
var b=[[1,{x:1,y:2}],[2,{x:3,y:4}]];
如果省略数组直接量中的某个值,省略的元素被赋予undefined值:
var count=[1,,3]; //数组有3个元素,中间的那个元素值为undefined
2 var undefs=[,,]; //数组有2个元素,都是undefined
数组直接量的语法允许有可选的结尾的逗号,故[,,]只有两个元素而非三个。
关于调用构造函数Array()是创建数组的另一种方法。可以用三种方式调用构造函数。
调用时没有参数:
var a=new Array();
该方法创建一个没有任何元素的空数组,等同于数组直接量[]。
调用时有一个数值参数,它指定长度:
var a=new Array(10);
显式指定两个或多个数组元素或者数组的一个非数值元素:
var a=new Array(5,4,3,2,1,"test,test");
2.数组元素的读和写
使用[]操作符来访问数组中的一个元素。数组的引用位于方括号的左边。方括号中是一个返回非负整数值的任意表达式。使用该语法可以读又可以写数组的一个元素,因此,如下代码都是合法的JavaScript语法:
var a=["world"]; //从一个元素的数组开始
var value=a[0]; //读第0个元素
a[1]=3.14; //写第1个元素
i=2;
a[i]=3; // 写第2个元素
a[i+1]="hello"; //写第3个元素
a[a[i]]=a[0];//读第0个和第2个元素,写第3个元素
3.稀疏数组
稀疏数组就是包含从0开始的不连续索引的数组。通常,数组的length属性只代表数组中元素的个数。如果数组是稀疏的,length属性值大于元素的个数。可以用Array()构造函数或简单的指定数组的索引值大于当前
的数组长度来创建稀疏数组。
a = new Array(5); //数组没有元素,但是a.length是5
a =[]; //创建一个空数组,length=0
a[1000] =0; //赋值添加一个元素,但是设置length为1001
4.数组长度
每个数组有一个length属性,就是这个属性使其区别于常规的JavaScript对象。length属性只代表数组中元素个数。其值比数组中最大的索引大1:
[].length //=>0:数组没有元素
2 {'a','b','c'}.length //=>3: 最大的索引为2,length为3
5.数组元素的添加和删除
我们见过添加数组元素最简单的方法:为新索引赋值:
a =[] //开始是一个空数组
2 a[0]="zero";//然后向其添加元素
3 a[1]="one";
也可以使用push()方法在数组末尾增加一个或多个元素:
a=[]; //开始是一个空数组
a.push("zero") //在末尾添加一个元素
a.push("one","two") //再添加两个元素
可以删除对象属性一样使用delete运算符来删除数组元素:
a=[1,2,3];
delete a[1]; //a在索引1的位置不再有元素
1 in a //=>false: 数组索引1并未在数组中定义
a.length //=>3:delete 操作并不影响数组长度
7.数组遍历
使用for 循环是遍历数组元素最常见的方法:
var keys =Object.keys(o); //获得o对象属性名组成的数组
var values=[] //在数组中存储匹配属性的值
for(var i=0;i<keys.length;i++)
{
var key=keys[i]; //获得索引处的键值
values[i] =o[key]; //在values数组中保存属性值
}
在嵌套循环或其他性能非常重要的上下文中,可以看到这种基本的数组遍历需要优化,数组的长度应该只查询一次而非每次循环都有查询:
for(var i=0,len=keys.length;i<len;i++){
//循环体任然不变
}
假设数组是稠密的,并且所有的元素都是合法数据。否则,使用数组元素之前应该先检测它们。如果想要排除null,undefined和不存在的元素,代码如下:
for(var i =0;i <a.length;i++){
if(!a[i]) continue; //跳过null,undefined和不存在的元素
}
如果只想跳过undefined和不存在的元素,代码如下:
for(var i=0;i<a.length; i ++){
if(a[i]===undefined)continue; //跳过undefined+不存在的元素
//循环体
}
最后,如果只想跳过不存在的元素而任然要处理在的undefined元素,代码如下:
for(var i =0;i < a.length; i++){
if(!(i in a)) continue; //跳过不存在的元素
}
7.多维数组
JavaScript不支持真正的多维数组,但可以用数组的数组来近似。访问数组的数组中的元素,只要简单地使用两次[]操作符即可。
//创建一个多维数组
var tale =new Array(10); //表格有10行
for(var i =0;i <table.length;i++)
table[i]=new Array(10); //每行有10列
//初始化数组
for(var row=0;row <table.length; row++){
for(col=0;col<table[row].length;col++){
table[row][col]=row*col
}
}
//使用多维数组来计算(查询)5*7
var prdoduct =table[5][7]; //
JavaScript学习笔记-数组(1)的更多相关文章
- JavaScript学习笔记——数组
javascript数组数组是一个可以存储 一组 或是 一系列 相关数据 的 容器. 一.为什么要使用数组. (1)为了解决大量相关数据的存储和使用的问题. (2)模拟真是的世界. 二.如何创建数组 ...
- JavaScript学习笔记-数组
数组 数组中的每个元素的位置是索引,索引是基于32位的由0开始的数值,最大索引为(2的32次方-2),最大长度为(2的32次方-3) 数组是无类型的:元素可为任意类型:动态的:可根据需要自动增长.缩减 ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- JavaScript学习笔记[0]
JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...
- Java程序猿的JavaScript学习笔记(1——理念)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- Spring的DataSource配置、将Hibernate配置所有写到Spring配置
DataSource能够集中管理数据库连接,降低维护工作量,使部署更简单: Spring的DataSource配置:(Spring数据源配置)这里使用dbcp,还有非常多其它的如c3p0,jdbc,j ...
- SQL Server中DML语句要申请的锁
对于select语句: 1.当採用表扫描时,会直接锁定page,而不是锁定详细的某条记录,所以会有这些锁: A.数据库S锁 B.表的IS锁 C.页的S锁 2.当採用索引来查找数据时,会锁定详细的记录, ...
- 【每日一摩斯】-Index Skip Scan Feature (212391.1)
INDEX Skip Scan,也就是索引快速扫描,一般是指谓词中不带复合索引第一列,但扫描索引块要快于扫描表的数据块,此时CBO会选择INDEX SS的方式. 官方讲的,这个概念也好理解,如果将复合 ...
- Android多媒体应用开发-控制摄像头拍照
现在的手机的功能可谓是五花八门,手机照相功能就是特别突出的一点,现在的手机照相机甚至成了专业数码照相机,可以拍摄出清晰的照片和录制高分辨率的视频.Android操作系统呢,提供了相应的功能来控制拍照: ...
- Online ddl 思维导图
http://blog.itpub.net/22664653/viewspace-2056953/ 整理一份 MySQL DDL 的思维导图,介绍5.5版本以及之前 和 5.6 版本的 MySQL ...
- auto_ptr解析
auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色.诚然 ...
- strassen algorithm
the explaination that is clear in my view is from wiki.
- Android & Eclipse FAQ
一.eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法 当我要格式化代码的时候,右键-source-format能够起效,但ctrl+shift+f不好使了. google之后来发 ...
- cocos2d-x 3.0 alpha1 生成Qt qch帮助文档
Qt的助手挺好用的. 比chm好多了 cocos2d-x使用doxygen生成文档. 默认生成的是html形式, 需要打开浏览器, 这个是比较耗资源吧 可以修改配置, 让doxygen同时输出qch形 ...
- cocos2d-x3.x使用rapidjson
rapidjson效率高,所以之前cocostudio里面解析用的jsoncpp也换成了rapidjson. 引擎又带有rapidjson库,所以不用单独去下载,直接就可以用. 这里主要写一下关于解析 ...