ECMAScript入门
ECMAScript 概述
ECMAScript 是定义脚本语言的规范, 而 JavaScript 是遵循 ECMAScript 规范实现的一种编程语言.
ECMAScript 好比是一本书的目录, 而 JavaScript 是这本书的具体内容.
ES6 和 JavaScript 有什么区别?
ES6(ECMAScript 2015)是 ECMAScript 规范的第六个版本, 而 JavaScript 是基于 ECMAScript 规范实现的编程语言.
ES6 可以被看作是 JavaScript 的一个重要的版本更新.
变量和常量
变量(Variable)
是用于存储数据的名称(标识符), 变量可以是任何类型, 如 “数值、字符串” 等.
1 | let str = "字符串" |
变量可以重新赋值
ES6 不区分整型和浮点型, 所有数字都使用
number类型
来表示
常量(Constant)
是一个固定的值, 在程序运行中常量的值保持不变
1 | const PI = 3.14 |
如何选择使用 let 或 const
- 默认使用 const.
- 当其需求为可变时, 使用 let 进行可变声明.
数据类型
字符串 string
字符串类型用于存储字符序列
常用方法
length
字符串长度toLowerCase
/toUpperCase
转小写/转大写字符串[索引]
返回索引处的字符[...字符串]
字符串转为字符数组parseInt("1234")
字符串转 intreplaceALL("目标字符串","替换成的字符串")
替换全部字符串替换replacece("目标字符串","替换成的字符串")
替换一个字符串替换
模板字符串
1 | `姓名:${this.name} 年龄:${this.age}` |
数值 number
用于存储数字, 可以表示整数、浮点数
布尔类型 boolean
布尔类型只能取两个值,true(真) 和 false(假)
函数 function
函数是一段可重复执行的代码块,可以接收输入参数并返回一个值或执行某些操作.
1 | // 定义一个计算两数之和的函数 |
数组 array
数组是一种有序集合, 可以包含不同类型的元素,并且数组的长度是可变的.
1 | let str = ["a","b","c","b"] //定义了一个包含4个字符串的数组 |
常用方法
push(元素1,元素2)
向数组末尾添加一个或多个元素(用逗号隔开元素), 并返回修改后数组的长度unshift(元素1,元素2)
向数组开头添加一个或多个元素, 并返回修改后数组的长度pop()
删除数组最后一个元素, 并返回被删除元素删shift()
除数组中第一个元素, 并返回被删除元素splice(要删除元素的索引位置, 要删除的元素数量)
删除元素, 并返回包含被删除元素的数组reverse()
反转数组中元素的顺序sort()
数组中的元素按照首字母顺序排序
使用 sort()
排序数组 [5,20,13,1,4] ,由于只比较首字母的缘故, 会得到 [1,13,20,4,5] 的结果.
配合比较函数 (a,b) => a-b
, 实现数字排序:
1 | arr.sort((a,b) => a-b) |
filter()
筛选符合条件的元素
例如, 筛选值大于 12 的元素
1 | arr.filter((n) => n>12) |
数组的 for 循环遍历
1 | for (let item of arr){ |
1 | arr.forEach((value,index) => {console.log(value,index)}) |
set
Set 是一种特殊的数据结构, 用于存储无序且唯一的值的集合.
1 | let number = new Set([1, 2, 3, 4, 5]) //定义了一个包含5个"不重复"的整数的集合 |
常用方法
add('元素')
向 Set 集合中添加新的元素delete('元素')
从 Set 集合中删除元素clear()
清空 Set 集合has('元素')
检查 Set 集合是否包含指定元素size
获取 Set 集合的大小Array.from(set集合)
将 Set 集合 转换为 数组使用扩展运算符
...
将 Set 集合 转换为 数组
1 | let arr = [...Set集合] |
扩展运算符可用于展开可迭代对象(如数组、字符串等)
例如
1 | let str = '一个字符串' |
- 将 数组 转换为 Set 集合
1 | let numberArr = [1, 2, 3, 3, 2, 1] |
利用 Set 集合 特性, 可实现数组去重
Set 集合的 for 循环遍历
1 | for (let item of set){ |
1 | arr.forEach((value,index) => {console.log(value,index)}) |
对象 object
对象是一种复合的数据类型, 可以通过键值对的方式存储多个值.
1 | //定义了一个包含姓名、年龄和体重的对象 |
常用方法
- 向对象中添加新的属性
对象.新属性 = 值
1 | boy.height = 175 |
在对象中, 每个键都是唯一的, 当使用相同的键再次赋值时, 会替换原来键对应的值.
删除属性
delete 对象.属性
清空对象
对象 = {}
检查对象是否包含指定属性
"属性" in 对象
获取对象的属性数量
Object.keys(person).length
1 | let person = { |
除了 Object.keys(数组)
取对象的属性名, 输出为数组, 还有:
1 | console.log(Object.values(对象)) // 取对象的值输出为数组 |
- 将对象转换为数组
Object.entries(对象)
对象的 for 循环遍历
1 | for (let key in 对象) { |
1 | Object.enties(对象).forEach( |
map
map 是一种特殊的数据结构,用于存储键值对的有序集合.
1 | //定义了一个包含姓名、年龄和体重的map |
Map 相对于对象提供了更灵活、有序、高效的键值对存储和操作方式,当需要在大量键值对中快速查找或删除特定键值对时, Map 比对象更高效
Map 提供了一些便捷的方法来操作键值对, 如:get()
、set()
、delete()
Map 提供了一些便捷的迭代方法, 如:forEach()
、keys()
、values()
、entries()
常用方法
- 向 Map 集合中添加新的元素
set('键','键值')
在 Map 集合中, 每个键都是唯一的, 当使用相同的键再次调用
set()
方法时, 会替换原来键对应的值.
删除元素
delete('元素')
检查 Map 集合是否包含指定元素
has('元素')
获取 Map 集合的大小
size()
clear()
清空 Map 集合将 Map 集合转换为数组
Array.from(Map集合)
使用扩展运算符
...
将 Map 集合 转换为 数组
1 | let arr = [...Map集合] |
map 集合的 for 循环遍历
[key, value]
就是一种解构语法, 解构可以从数组或对象中提取值并赋给变量.
将 Map 集合中的键值对解构为 key 和 value 两个变量.
1 | for (let [key, value] of person) { |
1 | person.forEach( |
类 class
类是一种蓝图或模板,用于创建具有相同属性和方法的对象.
命名时 类 的首字母大写.
1 | class Person { |
私有属性
私有属性是指仅在类内部可访问和操作的属性, 外部无法直接访问和修改.
1 | class Person{ |
定义私有属性时, 在变量前添加 #
1 | get web(){ |
继承
继承 extends .被继承的类称为 父类.继承的类称为 子类.
子类不但能调用父类的方法, 而且还能拥有自己的方法.
子类在调用时, 使用 super(父类属性)
调用父类属性.
例如
1 | // 定义一个父类 |
解构
可以从数组或对象中提取值并赋给变量.
数组解构
将数组 [1,2]
的值分别赋给 x
,y
1 | let [x, y] = [1 ,2] |
只需要将想赋值的变量放到对应的位置上即可.
同理的, 将数组 [1,2,3]
最后一个值赋给变量 c
:
1 | let [ , , c] = [1,2,3] |
配合使用扩展运算符...
将其 转换为 数组 , 然后赋给变量.
例如:
1 | let [A, ...B] = [1, 2, 3, 4, 5, 6] |
这样, A
的值为 1
. B
的值为 数组 [2,3,4,5,6]
注意: 扩展运算符
...
解构必须放到最后, 否则会报错.
反过来, 两个变量解构一个值时, 只会有第一个变量得到这个值.
例如:
1 | let [e,f] = [100] // e = 100, f = undefined |
这时我们可以给予变量默认值.
1 | let [e,f = 200] = [100] // e = 100, f = 200 |
要注意的是, 给予默认值的优先级较低, 若通过解构再赋值, 默认值会被覆盖.
1 | let [e= 200,f ] = [100] // e = 100, f = undefined |
快速交换变量的值
1 | let X = 10,Y = 2; |
对象解构
定义一个对象
1 | let person = { |
解构对象, 获取属性值
1 | const {name,gender,age} = person |
设置默认值, 也能给不存在的属性赋默认值.
1 | let {name = "李四"} = person |
重命名解构值
1 | let {name:userName } = person // 将 name 重命名为 userName |
扩展运算符...
将其 转换为 对象
1 | const {name,...rest} = person |
承诺 Promise
异步操作 是指在程序执行过程中, 某个操作不会立即返回结果, 而是需要一段时间的等待.
例如用户登陆时, 需要一段等待的时间, 不会立即返回结果.
Promise 对象有三种状态:
- pending (进行中) - 初始状态
- fulfilled (已成功)
- rejected (已失败)
当创建一个 Promise 对象时, 它的初始状态为 pending
, 表示异步执行还未完成.
当异步执行成功时, 会调用 resolve 函数把 Promise 对象的状态改变为 fulfilled
, 可通过 then 方法来获取异步操作的结果.
当异步执行异常时, 会调用 reject 函数把 Promise 对象的状态更改为 rejected
, 可通过 catch 方法来处理错误.
结合三元运算, 例如:
1 | const myPromise = new Promise((resolve, reject) => { |
这里, resolve('已成功')
被调用时, 它会将字符串 '已成功'
设置为 Promise 的解析值.
但是, 这个值并不会立即被输出到控制台.
输出发生在你使用 .then() 方法时.
1 | myPromise |
.catch()
方法来添加失败情况的回调函数.
使用 .finally
, 无论是成功还是失败都会执行, 可用于输出日志.
Fetch
fetch 是基于 Promise 的 api, 它可以发送 http 请求并接收服务器返回的响应数据
fetch 返回的是一个 Promise 对象
API(Application Programming Interface) 中文通常翻译为
"应用程序编程接口"
.API 是一组预定义的函数, 协议和工具. 用于构建软件应用.
模块化开发
不同的模块之间可以通过使用 export
关键字将代码导出为模块,其他模块可以使用 import
关键字导入该模块.
使用 export
导出多个变量或函数:
1 | //index.js |
使用 import
从 index.js 文件中导入 num,name,eat 变量/函数,
使用 as
重定义别名
1 | import { num as age, name, eat } from './index.js' |
使用 default
将一个对象作为整体导出, 导出的对象包含 num,name,eat 三个属性
1 | //index.js |
1 | <script type="module"> // 添加 type="module" |
另外, * as
与 default
功能上等价.
- 标题: ECMAScript入门
- 作者: Wreckloud_雲之残骸
- 此记初现于 : 2024-04-19 17:48:52
- 此记变迁于 : 2024-11-22 13:13:06
- 链接: https://www.wreckloud.com/2024/04/19/猎识印记-领域/软件工程/前端/ECMAScript入门/
- 版权声明: 本幽影记采用 CC BY-NC-SA 4.0 进行许可。