回顾:上篇学习了 基本类型
这篇将学习:正则,函数 作用域
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)