《高级程序设计》整理(二)- - -正则与函数篇

《高级程序设计》整理(二)- - -正则与函数篇


一、正则(RegExp)

    - - -| let pattern = / patern / ( i | g | m ) i:忽略大小写 g:全局匹配 m:多行匹配
        (元字符需要转义—-> ’ ( { \ ^ $ | ) ? * + . ] } ’ )

    - - -| RegExp的实例属性:globalignoreCasemultiline 表示是否设置了该标志

    - - -| RegExp的实例方法:
           — exec(): 包含第一个匹配项信息的数组([match[0],match[1],match[2]…]);或者在没有匹配项的情况下返回null。返回的数组虽然是Array的实例,但包含两个额外的属性:index(匹配项的索引)和input(输入)。
           — test(): /.*/.test(str) ==>boolean 常用于if语句

    - - -| RegExp的构造函数属性:

长属性名短属性名说明
input$_最近一次要匹配的字符串。Opera未实现此属性
lastMatch$&最近一次的匹配性。 Opera未实现此属性
lastParen$+最近一次匹配的捕获组。 Opera未实现此属性
leftContext$`input字符串中lastMatch之前的文本
multiline$*布尔值,是否所有表达式都使用多行模式。IE和Opera未实现此属性
rightContextinput字符串中lastMatch之后的文本
$1、$2、$3…第一、第二、第三…匹配的捕获组 (常用
var text="this has been a short summer";
var pattern=/(.)hort/g;
/*
*注意:Opera不支持input、lastMatch、lastParen和multiline属性
*IE 不支持multiline属性
*/
if(pattern.test(text))
{
    alert(RegExp.$_); // this has been a short summer
    alert(RegExp.["$`"]); //this has been a   
    alert(RegExp.["$·"]); //summer
    alert(RegExp.["$&"]); //short    
    alert(RegExp.["$+"]); //s
    alert(RegExp.["$*"]); //false
    alert(RegExp.["$1"]); //s
}

四、Function类型

  1. 每个函数都是function类型的实例,*即函数是对象,而函数名是指针
    - - -| 函数的两种定义方式:

    1.function sum(num1, num2) {//函数声明
        return num1 + num2
    }
    2.var sum = function(num1, num2) {//函数表达式
        return num1 + num2
    };
    *注意:用不含括号的函数名访问的是函数指针,而非调用函数
         即:var anotherSum = sum 
                 sum = null
                 anotherSum(10,10)  //==>20
  2. 函数声明和函数表达式
    - - -| 解析器会将函数声明提升,率先解析函数声明并生成引用;
    - - -| 表达式则是按解析顺序自上而下执行。

  3. 函数内部属性(arguments, this)
    - - -| this:引用函数的执行环境

    - - -| arguments:类数组对象,包含传入函数的所有参数。
           - - callee:arguments.callee()指向拥有该arguments对象的函数;常用于递归解耦
           - - arguments[Symbol.iterator]():返回一个新的Array迭代器对象,该对象包含参数中每个索引的值。

    /*将arguments转成数组对象的方法*/
    var args = Array.prototype.slice.call(arguments);
    var args = [].slice.call(arguments);
    const args = Array.from(arguments);// ES2015
  4. 函数属性和方法
    - - 属性:length:函数希望接收的参数个数;prototype:保存所有实例方法
    - - 方法:
          –apply()和call():

    每个函数都包含两个非继承而来的方法:apply()call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于函数体内this对象的值; 他们的第一参数都是作用域,apply()的第二参数为数组而call()则需将传递参数列举出来。
    例子:

    function sum(num1, num2){
      return num1 + num2;
    }
    function callSum1(num1, num2){
    return sum.apply(this, arguments);
    }
    console.log(callSum1(10,10));//20

    扩充作用域->例子:

    window.color = "red";
    var o = { color: "blue" };
    function sayColor(){
    alert(this.color);
    }
    sayColor(); //red
    sayColor.call(this); //red
    sayColor.call(window); //red
    sayColor.call(o); //blue

    bind():
    call() / apply() ,都是立马就调用了对应的函数,而 bind() 不会, bind() 会生成一个新的函数,bind() 函数的参数跟 call() 一致,可以随时调用。
    例子:

    window.color = "red";
    var o = { color: "blue" };
    function sayColor(){
    alert(this.color);
    }
    var objectSayColor = sayColor.bind(o);
    objectSayColor(); //blue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值