一、es6
- 变量( let和const ):有块级作用域,没有作用域提升。
- 模板字符串
- 箭头函数:没有显示原型,不能作为构造函数使用new来创建对象
- 解构赋值:let [a,,b] = [1,2,3]
- symbol:表示独一无二的值
- 函数默认参数和剩余参数
- 对象部分:
-
对象的拓展运算符(...)用于拷贝目标对象所有可遍历的属性到当前对象。
-
新增了两个方法,assign和is。 assign用于浅拷贝源对象可枚举属性到目标对象。 is方法和(===)功能基本类似,用于判断两个值是否绝对相等。 他们仅有的两点区别是,is方法可以区分+0还是-0,还有就是它认为NaN是相等的。
let source = {a:{ b: 1},b: 2};
let target = {c: 3};
Object.assign(target, source);
console.log(target); //{c: 3, a: {b:1}, b: 2}
source.a.b = 2;
console.log(target.a.b); //2
Object.is(1,1);//true
Object.is(1,true);//false
Object.is([],[]);//false
Object.is(+0,-0);//false
Object.is(NaN,NaN);//true
- 字符串新方法:
- startsWith()/endsWith(),判断字符串是否以参数字符串开头或结尾。
- repeat()方法按指定次数返回一个新的字符串。
- padStart()/padEnd(),用参数字符串按给定长度从前面或后面补全字符串,返回新字符串。
- Map和Set
-
Set类似数组,但是元素不能重复,创建需要通过Set构造函数,通过forEach遍历set,另外Set支持for of遍历
-
WeakSet中只能存放对象类型,不能存放基本数据库类型。WeakSet对元素的引用是弱引用,如果我们遍历获取其中元素就可能造成对象不能正常销毁,所以WeakSet不能遍历
-
Map用于存储映射关系,之前我们用对象存储映射关系只能用字符串(ES6新增了Symbol)作为属性名(key),某些情况下我们可能希望通过其他类型作为key,比如对象,这个时候会自动将对象转成字符串来作为key,现在可以使用Map,Map遍历方式和set一样
-
WeakMap只能存放对象类型,对元素的引用也是弱引用
- Proxy、Reflect、Promise、模块化开发
二、es7
- 幂操作
//ES5求幂
math.pow(3,2)
//ES7求幂
let a=3**2; //结果:9
- includes()判断字符串是否包含参数字符串,类似indexof,但这里不是查找下标
三、es8
- 提供了 Object.values 来获取所有的value值
- 通过 Object.entries 可以获取到一个数组,数组中会存放可枚举属性的键值对数组。(可以针对对象、数组、字符串进行操作)
3. async、await
四、es9
- Promise新增了一个 finally方法
五、es10
- Array的新方法flat和flatMap
- flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
- flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。
- 注意一:flatMap是先进行map操作,再做flat的操作;
- 注意二:flatMap中的flat相当于深度为1;
- trimStart和trimEnd
六、es11
- 动态import()
//vue router中动态导入一个组件(动态方法)
component: () => import(/* webpackChunkName: "index" */ '../views/index.vue')
//ES6的import属性(静态属性)
import Vue from 'vue'
- 新增BigIntBigInt(并不是新增了一个数据类型,只是让原本的整数可容纳的值更多。)
- 空值合并操作符
- 可选链,主要作用是让我们的代码在进行null和undefined判断时更加清晰和简洁
七、es12
- String.prototype.replaceAll:全部替换
- Promise的any方法
- 新增逻辑赋值操作符: ??=, &&=, ||=
- FinalizationRegistry 对象可以让你在对象被垃圾回收时请求一个回调
- WeakRefs:如果我们默认将一个对象赋值给另外一个引用,那么这个引用是一个强引用,如果我们希望是一个弱引用的话,可以使用WeakRef
八、es13
- method .at()
- Object.hasOwn(obj, propKey),用于判断一个对象中是否有某个自己的属性,和之前学习的Object.prototype.hasOwnProperty区别一:防止对象内部有重写hasOwnProperty,区别二:对于隐式原型指向null的对象, hasOwnProperty无法进行判断