回调函数
- 把一个函数的定义(A)作为参数传给另一个函数(B),函数A称为B的回调函数,B函数运行完后才会运行A函数
数组迭代方法
forEach()数组遍历,无返回值
- 参数:
- 1.是一个回调函数
- 2.是一个context(改变回调函数中的this关键字)
var a = [1,2,3,4,5];
a.forEach(function (item,index,a) { //声明式
console.log(item, index, a);//值,索引,原数组
});
map()遍历数组,有返回值,可以对原数组进行操作
- 参数:
- 1.是一个回调函数
- 2.是一个context(改变回调函数中的this关键字)
var a = [1,2,3,4,5];
var res = a.map(function (item,index,a) {
return item*2; //将回调函数的返回值放入一个新数组中,最后将新数组作为map方法的返回值
})
console.log(a);//[1, 2, 3, 4, 5]
console.log(res);//[2, 4, 6, 8, 10]
//回调函数考虑的几个方面
//1.回调函数是否有参数
//2.回调函数执行次数
//3.回调函数是否有返回值
var ary = [1,2,3,4,5];
Array.prototype.myMap = function (callback,context) {
//先处理第二个参数判断是否传了
context = context || window;
//this指的是数组 callback执行的次数是数组的长度
var newAry = [];//用来存回调函数的返回值
for(var i = 0; i < this.length; i++){
var res = callback.call(context,this[i],i,this);
newAry.push(res);
}
return newAry;
}
var res = ary.myMap(function (item,index,ary) {
return item*2;
})
console.log(res);
some有一个为真返回true,所有为假返回false (参数同上)
var ary = [1,2,3,4,5];
var res = ary.some(function (item,index,ary) {
return item>3;
})
console.log(res);//true
every有一个为假返回false,所有为真返回true (参数和上面相同)
var ary = [1,2,3,4,5];
var res = ary.every(function (item,index,ary) {
return item>3;
})
console.log(res);//false
filter过滤 把满足条件的留下,不满足的过滤掉 (参数同上)
var ary = [1,2,3,4,5];
var res = ary.filter(function (item,index,ary) {
return item>2;
})
console.log(res);//[3,4,5]
- es6:
find 返回满足条件的这一项,一旦找到不会继续查找,找不到返回undefined (参数同上)
var ary = [1,2,3,4,5];
var res = ary.find(function (item,index,ary) {
return item>2;
})
console.log(res);//3
- es6:
findindex 返回满足条件的索引,找不到返回-1 (参数同上)
var ary = [1,2,3,4,5];
var res = ary.findIndex(function (item,index,ary) {
return item>2;
})
console.log(res);//2
reduce和reduceRight对每一项累计的结果 如求累加之和 两方法数组取值顺序不同 ***reduceRight***和reduce取值方向相反
- 参数:
- 1.第一个参数是一个回调函数
- 2.第二个参数是用来设置累计项的初始值,不设置为数组的第一个值
var ary = [1,2,3,4,5];
var res = ary.reduce(function (prev,cur) {
//prev 累计项 不设置为数组的第一项 cur数组的每一项
return prev + cur;
})
console.log(res);//15
正则
- 正则用来处理字符串的
- 正则的概念:相当于一个模型(验证的规则)匹配符合的字符串
- 正则的作用:匹配(test)和捕获(reg.exec(),str.match(),str.split())
- 正则的组成部分:元字符和修饰符
特殊含义的元字符:
| 符号 |
意义 |
| \d |
匹配一个数字字符 |
| \D |
匹配非数字 |
| \w |
匹配A-Z,a-z,0-9,下划线 |
| \W |
匹配非单词字符 |
| \s |
匹配任意空字符 |
| \b |
匹配边界字符 |
| x|y |
匹配x或y |
| [zyx] |
表示xyz任意一个 |
| [^zyx] |
匹配不是zxy任何一个 |
| [a-z] |
匹配a-z的任意一个 |
| [^a-z] |
匹配非a-z |
| () |
代表分组 |
| ^ |
代表以什么开头 |
| $ |
代表以什么结束 |
| . |
代表任何字符(除了\n) |
\ |
表示转意 |
| \n |
换行符 |
| ?: |
只匹配不捕获 |
- []用法
- []中的-表示ascii码中连续的字符
- 特殊的字符在[]中表示字符本身的意思,特殊字符不包括\d,\w等
- []中没有两位数
量词元字符
| 符号 |
意义 |
| * |
表示0到多次 |
| + |
表示1到多次 |
| ? |
表示0或者1次 |
| {n} |
表示出现n次 |
| {n,} |
表示出现n到多次 |
| {n,m} |
表示出现n到m次 |
修饰符
| 符号 |
意义 |
| g(globa) |
全局匹配 |
| i(ignoreCase) |
忽略大小写 |
| m(multiple) |
多行匹配 |
- 用16进制表示没法操作的字符,不足四位的在前面补零
var reg = /[\u4e00-\u9fa5]{2,5}/; //匹配中文字符
var str = '沙发';
console.log(reg.test(str));//true
正则定义方式
- 字面量方式://
- 构造函数的方式:new RegExp()
- 区别:
- 1.构造函数的方式可以表示变量,字面量不行
- 2.构造函数中\表示一个\