JS引用类型之Date和RegExp

本篇介绍了关于JavaScript中的引用类型——Date以及RegExp

Date类型


Date类型使用自UTC1970年1月1日零点开始经过的毫秒数来保存日期。
要创建一个日期对象,使用new操作符和Date构造函数即可:

1
var now = new Date();

  • 在调用Date构造函数不传递参数的情况下,返回当前日期

不传递参数

  • 传递指定毫秒数,返回从UTC1970年1月1日零点开始经过的毫秒数

三个方法

  • Date.parse():接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应的日期的毫秒数。这个方法的行为因实现而异,而且通常是因地区而异。
    例如:要为2004年5月25日创建一个日期对象:

如果传入Date.parse()方法的字符不能表示日期,那么它会返回NaN。实际上,如果直接将表示日期的字符串传递给Date构造函数,也会在后台调用Date.parse()。
结果相同

  • Date.UTC():同样返回表日期的毫秒数,但它与Date.parse()在构建时使用不同的信息。
    参数:年份(必须)、基于0的月份(一月是0,二月是1,…)(必须)、月中的哪一天(1到31)、小时数(0到23)、分钟、秒及毫秒数。


日期和时间都基于本地时区。

  • Date.now():ECMAScript5添加了Date.now()方法,返回表示调用这个方法时的日期和时间的毫秒数。

继承的方法

toLoaleString():会按照与浏览器设置的地区相适应的格式返回日期的时间。
toString():返回待有时区信息的日期和时间
valueOf():返回日期的毫秒表示。因此可以方便地使用比较操作符来比较日期值。

1
2
3
4
5
var date1 = new Date(2007,0,1); //January 1,2007
var date2 = new Date(2007,1,1); //"February 1,2007"
alert(date1 < date2); //true
alert(date1 > date2); //false

日期格式化方法

格式化日期方法

RegExp类型


创建一个正则表达式:

1
2
var expression = /cat/g; //正则表达式字面量
var reg = new RegExp("cat",g); //使用RegExp构造函数创建

正则表达式字面量始终会共享一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例

flags:

  • g:表示全局模式
  • i:表示不区分大小写模式
  • m:表示多行模式

RegExp实例属性

1
2
3
4
5
global:布尔值,表示是否设置了g标志。
ignoreCase:布尔值,表示是否设置了i标志。
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
multiline:布尔值,表示是否设置了m标志。
source:正则表达式的字符串表示,按照字面量形式而非构造函数中的字符串模式返回

RegExp实例方法

  • exec()方法:接收一个参数,即要应用模式的字符串,然后返回包含第一个匹配信息的数组;或者在没有匹配项的情况下返回null。返回的虽然是Array的实例,但包含两个额外属性 :index和input。index表示匹配项在字符串中的位置,而input表示应用正则表达式的字符串。
1
2
3
4
5
6
var string='red';
var pattern=/\w/g;
var match=pattern.exec(string);
console.log(match); //[ 'r', index: 0, input: 'red' ]
var match=pattern.exec(string);
console.log(match); //[ 'e', index: 1, input: 'red' ]
  • test()方法:接收一个参数,在模式与该参数匹配的情况下返回true,否则返回false
  • RegExp实例继承的toLocaleString()和toString()方法都会返回正则表达式的字面量,与创建正则表达式的方式无关。

    RegExp构造函数属性

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

使用实例:

1
2
3
4
5
6
7
8
9
10
11
var text = "this has been a short summer";
var pattern = /(.)hort/g;
if(pattern.test(text)){
alert(RegExp.input); //this has been a short summer
alert(RegExp.leftContext); //this has been a
alert(RegExp.rightContext); //summer
alert(RegExp.lastMatch); //short
alert(RegExp.lastParen); //s
alert(RegExp.multiline); //false
}