1.Date
介绍: Date类型使用自 UTC(Coordinated Universal Time,国际协调时间)
1970 年 1 月 1 日午夜(零时)开始经过的毫秒数来保存日期在使用这种数据存储格式的条件下,Date 类型保存的日期能够精确到 1970 年 1 月 1 日之前或之后的 285 616 年
创建一个Date类型对象
let time = new Date()
不传递参数的情况下,新创建的对象自动获得当前日期和时间
1.Date.parse()
接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数
参数形式建议使用"月/日/年"
let time = new Date("1/1/2019") //等于默认调用parse来自于构造函数的模仿 new Date(Date.parse("1/1/2019")
//Tue Jan 01 2019 00:00:00 GMT+0800 (中国标准时间) chrome中结果
如果传入 Date.parse()方法的字符串不能表示日期,那么它会返回 Invalid Date
let wrongTime = new Date("xxasdjalk") // Invalid Date
2.Date.UTC()
参数:(年 月 日 时 分 秒 毫秒) 年月必要 其余未设置则为0 月(0-11) 时(0-23)
let Utime = new Date(Date.UTC(2019, 8))
let UtimeAll = new Date(Date.UTC(2019, 8, 8, 10, 20, 30)) //Sun Sep 08 2019 18:20:30 GMT+0800 (中国标准时间)
let UtimeAll2 = new Date(2019, 8, 8, 10, 20, 30) //Sun Sep 08 2019 10:20:30 GMT+0800 (中国标准时间)
如同模仿 Date.parse()一样,Date 构造函数也会模仿 Date.UTC()
但有一点明显不同:日期和时间都基于本地时区而非 GMT 来创建
如果第一个参数是数值则为UTC 字符为parse
3.Date.now() 计时用 支持IE9以上 不支持则使用let start = +new Date()
ECMAScript 5 添加了 Data.now()方法,返回表示调用这个方法时的日期和时间的毫秒数
let start = Date.now()
//some function
let end = Date.now()
console.log(end - start)
4.日期/时间组件方法
一些较实用方法:
- getTime() 返回表示日期的毫秒数;与valueOf()方法返回的值相同
- setTime(毫秒) 以毫秒数设置日期,会改变整个日期
- getFullYear() 取得4位数的年份
- getMonth() 返回日期中的月份从0开始
- getDate() 返回日期月份中的天数
- getDay() 返回日期中星期的星期几
- getHours() 返回日期中的小时数(0到23)
- getMinutes() 返回日期中的分钟数(0到59)
- getSeconds() 返回日期中的秒数(0到59)
- …等等
2.RegExp
1.创建一个正则表达:
let expres = /pattern/flags
pattern : 任何简单或复杂的正则表达式
flags : 一或多个标志
g 全局(global)
i 不区分大小写(case-insensitive)
m 多行(multiline)
// 匹配字符串中所有"at"的实例
var pattern1 = /at/g
// 匹配第一个"bat"或"cat",不区分大小写
var pattern2 = /[bc]at/i
// 匹配所有以"at"结尾的 3 个字符的组合,不区分大小写
var pattern3 = /.at/gi
模式中使用的所有元字符都必须转义。正则表达式中的元字符包括:
( [ { \ ^ $ | ) ? * + .]}
//匹配第一个" [bc]at",不区分大小写
var pattern1 = /\[bc\]at/i
//匹配所有".at",不区分大小写
var pattern2 = /\.at/gi
关于RegExp构造函数
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");
}
在第一个循环中,即使是循环体中指定的,但实际上只为/cat/创建了一个 RegExp 实例。由于实
例属性不会重置 因为第一次调用 test()找到了"cat",但第二次调用是从索引为 3 的字符(上一次匹配的末尾)开始的,
所以就找不到它了。由于会测试到字符串末尾,所以下一次再调用 test()就又从开头开始了。
第二个循环使用 RegExp 构造函数在每次循环中创建正则表达式。因为每次迭代都会创建一个新的
RegExp 实例,所以每次调用 test()都会返回 true。
ECMAScript 5 明确规定,使用正则表达式字面量必须像直接调用 RegExp 构造函数一样,每次都创建新的 RegExp 实例
2.RegExp实例属性
重点:通过这些属性可以获知一个正则表达式的各方面信息
但却没有多大用处,因为这些信息全都包含在模式声明中
RegExp 的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
global:布尔值,表示是否设置了 g 标志。
ignoreCase:布尔值,表示是否设置了 i 标志。
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从 0 算起。
multiline:布尔值,表示是否设置了 m 标志。
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回
var pattern1 = /\[bc\]at/i;
alert(pattern1.global); //false
alert(pattern1.ignoreCase); //true
alert(pattern1.multiline); //false
alert(pattern1.lastIndex); //0
alert(pattern1.source); //"\[bc\]at"
3.RegExp实例方法
1.exec()
RegExp 对象的主要方法是 exec() 接受一个参数为要使用模式的字符串
返回包含第一个匹配项的数组 但是包含两个非array属性:
index 表示匹配项在字符串中的位置
input 表示应用正则表达式的字符串
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
alert(matches.index); // 0
alert(matches.input); // "mom and dad and baby"
alert(matches[0]); // "mom and dad and baby"
alert(matches[1]); // " and dad and baby"
alert(matches[2]); // " and baby"
对于 exec()方法,即使在模式中设置了全局标志(g),它每次也只会返回一个匹配项。
若不设g,则同一个字符串上多次调用 exec()将始终返回第一个匹配项的信息。
而在设置g的情况下,每次调用 exec()则都会在字符串中继续查找新匹配项
var text = "cat, bat, sat, fat";
var pattern1 = /.at/;
var matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0
matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0
var pattern2 = /.at/g;
var matches = pattern2.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern2.lastIndex); //3
matches = pattern2.exec(text);
alert(matches.index); //5
alert(matches[0]); //bat
alert(pattern2.lastIndex); //8
IE 的 JavaScript 实现在 lastIndex 属性上存在偏差,即使在非全局模式下,lastIndex 属性每次也会变化
2.test()
它接受一个字符串参数 在模式与该参数匹配的情况下返回true否则 返回 false
var text = "17699999999";
var pattern = /\d{11}/;
if (pattern.test(text)){
alert("The phone was true.");
}
4.RegExp一些构造函数属性
对opera不大友好
var text = "this has been a short summer";
var pattern = /(.)hort/g;
/*
* 注意:Opera 不支持 input、lastMatch、lastParen 和 multiline 属性
* Internet Explorer 不支持 multiline 属性
*/
if (pattern.test(text)){
alert(RegExp.input); // this has been a short summer 最近一次要匹配的字符串
alert(RegExp.leftContext); // this has been a input字符串中lastMatch之前的文本
alert(RegExp.rightContext); // summer Input字符串中lastMatch之后的文本
alert(RegExp.lastMatch); // short 最近一次的匹配项
alert(RegExp.lastParen); // s 最近一次匹配的捕获组
alert(RegExp.multiline); // false 表示是否所有表达式都使用多行模式
}