平凡之路。

JS学习基本知识之引用类型总结02

Date: Author: ZJ

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。

记录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中正则表达式有两种创建方式。

  1. 表达式
    var expression = / pattern / flags;
    
  2. 构造函数
    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类型

需要注意的有以下:

  1. 函数是对象,函数名是指向对象的指针;
  2. 函数声明提升具有最高优先级,函数表达式没有
  3. arguments有一个callee属性,指向拥有该参数的函数
  4. this指向函数所在的环境对象
  5. 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() 都用于裁剪字符串,都接收两个参数。
    1. 在接收参数方面,slice()substring()的两个参数为起始和结束位置,而sustr()第二个代表长度值;
    2. 在第二个参数缺省时,都会裁剪到字符串结尾处
    3. 在接收负值时,slice()两个参数都会加上长度值,substring()两个参数会为转为0,substr()则会将负的第一个参数加上长度值,第二个转换为0.

字符串位置方法

indexOf()lastIndexOf()都会返回传入的参数字符串在目标字符串中的位置,若没有查找到,返回-1.接收的第二个参数表示从哪个位置开始查找。

trim()

该方法会创建一个字符串副本,然后去掉开头和结尾的空格,返回该字符串副本

大小写转换方法

toUpperCase()toLowerCase()

模式匹配方法

  • match() 与RegExp对象的exec()方法是一样的,只是调用者反过来而已。接受一个参数,正则表达式或RegExp对象。

  • search() 该方法接受一个参数,正则表达式或RegExp对象。返回第一个匹配项的索引,若没有匹配项,则返回-1

  • replace() 用于字符串的替换,第一个参数可以是字符串或者正则表达式。第二个参数是字符串或者函数。
    1. 第一个参数是字符串,则只会替换第一个匹配的子字符串。想要全部替换,需要使用正则表达式并指定g标志。
    2. 第二个参数是字符串时,还可以使用特殊字符序列,将正则表达式的得到的值(如一些捕获组)插入到字符串中。
    3. 第二个参数是函数,该函数会自动传入以下参数: 模式的匹配项、捕获组1的匹配项,捕获组2的匹配项….匹配项在字符串中的位置和原始字符串。
  • split() 基于指定的字符串或者正则表达式,分割字符串,将分割后的字符串放进一个新建的数组中,并返回该数组。 还可以接收第二个参数,用于指定数组的长度。

localeCompare()

比较两个字符串,返回结果如下:

  • 如果字符串在字母表中的位置位于参数字符串之前,返回负数
  • 如果字符串等于参数字符串之前,返回0
  • 如果字符串在字母表中的位置位于参数字符串之后,返回整数 注意这个方法不好,实现很乱

fromCharCode()

String类型的静态方法,该方法接收一或多个字符编码,返回字符编码表示的字符组成的字符串。

console.log(String.fromCharCode(104,101,108,108,111))  // hello

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。