红宝书阅读笔记ch5-2

红宝书阅读笔记ch5-2

Date类型、RegExp类型、Function类型、基本包装类型

Date类型

  1. Date类型保存的时间精度在1970年之前和之后的一亿年。

  2. 获取当前时间只要new一个Date就行了。

  3. 根据指定日期和时间来创建日期对象的方法有三种:

    1. 传入表示该日期的毫秒数(从1970到该日期所经过的毫秒数) 。

    2. Date.prese( ) ,传入 一个表示日期的字符串,然后该方法尝试返回一个相应日期的毫秒数。

    3. Date.UTC() ,传入一连串表示时间的数字,返回表示日期的毫秒数。

var now=new Date();//当前时间
var oneSecond=new Date(1000); //一秒
var prese=new Date(Date.parse("11/9/2019"));
//var prese=new Date("11/9/2019"); 和上面那句一毛一样
var utc=new Date(Date.UTC(2005,4,5,17,55,55));
//var utc=new Date(2005,4,5,17,55,55);
alert("当前时间:"+now);
alert("Date.parse(\"11/9/2019\"):"+prese);
alert("Date.UTC(2005,4,5,17,55,55):"+utc);
alert("一千毫秒"+oneSecond);
  1. Date.valueOf( ) ,返回日期的毫秒数,因此可以用来比较日期值。

var date1 = new Date(2007, 0, 1); //January 1, 2007
var date2 = new Date(2007, 1, 1); //February 1, 2007
alert(date1 < date2); //true
alert(date1 > date2); //false
  1. 日期格式化方法

var dateString =new Date(); //显示星期几、月、日、年
var timeString=new Date(); //显示时、分、秒和时区
var localeDateString=new Date(); //本地区的格式显示显示星期几、月、日、年
var utcString=new Date(); //完整的UTC日期
alert("dateString "+dateString.toDateString());
alert("timeString "+dateString.toTimeString());
alert("localeDateString "+dateString.toLocaleDateString());
alert("utcString "+dateString.toUTCString());
  1. 日期/时间的组件方法
    都是取得和设置日期中值的方法,还有很多方法没列,可上 MDN了解。

var now = new Date();
var time=now.getTime();
var fullYear=now.getFullYear();
var month=now.getMonth();

RegExp 类型

  1. 语法
    pattern(模式) ,是简单或复杂的正则表达式
    flags(标识),表示正则表达式的行为:
    g:全局模式;
    i:不区分大小写;
    m:表示多行。

var expression = / pattern / flags
  1. pattern 中使用的所有元字符都必须转义。
    () [] {} \ ^ $ | ? * + .

  2. RegExp构造函数
    pattern1和pattern2完全等价,但由于RegExp的参数是字符串,所以在使用元字符时都必须双重转义。

var pattern1=/ [bc]at /i;
var pattern2=new RegExp("[bc]at","i");
//匹配 [bc]at ,字面量是 / \[bc\]at /
var pattern3=new RegExp("\\[bc\\]at","i");
  1. RegExp的实例属性
    global:布尔值,表示是否设置了g标识,相似的还有ignoreCase、multiline,分别表示i、m标识。
    source:正则表达式的字符串表示
    lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。

  2. RegExp实例方法

    1. exec( ) ,参数是一个要匹配模式的字符串,没有匹配项时返回null,有匹配项时返回一个数组,第一项是与整个模式匹配的字符串, 第二项是与 RegExp的实例 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。
      对于exec( ) 方法而言,即是在模式中设置全局标识(g),它每次也只会返回一个匹配项。
      在不设置全局标志的情况下,在同一个字符串上多次调用exec( ) 将始终返回第一个匹配项的信息,而在设置全局标识的情况下,每次调用exec( ) 则都会在字符串中继续查找新匹配项。

    2. test( ) ,接收一个字符串参数,在模式与参数匹配的情况下返回true;否则返回false。

  3. RegExp构造函数属性
    RegExp构造函数包含一些属性(你可以认为这是RegExp类型的 “静态属性”)。这些属性适用与作用域中的所有正则表达式。这些属性分别有自己的长属性名和短属性名。

长属性名 短属性名 说明
input $_ 最近一次要匹配的字符串
lastMatch $& 最近一次匹配项
lastParen $+ 最近一次匹配的捕获组
leftContext $` input字符串中lastMatch之前的文本
multiline $* 布尔值,表示是否所有的表达式都使用多行模式
rightContext $’ input字符串中lastMatch之后的文本

Function 类型

  1. 函数实际上是一个对象。(函数是对象,函数名是指针

  2. 函数的三种语法

//函数声明语法
function sum(num1,num2){
return num1+num2;
}
//函数表达式
var sum=function(num1,num2){
return num1+num2;
}
//Function构造函数
//不推荐这种写法,不过它可以帮你理解 “函数是对象,函数名是指针” 的概念。
var sum=new Function("num1","num2","return num1+num2");
  1. 每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。

  2. 函数名实际上是一个指向函数对象的指针。

  3. JavaScript 没有重载。

  4. 函数声明在代码执行的顺序中优于函数表达式,原因是在代码开始执行之前,解析器就已经通过一个名为函数声明提升的过程,读取并将声明添加到执行环境中。对代码求值时,JavaScript 引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码在调用它的代码后面,JavaScript 引擎也能把声明函数提示到顶部。

  5. 解析器在向执行环境中加载数据时,解析器会率先读取函数声明,并使其在执行任何代码之前可以访问;至于函数表达式,则必须等到解析器到它所在的代码行,才会真正被解释执行。

//函数声明,可以执行
alert(sum(10,10));
function sum(num1,num2){
return num1+num2;
}
//函数表达式,报错
alert(sum(10,10));
var sum=function (num1,num2){
return num1+num2;
}
  1. 要访问函数的指针而不执行函数的话,必须去掉函数名后面那对圆括号。

  2. 因为函数名本身就是变量,所以函数可以作为值来使用。第一你可以像传递参数一样把一个函数传递给另一个函数,第二你可以将函数作为另一个函数的结果返回。

  3. 函数内部的属性

    1. arguments.callee 该属性是一个指针,指向 拥有arguments对象的函数。(现在已逐渐淘汰,尽量不要用)

    2. arguments 是一个类数组的对象。

    3. this ,this引用的是函数执行的环境对象,当在网页的全局作用域中调用函数时this对象引用的就是window。

    4. caller ,这个属性中保存着调用当前函数的引用,如果是在全局作用域中调用当前函数,它的值为null。另外也可以通过 arguments.callee.caller 来访问该属性。

  4. 函数属性和方法

    1. function.object.length,表示函数希望接收的命名参数的个数。

    2. prototype ,引用类型的原型,用以保存引用类型实例方法。(之后的JavaScript的面向对象会重点提到,这里不做过多介绍。)

    3. apply( ) 和 call( ) 的用途都是在特定的作用域中调用函数,也可以理解为扩充函数作用域的方法。它们的区别只是在参数的传递上。

    4. bind( ) ,这个方法会创建一个函数的实例,其this值会被绑定到传给bind( )函数的值。

基本包装类型

  1. 基本包装类型即Boolean、Number和String。可以理解为Object 对布尔值、数值、字符串的包装类型。

  2. Number 的方法

    1. Number.toFixed( ) ,按照指定的小数位返回数值的字符串表示,适用于处理货币值。

    2. Number.toExponetial( ) ,以指数表示法返回数值的字符串形式。

    3. Number.toPrecision( ) ,根据表示数值所有数字的位数的参数,来返回不同的数值表示法。

  3. String 类型

    1. String.length ,返回字符串的字符数。

    2. String.charAt( ) ,参数是字符的length值,返回指定位置的字符。(实际上是字符串,因为JS没字符类型)

    3. String.charCodeAt( ) ,参数是字符的length值,返回指定位置的字符编码。

    4. String.concat( ) ,连接两个字符串。

    5. slicce( )、substr( )、substring( ) ,基于子字符串创建新的字符串的方法。

    6. indexOf( )、lastIndexOf( ) ,搜索给定的子字符串,返回子字符串的位置,一个从前往后,一个从后往前。

    7. trim( ) ,创建一个字符串的副本,删除前置和后缀的所有空格.

    8. 字符串大小写装换方法,toLowerCase( ) 、toLocalLowerCase( ) 、toUpperCase( ) 、toLocalUpperCase( ) 。

    9. match( ),参数是一个正则表达式或RegExp对象,返回匹配模式的数组。

    10. search( ),参数是一个正则表达式或RegExp对象,返回第一个匹配项的索引,没找到返回-1.

    11. replace( ),参数是第一个RegExp对象或是一个字符串(非正则表达式),第二个是用以替换的字符串或者是一个函数。

    12. split( ),基于指定的分隔符将一个字符串分割成多个字符串,并将结果放在一个数组里。第一个参数是分隔符,也可以是一个RegExp对象,第二个参数是数组的长度。

    13. String.localeCompare(str ),用于比较两个字符串,返回数字-1,0,1 。零是两个字符串相等,正一和负一表示参数的首字母在字符串之前或之后。这个方法不区分大小写。

2019.12.20