ECMAScript学习笔记(三)

Posted by Csming on 2018-09-11

引用类型

JavaScript高级程序设计的第五章。讲解了跟对象相关的东西。

Date类型

Date类型,是基于Java的java.util.Date构建的(怪不得觉得用起来很顺手)。

Date类型使用自UTC 2017年1月1日零时开始经过的毫秒数来保存日期。Date类型保存的日期能够精确到1970年1月1日之前或折后的285616年。

创建一个Date对象, 可以这么操作:

1
var now = new Date();

该对象将获得当前的日期和时间。

若想指定时间和日期创建Date对象,则需要传入表示该日期的毫秒数。为了简化计算过程,ECMAScript提供了:Date.parse(), Date.UTC()方法。

Date.parse
eg:

1
var someDate = new Date(Date.parse("May 25, 2018"));

当然,如果直接把表示日期的字符串,传入Date构造函数,他在后台也会调用Date.parse()函数。

**Date.UTC:**参数分别为年份、基于0的月份、月中的某一天、小时数、分钟、秒及毫秒。

**必须参数:**年份、月份
eg:

1
2
var y2k = new Date(Date.UTC(2000, 0));
var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));

当然,如果直接把Date.UTC()需要的参数,传入Date构造函数,他在后台也会调用Date.UTC()函数。

ECMAScript 5 添加了Date.now()方法,返回表示调用这个方法时的日期和时间的毫秒数。这个方法简化了使用Date对象分析代码的工作。

1
var start = Date.now();

日期格式化方法

1.toDateString(): 以特定于实现的格式显示星期几, 月, 日和年
2.toTimeString(): 以特定于实现的格式显示时, 分, 秒和时区
3.toLocaleDateString(): 以特定于地区的格式显示星期几, 月, 日和年
4.toLocalTimeString(): 以特定于地区的格式显示星期几, 月, 日和年
5.toUTCString(): 以特定于实现的格式完整的UTC日期。

日期/时间组件方法

1.getTime(): 返回表示日期的毫秒数
2.setTime(毫秒)
3.getFullYear(): 取得4位数年份
4.setFullYear(年)
5.getUTCFullYear(): 返回UTC日期的4位数年份
6.setUTCFullYear(年):
7.getMonth(): 返回日期中的月份,以0开始计数
8.setMonth(月)
9.getUTCMonth(): 返回UTC日期中的月份,以0开始计数
10.setUTCMonth(月)
11.getDate(): 返回日期月份中的天数
12.setDate(日)
13.getUTCDate(): 返回UTC日期月份中的天数
14.setUTCDate(日)
15.getDay(): 返回日期中星期的星期几,0表示星期日,6表示星期六
16.getUTCDay(): 返回UTC日期中星期的星期几,0表示星期日,6表示星期六
17.getHours(): 返回日期中的小时数,0-23
18.setHours()
19.getUTCHours(): 返回UTC日期中的小时数,0-23
20.setUTCHours()
21.getMinutes(): 返回日期中的分钟数
22.setMinutes()
23.getUTCMinutes(): 返回UTC日期中的分钟数
24.setUTCMinutes()
25.getSeconds(): 返回日期中的秒数
26.setSeconds()
27.getUTCSeconds(): 返回UTC日期中的秒数
28.setUTCSeconds()
29.getMilliseconds(): 返回日期中的毫秒数
30.setMilliseconds()
31.getUTCMilliseconds(): 返回UTC日期中的毫秒数
32.setUTCMilliseconds()

RegExp类型

RegExp用来支持正则表达式。

通过以下方式,可以创建一个正则表达式:

1
var expression = / pattern / flags;

pattern部分是一个正则表达式,可以包含字符类、限定符、分组、向前查找及反向引用。

flags部分是一个标志,表示正则表达式的行为。

g: 全局模式,表示模式将被应用到所有字符串中,而并非发现第一个匹配项时就停止。
i: 表示不分大小写
m: 表示多行模式。

1
2
3
4
5
6
7
8
9
var re = null, i;
for(i = 0; i < 10; i++) {
re = /cat/g;
re.test("catastrophe");
}
for(i = 0; i < 10; i++) {
re = new RegExp("cat", "g");
re.test("catastrophe");
}

RegExp实例属性

1.global: 布尔值,表示是否设置了g标志
2.ignoreCase: 布尔值, 表示是否设置了i标志
3.lastIndex: 整数值,表示开始搜索下一个匹配项的字符位置,从0开始算;
4.multiline: 布尔值,表示是否设置了m标志。
5.source: 正则表达式的字符串表示。

RegExp实例方法

**1.RegExp的主要方法是exec(),**该方法用于捕获组。exec()接收一个参数:要应用模式的字符串,然后返回包含第一个匹配项信息的数组。

eg:

1
2
3
4
5
6
7
8
9
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;

var matches = pattern.exec(text);
matches.index; // 0
matches.input; // mom and dad and baby
matches[0]; // mom and dad and baby
matches[1]; // and dad and baby
matches[2]; // and baby

以上pattern包含两个捕获组,当把字符串传入exec()方法后,将匹配项及捕获组返回。

2.test()方法,接收一个字符串参数。若字符串与模式匹配,则返回true,否则返回false

3.toLocaleString()和toString()方法会返回正则表达式的字面量。

RegExp构造函数属性。

1.input 最近一次要匹配的字符串
2.lastMatch 最近一次的匹配项
3.lastParen 最近一次匹配的捕获组
4.leftContext input字符串中lastMatch之前的文本
5.multiline 是否所有表达式都使用多行模式。
6.rightContext input字符串中lastMatch之后的文本

模式的局限性

1.不能匹配字符串开始和结尾的\a \Z锚
2.不支持向后查找
3.不支持并集和交集
4.不支持原子组
5.不支持Unicode
6.不支持明明捕获组
7.不支持s和x匹配模式
8.不支持条件匹配
9.不支持正则表达式注释