JavaScript基础语法(二)

时间:2026-06-05 15:36:12 来源:幸福记忆 作者:远方 阅读:94

一、js的内置对象

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 集合) {
   循环体
}