JavaScript中的标准对象
JavaScript中对象类型主要有以下几种:
number,string,Boolean,function,undefined,object;
Number()、Boolean和String()作为函数,把任何类型的数据转换为number、boolean和string类型;还可以调用对象的toString方法把其他类型转换为string类型的。
一、date对象
获取系统时间和修改系统时间
var now = new Date();// now= Fri Sep 01 2017 17:13:06 GMT+0800
now.getFullYear(); //年份
now.getMonth(); //月份,注意月份范围是0~11,所以0月就是一月
now.getDate(); // 日期 这里是01号
now.getDay(); //星期几
now.getHours(); //几点了
now.getMinutes(); //分钟
now.getSeconds(); //秒
now.getMilliseconds(); //毫秒数
now.getTime(); // 1970.01.01.00.00.00到现在的毫秒数, 以number形式表示的时间戳
//创建一个时间,这里月份是十月份,也可以直接填时间戳
var d = new Date(2017,09,01,17,42,55,645);
d.toLocaleString(); // 2017/10/1 下午5:42:55
d.toUTCString(); // Sun, 01 Oct 2017 09:42:55 GMT
二、正则表达式
精确匹配:\d匹配一个数字,\w匹配一个字母或数字,.可以匹配任意字符,\s匹配一个空格。
变长的匹配:*任意个字符,+至少一个字符,?0或1个,{n}n个字符,{n,m}n-m个字符。
更加精确:[]表示范围,[][]则是两个数了
[0-9a-zA-Z\_] 匹配一个数字,字母或者下划线
[0-9a-zA-Z\_]+ 匹配至少一个数字,字母或者下划线
A|B:表示匹配A或者B;
^表示行的开头,$表示结尾。只是单纯的表示开头和结尾,不匹配字符。
创建正则表达式
第一种方式是直接通过/正则表达式/写出来,第二种方式是通过new RegExp('正则表达式')创建一个RegExp对象(字符串的两个\\
实际上是一个\
)。
var re1 = /^\d{3}\-\d{3,8}$/;
var re2 = new RegExp('^\d{3}\\-\\d{3,8}$');
re1.test(‘123-45678’);//用test()方法测试是否匹配
拆分
split()方法用于把一个字符串分割成字符串数组(包括其中的空格)。
‘abc d’.split(‘’); //拆分字符串,包括其中的空格,所有元素。
‘abc d’.split(/\s+/);// /正则表达式+/不识别表达式匹配的字符。
分组
就是提取子串,()表示要提取的分组;如下:exec()方法返回一个数组,有3个元素。
var re1 = /^\d{3}\-\d{3,8}$/;
re1.exec(‘123-45678’);//分别提取了[’123-45678’,’123’,’45678’]
一个判断时间的例子:
var re = /^([0-1][0-9]|[2][0-4])\:([0-5][0-9])\:([0-5][0-9])$/;
var t='23:59:30';
if(re.test(t)){
var a = re.exec(t);//[ '23:59:30',’’23,’59’,’30’]
alert(a);
}
else
alert('时间错误!');
正则表达式的贪婪匹配原则,尽可能多的匹配到字符,\d+会把后面直接连着的数字都匹配了。
JavaScript的正则表达式用g
,表示全局匹配,指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引:
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;
// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10
re.exec(s); // ['VBScript']
re.lastIndex; // 20
re.exec(s); // ['JScript']
re.lastIndex; // 29
re.exec(s); // ['ECMAScript']
re.lastIndex; // 44
re.exec(s); // null,直到结束仍没有匹配到
正则表达式还可以指定
i
标志,表示忽略大小写,
m
标志,表示执行多行匹配。
三、json
Json是JavaScript的一个子集;把JavaScript对象变成json(就是把对象序列化成一个json格式的字符串,才能通富哦网络传递给其他计算机)有一下这些数据类型:
Number、boolean、string、array、object、null;
Json中字符集必须是utf-8,字符串用””号,对象中的键也必须是用“”双引号。
var duixiang = {
name:'maomao',
birth:'2014-09',
'teacher-course':'java'
};
//把对象序列化
JSON.stringify(duixiang);//{"name":"maomao","birth":"2014-09","teacher-course":"java"}
//按照一定的格式来输出
JSON.stringify(duixiang,null,'');//{"name": "maomao","birth": "2014-09","teacher-course": "java"}
//传入数组,输出想要的键
JSON.stringify(duixiang,['name','birth'],'');//{"name": "maomao","birth": "2014-09"}
//hanshu是一个函数,对象的每个键值都会被函数处理
JSON.stringify(xiaoming, hanshu, '');
控制序列化,给对象加上一个方法:
var duixiang = {
name:'maomao',
birth:'2014-09',
'teacher-course':'java',
toJSON: function () {
return { // 控制序列化输出
'Name': this.name,
'course': this['teacher-course']
};
}
};
JSON.stringify(duixiang); /*{"Name":"maomao","Age":"java"}*/
反序列化
把json字符串用JSON.parse()转化为JavaScript对象,parse()接收函数
JSON.parse('{"name":"maomao","age":12}'); // Object {name: 'maomao', age: 12}
var duixiang = JSON.parse('{"name":"maomao","age":12}', function (key, value) {
if (key === 'name') {
return value + '同学';
}
return value;
});
duixiang.name;//maomao同学