ES6标准新增了一种新的函数:Arrow Function(箭头函数)
语法
(参数1, 参数2, …, 参数N) => { 函数声明 }
(参数1, 参数2, …, 参数N) => 表达式(单一)
实例
//(x,y)为函数的参数,x*y为函数执行语句
(x, y) => x * y;
x => x*x+1;
(x) => x*x+1;
(x,y) => {
if (x > 0) {
return x * y;
}
else {
return - x * y;
}
}
总结:
箭头函数有两种形式:
(1)函数体为简单的表达式,可省略{}
和return
(2)函数体有多条语句,不能省
(3)箭头函数相当于匿名函数
当使用箭头函数的时候,箭头函数会默认帮我们绑定外层 this 的值,所以在箭头函数中 this 的值和外层的 this 是一样的。
首先需要了解“创建一个匿名函数并立刻执行”的语法:(IIFE) Immediately Invoked Function Expression – 立即执行函数,立即执行函数不会当做函数声明处理而是当做函数表达式处理
//需要将函数体使用()将其包裹起来,否则会报SyntaxError错误
(function (x) {
return x * x;
})
形如(function(){})();
,是自执行函数
// 1.第一种方式: 两个()() ,function写在第一个()里面
(function(){
})()
// 2.第二种方式: 一个() ,里面写 function(){}() ,推荐使用这种方式
(function(){
}())
//相当于先声明,在调用
var b=function () {
}
b()
//自执行函数传参
function b(i){
console.log(i)
}(5)
为什么需要自调用函数,因为在实际的开发当中,函数的返回值可能需要调用另一个子函数,也就是下面要学习的闭包。我们想使一个函数声明调用一步到位,就需要用到自调用函数。
《JavaScript高级程序设计》中写道:“闭包是指有权访问另一个函数作用域中的变量的函数”。
3.1 闭包产生的需求:
由于作用域的原因,我们无法在函数外访问函数里面定义的变量,但有时候我们又会有这样的需求,这个时候我们就需要使用闭包了。
3.2 闭包:
在函数A内部再定义一个子函数a,然后子函数a控制父函数中的变量v1,然后在父函数A中把这个子函数a返回给调用方,这个就叫做闭包。
3.3 用途:
(1)可以读取整个父级作用域函数内部的变量。
(2)让这些变量的值始终保持在内存中。
3.4 实例
//每次点击一次将会加1,结果依次为:1、2、3、4、5、6.....
<button type="button" onclick="myFunction()">计数!</button>
<p id="demo">0</p>
<script>
var counter = 0;
var add = function () {
return counter += 1;
}
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>
//当counter为局部变量,每点击一次都会重新声明变量,所以结果为:1、1、1、1、1......
<script>
var add = function () {
var counter = 0;
return counter += 1;
}
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>
那么,当变量处于函数体内作为局部变量时,如何实现第一个需求呢?我们知道闭包可以实现将变量始终保存在内存中,所以可以借助闭包实现。
如何实现闭包?
闭包是子函数被当做返回值通过父函数返回给外界。
//先构造匿名的子函数,并且
<script>
var add = (function () {
var counter = 0;
return function(){
return counter += 1
}
}());
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>
日期对象用于处理日期和时间。
(1)Date()
获取当前时间
var d=new Date();
alert(d)
//初始化方式
new Date() // 当前日期和时间
new Date(milliseconds) //返回从 1970 年 1 月 1 日至今的毫秒数
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)
//先声明日期对象
var d = new Date();
var n = d.getDate(); //3 今天几号
var n = d.getDay(); //2 今天星期几
var n = d.getFullYear() //2020 今天年份
var n = d.getHours() //15 现在几点钟
var n = d.getMilliseconds() //当前毫秒数
d.setDate(15); //设置今天为15号
var x=new Date();
x.setFullYear(2100,0,14);
var today = new Date();
if (x>today)
{
alert("今天是2100年1月14日之前");
}
else
{
alert("今天是2100年1月14日之后");
}
(4)格式化日期
Date.prototype.format = function(fmt){
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o){
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(
RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
document.getElementById("demo1").innerHTML=new Date(79,5,24,11,33,0).format("MM月dd日");
var now = new Date();
var nowStr = now.format("yyyy-MM-dd hh:mm:ss");
document.getElementById("demo2").innerHTML=new Date().format("yyyy年MM月dd日");
var nowStr = now.format("yyyy-MM-dd hh:mm:ss");
document.getElementById("demo3").innerHTML=new Date().format("yyyy年MM月dd日hh小时mm分ss秒");
Math(算数)对象的作用是:执行常见的算数任务,Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math()。
var x = Math.PI //x等于圆周率
var x=Math.abs(-5) //-5的绝对值
var x=Math.random() //0~1随机数
正则表达式是一个RegExp对象
//两种声明方法
//pattern描述了表达式的模式
//modifiers修饰符,用于指定全局匹配、区分大小写的匹配和多行匹配
var patt=new RegExp(pattern,modifiers);
var patt=/pattern/modifiers;
//例子
var re = new RegExp("\\w+");
var re = /\w+/;
var str="hello,world i like html"
var patt1=/[a-h]/g; //匹配a-h的字母
str.match(patt1)
var patt1=/[^a-h]/g; //匹配不在a-h范围的字母
str.match(patt1)
(1) .
//院子
var str="That's hot!";
var patt1=/./g; //所有单个字符
str.match(patt1); //T,h,a,t,',s, ,h,o,t,!
var patt1=/.h/g; //h之前的单个字符加h
str.match(patt1); //Th, h
var patt1=/h./g; //h之后的单个字符加h
str.match(patt1); //ha, ho
var patt1=/h.t/g; // 匹配 h{?}t
str.match(patt1); //hat,hot
(2)\w
元字符用于查找单词字符。\W
元字符用于查找非单词字符
单词字符包括:a-z
、A-Z
、0-9
,以及下划线
, 包含 _ (下划线)
字符。
var str="Give 100%hhh!";
var patt1=/\w/g;
var patt2=/\w/g
str.match(patt1) //G,i,v,e,1,0,0,h,h,h
str.match(patt2) // ,%,!
(3)\d
元字符用于查找数字字符。\D
元字符用于查找非数字字符。
var str="Give 100%!";
var patt1=/\d/g;
var patt2=/\D/g;
str.match(patt1); //1,0,0
str.match(patt2); //G,i,v,e, ,%,!
(4)\s
元字符用于查找空白字符。\S
元字符用于查找非空白字符。
空白字符可以是:
空格符 (space character)
制表符 (tab character)
回车符 (carriage return character)
换行符 (new line character)
垂直换行符 (vertical tab character)
换页符 (form feed character)
(1)n+
量词匹配包含至少一个 n 的任何字符串。n*
量词匹配包含零个或多个 n 的任何字符串,n?
量词匹配任何包含零个或一个 n 的字符串。。
//对至少一个 "o" 进行全局搜索:
var str="Hellooo World! Hello Runoob!";
var patt1=/o+/g; // ooo,o,o,oo
//对至少一个单词字符进行全局搜索:
var patt1=/\w+/g; //Hellooo,World,Hello,Runoob
//对 "1" 进行全局搜索,包括其后紧跟的一个或多个 "0":
var str="1, 100 or 1000?";
var patt1=/10*/g; //1,100,1000
//对 "1" 进行全局搜索,包括其后紧跟的零个或一个 "0":
var str="1, 100 or 1000?";
var patt1=/10?/g; //1,10,10
(2)
n{X}
量词匹配包含 X 个 n 的序列的字符串。X 必须是数字。
n{X,}
量词匹配包含至少 X 个 n 的序列的字符串
n{X,Y}
量词匹配包含至少 X 最多Y 个 n 的序列的字符串
//匹配四个数字
var str="100, 1000 or 10000?";
var patt1=/\d{4}/g; //1000,1000
//匹配至少3个数字
var patt1=/\d{3,}/g; //100,1000,1000
(3)
n$
匹配任何结尾为 n 的字符串。
^n
匹配任何开头为 n 的字符串。
?=n
匹配任何其后紧接指定字符串 n 的字符串。
?!n
量词匹配其后没有紧接指定字符串 n 的任何字符串。
// 对其后紧跟 "all" 的 "is" 进行全局搜索:
var str="Is this all there is";
var patt1=/is(?= all)/g; //is
//对字符串结尾的 "is" 进行全局搜索::
var str="Is this his";
var patt1=/is$/g; //is
//对字符串开始的 "Is" 进行全局搜索::
var str="Is this his";
var patt1=/Is$/g; //Is
(1)search()
方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回 -1。
var str="Mr. Blue has a blue house";
str.search("blue"); //15
(2)match()
返回匹配的字符串
//全局查找字符串 "ain",且不区分大小写:
var str="The rain in SPAIN stays mainly in the plain";
var n=str.match(/ain/gi);
//ain,AIN,ain,ain
Emmmmmmm…头有点大!!!
先来一个小小的总结:
1: / ...... /
2: / ^ ...... $/
3: / ^x ......$/
以x开头
4: / ^x ......y$/
以y结尾
5: / ^x{4} ......$/
以4个x开头
6: / ^x+ ......$/
以大于或等于1个x开头
7: / ^\d ......$/
以1个任意数字开头
8: / ^\d{4} ......$/
以4个任意数字开头
9: / ^((1{6})|(0{4})) ......$/
以4个0开头或者6个1开头
10:[a-zA-Z0-9]
匹配任何字母和数字
特别鸣谢菜鸟教程