JavaScript之ECMAScript(三)

四、ECMAScript基础

(一)执行函数

1. 延迟执行函数

使用setTimeout() 函数进行调用,用于在指定的延迟时间后执行一次函数。
调用者:window
参数:匿名函数 / 回调函数 / 代码块 
返回值:数字
功能:可以在延迟指定时间内执行匿名函数(仅仅执行一次)

2. 间歇性执行函数

使用 setInterval() 函数进行调用,用于每隔指定的时间间隔执行一次函数。
调用者:window
参数:匿名函数 / 回调函数 / 代码块
返回值:数字/定时器
功能:每隔一段时间执行一次匿名函数 / 回调函数

(二)对象及使用

1. 对象的定义

对象是指以键值对形式出现的数据集合。如: {key1: value, key2: value,....}

通过 { } 直接定义和通过构造函数 new Object() 定义。

2. 对象与数组的区别

对象是无序的。以键-值对的形式存在,通过 obj. name 或 obj ['name'] 访问属性。

数组是有序的。元素按索引顺序排列,通过下标索引值访问属性。如:arrp[0] 。

3. 面向对象和面向过程的区别

3.1 面向对象

主要关注的是 “做什么” (What to do)。程序被分解为一系列相互关联的对象,每个对象都有自己的数据和行为。采用构造函数创建对象,数据存放在对象中。

3.2 面向过程

主要关注的是 “如何做” (How to do)。程序被分解为一系列的步骤或过程,每个步骤都是一个函数或子程序。

(三)面向对象的三种模式

1. 直接量

使用花括号 {} 创建对象字面量。直接在对象字面量中定义对象的属性和方法。优点是简洁易用,适合创建简单的对象。下述代码如果需要改变属性,要不断的重复写这个代码。则代码不适合使用多个相同属性的对象。

2. 工厂模式

使用函数来封装创建对象的细节,生成具有相同属性和方法的对象。函数内部使用字面量的方式创建对象,然后返回该对象。优点是可以创建多个相似的对象,且可以灵活地修改对象的属性和方法。

3. 构造函数

3.1 构造函数定义

构造函数是一种用于构建对象的代码块。由 new 操作符调用以创建空对象,并且调用函数的时候把这个对象返回。

3.2 this 的指向
3.2.1 全局环境中

在全局环境下, this 就是 window 。

3.2.2 普通函数作用域中

在普通函数作用域中,this 就是 window 。

3.2.3 延迟执行定时器函数中 

在延迟执行定时器函数作用域中 ,this 是 window。

3.2.4  对象函数作用域中

在 obj 对象的 foo 函数作用域中,this 就 obj 对象。

3.2.5 构造函数中

构造函数中,因为 app 由 New 调用,所以 this 是 a 。

3.2.6 原型函数

原型函数,this是实例对象

3.3 改变this的指向方法

3.3.1 apply 方法

语法: function.apply(newThis, [arg1, arg2, ...])
作用: 使用 apply() 方法可以调用函数,并且指定 this 的值。它接受一个数组作为函数的参数。

3.3.2 call 方法

语法: function.call(newThis, arg1, arg2, ...)
作用: 使用 call() 方法可以调用函数,并且指定 this 的值。

3.3.3 bind 方法

语法: function.bind(newThis)(arg1, arg2, ...)
作用: 使用 bind() 方法可以创建一个新的函数,这个函数的 this 值被绑定到提供的值。

3.4 构造函数模式

使用函数作为构造器,通过 new 关键字来创建对象实例。构造函数内部使用 this 关键字来定义对象的属性和方法。优点是可以创建具有相同属性和方法的对象,且继承机制更加灵活。

(四)原型

1. 原型对象

原型是每一个构造函数都有 prototype 属性。这个属性的类型是 'object', 所以也叫做原型对象。我们可以把那些不变的方法,直接定义在原型对象上,可以使所有对象的实例共享这些方法。

2. constructor 属性

该属性指向该原型对象的构造函数。

3. 原型链

原型链是指 __proto__ 所形成的链式结构。
以数组构造函数为例 :
构造函数: Array
原型:  Array.prototype  
实例对象: var arr = new Array()
原型链: arr.__proto__.__proto__.__proto__

(五)面向对象的三大特性

1. 封装

封装是把客观存在的事物添加到对象里面。它使得对象的内部细节不被外部直接访问,从而隐藏了对象的实现细节。

2. 继承

继承是一个对象直接使用另一个对象的属性和方法的机制。子类(派生类)继承父类(基类)的属性和方法,并可以添加新的属性和方法或重写父类的属性和方法。

3. 多态

多态是一个对象 / 函数在不同的应用场景下有不同的表现形式,多态允许子类型重写父类型的方法,从而实现不同的行为。

(六)浅拷贝和深拷贝

1. 浅拷贝

浅拷贝是指在复制数据的过程中,不考虑数据的类型,不管是基本类型,还是引用类型,会全部复制。

2. 深拷贝

深拷贝是指在复制数据的过程中,会对数据的类型进行判断,如果是基本数据类型,那就直接复制(赋值);如果是引用类型的数据,那就执行递归,继续判断数据的类型,继续深层次的复制,直到复制的数据类型为基本类型为止,终止递归。

(七)数组排序

1. 升序

使用 sort(){ } 方法,具体代码如下

2. 降序

3. 乱序

4. 冒泡排序

5. 递归排序

(八)正则表达式

1. 正则表达式的定义

正则表达式是用于描述字符串匹配模式的一种形式化语言。主要定义方法有两种:

使用 / / 直接定义、使用 new RegExp(/ /)定义

2. 正则表达式的方法

2.1 test() 方法

test()方法用于检测一个字符串是否匹配某个正则表达式模式。它返回一个布尔值,表示是否匹配。

2.2 exec() 方法

exec()方法用于在一个字符串中搜索匹配模式,并返回一个结果数组。如果没有找到任何匹配,它将返回 null。

2. 正则表达式的种类

2.1. 内部类
2.1.1 简单类

简单类 是允许字符串文本长度比正则格式的要多

2.1.2 预定义类

\d - 匹配任意数字字符,等同于[0-9]
\D - 匹配任意非数字字符,等同于[^0-9]
\w - 匹配任意字母数字字符(包括下划线),等同于[a-zA-Z0-9_]
\W - 匹配任意非字母数字字符,等同于[^a-zA-Z0-9_]
\s - 匹配任意空白字符,包括空格、制表符、换行符等
\S - 匹配任意非空白字符

2.1.3 范围类

[a-z] - 匹配任意小写字母
[A-Z] - 匹配任意大写字母
[0-9] - 匹配任意数字

2.1.4 组合类

[a-zA-Z] - 匹配任意字母(不区分大小写)
[a-z0-9] - 匹配任意小写字母或数字
[A-Za-z0-9_] - 匹配任意字母、数字或下划线
[^a-z] - 匹配任意非小写字母的字符
[^0-9] - 匹配任意非数字的字符
[-._] - 匹配减号、句点或下划线
[!@#$%^&*()] - 匹配常见的特殊字符

2.1.5 反向类

使用 ^ 符号,注意 ^ 是写在 [] 中才表示取反

2.2. 边界语法

^ - 匹配字符串的开头
$ - 匹配字符串的结尾

2.3. 量词

{n} 指定字符出现n次
{n, } 出现n次以上
{n,m}出现n~m次
+ 表示出现一次以上
?表示0次或者1次
* 可以表示0次或者n次

2.4. 其他

/正则表达式/g  表示匹配所有字符串中所有字符。
 /正则表达式/i  表示忽略字符串中字母的大小写。

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值