时隔两年后二刷JavaScript高级程序语言,纯手打读书笔记+思维导图,让自己有一个比较全面的知识体系,后面有遇到例子的时候会慢慢补充更多的用法。有不足之处欢迎大家评论区指出,共勉!!
第五章 引用类型
一、日期Date
1、时区概念:
UTC:世界协调时,利用原子钟计算时间与日期,世界统一时间,是没有时区概念的。
GMT:格林尼治标准时间,根据地球自转公转而定的时间,可以视为UTC一样的时间(忽略不计)。
时区:中国是东八区,(GMT + 8 = 中国本地时间)
2、创建日期
1、创建指定日期
Date构造函数创建一个日期,函数的参数是当前时区的毫秒。
Date接受另外两种形式的参数,会将其用以下两种方法隐式调用。
第一种:Date.parse()将字符串转为毫秒
parse接受两种形式的时间格式:
①RFC2822:(例)Mon Feb 19 2018 06:55:23 GMT+0100
短日期:2018/02/19
长日期:Feb 19 2018 日月对换,忽略逗号,大小写
完整日期:Mon Feb 19 2018 06:55:23 GMT+0100
②ISO: YYYY-MM-DDTHH:mm:ss.sssZ
若省略时区,则RFC默认本地时区,而ISO是国际标准(GMT时间)。
第二种:Date.UTC()
Date.UTC(year, month, day, hours, minutes, seconds, milliseconds)
注意:①从 0 到 11 计算月份 ②year为两位或一位数会表示为19XX③参数都是数字,且是UTC时间
3、创建当前日期:
new Date() 返回的是本地时间
Date.now() 返回的是UTC毫秒
4、获取和设置日期
getTime()1970至今的毫秒
getHours() getMinutes() getSeconds() getMiliseconds()
getFullYear() getMonth()0-11 getDay()0-6 getDate()1-31
获取UTC日期:以上方法名+UTC即可 例如 getUTCDate()
设置日期:以上get改为set皆可
5、日期格式化
1)继承的方法
继承了Object的方法,同时也包装了一下
toLocaleString()与浏览器运行的本地环境一致的日期和时间2/1/2019 12:00:00 AM
toString()带时区信息的日期和时间Thu Feb 1 2019 00:00:00 GMT-0800 (Pacific Standard Time)
valueOf()返回的是日期的毫秒表示
2)日期格式化方法
toDateString()显示日期中的周几、月、日、年(格式特定于实现);
toTimeString()显示日期中的时、分、秒和时区(格式特定于实现);
toLocaleDateString()显示日期中的周几、月、日、年(格式特定于实现和地区);
toLocaleTimeString()显示日期中的时、分、秒(格式特定于实现和地区);
toUTCString()显示完整的 UTC 日期(格式特定于实现)。
二、正则RegExp
用途:数据验证、替换文本、提取字符串
let expression = /pattern/flags;
let pattern2 = new RegExp("[bc]at", "i"); 字符串中 特殊字符记得转义
1、正则定义
标记:g i m
模式:要匹配元字符本身,就得在在模式中转义,如\[
?匹配0或1个(最多一个)
+ 匹配一个或者多个(至少一个)
*匹配0,1或多个(有没有都无所谓)
{n,m} 限定匹配的次数 {2}匹配两次 {3,5}匹配三到五次
[abc] abc任意一个都匹配
[^abc] 除了abc其他都匹配
- Z] A-Z区间的都匹配
| 或操作符 可以指定多种模式,然后满足任意条件即可匹配 a|b
. 除了换行符的任何单个字符
\s 匹配所有空白符
\S 匹配所有非空白符号
\w 匹配数字 字母 下划线,等价于[0-9A-Za-z_-]
\d 匹配一个数字
定位符
$ 为匹配输入字符串的结束位置
^ 为匹配输入字符串的开始位置
\b 匹配一个单词边界(单词和空格之间的位置)
\B非单词边界
()标记子表达式的开始或结束 要使用\(\)
2、regexp实例方法
1)exec()方法:
参数是string。
返回是一个数组,存储了匹配的字符串,用于提取字符串。第一项是全匹配,第二项是子模式的匹配,第三项则是子子模式的匹配。
index全模式匹配的字符串索引。
Input :参数字符串
若开启全局匹配模式g,则每次对同一个字符串调用exec,都会往前匹配一个项,lastIndex是上次匹配的最后一个字符的索引。若未开启全局模式,则lastIndex始终是0
若开启粘附标记 y,则每次调用exec都会以lastIndex为字符串的开头,也就是lastIndex必须符合匹配,相当于匹配cat,则catcatcat才符合匹配这样。
2)test()方法:
参数是string
返回是Boolean 是否匹配,验证数据是否有效
3、继承的方法
toString() toLocalString() 返回的是正则表达式的字面量
valueOf()则返回正则表达式本身
4、支持正则表达式的String方法
①searsh(reg):
用于检索与正则表达式相匹配的子字符串,会忽略全局标志并总是从头查找,返回第一个匹配的index。
②match(reg):
找到一个或多个正则表达式的匹配字符。
若没有全局模式:返回一个存放匹配结果的数组,数组类似于exec的返回值,即[全匹配,子表达式1,子表达式2]。
若设置了全局模式:返回一个存放所有匹配项的数组(所有全匹配,无子表达式匹配项),没有index也没有input属性。
③replace(reg,replacement)
返回一个替换完的新的字符串,
replacement参数:
第一种参数:字符串,每个匹配都将由这个字符串替换。
$1、$2、...、$99:与 regexp 中的第 1 到第 99 个子表达式相匹配的文本
$& 匹配整个模式的字符串
$`位于匹配字符串 左侧的文字
$’位于匹配字符串 右侧的文字
第二种参数:函数function(msg,index,string) //msg是匹配到的字符串,若全局则会对每个匹配到的字符串执行此函数。
④split(reg,arrLen):
把一个字符串以特定字符为间隔分割为一个数组
第一个参数可以是reg或者一个字符串,第二个参数可选的指定返回数组的最大长度。
若reg包含了子表达式,则返回的数组只包含子表达式匹配的字符,而没有整个正则匹配的字符串。
三、原始值包装类
当在原始值上调用方法或属性时,后台会创建一个对象,在此条语句执行结束后则销毁。
可以通过Number() String() Boolean(), 或者Object()可通过值类型创建对应原始值包装类
Typeof对原始值包装类返回对应的值类型,对引用类型返回object,instanceof 同理
1、Golbal
全局对象,但代码不会显示的访问它,window作为Global对象的代理。
2)URL编码方式
①encodeURI() 将URL非字符的全部进行编码
②encodeURIComponent() 只编码后面部分的URL,保留前面的//等字符
③decodeURI() 解码
④decodeURIComponent()
2)Eval()函数 参数时要执行的字符串形式的JS代码
通过eval()定义的任何变量和函数都不会被提升,在严格模式下,eval内的变量和函数不能被外部访问。
2、Math
Math.round() 和 Math.fround() 后者返回保留一个小数点的单精度浮点数。