深度国际_JavaScript学习笔记(十五)——对象之Date,RegExp,JSON
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意!
如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/学习。
Date在JavaScript中,Date对象用来表示日期和时间。
系统当前时间:
var now = new Date(); now; // Thu Nov 30 2017 20:50:03 GMT+0800 (中国标准时间) now.getFullYear(); // 2017, 年份 now.getMonth(); // 10, 月份,注意月份范围是0~11,10表示十一月 now.getDate(); // 30, 表示30号 now.getDay(); // 4, 表示星期四 now.getHours(); // 20, 24小时制 now.getMinutes(); // 50, 分钟 now.getSeconds(); // 3, 秒 now.getMilliseconds();
这里需要注意的是,当前时间是浏览器从本机操作系统获取的时间,不一定准确,因为用户可以把当前时间设定成任意值。
注意:JavaScript的Date对象月份值从0开始,牢记0=1月,1=2月,2=3月,……,11=12月。
如果要创建一个指定日期和时间的Date对象,可以用:
var d = new Date(2015, 5, 19, 20, 15, 30, 123); d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST)
第二种创建一个指定的日期和时间的方法是解析一个符合格式的字符串,它返回一个时间戳,然后我们可以将时间戳转换为一个Date:
var d = Date.parse("2015-06-24T19:49:22.875+08:00"); d; d = new Date(1435146562875); d; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST) d.getMonth(); // 5
注意:使用Date.parse()时传入的字符串使用实际月份01~12,转换为Date对象后getMonth()获取的月份值为0~11。
时区Date对象表示的时间总是按浏览器所在时区显示的,不过我们既可以显示本地时间,也可以显示调整后的UTC时间。
var d = new Date(1435146562875); d.toLocaleString(); // "2015/6/24 下午7:49:22",本地时间(北京时区+8:00),显示的字符串与操作系统设定的格式有关 d.toUTCString(); // "Wed, 24 Jun 2015 11:49:22 GMT",UTC时间,与本地时间相差8小时
在JavaScript中,我们传递一个number类型的时间戳,任何浏览器可以把它转换成本地时间。
时间戳:时间戳是一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在为止的毫秒数。如果浏览器所在电脑的时间是准确的,那么世界上无论哪个时区的电脑上,他们此刻产生的时间戳数字都是一样的。所以,时间戳可以精确地表示一个时刻,并且与时区无关。
我们只需丹阳新闻网要传递时间戳,或者存储时间戳,再让JavaScript自动转换成当地时间就行了。
RegExp(正则表达式)字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。
比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
我们可以使用正则表达式判断一个字符串是否是合法的邮箱地址:
创建一个匹配Email的正则表达式;
用该正则表达式去匹配用户的输入来判断是否合法。
因为正则表达式也是用字符串表示的,所以,我们要首先了解如何用字符来描述字符。
在正则表达式中,如果直接给出字符,就是精确匹配。
用匹配任意字符s匹配一个空格(也包括Tab等空白符):
如果需要匹配变长的字符,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或者1个字符,用{n}表示n个字符,用{n,m}表示n~m个字符:
可以通过一个例子来看:
d{3}s+d{3,8}
解释:我们从左到右来看这个正则表达式:
综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。
如果要匹配"010-12345"这样的号码呢?由于"-"是特殊字符,在正则表达式中,要用""转义,所以,上面的正则是d{3}-d{3,8}。
但是,仍然无法匹配"010 - 12345",因为带有空格。所以我们需要更复杂的匹配方式。
进阶要做更精确地匹配,可以用[]表示范围:
A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配"JavaScript"、"Javascript"、"javaScript"或者"javascript"。
^表示行的开头,^d表示必须以数字开头。
$表示行的结束,d$表示必须以数字结束。
你可能注意到了,js也可以匹配"jsp",但是加上^js$就变成了整行匹配,就只能匹配"js"了。
RegExpJavaScript有两种方式创建一个正则表达式:
第一种方式是直接通过/正则表达式/写出来,第二种方式是通过new RegExp("正则表达式")创建一个RegExp对象: