JavaScript读书笔记(6)-Array RegExp
1、Array类型
ECMAScript数组的每一项可以保存任何类型的数据,数组的大小也可以动态调整;
(1) 创建数组
第一种方式:Array构造函数
var colors=new Array();
var colors1=new Array(20);
var colors2=new Array("rad","blue","green");
var colors3=Array(3);
var colors4=Array("Greg");
第二种方式:数组字面量
var colors=["red","blue","green"];
var names=[];
在使用数组字面量表示法时,不会调用Array构造函数;
(2)读取和设置数组
在读取和设置数组值时,要使用方括号并提供相应值的基于0的数字索引;
在设置某个值的索引超过了数组现有项数,数组就会自动增加到该索引值加1的长度;
数组的length属性不是只读的,通过这个属性,可以从数组的末尾移除项或向数组中添加新项;
var colors=["red","blue","green"];
colors[99]="black";
alert(colors.length); //100
alert(colors[3]); //undefined
(3)检测数组
第一种:instanceof操作符
if(value instanceof Array){ //对数组的某些操作}
instanceof假定单一的全局执行环境,若网页中有多个框架,存在两个以上不同的全局执行环境,存在两个以上不同版本的Array构造函数;
第二种:Array.isArray()方法(ECMAScript5新增)
确定某个值到底是不是数组,不管它是在哪个全局执行环境中创建的;
(4)转换方法
toString()方法返回数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串;
valueOf()返回的还是数组;
toLocaleString()方法也返回一个数组值的以逗号分隔的字符串,但调用的是每一项的toLocaleString方法;
使用join方法可以使用不同的分隔符来构建字符串,只接受一个参数,即用作分隔的字符串;
如果数组中的某一项值时null或者undefined,那么该值在以上方法中以空字符串表示;
(5)栈方法(后进先出)
ECMAScript为数组提供了push和pop方法,实现类似栈的行为;
Push可以接受任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度;
Pop方法从数组末尾移除最后一项,减少数组的length值,然会返回移除的项;
(6)队列方法(先进先出)Push和shift方法
shift方法移除数组中的第一个项并返回该项,同时数组长度减1;
unshift方法能在数组前端添加人一个项并返回新数组的长度,
(7)重排序方法
Reverse方法反转数组项的顺序;
Sort方法按照升序排列数组项,sort方法会调用每个数组项的tostring转型方法,然后比较得到的字符串,以确定如何排序,即使数组中每一项都是数值,sort方法比较的也是字符串;
var values=[0,1,5,10,15];
values.sort();
alert(values); //0,1,10,15,5
Sort方法可以接受一个比较函数作为参数,以便我们制定那个值位于那个值的前面
function compare(value1,value2)
{
if(value1<value2){return -1;}
else if(value1>value2){return 1;}
else{return 0;}
}
Values.sort(compare); //0,1,5,10,15
对于数值型,compare函数更简单
function compare(value1,value2)
{
Return value1-value2;
}
(8)操作方法
Concat方法:基于当前数组中的所有项穿件一个新数组,它会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组,在没有参数的情况下,只是返回当前数组的副本;如果参数一或多个数组,会将数组中的每一项都添加到结果数组中;如果传递的值不是数组,这些值就会被简单地添加到结果数组的末尾;
Slice方法,基于当前数组中的一或多个项创建一个新数组,一个参数时,返回从该参数指定位置开始到当前数组末尾的所有项,如果有两个参数,该方法返回起始和结束位置之间的项(但不包括结束位置的项),slice方法不会影响原始数组;
如果slice方法的参数有一个负数,则用数组长度加上该数来确定相应的位置,在 一个包含5项的数组上调用slice(-2,-1)与调用slice(3,4)得到的结果相同;
Splice方法:主要 是向数组中部插入项
删除:可以删除任意数量的项,只需要两个参数:要删除的第一项的位置和要删除的项数,如splice(0,2)会删除数组中的前两项;
插入:可以向指定位置插入任意数量的项,只需要提供3个参数:起始位置、0(要删除的项数)和要插入的项,如果要插入多个项,可以传入第四、第五、以至任意多个项;
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数,起始位置、要删除的项数和要插入的任意数量的项,插入的项不必与删除的项数相等;
Splice方法始终都会返回一个数组,该数组汇总包含从原始数组中删除的项(如果没有删除任何项,则返回一个空数组);
(9)位置方法
Indexof和lastIndexOf方法,都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引;
Indexof方法从数组的开头(位置0)开始向后查找,lasrIndexOf从数组的末尾开始向前查找;
(10)迭代方法
ECMAScript5为数组定义了5个迭代方法,每个方法都接受两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象-影响this的值,传入这些方法中的函数会接收三个参数:数组项的值,该项在数组中的位置和数组对象本身;
Every:对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true;
Filter:对数组中每一项运行给定的函数,返回该函数会返回true的项组成的数组;
forEach:对数组中每一项运行给定的函数,没有 返回值;
map:对数组中每一项运行给定的函数,返回每次函数调用的结果组成的数组;
some:对数组中每一项运行给定的函数,如果该函数对任一项返回true,则返回true;
var numbers=[1,2,3,4,5,4,3,2,1];
var filterResult=numbers.filters.filter(function(item,index,array){
return (item>2)
})
Alert(filterResult); //[3,4,5,4,3]
(11) 缩小方法
ECMAScript5新增了两个缩小数组的方法:reduce和reduceRight,都会迭代数组的所有项,然后构建一个最终返回的值;reduce从数组的第一项开始,逐个遍历到最后,而reduceRight从数组的最后一项开始,向前遍历到第一项;
这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为缩小基础的初始值,函数接收4个参数:前一个值、当前值、项的索引和数组对象;这个函数放回的任何值都会作为第一个参数自动传给下一项,第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项。第二个参数是数组的第二项;
var values=[1,2,3,4,5];
var sum=values.reduce(function(prev,cur,index,array){
return prev+cur;
});
Alert(sum); //15
2、RegExp类型
(1)字面量形式定义正则表达式
创建正则表达式:var expression=/pattern/flags;
Pattern可以是任何简单活复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用;flags用以表明正则表达式的行为主要有:
g:全局模式,模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
i:不区分大小写模式;
m:多行模式;
var pattern=/.at/gi; //匹配所有以”at”结尾的3个字符的组合,不区分大小写;
元字符都必须转义,元字符包括:
( [ { \ ^ | ) ? * + . } ]
Var pattern2=/\[bc]at/i; //匹配第一个”[bc]at”,不区分大小写
(2)RegExp构造函数形式
构造函数接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串;
Var pattern2=new RegExp(“[bc]at”,”i”);
字符串模式在某些情况下存在双重转义,字面量模式:/\[bc\]at/等价的字符串是:”\\[bc\\]at”
在ECMAScript3中,正则表达式字面量式中会共享同一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例;
ECMAScript5明确规定,使用正则表达式字面量必须像直接调用ECMAScript3构造函数一样,每次都创建新的RegExp实例;
(3)RegExp实例属性
global:布尔值,表示是否设置了g标志
ignoreCase:布尔值,是否设置了i标志
lastIndex:整数,开始搜索下一个匹配项的字符位置,从0算起
multiline:布尔值,是否设置m标志
source:正则表达式字符串表示,按照字面量形式而非传入构造函数总的字符串模式返回;
(4)RegExp实例方法
第一个方法:exec()
exec方法接受一个参数,即要应用模式的字符串,返回包含第一个匹配项信息的数组,在没有匹配项的情况下返回null;返回数组是Array实例,但是包含两个额外属性:index和input,index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串,在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(若模式中没有捕获组,则该数组只包含一项);
在exec方法中,即使设置了全局标志(g),每次也只返回一个匹配项,在不设置全局标志的情况下,在同一个字符串上多次调用exec将始终返回第一个匹配项的信息;而在设置全局标志的情况下,每次调用都会字符串中继续查找新匹配项;
第二个方法:test()
test方法只接受一个参数,在模式与该参数匹配的情况下,返回true,否则返回false;
(5)RegExp构造函数属性(这些属性在其他语言中被看做静态属性)
长属性名:input、lastMtach、lastPerson、leftContext、multiline、rightContext
短属性名:$_ $& $+ $` $* $’
input返回原始字符串
leftContext返回匹配单词之前的字符串
rightContext返回匹配单词之后的字符串
lastMtach返回最近一次与整个正则表达式匹配的字符串
lastPerson返回最近一次匹配的捕获组
JavaScript读书笔记(6)-Array RegExp的更多相关文章
- 数据结构与算法JavaScript 读书笔记
由于自己在对数组操作这块比较薄弱,然后经高人指点,需要好好的攻读一下这本书籍,原本想这个书名就比较高深,这下不好玩了.不过看着看着突然觉得讲的东西都比较基础.不过很多东西,平时还是没有注意到,故写出读 ...
- Javascript高级程序设计--读书笔记之Array类型
1.数组的lenght属性 数组的lenght属性很有特点---他不是只读的,可以同过修改这个属性来向数组的末尾添值加或删除值, 删除值 var color = ["red", & ...
- 你不知道的javascript读书笔记3
概述 这是我看<你不知道的JavaScript(中卷)>中关于类型检查的笔记,供以后开发时参考,相信对其他人也有用. typeof 我们知道js中有七种内置类型:undefined, nu ...
- JavaScript学习笔记之Array
数组的定义: 1,var arr=new Array(); -->数组是特殊的对象,typeOf的返回值是object arr[0] arr[1] ... 2,var arr=new ...
- 高性能的JavaScript -- 读书笔记
高性能的JavaScript 一. 加载和运行 将脚本放在底部 脚本下载解析执行时,页面已经加载完成并显示在用户面前 成组脚本 减少外部脚本文件数量,整合成一个文件 延迟脚本 动态脚本元素 ...
- 编写可维护的Javascript读书笔记
写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...
- JavaScript读书笔记(1)
从今天开启每天看书记笔记模式,<JavaScript高级程序设计(第3版)> 1. Javascript最初是为了解决输入验证器的问题,现在已经发展成一门复杂的语言: 2. 语言标准为E ...
- javascript学习笔记之array.sort
arrayName.sort()方法: 功能是实现排序(按ascii编码或按数字大小),可无参或有参使用,无参时默认升序排列.有参时可实现升序或降序排列,参数必须是具有返回值的方法,当方法表达式大于0 ...
- JavaScript读书笔记(一)
自动类型转换 在JavaScript中,使用 == .=== 和 - 等运算符能够使得类型自动转换. 关于不同类型的值的比较 flase == 0; //true "" == fl ...
随机推荐
- COUNT多列,但是每列都是不同条件的,怎么用一句SQL写?
原文发布时间为:2010-09-06 -- 来源于本人的百度文章 [由搬家工具导入] 《转》http://www.cnblogs.com/ruanzuzhang/archive/2009/02/22/ ...
- Selenium2+python自动化(学习笔记3)
1.加载firefox配置 参考代码: # coding=utf-8from selenium import webdriver# 配置文件地址,打开Firefox点右上角设置--帮助--故障排除信息 ...
- jdk、maven、tomcat环境变量配置
1.jdk 新建环境变量: JAVA_HOME:C:\Program Files\Java\jdk1.8.0_91 CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\li ...
- sublime 中设置pylint
http://www.360doc.com/content/14/1110/11/15077656_424004081.shtml 安装 pylinter 插件 详见 sublime 插件安装 配 ...
- NanoPC-T3 64位裸机编程 —— 启动和运行状态切换
参考: https://github.com/metro94/s5p6818_spl https://github.com/trebisky/Fire3/tree/master/Boot_NSIH h ...
- 【转】【Stackoverflow好问题】去掉烦人的“!=null"(判空语句)
[Stackoverflow好问题]去掉烦人的“!=null"(判空语句) 问题 为了避免空指针调用,我们经常会看到这样的语句 ...if (someobject != null) { ...
- ios内存管理笔记(三)
我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...
- 深入理解OAuth2.0 XSS CSRF CORS 原理
基于Token的WEB后台认证机制 http://www.cnblogs.com/xiekeli/p/5607107.html 深入理解OAuth2.0协议http://blog.csdn.net/s ...
- VC++动态链接库(DLL)编程深入浅出(四)
这是<VC++动态链接库(DLL)编程深入浅出>的第四部分,阅读本文前,请先阅读前三部分:(一).(二).(三). MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用M ...
- RMQ(区间求最值)
1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A.回答若干询问RMQ(A,i,j)(i,j<=n).返回数列A ...