数组的定义:

1,var arr=new Array();      -->数组是特殊的对象,typeOf的返回值是object

  arr[0]

  arr[1]

  ...

2,var arr=new Array("","")          -->在此处直接加入数组元素如果是数值需要有2个以上,否则只有一个数值会被解析成数组的长度

3,var arr=["",""]

4,var arr=[]

  arr[0]=

  arr[1]=

  ...

建议总是直接采用方括号创建数组

任意一种类型的数据,都可以放入数组。如果数组的元素还是数组,就形成了多维数组。

数组的特殊性体现在,它的键默认是按次序排列的整数(0,1,2...),所以数组不用为每个元素指定键名,而对象的每个成员都必须指定键名。此外,对象以字符串来识别键名,非字符串的键名会被转为字符串,所以使用数值或字符串作为键名,都能读取数组的成员。

在赋值时也成立,即如果一个值可以被转换为整数,则以该值为键名,等于以对应的整数为键名。

若在指定数组时跳过没定义的值会返回一个数,跳过多少个就返回多少值

对象有两种读取成员的方法:“点”结构(object.key)和方括号结构(object[key])。

但是,对于数字的键名,不能使用点结构,arr.0的写法不合法,因为单独的数字不能作为标识符(identifier)。

所以,数组成员只能用方括号arr[0]表示(方括号是运算符,可以接受数值)。

属性:

length属性:

1.length可以保存数组元素的个数。js使用32位整数,所以数组最长的成员数量是(2^32-1);

2.数组的length属性与对象的length属性有区别,只要是数组,就一定有length属性,而对象不一定有。而且,数组的length属性是一个动态的值,等于键名中的最大整数加上1。

3.数组的值总是比最后一个成员的键值+1;有多少的真实成员并不影响。表明数组是一种动态的数据结构,可以随时增减数组的成员。

4.数组的length属性还可以设置数组的长度,如果数组的成员长于length的值,那么数组会自动缩短到 length-1;

5.清空数组有一个办法:设置length=0

6.如果人为设置length大于当前元素个数,则数组的成员数量会增加到这个值,新增的位置填入undefined。

7.如果人为设置length为不合法的值,JavaScript会报错。

数组的空位:

1.当数组的某个位置是空元素(比如两个逗号之间没有任何值,或者值为undefined),我们称该数组存在空位(hole)。空位生成undefined

2.如果最后一个元素后面有逗号,并不会产生空位。也就是说,有没有这个逗号,结果都是一样的。不过,IE 8及以下版本不支持这条语法规则,会报错。

3.使用delete命令删除一个值,会形成空位。但是不影响length的值,会生成一个undefined;

所以说length属性不过滤undefined的值。所以,使用length属性进行数组遍历,一定要非常小心。

4.空位通过空值生成,还是通过显式设为undefined生成,有一个细微的差别。如果通过空值生成,使用数组的forEach方法或者for...in结构进行遍历,空位就会被跳过。

如果空位是通过显式定义undefined生成,遍历的时候就不会被跳过。

Array()数组对象:

Array.isArray()方法:判断是否为数组,弥补了typeof的不足

若想调用数组实例的方法可以使用:可以写成 [].method.call(调用对象,参数) 的形式,或者 Array.prototype.method.call(调用对象,参数)的形式。

valueOf()方法:返回数组本身

toString()方法:把数组转换成字符串形式,二维数组也按顺序变成字符串

push()方法:用于在数组末端添加一个或多个元素,并返回添加后的数组长度

合并两个数组:

1.Array.prototype.push.apply(a,b)

2.a.push.apply(a,b)

push方法还可以用于向对象添加元素,添加后的对象变成“类似数组的”对象,即新加入元素的键对应数组的索引,并且对象有一个length属性。

pop()方法:在末尾删除一个元素,并返回被删除的元素

对空数组使用pop不会报错,会返回undefined

shift()方法:用于删除数组的第一个元素,并返回被删除的元素。

shift方法可以遍历并清空一个数组。

unshift()方法:用于在数组的第一个位置增加元素,并返回length

join()方法:以参数作为分隔符,将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔。

通过函数的call方法,join方法(即Array.prototype.join.call)也可以用于字符串。      --〉借给字符串使用

concat()方法:合并多个数组,增加在尾部,也可以用来增加数组成员。concat方法的参数可以是一个或多个数组,以及原始类型的值。

reverse()方法:用于颠倒数组的顺序,反过来,返回改变后的原数组

slice()方法:slice(起点,终点)返回指定位置的数组成员组成的新数组,原数组不变,终点的元素不使用

若省略终点,则返回原数组的最后一个成员

负数:

如果参数值大于数组成员的个数,或者第二个参数小于第一个参数,则返回空数组。

重要应用:把类似数组的对象转化成真正的数组(Array.prototype.slice.call

splice()方法:有3个参数(位置,要删除的个数,要插入的新元素),会改变length,若要使用需要先copy

sort()方法:按照对应的字符串的字典顺序排列,数组排序

ECMAScript5新增的数组方法:

与函数式有关:map,forEach,filter,every,some,reduce,reduceRight

map()方法:对数组的所有成员依次调用一个函数,根据函数结果返回一个新数组。

forEach()方法:forEach方法与map方法很相似,也是遍历数组的所有成员,执行某种操作,但是forEach方法没有返回值,适合单纯操作数据

filter()方法:依次对所有数组成员调用一个测试函数,返回结果为true的成员组成一个新数组返回。

every()方法:类似“断言”(assert),用来判断数组成员是否符合某种条件。对所有元素调用一个测试函数,只有所有元素通过该测试,才返回true,否则返回false。

some()方法:类似“断言”(assert),用来判断数组成员是否符合某种条件。所有元素调用一个测试函数,只要有一个元素通过该测试,就返回true,否则返回false。

reduce()方法:依次处理数组的每个元素,最终累计为一个值。数组元素的处理顺序是从左到右

reduceRight()方法:依次处理数组的每个元素,数组元素的处理顺序是从右到左

与函数式无关:indexOf(),lastIndexOf()

indexOf方法:返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。

还可以接受第二个参数,表示搜索的开始位置。

lastIndexOf方法:返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。

注意,如果数组中包含NaN,这两个方法不适用。这是因为这两个方法内部,使用严格相等运算符(===)进行比较,而NaN是唯一一个不等于自身的值。

参考链接:http://javascript.ruanyifeng.com/stdlib/string.html

JavaScript学习笔记之Array的更多相关文章

  1. javascript学习笔记之array.sort

    arrayName.sort()方法: 功能是实现排序(按ascii编码或按数字大小),可无参或有参使用,无参时默认升序排列.有参时可实现升序或降序排列,参数必须是具有返回值的方法,当方法表达式大于0 ...

  2. javascript学习笔记 - 引用类型 Array

    二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]; arr.length = 4;//增加 [1,2,3,undefined] arr.length = 2 ...

  3. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  4. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  5. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  6. JavaScript学习笔记[0]

    JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...

  7. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...

  8. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  9. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

随机推荐

  1. 安装maven编译环境

    安装maven编译环境 1.默认已经装好yum并配置好yum源(推荐使用163yum源) 2.安装JDK 3.安装相关依赖环境(root用户登陆) yum install -y cmake lzo-d ...

  2. [原创] Go语言在Centos上的部署

    序言 Golang是个好东西啊.部署非常简单,对于运维人员来说太爽了. 传统的Nginx啊Apache啊,外加PHP以及各个插件啊搞得头晕. 用了Go之后就什么都不需要了.只要把生成好的文件向服务器上 ...

  3. 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统

    浩瀚技术团队... 智能POS移动PDA开单器 开单器 进销存系统 进销存系统 点餐 会员管理 会员管理 深度解读 手机APP移动办公到底是什么? 快速打单POS·不仅仅是快那么简单!  

  4. Android下的屏幕适配

    1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px

  5. JQuery表格插件DataTables 当前页合计功能

    公司项目表格插件使用的是DataTables,最近添加表合计功能,发现百度统一都是如图类型的代码,不知道是配置问题还是怎么了,在我的页面下根本不能用 var addd=0; $(document).r ...

  6. 从零点壹开始学JAVA(DAY 1 笔记)<补充记录>

    一个同事的先生(下面称呼其为耿大神)是做开发的,比较资深的那种,在他们公司的核心技术部门. 幸运的是,耿大神很乐意帮助我这株小白菜,在业余时间指导我,这里深表感谢. 耿大神隔段时间会给我提一些问题,让 ...

  7. php与数据库代码开发规范

    php与数据库代码开发规范 1/25/2016 6:00:31 PM php对各类变量命名规范 目录名 文件命名 局部变量命名 使用英文动词名词,用下划线作为单词的分割,所有字母均使用小写 目录 up ...

  8. [资源分享]yslow 与firebug 修复版本Firefox35【绿色版本下载】

    自从火狐也开始做版本帝后,相关查的插件越来越不好使了, 而且火狐集成自己的调试工具,也不是很好使用,Yslow 也坏掉了 找公司写c++修复了下 把yslow和Firebug 打包到一起,而且关闭自动 ...

  9. List<T>Find方法,FindAll方法,Contains方法,Equals方法

    假如传入的T是一个类, List<MessageInfos> MessageInfos = new List<MessageInfos>(); MessageInfos= Me ...

  10. Ant环境变量配置

    Ant环境变量配置 1.新建系统变量ANT_HOME    变量名: ANT_HOME    变量值: D:\biancheng\apache-ant-1.7.1 2.修改PATH    变量值最后面 ...