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
相关推荐
开开心心就好2 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
Setsuna_F_Seiei5 小时前
前端转型 Agent 开发 05 之 Agent Hooks 与 Checkpointer(让 Agent 从全自动转变人为可掌控)
前端·agent·ai编程
百万蹄蹄向前冲6 小时前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能
默_笙7 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan8 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
kyriewen8 小时前
我扒了 10,221 条 JD:腾讯技术岗 75% 在要 AI
前端·人工智能·ai编程
郑州光合科技余经理9 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
IT_陈寒10 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
Blanche150010 小时前
利用 RAG 为答疑机器人扩展知识范围
前端
天若有情67310 小时前
【纯前端小工具】公历生日转农历,批量查询每年农历生日对应的公历日期(GitHub Pages在线直接用)
前端·javascript·github pages·农历转换·lunisolar·网页小工具