JavaScript学习笔记之Array
数组的定义:
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的更多相关文章
- javascript学习笔记之array.sort
arrayName.sort()方法: 功能是实现排序(按ascii编码或按数字大小),可无参或有参使用,无参时默认升序排列.有参时可实现升序或降序排列,参数必须是具有返回值的方法,当方法表达式大于0 ...
- javascript学习笔记 - 引用类型 Array
二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]; arr.length = 4;//增加 [1,2,3,undefined] arr.length = 2 ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- JavaScript学习笔记[0]
JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- 安装maven编译环境
安装maven编译环境 1.默认已经装好yum并配置好yum源(推荐使用163yum源) 2.安装JDK 3.安装相关依赖环境(root用户登陆) yum install -y cmake lzo-d ...
- [原创] Go语言在Centos上的部署
序言 Golang是个好东西啊.部署非常简单,对于运维人员来说太爽了. 传统的Nginx啊Apache啊,外加PHP以及各个插件啊搞得头晕. 用了Go之后就什么都不需要了.只要把生成好的文件向服务器上 ...
- 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统
浩瀚技术团队... 智能POS移动PDA开单器 开单器 进销存系统 进销存系统 点餐 会员管理 会员管理 深度解读 手机APP移动办公到底是什么? 快速打单POS·不仅仅是快那么简单!
- Android下的屏幕适配
1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px
- JQuery表格插件DataTables 当前页合计功能
公司项目表格插件使用的是DataTables,最近添加表合计功能,发现百度统一都是如图类型的代码,不知道是配置问题还是怎么了,在我的页面下根本不能用 var addd=0; $(document).r ...
- 从零点壹开始学JAVA(DAY 1 笔记)<补充记录>
一个同事的先生(下面称呼其为耿大神)是做开发的,比较资深的那种,在他们公司的核心技术部门. 幸运的是,耿大神很乐意帮助我这株小白菜,在业余时间指导我,这里深表感谢. 耿大神隔段时间会给我提一些问题,让 ...
- php与数据库代码开发规范
php与数据库代码开发规范 1/25/2016 6:00:31 PM php对各类变量命名规范 目录名 文件命名 局部变量命名 使用英文动词名词,用下划线作为单词的分割,所有字母均使用小写 目录 up ...
- [资源分享]yslow 与firebug 修复版本Firefox35【绿色版本下载】
自从火狐也开始做版本帝后,相关查的插件越来越不好使了, 而且火狐集成自己的调试工具,也不是很好使用,Yslow 也坏掉了 找公司写c++修复了下 把yslow和Firebug 打包到一起,而且关闭自动 ...
- List<T>Find方法,FindAll方法,Contains方法,Equals方法
假如传入的T是一个类, List<MessageInfos> MessageInfos = new List<MessageInfos>(); MessageInfos= Me ...
- Ant环境变量配置
Ant环境变量配置 1.新建系统变量ANT_HOME 变量名: ANT_HOME 变量值: D:\biancheng\apache-ant-1.7.1 2.修改PATH 变量值最后面 ...