一、时间Date
对象具体类型判断的通用方法:
d instanceof Date
1、构造函数和三个方法
//构造器
var d = new Date();
var d = new Date(454545545);
var d = new Date(2018, 11, 24, 10, 33, 30, 0);
var d = new Date("2015-06-24T19:49:22.875+08:00");
//3个方法
var d = Date.parse('2018-01-01'); //返回毫秒值
var d = Date.UTC(2005,4,5); //返回毫秒值
var d = Date.now(); //返回毫秒值
2、四种日期字符串格式
var d = new Date("2018-02-19T12:00:00"); //标准日期格式
var d = new Date("2018-02-19"); // 短日期 最好不要省略0
var d = new Date("Feb 19 2018");//长日期
var d = new Date("Mon Feb 19 2018 06:55:23 GMT+0200 (W. Europe Standard Time)");
3、几个toString方法
var d = new Date();
d.toLocaleString();//完整本地时间
d.toUTCString();//完整标准时间
d.toDateString();//年月日
d.toTimeString();//时分秒
4、时间获取和设置方法
- 外国的月份是0到11月,分别对应我们的1到12
getFullYear() //获取四位的年(yyyy)
getMonth() //获取月(0-11)
getDate() //以数值返回天(1-31)
getHours() //获取小时(0-23)
getMinutes() //获取分(0-59)
getSeconds() //获取秒(0-59)
getMilliseconds() //获取毫秒(0-999)
getDay() //以数值获取周名(0-6)
getTime() //获取时间(从 1970 年 1 月 1 日至今)和 valueOf都是返回毫秒值
1.时间戳的时区无关性:本质就是一个时间的差值所以和时区是无关的
2.时区的转换借助时间戳是很方便的,直接存入时间戳取出来用的时候就会自动转换为当地的时间
二、正则RegExp
1、正则基础
- 修饰符
g(全局匹配)、i(忽略大小写)、m(多行模式)
- 括号
[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找任何从 0 至 9 的数字。
(red|blue|green) 查找任何指定的选项,就是一个或的逻辑。
- 元字符
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。
\W 查找非单词字符。
\d 查找数字。
\s 查找空白字符。
\b 匹配单词边界。
- 量词
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
n{X} 匹配包含 X 个 n 的序列的字符串。
n{X,Y} 匹配包含 X 至 Y 个 n 的序列的字符串。
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
- 首尾匹配
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
string支持正则的方法:search、replace、match、split
2、正则对象
- 字面量的元字符转义只要一个
\
而构造函数要\\
var pattern1 = /at/g;
var pattern2 = new RegExp("[bc]at", "i");
3、对象属性
- global : RegExp 对象是否具有标志 g
- ignoreCase :RegExp 对象是否具有标志 i
- multiline : RegExp 对象是否具有标志 m
- lastIndex : 标示开始下一次匹配的字符位置
- source : 正则表达式的源文本
4、对象方法
- 方法:test方法、exec方法、compile方法
exec方法说明
- exec 方法返回的是数组,其中含两个额外属性,index 表示匹配项在字符串中的位置,input表示测试的字符串,如果正则中使用括号进行分组捕获的话,使用exec 方法就可以获取分组
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方法的另一个用途就是进行全局匹配的时候调用一次exec方法就匹配一次,这样就能将所有的匹配项全部获取出来,全局匹配的时候记得不能使用
^...$
5、构造函数属性
RegExp.$1、RegExp.$2...RegExp.$9
就是用来存储相应的捕获组的
var r= /^(\d{4})-(\d{1,2})-(\d{1,2})$/; //正则表达式 匹配出生日期(简单匹配)
r.exec('1985-10-15');
s1=RegExp.$1;
s2=RegExp.$2;
s3=RegExp.$3;
alert(s1+" "+s2+" "+s3)//结果为1985 10 15
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 IE不支持
}
三、JSON
- JSON 是一种数据传输的格式,用于前后端的数据传输,正逐渐取代 xml 成为主流
1、json里的数据类型
- number:和JavaScript的number完全一致;
- boolean:就是JavaScript的true或false;
- string:就是JavaScript的string;
- null:就是JavaScript的null;
- array:就是JavaScript的Array表示方式
[...]
; - object:就是JavaScript的
{ ... }
表示方式。
2、序列化和反序列化
基础用法
- JSON 串和 js 对象的相互转换:
stringify (序列化)
和parse (反序列化)
- JSON.stringify() 函数将把任何日期转换为字符串,将从JS对象删除函数(包括键和值)
- 示例代码输出前者是json串,后者是js对象字面量,直观的区别在于json的key加了双引号
var jsonString = JSON.stringify({
make: "McLaren",
model: "MP4-12C",
miles: 5023
});
var car = JSON.parse(jsonString);
console.log(jsonString);
console.log(car);
扩展用法
- JSON.parse()可以接收一个函数,用来转换解析出的属性
var obj = JSON.parse('{"name":"小明","age":14}', function (key, value) {
if (key === 'name') {
return value + '同学';
}
return value;
});
console.log(JSON.stringify(obj)); // {name: '小明同学', age: 14}
- stringify 方法输出的字串格式化
JSON.stringify(xiaoming, null, ' ');
- stringify 筛选键值
JSON.stringify(xiaoming, ['name', 'skills'], ' ');
- stringify 指定处理函数
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}
JSON.stringify(xiaoming, convert, ' ');
- toJSON 精确指定序列化的形式
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '\"W3C\" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
toJSON: function () {
return { // 只输出name和age,并且改变了key:
'Name': this.name,
'Age': this.age
};
}
};
JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'