JavaScript-基本知识(2)

 回顾:上篇学习了 基本类型

 这篇将学习:正则,函数 作用域

10)正则表达式

  • 1.什么是正则表达式?
  • 描述字符模式的对象,RegExp类表示正则表达式,进行强大的模式匹配和文本检索与替换的函数。
  • 2.创建正则表达式
  • 第一种(采用new):var box=new RegExp('box'); e.g /box/
  • var box =new RegExp('Box','ig'); e.g 第二个参数为模式可选参数:i:忽略大小写,g:全局匹配,m:多行匹配
  • 第二种(采用字面量的方式):
  • var box1=/Box/;
  • var box1=/Box/ig;
  • 3.测试正则表达式(test(),exec()) :以正则表达式作为对象
  • e.g var pattern=new RegExp('Box','i'); //声明正则
    var str='box';//定义字符串
    console.log(pattern.test(str));//test 匹配
  • /Box/.test(str);
  • test() 返回 true / false
  • exec() 匹配成功 ,返回一个数组,如果没有匹配到,返回null
  • e.g /Box/i.exec(str); 结果:["box", index: 11, input: "this is a box,that is a Box"]
  • 4.使用字符串的正则表达式方法(以字符串作为对象)
  • match() 返回子串数组,或者null
  • replace() 匹配成功,返回替换后的字符串(全局g,全部替换,否则替换第一个),匹配失败,返回原字符串
  • search() 返回到第一个查到的第一个位置,找不到返回-1
  • split() 将字符串,拆分成是数组
  • 5.使用静态属性
  • RegExp.input 正在匹配的字符串内容
  • RegExp.lastParen 最后一堆圆括号内的匹配子串
  • 6.获取控制
  • . 点符号表示匹配除了换行符外的任意字符
  • * 星号表示,重复字符,0个或任意多个匹配字符
  • + 加号,表示至少一个字符
  • ? 问号,表示0个或者1个任意字符
  • o{2,4} 花括号,表示匹配字母o 出现2~4次
  • o{2,} 花括号,表示匹配字母o 出现大于2次
  • o{3} 花括号,表示匹配字母o 限定为3次
  • [a-z] 表示26个小写字母,任意一个都匹配
  • [A-Z] 表示26个小写字母,任意一个都匹配
  • [0-9] 表示10个数字,任意一个都匹配
  • [0-9]* 表示0次或者多次字符
  • [a-zA-Z0-9] 表示上面的字符
  • [^0-9] 表示非0-9的任意字符
  • \w 表示 字母数字下划线任意字符
  • \W 表示 非的字幕数字下划线的字符
  • \d 表示 匹配数字
  • \D 表示 匹配非数字
  • /^ $/ 表示 头匹配和尾匹配
  • \s 表示 空格匹配
  • \b 表示 是否到达边界
  • | 表示 或
  • () 表示 分组 ,可以看作是一个字符
  • $1 表示 获取到分组后,得到的字符
  • +? 表示使用 惰性,不加问号表示贪婪
  • e.g 1.贪婪
    var pattern =/8(.*)8/;
    var str='8google8 8google8 8google8';
    console.log(str.replace(pattern,'$1'));
    结果:google8 8google8 8google 
    e.g 2.惰性
    var pattern =/8(.*?)8/;
    var str='8google8 8google8 8google8';
    console.log(str.replace(pattern,'$1'));
    结果:google 8google8 8google8 
    e.g 3.加了全局
    var pattern =/8(.*?)8/ig;
    var str='8google8 8google8 8google8';
    console.log(str.replace(pattern,'$1'));
    结果:google google google


  • exec() 返回数组:
  • /(\d+)([a-z])/ 表示 捕获性分组,所有的分组都捕获返回
  • /(\d+)(?:[a-z])/ 表示非捕获性分组,只要在不需要捕获返回的分组加上?:
  • e.g /goo(?=gle)/ 表示goo后面必须是gle才能返回goo
  • 7.常用的正则表达式
  • 邮政编码: /[1-9][0-9]{5}/
  • 空格: /\s/ig

函数Function

  • 声明方式1:普通函数声明方式:function box(){}
  • 声明方式2:使用变量声明方式:var box =function(){ return 1; }
  • 声明方式3:使用new的构造函数的方式:var box1=new Function('return 1');
  • 函数可以作为参数传递
  • 函数的内部属性:
  • e.g: 递归阶乘:
  • function box(num){
    if(num<=1){
    return 1;
    }else{
    return num*box(num-1);
    }
    }


  • 内部特殊对象:this :this引用的是函数数据以执行操作的对象,和C#和java中的this一样
  • window是一个对象,而是是js里面最大的对象,是最外围的对象,window表示全局
    window.color='红色的'; 和语句 var color='红色的';是一样的。
  • apply()和 call(): 可以实现冒充作用域,可以扩充作用域 ;e.g :
  • function box(num1,num2){
    return num1+num2;
    }
    
    //代替box执行 : apply()的作用
    function sum(num1,num2){
    return box.apply(this,[num1,num2]);
    }
    
    function sum1(num1,num2){
    return box.apply(this,arguments); //多个参数可以用 arguments
    }
    
    //call() 的作用 ,传递参数的方式不同于apply()
    function sum2(num1,num2){
    return box.call(this,num1,num2);
    }
    
    shu(sum2(11,11))

    ;

变量,作用域及内存

  • 1.变量:
  • javascript 变量是松散型的(不强制类):基本类型的值和引用类型的值。
  • 基本类型的值:保存在栈内存中的简单的数据段。 Underfined ,Null,Boolean,Number,String
  • 引用类型的值(指针来存取):保存在堆内存中的对象: Object
  • 基本类型复制的是值,而引用类型复制的是地址。
  • 传递参数:所有的函数的参数都是按值传递的,参数不会按引用类型传递的。
    但是在传递的时候,可以让引用类型作为参数传递,但是按值类型传递的!!
    js是没有按引用类型传递参数的。
  • 检测引用类型:instanseof :可以检测对象还可以检测类型(Object,Array等)
  • 检测基本类型:typeof 和 typeOf()
  • 2.作用域
  • 执行环境定义了变量或函数有权访问的其他数据。最大的执行环境为window.
  • 全局变量和全局函数的最外围,属于window的属性和方法。
  • 通过传参,页数局部变量的使用
  • 每个函数被调用的时候都会创建自己的执行环境,没有块级作用域的。e.g:
    if(true){ //这里的花括号没有作用域的,还有 for 
    var bax='yuan';
    }
    console.log(bax)

    ;
  • 如果在函数体内声明的变量,有var 声明,属于函数体内的,全局声明的话,是全局变量。
  • 3.内存问题
  • 它会自行管理内存分配及无用的内存的回收!
  • 最常用的垃圾收集方式是标记清除,是周期性运行的
  • 最简单的是:如果你不使用了,对其赋值为null,适合于大多数全局变量

基本包装类型

  • Boolean ,String , Number 是基本类型,但是也是特殊的引用类型。因为可以调用系统内置的方法;
  • e.g substring()的使用
  • Number的 静态属性
  • e.g Number.MAX_VALUE 等
  • e.g 内定方法:toString();toLocaleString();toFixed(2 小数点保留位数);等
  • String 类型包含三个属性和大量内置方法:
  • 三个属性:length , constructor ,prototype
  • 字符方法:charAt(n) ,charCodeAt(n) 返回ASCII码
  • 字符串操作方法:
    concat(str) 将所有的字符串进行拼装
    slice(n,m) 返回字符串n到m之间的内容
    substring(n,m) 同上
    substr(n,m) 从第n个开始,选m个字符
  • 字符串位置方法:indexOf(str,n) , lastindexOf(str,n)
  • 大小写转化:toLowerCase() 转换为小写; toUpperCase() 转换为大写:
  • 字符串模式匹配方法:match(pattern); replace(pattern,str);search();split(pattern);
  • 其他方法:localeCompare() 比较两个字符串
  • 还有html方法,自查

内置对象

  • Gloal对象和Math对象
  • Gloal对象:这个一个特别的对象,这个对象是不存在的。
  • URI编码:encodeURI() :只编码中文和encodeURIComponent()编码字符和中文
  • URI解码:decodeURI() 和 decodeURIComponent()
  • eval() : 字符串解析器,可以当作javascript的解析器。可以执行javascript代码
  • e.g eval('alert(123);');
  • Math对象:
    属性有:Math.PI ,还有平方根等
  • 方法有:Math.min(); Math.max(); Math.ceil();向上取入 Math.floor();向下取入
  • Math.random();随机数 : e.g 获得1~10的随机数:
  • Math.floor(Math.random()*10+1)


你可能感兴趣的:(JavaScript-基本知识(2))