今天学到的一些知识回顾和笔记
1.正则表达式(RegExp)
1.1 写法
/ 正则表达式的内容/
例:/^w{6,10}@[0-9a-z]{1,4}.com$/ ,这就是一个正则表达式,简单的验证邮箱格式的表达式。
下面解释一下例子:
(1)^ : 正则表达式的开始。
(2)$ :正则表达式的结束。
(3)w :代表数字、字母和下划线。
(4){6,10} :大括号代表位数,这里的意思是6到10位,也就是要求前面的w 为6到10位。
(5)@ :转义字符“” 加上特殊符号就是指匹配这个字符。若不是正则表达式中的特殊字符(比如 "^" 和 "$"等),就可以不用加转义字符。
(6)[0-9a-z] : 大括号代表的是范围,这里表示从0到9的任意数字和从a到z的任意字母。
(7){1,4} : 同上面的{6,10}。
还有一些经常用到的:
(8)d :表示的就是[0-9]。
(9)s : 空格
(10)D :匹配除了数字以外的。
(11)W: 与w相反,匹配除了数字、字母和下划线以外的。
(12)S : 与s 相反,匹配除了空格以外的。
(13) + :表示的是1到多位,{1,}
(14) * :表示的是0位或者是多位。
(15) "." :表示匹配所有的。
1.2 方法
(1)test():测试匹配的对象。
一个匹配月份的例子:
var month = "12";
var val = /0[1-9]|1[0-2]/ ; //月份有1-9月和10、11、12月,所以有0几月或者是1几月。"|"表示或。
var result = val.test(month); //正则表达式的方法test ,测试字符串变量month。
console.log(result); //控制台会输出true,若把month改成13,就会返回false。
(2)exec() :匹配什么就显示什么,返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
var str = "23342addff#"
var reg = /[0-9a-z]#/
var re = reg.exec(str);
console.log(re); //显示出Array [f#],相连的才能匹配,比如说str变量中前面五个是数字,后面五个是字母,最后一个是# 若reg中存放的是/[0-9]{5}#/ , 控制台里面显示为null。因为数字和#没有直接相连,这样就匹配不到。
1.3 应用
(1)join() : 将数组中的各个字符串连接,括号里面可以写自定义的连接符。
var arr = ["hello","world","!"];
var re = arr.join("$"); //对于数组arr 用"$"符号连接起来。
console.log(re); //显示出 hello$world$! 。
(2)split() : 拆分数组
var str = "2015@12-20";
var val = /[@-]/;
var re = str.split(val); //对于字符串str,检索字符串中的正则表达式中的符号,用数组形式将他们分开。
console.log(re); //显示Array["2015","12","20"]
2.toString()
toString() 方法可把一个逻辑值转换为字符串,并返回结果。
例:
var num = 12343;
var str = num.toString();
console.log(str); //显示12343
console.log(typeof(str)); //显示string
3.关于闭包问题
1.函数赋值有返回值
var a = function(){ //将一个函数赋值给a,现在a就是一个函数。
return "hello"; //返回值hello。 如果将这句话注释掉,那么下面b的值就是undefined,因为没有返回值,这个函数即使执行了b也不会得到任何值。后面写了如果没有返回值的情况。
}
a(); //调用函数a
var b = a(); //定义b为这个函数a返回的值。
console.log(b); //控制台会显示hello
2.立即函数有返回值
var a = function(){ //a被赋值为立即函数的返回值,a不是一个函数了。
return "haha"
}()
var b = a; // 所以这里a就直接等于b,而不是a()。
console.log(b); //显示haha
3.非立即函数没有返回值的情况。
var a = function(){ //将一个函数赋值给a,现在a就是一个函数。
}
a(); //调用函数a
var b = a(); //定义b为这个函数a返回的值。
console.log(b); //显示undefined,因为函数a没有返回值。
4.立即函数没有返回值的情况
var a = function(){ //a被赋值为立即函数的返回值,a不是一个函数了。
}()
var b = a; // 所以这里a就直接等于b,而不是a()。
console.log(b); //这里显示的也是undefined。
综上,若函数没有返回值,不管是立即执行函数还是非立即执行函数都是没有值的,只会执行函数体里的代码,非立即函数还需调用函数才能执行。若函数有返回值,如果把非立即函数给了一个变量b,那么b就等于这个函数的返回值,如果是立即执行函数,那么b就是立即执行函数的返回值。