ES6-ES14 新特性速查

一、ES6(ECMAScript 2015)

1. Let/const: 块级作用域的变量声明,代替 var

javascript 复制代码
let name = 'dog';
const IP = '127.0.0.1';

2. 箭头函数: 自动绑定当前的this

javascript 复制代码
const add = (a, b) => a + b;  // this 指向 window

3. 模板字符串: 支持多行字符串和表达式插值

javascript 复制代码
const sayHello = `
hello,
js
`

4. 解构赋值: 从数组或对象中提取值

javascript 复制代码
const [first, second] = [1, 2];
const {name, age} = {name: 'Tom', age: 18};

5. 类语法: class 语法糖

javascript 复制代码
class Person {
	constructor(name) {
		this.name = name;
	}

	greet() {
		console.log(`Hi, ${this.name}`);
	}
}

const p1 = new Person('Tony');
p.greet(); // Hi, Tony

6. Promise: 异步编程标准化

javascript 复制代码
const fethData = new Promise((resovle, reject) => {
	try{
		setTimeout(() => {
			resolve('Data');
		}, 1000)
	} cache (error){
		reject(error);
	}
})

7. 模块化(导入导出):import/export,模块化代码结构

javascript 复制代码
// math.js
export const sum = (a, b) => a + b;


// main.js
import { add } from './math.js';

二、ES7(ECMAScript 2016)

1. Array.prototype.includes(): 检查数组中是否包含某个值

javascript 复制代码
const arr = [1, 3, 5, 7, 9];
console.log(arr.includes(5)) // true

2.指数运算符: 幂运算

javascript 复制代码
2 ** 3 // 8

三、ES8(ECMAScript 2017)

1. Async/await: 异步风格编写异步代码

javascript 复制代码
async function fetchData() {
	const response = await fetch('url..');
	console.log(response);
}

2. 对象方法扩展

  • Object.values(): 返回对象值的数组
  • Object.entires(): 返回键值对数组
javascript 复制代码
Object.values({a: 1, b: 2}); // [1, 2]

Object.entires({a: 1, b: 2}); // [['a', 1], ['b', 2]]

3. 字符串填充方法: padStart()/padEnd() 格式化字符串长度

javascript 复制代码
'5'.padStart(2, '0'); // '05'

四、ES9 (ECMAScript 2018)

1. 对象展开/Rest 参数: 支持对象解构与合并

javascript 复制代码
const obj ={...{a: 1}, ...{b: 2}}; // {a: 1, b: 2}

2. 正则表达式改进

  • 命名捕获组: 通过 ? 命名匹配组
  • 反向断言: 匹配前/后符合条件的文本
javascript 复制代码
// 命名捕获
const reg = /<a href="(?<url>.*)">(?<text>.*)<\/a>/;
const result = ref.exec('<a href="http://x.com">link</a>');
console.log(result.groups.url); // https://x.com


// 反向断言
/(?<=\\d)\\w+/.exec('123abc'); // 'abc'
7. promise.finally(): 无论成功与否都会执行的回调
fetchData.then(() => {...}).catch(() => {...}).finally(() => {...});

五、ES10(ECMAScript 2019)

1. 数组方法

  • ** flat() : 递归展开数组 **
  • ** flatMap() : 映射后展开 **
javascript 复制代码
// flat
[1, [2, 3]].flat(2); // [1, 2, 3]

[1, 2].flatMap(x => [x, x * 2]); // [1, 2, 2, 4];

2. Object.fromEntries(): 键值对数组转对象

javascript 复制代码
Object.fromEntries([['a', '1'], ['b', 2]]); // {a: '1', b: 2}

3. 字符串方法: trimStart() / trimEnd() 去除收尾空格

javascript 复制代码
'    hello  '.trimStart(); // 'hello  '

六、ES11 (ECMAScript 2020)

1. promise.allSettled(): 所有promise完成时返回的结果(无论成功还是失败)

javascript 复制代码
Promise.allSettled([Promise.resolve(1), Promise.reject(2)]).then(res => console.log(res));

2. BigInt: 表示任意大整数

javascript 复制代码
const bigNum = 9007199254740991n;

3. 动态导入: import() 按需加载模块

javascript 复制代码
import('./module.js').then(module => module.doSomething());

4. globalThis: 跨环境获取全局变量

javascript 复制代码
console.log(globalThis); // window 或 global

七、ES12 (ECMAScript 2021)

1. 逻辑赋值操作符:??= 仅在左侧为null或者undefined 的时候赋值

javascript 复制代码
let a;
a ??= 'default value';
console.log(a); // 'default value'

2. String.prototype.replaceAll(): 替换所有匹配项

javascript 复制代码
'aaaabcd'.replaceAll('a', '1'); // '1111bcd'

3. Promise.any() 任一 Promise 成功即返回

javascript 复制代码
Promise.any([Promise.reject(1), Promise.resolve(2)]).then((res) => console.log(res)); // 2

八、ES13 (ECMAScript 2022)

1. 数组索引方法 at(): 支持负数索引

javascript 复制代码
[1, 2, 3].at(-1); // 3

2. 类私有字段: 使用 # 声明私有属性

javascript 复制代码
class Person {
	#age; // 私有属性
	constructor(age) {
		this.#age = age;
	}
}

3. 模块顶层 await 在模块中直接使用 await

javascript 复制代码
const data = await fetchData();

九、ES14(ECMAScript 2023)

1. 数组查找方法: findLast / findLastIndex 从后向前查找

javascript 复制代码
	[1, 2, 3, 2].findLast(x => x === 2); // 2

2. Symbol 作为 WeakMap : 使用唯一标识做键

javascript 复制代码
const key = Symbol('key');
const map = new WeakMap();
map.ser(key, {data: 'secret'});

3. 不可变数组方法:toReversed() / toSorted() 返回新数组

javascript 复制代码
const arr = [3, 2, 1];
const sortedArr = arr.toSorted(); // [1, 2, 3], 不会改变原数组,返回新的数组 sortedArr
const reversedArr = arr.toReversed(); //[1, 2, 3], 不会改变原数组,返回新的数组 reversedArr
相关推荐
Lhuu(重开版1 小时前
CSS从0到1
前端·css·tensorflow
不说别的就是很菜3 小时前
【前端面试】HTML篇
前端·html
前端一小卒3 小时前
生产环境Sourcemap策略:从苹果事故看前端构建安全架构设计
前端·javascript
im_AMBER3 小时前
React 18
前端·javascript·笔记·学习·react.js·前端框架
老前端的功夫3 小时前
Vue2中key的深度解析:Diff算法的性能优化之道
前端·javascript·vue.js·算法·性能优化
han_3 小时前
前端高频面试题之Vue(高级篇)
前端·vue.js·面试
不说别的就是很菜4 小时前
【前端面试】CSS篇
前端·css·面试
by__csdn4 小时前
nvm安装部分node版本后没有npm的问题(14及以下版本)
前端·npm·node.js
by__csdn4 小时前
Node与Npm国内最新镜像配置(淘宝镜像/清华大学镜像)
前端·npm·node.js