回调函数
- 把一个函数的定义(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.构造函数中\表示一个\