ES 6 (2015)
- let, const
- 解构赋值 . ({name, age, gender}) => {}
- 模板字符串 `${var} yes`
- 箭头函数 () => {}, n => n > 1;
- 函数参数默认值 (a = 10, b) => {}
- 扩展运算符 [...array1, 'a', 'b']
- 集合参数, (a, b, ...others) => {};
- 属性简写, 同名自动赋值
- 对象合并, Object.assign(to, from), 类似BeanUtil
- 符号变量Symbol
- Set和Map
- 迭代器, for(let v of array)
- Promise, new Promise(resolve, reject) { resolve(data); reject(error) }.then((data)=>{}, (err) => {});
- 类class, class Person{ constructor(name, age) {}, talk() {}}.
- 类的继承, Man extends Person{ constructor(name, age, weapon){super(name, age); this.weapon = weapon}; fight(){}; talk(){};}
- 模块Module, 三种export, export function(){}, export { funcA, funcB}, export default CLASS;
- 模块Module, 三种import, import * as obj1 from 'a.js'; import {funcA as funA} from ''; import obj from 'export default obj';
- 生成器函数Generator, 用 function* 定义, 返回的函数不能直接调用. 要调用.next()方法获取返回值.
- yield异步生成器, 在生成器内使用, 把被修饰的调用变成异步的.
ES 7 (2016)
- 检查数组是否包含给定值. Array.prototype.includes()
- 求幂运算符, 4 ** 2 = 16
ES 8 (2017)
- 异步函数async/await, async function(){ return await //a promise;} async 把函数转化为异步返回Promise, 在里面就可以用await同步获取Promise的值了. 但最外层一定要有async包装为Promise, 这样整体上还是异步的.
- Object函数扩展, Object.keys(obj), Object.values(obj), Object.entries() = [["key1", "v1", "key2", v2]]
- 字符串填充, '7'.padStart(3, '0'); // '007'; 'yes'.padEnd(6, '!'); // 'yes!!!'
ES 9 (2018)
- 解构对象属性, {...obj, "name":"test"}
- 异步迭代, for-await-of
- 正则扩展
ES 10 (2019)
- 展平数组 [1,2,[3,4]].flat() = [1,2,3,4]; [1,2,[3,4,[5,6]]].flat(2) = 展平两层嵌套
- 展平map返回的数组, [1,2,3,4].flatMap(n=>[n, 1]) = [1,1,2,1,3,1,4,1];
- 对象构造器, 数组/Map, Object.fromEntries([["name", "test"], ["age", 100]]) = {"name": "test, "age": 100}; Object.fromEntries(new Map())
ES 11 (2020)
- 空值运算符, obj?.name?.length
- 类私有属性, class Person { name, #age, #money, hijack() { console.log(money) }}; 私有属性只能在类内部访问
- Promise并发调用, Promise.allSettled(promise1, promise2)返回全部结果, Promise.all(a,b)任意失败返回失败, Promise.race(a,b), 返回最早结果无论成功失败.
- 动态import, function() { import('test.js').then((module)=>{module.func1();})}. 代码内动态加载外部js, 异步加载到js后返回module对象, 内含js export的方法.
ES 12 (2021)
- Promise.any(), 并发调用多个Promise并返回第一个成功的调用.
- String.prototype.replaceAll()
ES 13 (2022)
- 静态私有属性/方法, class P{ static #URL}
- Object.hasOwn(object, property)
- 提取函数at(), [1,2,3].at(-1) = 3. "apple".at(-2) = "l"
文章评论
Thanks!