JavaScript学习笔记---函数和正则表达式

1.RegExp类型
(1)javascript通过RegExp类型来支持正则表达式
(2)正则表达式创建 :

var exp = /pattern/flags

pattern可以是简单或复杂正则表达式,可以包含字符类,限定符,分组,向前查找和反向引用,每个正则表达式可以带有一个或多个flag,来标明正则表达式的行为
(3)正则表达式的匹配模式有3个:
g:全局模式
i:不区分大小写模式
m:多行模式
(4)pattern中的所有元字符都必须转义,正则表达式中的元字符包括(|{^$|)?*+.]}
(5)RegExp实例属性
global:布尔值,表示是否设置了g标志
ignoreCase:布尔值,表示是否设置了i标志
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0开始
multiline:布尔值,表示是否设置了m标志
source:正则表达式的字符串表示,按照字面量形式而不是传入构造函数中的字符串模式返回。
(6)RegExp实例方法
exec():捕获组,接收一个参数,要应用模式的字符串,然后返回包含第一个匹配项信息的数组,或在没有匹配项时返回null。返回的数组是Array的实例,但是包含两个属性:index(表示匹配项在字符串中的位置),input(表示应用正则表达式的字符串),在数组中,第一项与整个模式匹配的字符串,其他项是与模式中捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)
test():接收一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false.
RegExp实例继承的toLocaleString()和toString()方法都会返回正则表达式的字面量,与创建正则表达式无关。
正则表达式的valueOf()方法返回正则表达式本身。
(7)RegExp构造函数属性
可以通过两种属性名进行访问,长属性和短属性

input [$_	]---	最近一次要匹配的字符串---返回原始字符串
lastMatch [$&]---最近一次的匹配项---返回最近一次与整个正则表达式匹配的字符串
lastParen [$+]---最近一次匹配的捕获组---返回最近一次匹配的捕获组
leftContext [$`]---input字符串中LastMatch之前的文本	返回了单词short之前的字符串,rightContext属性返回了short之后的字符串
multiline [$*]---布尔值,表示是否所有表达式都使用多行模式
rightContext [$']---input字符串中lastMatch之后的文本。

(8)模式的局限性
匹配字符串开始和结尾
向后查找
并集和交集类原子组unicode支持
命名的捕获组
单行和无间隔的匹配模式
条件匹配
正则表达式注释
2.Function类型
(1)每个函数都是Function类型的实例,函数是对象,函数名实际是一个指向函数对象的指针,不会与某个函数绑定。
(2)第一种函数定义方式:

    <script type="text/javascript">
			function sum(num1,num2){
				return num1 + num2;
			}
			var total = sum(1,3);
			alert(total);
	</script>

(3)第二种定义方式:

   			var sum = function(num1,num2){
					return num1 + num2;
				};

当使用函数表达式定义函数的时候,没有必要使用函数名,通过该变量可以引用函数,函数末尾有一个分号。
(3)最后一种定义函数的方式是使用Function构造函数。Function构造函数可以接收任意数量的参数,但是最后一个参数始终都会被看成是函数体,前面的参数则枚举出新函数的参数。(这种方法不推荐,因为会解析两次,第一次是常规javascript解析,第二次是解析传入的字符串)
比如:

var sum = new Function("num1","num2","return num1 + num2");

(4)javascript函数没有重载
如果在javascript中存在重名函数,那么当函数被调用的时候,一定是调用最后一个同名函数,上面的函数全部会被覆盖掉。

 <script type="text/javascript">
			function sum(num1,num2){//被下面的函数覆盖掉了
				return num1 + num2 + 100;
			}
			function sum(num1,num2){
				return num1 + num2 + 300;
			}
			
			var totalSum = sum(100,200);
			alert(totalSum);//600
		</script>
    <script type="text/javascript">
			var sum = function(num){
				return num + 100;
			};
			sum = function(num){
				return num + 200;
			};
			var result = sum(100);
			alert(result);
	</script>

(5)函数声明和函数表达式
解析器在向执行环境中加载数据时,对函数的声明和函数表达式是不一样的,解析器会率先读取函数声明,并使其在执行任何代码之前可用
函数表达式必须等到解析器执行到他所在的代码行,才会真正被执行。
(A)作为值得函数
javascript中函数名本身就是变量,所以函数可以当做值来使用,可把一个函数当做参数传递给另外一个函数,也可以把一个函数当做另外一个函数的结果返回。
如果要访问函数的指针而不去执行函数的话,就必须去掉函数名后面的那对圆括号。
(B)函数内部属性
在函数的内部有两个特殊对象:arguments和this。arguments是一个类数组对象,包含传入函数中的所有参数,虽然arguments主要用途是保存函数参数,但是这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。
this引用的是函数已执行的的环境对象或者是this值。

<script type="text/javascript">
			window.color = "red";
			var o = {color:"blue"};
			function sayColor(){
				alert(this.color);
			}
			sayColor();//red
			o.sayColor = sayColor;
			o.sayColor();//blue
	</script>

函数的名字仅仅是一个包含指针的变量,即是在不同环境中执行,全局的sayColor()指向的仍然是同一个函数。
函数对象的属性caller:这个属性中保存着调用当前函数的引用,如果是在 全局作用域中调用当前的函数,他的值就会是null。
(C)函数属性和方法
每个函数都包含两个属性:length和prototype,length属性表示函数希望接收的命令参数的个数。
每个函数都包含两个非继承而来的方法:用途都在特定作用域中调用函数,实际等于设置函数体内的this对象值。
apply():接收两个参数,一个是在其中运行函数的作用域,另一个是参数数组,其中第二个参数可以是Array的实例,也可以是arguments对象,
call():接收两个参数,第一个参数是this值没有变化,变化的是其余参数都是直接传递给函数,换句话就是在使用call()时,传递给函数的参数必须逐个列出来。
在严格模式下,未指定环境对象而调用函数,this值不会转为window,除非明确把函数添加到某个对象或调用apply()或call(),否则this值是undefined

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值