1、正则
创建对象语法:
语法 1
re = /pattern/[flags]
语法 2
re = new RegExp("pattern",["flags"])
#说明
flags表示模式修正符:g(全文匹配),i(不区分大小写),m(多行匹配)
常用方法:
#字符串中运行查找,并返回包含该查找结果的一个数组
rgExp.exec(str)
#返回bool,表示是否匹配成功
rgexp.test(str)
#将匹配的内容以数组形式返回
stringObj.match(rgExp)
#正则匹配并替换
stringObj.replace(rgExp, replaceText)
#返回匹配的子串首字符下标
stringObj.search(rgExp)
元字符:
. 匹配除换行意外的任意字符
\ 转义符(可转义特殊字符)
^ 匹配开始位置 /^test/ "test"
$ 匹配结束位置 /abc$/ "abc"
? 匹配前一个字符0次或者1次 /bo?/ "bo"
* 匹配前一个字符0次或者多次 /bo*/ "boooo"
+ 匹配前一个字符1次或者多次
{n} 匹配前一个字符n次
{n,} 匹配前一个字符至少n次
{n,m} 匹配前一个字符n到m次
() 分组捕获 n: 1~99 \n
(?:) 分组不捕获
x|y 表示或者 /hello|world/ "world"
[] 单字符选择[abcde] /hy[abc]/ "hyb"
[^] ^在选择符内部表示排除 /tt[^abc]/ "ttk"
[-] [A-Za-z_]表示匹配小写字母a-z
\d 匹配0-9之间的数
\w [A-Za-z0-9_]
\s 空白字符
\t 制表符
案例:
1、通过字符串对象的match方法实现全文匹配,返回匹配数组
let str = "hello world This is ghis best!";
let rgx = /[gt]his/ig;
let sts = str.match(rgx);
二、函数
1、定义
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
2、函数的声明和调用
#声明:
function funName([n1, [n2...]]) { //n1,n2 形参,用于方法体中的占位
//函数体(功能代码)
}
#调用:与变量调用区分需要增加参数列表,如果没有参数则设置为()
funName();
funName(实参);
***函数调用分为正向调用和
反向调用(回调), 在函数内调用函数外的其他函数。
函数被调用后,内部的数据所占用的空间会立即释放。
3、return关键字
注意:
1、只能应用在函数或方法内。
2、如果return后面有值,则将值返回给调用者,并终止函数的执行。
3、如果只有return,则表示终止函数的执行。
4、变量的作用域
1、局部变量
定义在函数或方法内部的变量(参数也是局部变量)。
2、全局变量
定义在函数或方法外的变量。
如果函数中的变量没有使用关键字,也表示全局变量。
5、var,let,const
var和let的区别:
1、var关键字可以重复定义相同的变量.let不允许。
2、var有变量提升的效果,而let没有。
变量是否在定义之前可以被使用: true(提升),false(未提升)
***变量一定是先定义再使用。
变量的定义 = 声明一个变量+初始化(赋初始值)
let name = "zhangsan";
const:表示定义当前变量为常量(一旦被定义就不能修改)
6、匿名函数
定义:
没有名字的函数
写法:
function(){
...
}
用法:
1、将匿名函数赋值给变量,以变量名充当函数名
2、如果函数只使用一次,则可以直接执行(自执行函数)
3、作为回调函数使用
案例:
案例1:匿名函数赋值给变量,通过变量调用函数
let test = function(){
alert(111);
};
test();
案例2:匿名函数,自执行函数
(function(){
alert(111);
})()
案例3:回调函数
function test1(fun) {
fun();
}
test1(function() {
alert(222);
})
7、闭包
定义:
闭包,相当于构建了函数内部与外部沟通的桥梁。
特点:
出现函数嵌套,实现将函数内的局部变量反映到外部使用。
在闭包中,外层函数被调用后不会立即释放函数内定义的变量空间。
案例:
function test() {
//如何将函数内的局部变量映射到外部访问
var a = 10;
return function(){
return a;
};
}
//test()被调用后,函数执行完成了没? 没有---- 因为内部函数被外部全局变量引用
let innerFunc = test(); //此时的a,空间释放了没?
let inNum = innerFunc();
alert(inNum);
三、运算符
1、算术运算
++ 自增运算
如果有赋值,运算符在前表示先自增再赋值,在后面表示先赋值再自增
let i = 0;
let b = ++i; //先自增再赋值
let b = i++; //先赋值再自增
-- 自减运算,运算方式与自增相同
一元运算符:
- 负号 -9
~ 按位取反(将数据转为二进制原码,再转为补码
做按位取反(1-0,0-1包含符号位))
当前数+1 取反
! 非 !true == false
* 乘法
/ 除
% 取余 9%5 == 4
+ 加法
- 减法
2、关系运算符(结果是布尔值)
< 小于 9<15 == true 9>15 == false
<= 小于等于
> >= instanceof
== 相等(值相等)
!= 不等于
=== 全等(值相等,类型相等)
!== 不全等
3、位运算符
如何把一个整数转换为二进制数?
11:
00000000 00000000 00000000 00001011
<< //位左移 11<<1 == 22
00000000 00000000 00000000 00010110
>> //位右移 11>>2 ==
00000000 00000000 00000000 00000010
>>> //包含符号位一并右移
& //按位与-- 相同位上都为1的才为1,否则为0
| //只要有一个为1则为1
^ //按位异或(有且只有一个为1,才为1)
正数的原反补码相同
原码的反码+1 == 补码
//反码 原码除符号位以外1-0,0-1
二进制: 逢二进一 0 1 10
十进制: 逢十进一 0 1 2... 9 10
计算机底层是由二进制数进行计算:bit(位)
1Byte = 8bit
1GB = 1024MB
1MB = 1024KB
1KB = 1024Byte
1Byte = 8bit
4、逻辑运算符
&& 逻辑与:左右都为真则为真,否则为假
|| 逻辑或:只要有一个为真就为真,否则为假
! 取反,NOT
在js中非0为真,字符串非空为真,非false为真, null为假, undefined为假。
5、三元运算符
(表达式)?(结果1):(结果2) 如果表达式为true则返回结果1,否则返回结果2
6、赋值运算符
= 赋值
+=
-=
...
四、流程控控制
1、顺序
从上至下,从左至右依次解析执行。
2、判断分支
1、if...else
例如:
if(条件1){
代码1
} else if(条件2) {
代码2
}
...
else {
默认执行
}
2、switch...case
例如:
switch (expression) {
case exp1:
代码1;
break;
case exp1:
代码1;
break;
...
default:
默认执行(兜底)
}
3、循环
1.for循环(通用循环)
for(初始化;条件判断;步长设置) {
循环体
}
2、while
while(条件判断) {
循环体
}
3、do...while
do{
循环体
} while (条件判断);
4、for...in
#说明:此处变量接收的是下标
for(变量 in 集合) {
循环体
}
5、for...of
#说明:此处的变量接收的是值
for(变量 of 集合) {
循环体
}