05 this 在不同环境下的指向 和正则
1.this
2.正则
-------------------------------------------
1.this
当前 事件源
this 是 关键字 指的是调用函数的那个对象(指向函数的拥有者)
$("this").css('color','#f60').siblings().css('color','#333');
-------------------------------------------
(1)在函数中引用!!!!!!
var x=1;
function test(){
this.x;
}
console.log(x);
1
--------
var x=1;
function test(){
this.x;
}
test();
console.log(x);
1
--------
var x=1;
function test(){
this.x = 0;
}
test();
console.log(x);
0
--------
var x=1;
function test(){
this.x = 0;
}
function test1(){
this.x = 2;
}
test();
test1();
console.log(x);
2 //test1 后面调用
--------
var x=1;
function test(){
this.x = 0;
}
function test1(){
this.x = 2;
}
test1();
test();
console.log(x);
0 //test 后面调用
在函数里面 如果函数没有声明 那么 指向的是window 的变量 如果声明了 那么就是以函数为范围。
--------
--------------------------------
(2)对象调用 !!!!!!
var o = {};
o.a = 1;
o.action = function(){
return this.a;
}
console.log(o.action());
1
//this 指的是当前对象
--------
//对象中调用外部函数 call() apply() 在一个对象中调用另外一个对象
//call(this,name,age) 如果什么都没有传 那么默认就是 window !!!!!!
//apply(this,[数组]) (在一个对象中调用另外一个对象) !!!!!!!!!!!!!!!!!!
function test(){
return this.a;//this 指向o o是这个函数的拥有者
}
var o = {};//对象
o.a = 1;
o.action = test;
console.log(o.action());
//1
PS:this 始终指向 函数的拥有者(调用者) 在这里 函数拥有者是 o 这个对象 所以指向的就是o
------------------------------------------------
//改变this 的指向
var a='111';
function test(){
return this.a;//这里指向的是window
}
var o = {};
o.a = 1;
o.b = test;
console.log(o.b.call());
//call() 在一个对象中调用另一个对象 这里指向 window
//111
PS: call() 什么都没有穿 this 默认是指向window
要是想指向 o这个对象 那么 .call(o); 这样就可以了
-------------------------------------
在call 传入指向后
var a='111';
function test(){
return this.a;//这里指向的是window
}
var o = {};
o.a = 1;
o.b = test;
console.log(o.b.call(o));
//call() 在一个对象中调用另一个对象 这里this指向 o 这个对象
//1
---------------------------
(3)构造函数调用 !!!!!!
function Fun(name,age){
this.name = name;//this 指向的是实例化的对象
this.age = name;
}
var fun = new Fun('shaozhu',22);
var fun2 = new Fun('qq',32);
console.log(fun2.name);
//PS this 在构造函数中 指向的是实例化的对象
---------------------------
多记住经典例子
this指向!!!!!!!!!!!!
//分享一个面试题目
var number = 1;
var obj = {
number:2,
showNumber:function(){
this.number = 3;
(function(){
console.log(this.number);//自调函数 属于window 1
})();
console.log(this.number);//3 这里是当前函数
}
};
obj.showNumber();
1
3
PS:this 在自调用 this 指向的是window
------------------------------------
正则!!!!!!!!!!!
用的最得的就是 校验! 表单的校验
var filter = /^[a-z]at$/;//方法一
var value = 'cat';
if(filter.test(value)){
console.log('ok');
}else{
console.log('no');
}
-----------------
var filter2 = new RegExp('^[a-z]at$');//方法二
var value = 'cat';
if(filter2.test(value)){
console.log('ok');
}else{
console.log('no');
}
---------------------------------------------------
\b 和 \B
\b 匹配一个单词的边界
表达式:\bhi\b
能匹配:hi this
\B
匹配一个单词没有边界的
表达式:\Bhi\B
能配置:thiis
hi
-----------------
\d 和 \D
\d 匹配一个数组字符
能配置 0-9
\D 匹配一个非数字
除了0-9 其它的都可以
-----------------
\w 和 \W
\w 匹配字母/数字/下划线
\W 匹配除 字母/数字/下划线
-----------------
^ 和 $
'^' 表示字符串的开头
$ 表示字符串的结束
^shaozhu$
shaozhu
只能匹配这一个
-----------------
[]
方括号"[]" 匹配指定一堆字符中的一个
^[a-z]at$
//a-z 的一个开头 然后 at 结尾
能匹配的字符串(举例)
cat mat zat
----------------
如果大小写都想匹配 那么
^[a-zA-Z]at$
//a-z A-Z 的一个开头 然后 at 结尾
能匹配的字符串(举例)
Cat mat Zat zat
---------
^[aeiou]at$
能匹配的字符串(举例)
aat aet iet oat uat
----------------------------------
"[^]" 这个是 不匹配这个集合任何的一个字符 有点取反的意思
例子:
^[^xyz]at$
不能匹配的字符串(举例) 注意这里的不能的!!!
xat yat zat
----------------------------------
重复符号 “+”
+ 表示 前一模式 可以被重复1此 或多次
表达式 ^go+gle$
o 可以被重复一次或者N次(最少一次 最少有一个o)
gooogle
----------------------------------
表达式
^g[aeiou]+gle$
能匹配的字符串(举例)
gagle
gegle
geagle
geaeeaioueagle
----------------------------------
"*" 表示前一模式可以被重复0次或n次
^go*gle$ //g 开通 o 可以被重复0次或n次 gle结尾
ggle
gooooooogle
----------------------------------
"?" 表示前一模式 可以被匹配0次或者一次
^go?gel$ g开头 中间 o 匹配0次或者一次 gle结尾
ggle gogle
----------------------------------
+ 可以被重复1此 或多次
* 重复0次或n次
? 匹配0次或者一次
----------------------------------
重复符号 {x}
{x}表示 前一模式 模式可以被重复x次
^go{2}gle$
能匹配的字符串 只能重复2次 必须重复2次
----------------------------------
{x,y}
表示 前一模式可以被重复x到y次
表达式 ^go{2,4}gle$
g开头 o必须重复 2-4次 gle结尾
能匹配的只有这三个!!!
gooogle
goooogle
----------------------------------
{x.}
前一个模式 至少被重复 x次 贪婪模式
----------------------------------
子表达式 ‘()’
可以指定一堆字符来匹配一个模式。
表达式: ^(very )*lange$
能匹配的字符串(举例)
large
very very lange
very lange
very very very very lange
---------------------------------
| 分支 用来指定指定几个规则只要匹配一个规则即可成匹配
表达式: ^com$|^org|^net$
只能匹配 com org net
^com$|
^org|
^net$
---------------------------------
转义符号 \
如果要匹配 [ ' ^ + | ' 等有特殊符号的字符
可以用 "\" 做转义
^1\*\(2\+3\)=6$
只能匹配 1*(2+3)=6
---------------------------------
其它
^[a-zA-Z]+$ //由26个字母组成的字符串
^[A-1]+$ //由26个英文字母组成的字符串
^[a-z]+$ //由26个小写字母组成的字符串
^[A-Za-z0-9]+$ //由 数字 26个英文字母 组成的字符串
^\\w+$ //由数字 26个英文字母或者下划线组成的字符串
[\u4e00-\u9fa5] 汉字中的任意一个汉字