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
相关推荐
恋猫de小郭18 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅1 天前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60611 天前
完成前端时间处理的另一块版图
前端·github·web components
掘了1 天前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅1 天前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅1 天前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅1 天前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment1 天前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅1 天前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊1 天前
jwt介绍
前端