一、什么是ES6
JavaScript 是一门弱类型编程语言,声明变量时比较不严谨,简称JS。ES6(ECMAScript 2015)的新特性极大提升了JavaScript的开发效率、可执行性和可维护性,解决了许多之前版本中存在的问题,并为现代应用的开发提供了更多工具。
二、新特性
1. 声明变量
ES5使用var声明,比较自由,ES6使用let声明,比较严谨、合理。
优点:1、不允许先声明后使用。2、不允许重复声明变量。3、可以产生块级作用域。
使用let 关键字声明变量,它是 JavaScript 中用于声明变量的一种方式。与 var 关键字不同,let 具有块级作用域,这意味着使用 let 声明的变量只能在其所在的代码块内访问。这可以帮助避免变量提升和作用域污染的问题。
2. 声明常量
使用const 关键字声明常量,它是 JavaScript 中用于声明常量的一种方式。与 let 和 var 不同,使用 const 声明的变量必须在声明时初始化,并且在后续的代码中不能被重新赋值。
3. 模版字符串
模板字符串是ES6 引入的一种字符串表示法,它使用反引号 (`
) 来创建字符串,支持多行文本和内嵌表达式。模板字符串使得字符串的拼接和格式化更加简洁和方便。
4. 解构赋值
解构赋值是ES6 引入的一种语法,可以从数组或对象中提取值,并将其赋值给变量。这种语法使得提取属性和元素变得更加简洁和直观。形式:修饰关键字 变量 = 值,隐式变量 = 值
5. 对象语法糖
当你在创建对象时,如果对象的属性名与变量名相同,可以直接使用变量名,而不需要重复写属性名。
6. 箭头函数
它们提供了一种更简洁的方式来定义函数,同时也改变了this 的绑定方式。简单的说就是使用 “()=”代替了“function()”。
7. 拓展运算符
使用三个点(...
)表示,可以用于数组和对象的展开。它可以将数组或对象的元素展开为单独的元素,或将多个元素合并成一个新的数组或对象。作用:1. 复制数据集合中的数据,2. 展开集合中的数据,3. 处理剩余参数。
8. 字符串、数组新增API
startsWith("a"):判断是否以a开头
endsWith("a"):判断是否以a结束
includes("a"):判断是否包含a
使用forEach((item,index)循环数组中的值和索引,
使用map((item)映射数组,
使用filter((item)过滤不需要的数据,
使用reduce() 做累计计算。
9. Set和Map
9.1 Set
Set 是一种集合,允许存储唯一值的有序集合。它的特点是:
唯一性:集合中的每个值都是唯一的。
无序性:集合中的值没有特定的顺序。
添加元素:add(),删除元素:deleted(),检查元素:has(),清空元素:clear()
9.2 Map
Map 是一种键值对的集合,允许使用任意类型的值作为键。它的特点是:
有序性:元素是有序的,插入的顺序会被保持。
灵活的键:键可以是任何类型,包括对象。
添加元素:set(),获取元素:get(),删除元素:deleted()
10. Proxy和Reflect
10.1 Proxy
Proxy 是 ES6 引入的一种强大特性,允许你创建一个对象的代理,以拦截并自定义基本操作(如属性查找、赋值、枚举、函数调用等)。这使得你可以在不修改原始对象的情况下,为对象添加额外的功能。
get(target, property, receiver): 拦截对属性的读取操作。
set(target, property, value, receiver): 拦截对属性的赋值操作。
deleteProperty(target, property): 拦截对属性的删除操作。
apply(target, thisArg, argumentsList): 拦截函数调用。
has(target, property): 拦截 in 操作符的使用。
10.2 Reflect
Reflect 是 ES6 引入的一个内置对象,它提供了一组方法,用于操作和拦截对象的基本操作。Reflect 的方法与 Proxy 中的拦截器方法相对应,使得在使用代理时,更加清晰和简洁。
Reflect.get(target, property, receiver): 获取对象属性的值。
Reflect.set(target, property, value, receiver): 设置对象属性的值。
Reflect.deleteProperty(target, property): 删除对象的属性。
Reflect.has(target, property): 判断对象是否具有指定的属性。Reflect.getOwnPropertyDescriptor(target, property): 获取对象属性的描述符。Reflect.defineProperty(target, property, descriptor): 定义对象的属性描述符。Reflect.ownKeys(target): 返回对象自身的所有属性名称(包括字符串和符号)。
11. async和await
async 用于简化基于 Promise 的异步编程。使用 async 和 await 关键字,可以更清晰地编写异步代码,使其看起来像同步代码。
12. 类class
class 是 ES6 引入的一种语法,用于定义对象的构造函数和原型。类提供了一种更清晰和简洁的方式来创建对象和处理继承。以下是关于 JavaScript 类的详细介绍。
13. 模块化
模块化是编程的一种设计理念,旨在将代码分割成独立的、可重用的模块,从而提高代码的可维护性和可读性。