记录JS中引用类型的各种方法和属性。
Date类型
创建对象
var now = new Date(); // 自动获取当前的时间
console.log(now); // Wed Jun 07 2017 16:56:03 GMT+0800 (中国标准时间)
如果想创建一个特定的日期时间,需要在构造函数中传入当前距离1970-01-01午夜零时的毫秒数。为了简化该过程,可以使用以下函数。
-
Date.parse() 传入一个日期格式的字符串,该方法会返回特定的毫秒数,如
- “月/日/年”,如6/13/2017
var date = Date.parse("06/07/2017"); console.log(new Date(date)); // Wed Jun 07 2017 00:00:00 GMT+0800 (中国标准时间)
- “英文月名 日,年”, 如 January 12, 2017
var date = Date.parse("June 07, 2017"); console.log(new Date(date)); // Wed Jun 07 2017 00:00:00 GMT+0800 (中国标准时间)
- “英文星期几 英文月名 日 年 时:分:秒 时区”, 如 Wed Jun 07 2017 16:56:03 GMT+0800
var date = Date.parse("Wed Jun 07 2017 16:56:03 GMT+0800"); console.log(new Date(date)); // Wed Jun 07 2017 16:56:03 GMT+0800 (中国标准时间)
- ISO 8601 扩展格式 YYYY-MM-DDTHH:mm:ss 如 2017-06-07T00:00:01
var date = Date.parse("2017-07-06T12:09:01"); console.log(new Date(date)); // Thu Jul 06 2017 12:09:01 GMT+0800 (中国标准时间)
如果字符串的格式不能转化成毫秒数,则返回NaN。
- Date.UTC()
可以接收7个参数,年,基于0的月,天,时,分,秒以及毫秒数
var date = new Date(2017, 05, 06, 18, 0, 0); console.log(new Date(date)); // Tue Jun 06 2017 18:00:00 GMT+0800 (中国标准时间)
- Date.now() 该方法返回调用该方法时的毫秒数。
继承的方法
-
toLocaleString() 按照与浏览器设置的地区相适应的格式返回日期和时间。
-
toString() 返回带有时区的日期和时间。
-
valueOf() 返回毫秒数
日期格式化方法
- toDateString()
以特定于实现的格式显示星期几,月,日和年
console.log((new Date()).toDateString()); // Wed Jun 07 2017
- toLocaleDateString()
以特定于地区的格式显示星期几,月,日和年
console.log((new Date()).toLocaleDateString()); // 2017-6-7
- toTimeString()
以特定于实现的格式显示时,分,秒和时区
console.log((new Date()).toTimeString()); // 17:55:03 GMT+0800 (中国标准时间)
- toLocaleTimeString()
以特定于实现的格式显示时,分,秒
console.log((new Date()).toLocaleTimeString()); // 17:55:03
- toUTCString()
显示完整的UTC日期
console.log((new Date()).toUTCString()); // Wed, 07 Jun 2017 09:59:14 GMT
有用的方法
- getFullYear()获取年
console.log((new Date()).getFullYear()); // 2017
- getMonth()获取月
console.log((new Date()).getMonth()); // 5
- getDate()获取日
console.log((new Date()).getDate()); // 7
- getHours()获取小时
- getMinutes()获取分钟
- getSeconds()获取秒
RegExp类型
JavaScrit中正则表达式有两种创建方式。
- 表达式
var expression = / pattern / flags;
- 构造函数
var pattern = new RegExp("pattern","flags");
注意:在使用构造函数时,对某些字符需要进行双重转义。所有元字符都得进行双重转义。
标志:
- g: 表示全局(global)模式,模式应用于所有字符串,而非发现第一个匹配项时立即停止;
- i: 表示不区分大小写(case-insensitive)模式,忽略大小写
- m: 表示多行(multiline)模式,即在达到一行文本的末尾时还会继续查找下一行
元字符
共14个:
()
, []
, {}
, \
, |
, ^
, $
, .
, ?
, +
, *
实例属性
- global: 布尔值,表示是否设置了”g”标志
- ignoreCase: 布尔值,表示是否设置了”i”标志
- multiline: 布尔值,表示是否设置了”m”标志
- lastIndex: 整数,表示开始搜索下一个匹配项的字符位置,从0算起。
- source: 正则表达式的字符串表示
实例方法
- exec() 该方法是专门为捕获组而设计的。接收一个字符串,然后返回包含第一个匹配项信息的数组,或者在没有匹配项的情况下返回null。返回的虽然是数组,但是有两个额外的属性:index和input.在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串。
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
console.log(matches.input); // mom and dad and baby
console.log(matches.index); // 0
console.log(matches[0]); // mom and dad and baby
console.log(matches[1]); // and dad and baby
console.log(matches[2]); // and baby
在使用exec()
方法时,始终只返回一个匹配项,有没有g标志,区别在于若有g标志,下一次使用exec()
会向后继续查找,若没有g标志,则始终只查找第一个匹配项。
- test() 接收一个字符串,若字符串中有匹配项,返回true,无匹配项,返回false。
RegExp构造函数属性
RegExp构造函数中有以下属性,其基于所执行的最近一次正则表达式操作而变化。
长属性名 | 短属性名 | 说明 |
---|---|---|
input | $_ | 最近一次要匹配的字符串 |
lastMatch | $& | 最近一次的匹配项 |
lastParent | $+ | 最近一次的捕获组 |
leftContext | $` | input字符串中lastMatch之前的文本 |
multiline | $* | 布尔值,表示是否所有的表达式都使用多行模式 |
rightContext | $’ | input字符串中lastMatch之后的文本 |
function类型
需要注意的有以下:
- 函数是对象,函数名是指向对象的指针;
- 函数声明提升具有最高优先级,函数表达式没有
- arguments有一个callee属性,指向拥有该参数的函数
- this指向函数所在的环境对象
- caller属性保存着调用该函数的函数的引用,如果是在全局调用当前函数,它的值为null
函数属性与方法
-
length属性 表示函数希望接收的参数的个数
-
prototype属性 指向函数的原型对象
-
call()方法和apply()方法 两个方法用于在特定的作用域中调用函数。这两个方法接收的第一个参数表示函数调用所在的作用域。后面的参数表示该函数调用时所接收的参数。
apply()
接收数组或者arguments对象作为参数,call()
则接收具体的参数。 -
bind()
bind()
会创建一个函数实例,然后接收一个对象作为该函数实例中this所指向的对象。 -
toString(),toLocaleString()和valueOf() 都会返回函数的代码。
基本包装类型
Number类型
- toString() 返回数值的字符串表示,还可以接受一个参数,表示进制
var num = 10;
console.log(num.toString(2)); // "1010"
console.log(num.toString(10)); // "10"
-
toLocaleString() 返回数值的字符串表示
-
valueOf() 返回数值
-
toFixed() 按照指定的小数位返回数值的字符串表示,可以实现自动舍入
-
toExponential() 返回以指数表示法表示的字符串,接收一个参数用于指定小数位
-
toPrecision() 自动选择合适的格式返回数值的字符串表示,接收一个参数用于表示数值的总位数。
String类型
字符方法
- charAt()和charCodeAt() 接受一个index的参数,返回该位置出的字符和字符编码。
字符串操作方法
- concat() 用于字符串的拼接,接受一个或多个参数,创建一个新字符串,然后返回拼接后的新字符串。
- slice(),substring()和substr()
都用于裁剪字符串,都接收两个参数。
- 在接收参数方面,
slice()
和substring()
的两个参数为起始和结束位置,而sustr()
第二个代表长度值; - 在第二个参数缺省时,都会裁剪到字符串结尾处
- 在接收负值时,
slice()
两个参数都会加上长度值,substring()
两个参数会为转为0,substr()
则会将负的第一个参数加上长度值,第二个转换为0.
- 在接收参数方面,
字符串位置方法
indexOf()
和lastIndexOf()
都会返回传入的参数字符串在目标字符串中的位置,若没有查找到,返回-1.接收的第二个参数表示从哪个位置开始查找。
trim()
该方法会创建一个字符串副本,然后去掉开头和结尾的空格,返回该字符串副本
大小写转换方法
toUpperCase()
和toLowerCase()
模式匹配方法
-
match() 与RegExp对象的
exec()
方法是一样的,只是调用者反过来而已。接受一个参数,正则表达式或RegExp对象。 -
search() 该方法接受一个参数,正则表达式或RegExp对象。返回第一个匹配项的索引,若没有匹配项,则返回-1
- replace()
用于字符串的替换,第一个参数可以是字符串或者正则表达式。第二个参数是字符串或者函数。
- 第一个参数是字符串,则只会替换第一个匹配的子字符串。想要全部替换,需要使用正则表达式并指定g标志。
- 第二个参数是字符串时,还可以使用特殊字符序列,将正则表达式的得到的值(如一些捕获组)插入到字符串中。
- 第二个参数是函数,该函数会自动传入以下参数: 模式的匹配项、捕获组1的匹配项,捕获组2的匹配项….匹配项在字符串中的位置和原始字符串。
- split() 基于指定的字符串或者正则表达式,分割字符串,将分割后的字符串放进一个新建的数组中,并返回该数组。 还可以接收第二个参数,用于指定数组的长度。
localeCompare()
比较两个字符串,返回结果如下:
- 如果字符串在字母表中的位置位于参数字符串之前,返回负数
- 如果字符串等于参数字符串之前,返回0
- 如果字符串在字母表中的位置位于参数字符串之后,返回整数 注意这个方法不好,实现很乱
fromCharCode()
String类型的静态方法,该方法接收一或多个字符编码,返回字符编码表示的字符组成的字符串。
console.log(String.fromCharCode(104,101,108,108,111)) // hello