ECMAScript6
新特性 | 核心知识点 |
---|---|
let变量声明 | 1.变量不能重复声明;2. 引入块级作用域; 3. 不再存在变量提升;4.不影响作用域链 |
const定义常量 | 1.一定要赋初始值;2.一般常量使用大写或驼峰命名法; 3. 常量的值不能修改;4.也是块级作用域; 5. 对于数组和对象元素的修改,因为指向的堆内存地址值不变,所以不算对常量的修改,不报错 |
解构赋值 | 1. 针对数组和对象;2. 数组的解构是按索引/顺序进行赋值; 3. 对象的解构是寻找同名属性进行赋值,如果没有同名属性则被赋值为undefined |
模板字符串 `` | 1.内容中可以直接出现换行符;2.内容中可以进行变量拼接(利用$()) |
箭头函数 => | 1. 箭头函数不能作为构造函数实例化,不能使用arguments变量; 2. 当形参只有一个时可以省略小括号;当代码体只有一条语句时可以省略大括号且必须省略return; 3. 箭头函数适合与this无关的回调,如定时器,数组方法回调等;不适合与this有关的回调,如事件回调,对象的方法(因this为静态,始终指向函数声明时所在作用域this的值) |
rest参数 …args | 用于获取参数的实参,代替arguments |
扩展运算符 […] | 1. 将[数组]转换为逗号分隔的[参数序列]; 2.数组的合并,数组的克隆,伪数组转换为真正的数组 |
新数据类型Symbol | 1. JS的第七种数据类型,类似于字符串的数据类型; 2.let s=Symbol(‘sgg’); 表示独一无二的值,用来解决命名冲突的问题,不能与其他数据进行运算/比较,定义的对象属性不能使用for…in循环遍历但是可以使用Reflect.ownkey键名; 3. 有11+个属性/方法,用于扩展对象功能 |
新数据类型Set | 1. JS的第八种数据类型,类似于数组的数据类型,但成员的值都是唯一的; 2.集合实现了iterator接口,所以可以使用扩展运算符和[for…of…]遍历; 3.集合的属性和方法有size/add/delete/has; 4. 可以用于数组的自动去重,交集,并集等场景,如let result=[…new Set(arr)] |
新数据类型Map | 1. JS的第九种数据类型,类似于对象的数据类型,也是键值对的集合,但“键”的范围不限于字符串,各种类型的值(包括对象)都可以; 2.集合实现了iterator接口,所以可以使用扩展运算符和[for…of…]遍历,遍历的结果为数组,每个数组内包含键与值; 3.let m=new Map();Map的属性和方法有size/add/get/has/clear |
设置函数默认初始值 | 允许给函数参数赋值初始值,一般位置靠后(潜规则);可与解构赋值结合 |
对象的简化 | 允许大括号里,直接写入变量和函数,作为对象的属性和方法 |
迭代器 | 迭代器是一种接口,为各种不同的数据结构提供统一的访问机制;任何数据结构只要部署iterator接口,就可以完成遍历操作; ES6创造了一种新的遍历命令for…of循环,iterator接口主要供for…of消费; 原生具备iterator接口的数据:Array Arguments Set Map String |
生成器 | 1. 生成器其实就是一个特殊的函数,用于解决异步编程; 2. yield用于分隔,next方法可以传入实参,实参是作为第n-1个yield语句返回的结果 |
Promise | 1. Promise是ES6引入的异步编程的新解决防范,语法上是一个构造函数。用来封装异步操作并可以获取其成功或失败的结果;2. Promisr.prototype.then方法 |
class类 | 引入了class(类)的概念,作为对象的模块;同时可以定义类;构造函数的继承和原型链的继承方式也发生了更改 |
数值扩展 | Number.EPSILON,Number.isNaN,Number.isFinite等; |
对象方法的扩展 | 1. Object.is判断两个值是否完全相等(NaN也可以判断); 2. Object.assign对象的合并; 3. Object.setPrototypeOf设置原型对象;Object.getPrototypeOf获取原型对象 |
模块块 | ES6模块化规范;export与import(参考JS模块化规范) |
babel对ES6模块化代码的转换 | ** |
引入npm包 | import $ from “jquery”; ** |
ECMAScript7
新特性 | 核心知识点 |
---|---|
Array.prototype.includes | includes方法用来检测数组中是否包含某个元素,返回布尔类型值;ES5的indexof返回的是数字[索引],且不存在时返回-1 |
指数操作符 | ES7引入指数运算符[**],用来实现幂运算,功能与Math.pow结果相同 |
ECMAScript8
新特性 | 核心知识点 |
---|---|
asynch和await | 可以异步代码像同步代码一样; async函数: 返回值是promise对象,promise对象的结果由async函数执行的返回值决定; await函数:必须写在async函数中,右侧的表达式一般为promise对象,返回的是promise成功的值,如果promise失败了会抛出异常(通过try…catch捕获) |
对象方法的扩展 | Object.keys()获取对象所有的键; Object.values()获取对象所有的值; Object.entries() 对象转换为数组,数组内容是键值; Object.getOwnPropertyDescriptors()返回对象属性的描述对象 |
ECMAScript9
新特性 | 核心知识点 |
---|---|
rest参数和扩展运算符 | ES6中已经引入,但只针对于数组,在ES9中为对象提供了像数组一样的rest参数和扩展运算符 |
正则扩展 | 命名捕获分组;反向断言;dotAll模式; |
ECMAScript10
新特性 | 核心知识点 |
---|---|
对象方法的扩展 | Object.fromEntries 将二维数组转换为对象;是ES8中Object.entries()的逆运算 |
字符串方法的扩展 | trimStart清除字符串左侧空白;trimEnd清除字符串右侧空白 |
数组方法的扩展 | flat/flatMao:将多维度数组转换为低纬数组; |
Symbol.prototype.description | 获取symbol的描述 |
ECMAScript11
新特性 | 核心知识点 |
---|---|
私有属性 | 前面加#表示私有属性,实例化后无法被读取到,只能通过私有调用 |
Promise.allSettled方法 | 用于批量异步任务的场景 |
字符串方法的扩展 | string.prototype.matchAll方法 |
可选链操作符 | ?.:不需要层级判断;前面的有结果就返回前面的,没有结果返回后面的,找不到返回undefined |
动态import | import结果返回的值是一个prpmise对象,成功的值就是promise暴露出的方法 |
绝对全局对象globalThis | 主要用于某些环境下,直接忽略其他,对全局对象做操作 |
新数据类型 BigInt | JS的第十种数据类型; 表示大整型,主要用于大数值运算 |