数组
数组是存放任意数据类型值的集合,容器。在数组字面量中,数组使用"[]“作为数组的边界,数组由多个元素组成,元素与元素之间通过”,"隔开,元素可以为任意数据类型。数组是一种特殊的对象,通过length属性来获取数组的长度(也就是数组中元素的个数)
-
-
数组的定义
- 数组字面量
-
var name = "name"
var arr = [
12,name,true,
"larry",
{},
function(){},
[],
null];
arr.length
- 构造函数
var arr = new Array(); //=》
var arr = [];
var arr = new Array(length);
创建一个长度为length的数组
var arr = new Array(2);
var arr = [undefined,undefined];
var arr = new Array(p1,p2,...);
创建一个数组,数组中的元素使用实参初始化
var arr = new Array(1,2,3);
var arr = [1,2,3];
- 数组的访问
通过索引来访问,索引从0开始的,直到数组的长度-1,索引可以超过索引范围,只不过访问的值为undefined
var arr = [1,2,3];//索引:0~2
arr[0] //1
arr[100] //undefined
- 数组的遍历
1. 普通for循环
var arr = [1,2,3];
for(var i=0;i<arr.length;i++){
var item = arr[i];
}
- while循环
- do-while循环
- 增强for循环
for(var key in arr){
var val = arr
}
- 数组在内存中的表现 var arr = [[1,2],[3,4],[5,6]];
arr[1][0] //3
- 数组api
arr可以调用Array.prototype的方法,也可以调用Object.prototype中的方法
api (应用程序编程接口)
1. 添加或者移除元素 【对原值进行了改变】
push() 入栈,将元素添加到数组的最后
参数:入栈的元素
返回值:入栈后数组的长度
pop() 出栈,将数组中的最后一个元素移除,并且返回
参数:none
返回值:被出栈的元素
shift() 出队,将数组中的第一个元素移除,并且返回
参数:none
返回值:被移除的元素
unshift() 插队,将元素添加到数组的最前面
参数:插队的元素
返回值:插队后数组的长度
- 排序方法【改变原值】
var arr = [82,1,43,2,8,32,5];
arr.mySort()
console.log(arr);
// [1,2,5,8.32,43,82]
sort();
默认情况下,按照每位字符在字符编码表中出现的位置进行排序
sort(comparator)
comparator
接受两个参数a,b;
如果a在b之前返回-1
如果a在b之后返回1
function(a,b){
if(a>b){
return 1;//从小到大排序
}else{
return -1;
}
}
-
截取方法
concat() 【不改变原值】数组合并 参数:多个数组 返回值:合并的后的新数组
slice(begin [,end])【不改变原值】
截取子数组,并且返回 参数: begin表示截取的开始位置;end默认为0 返回值:截取后的子数组
splice(begin,delete,insert,…)【改变原值】
arr.splice(3,2) arr.splice(3,2,"terry","larry") 返回值:被删除的元素组成的数组
-
索引方法
indexOf()
lastIndexOf() -
序列化
JSON.stringify()序列化
JSON.parse( )反序列化字符串
arr.join("|")
将数组元素转换为字符串,使用"|"连接arr中的每个元素 -
迭代
1)forEach
没有return值,会改变原数组的值。
-
forEach(function(item,index,arr){
})
Array.prototype.myForEach = function(handler){
for(var i=0;i<this.length;i++){
handler.call(this,this[i],i,this)
}
}
arr.myForEach(function(item,index,arr){})
- every
every(function(item,index,arr){
return boolean
})
当回调函数每次都返回true,返回值才为true
当回调函数有一次返回false,返回值就为false,并且会停止执行
- some return ture/fasle;
some(function(item,index,arr){
return boolean
})
当回调函数每次都返回false,返回值才为false
当回调函数有一次返回true,返回值就为true,并且会停止执行
- filter
return [检测的结果] 将检测的结果保存在一个数组,然后返回该数组
filter(function(item,index,arr){
return boolean
})
当回调函数返回true的时候,当前元素会被添加到返回值数组中
- map
不会改变数组的值,相当于映射一个新的数组在新的的数组里面进行操作,return有值。
map(function(item,index,arr){
return v
})
将回调函数的返回值组成一个新的数组返回
正则表达式
RegExp 构造函数
1) 实例化正则表达式
1. 构造函数
var pattern = new RegExp("正则表达式","模式");
2. 正则表达式字面量
var pattern = /正则表达式/模式
- 正则表达式
(0-9){4}-(0-9){7}
-
字符类:
. 任意字符 [0-9] 匹配中括号中0~9之间的任意一个字符 \d 与[0-9]含义相同 [^0-9] 除了0~9之外的其他任意字符 \D 与[^0-9]含义相同 ^ [0-9] ^表示行首;使用数字作为一行的开始 [0-9]$ $表示行尾;使用数字作为一行的结尾 [a-z] 匹配中括号中a~z之间的任意一个字符 \w 基本字符 [A-Za-z0-9_] \W 非基本字符[^A-Za-z0-9_] \s 空白符 \S 非空白符 \t tab 制表符 \r return \n next
-
分组
url地址
协议://ip:port/路径静态网页的部署地址为:http://134.175.154.93:80/lianjia\n svn服务器的地址为:svn://134.175.154.93/web1902/group0 \nftp 服务的地址为 ftp://134.175.154.93:22/
/([a-z]{3,5})😕/([a-z0-9.]{2,})(:\d{2,6})?(/.*)/igm
-
数量词
exp* exp重复0到多次 exp+ 默认贪婪匹配,尽可能多的匹配 exp? 0次或者1次 exp+? 非贪婪匹配,尽可能少的匹配 exp{4} exp重复4次 exp{4,} exp重复4+次 [a-z]+//a~z多次 0351-4512339 /([0-9]){4}-/1{7}/
-
模式
i ignoreCase
g global
m multiline -
api
继承:RegExp.protype.xxxpattern.lastIndex;
下次索引开始的位置,当模式包含g,lastIndex才维护; 否则,lastIndex为0,那么每次匹配都从索引为0的位置开始
pattern.ignoreCase
如果模式中包含i,该属性为true
pattern.global
如果模式中包含g,该属性为true
pattern.multiline
如果模式中包含m,该属性为true
pattern.source
正则表达式
pattern.flags
模式
pattern.test(str)=str.search(pattern)
检测字符串str是否匹配正则表达式pattern,如果匹配返回true 参数:待检测字符串 返回值:boolean
pattern.exec(str)=str.match(pattern)
查找字符串str中符合正则表达式的内容 返回值 [ 匹配的内容 index: 匹配的起始位置 input: 参数字符串 groups: 分组 ]
-