1. 变量声明
let 和 const:提供了块级作用域的变量声明方式。
let name = 'John';const pi = 3.14;
2. 模板字符串
使用反引号(
`
)可以创建模板字符串,方便嵌入变量。const greeting = `Hello, ${name}!`;
3. 默认参数
函数参数可以有默认值。
function greet(name, message = 'Hello') { console.log(`${message}, ${name}!`);}
4. 解构赋值
提取数组或对象中的值。
const [a, b] = [1, 2];const { x, y } = point;
5. 箭头函数
提供了更简洁的函数语法。
const double = x => x * 2;
6. 类(Classes)
使用类来创建对象。
class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return `(${this.x}, ${this.y})`; }}
7. 模块(Modules)
使用
import
和export
进行模块化。// math.jsexport function add(x, y) { return x + y;}// main.jsimport { add } from './math.js';console.log(add(1, 2));
8. 异步编程
Promise 和 async/await 简化了异步操作。
async function fetchData() { try { const response = await fetch('url'); const data = await response.json(); return data; } catch (error) { console.error('Error fetching data:', error); }}
9. 迭代器和生成器
for...of 循环可以遍历可迭代对象。
for (const item of document.querySelectorAll('.items')) { console.log(item);}
生成器允许你以懒加载的方式产生值。
function* idGenerator() { let id = 0; while (true) { yield ++id; }}
10. *** 和映射(ES2015/ES6)
Set 和 Map 提供了新的数据结构。
let set = new Set([1, 2, 3, 2, 1]); // 去除重复let map = new Map([['key1', 'value1'], ['key2', 'value2']]);
11. 函数的扩展
新增了
Array.prototype
*** ,如find
、findIndex
、fill
、entries
等。const found = [1, 2, 3].find(x => x > 1);
12. 模块化
使用模块化的方式组织代码,提高可维护性和重用性。
13. 类型断言(TypeScript)
如果你使用 TypeScript,可以进行类型断言以提供更准确的类型信息。
let x: any = 'hello';let y: number = (x as string).length;
14. 私有字段(Stage 3 Proposal)
类中可以使用
#
前缀定义私有字段。class Person { #name; constructor(name) { this.#name = name; } get name() { return this.#name; }}
15. 可选链操作符(Optional Chaining, ES2020)
允许读取对象的深层属性,而不必检查每一层属性是否存在。
const name = obj.person?.name ?? 'Unknown';
16. 空值合并操作符(Nullish Coalescing Operator, ES2020)
提供了一种更简洁的方式来处理
null
和undefined
。const foo = null ?? 'default value'; // foo 的值将是 'default value'
17. Promise.allSettled(ES2020)
等待多个 Promise 都settled(无论是fulfilled还是rejected)。
Promise.allSettled([promise1, promise2]).then(results => { // results 是一个数组,包含了所有promise的settled结果});
18. BigInt(ES2020)
表示大于
2^53 - 1
的整数。const bigNumber = BigInt(1234567890123456789012345678901234567890n);
19. 逻辑赋值运算符(Logical Assignment Operators, ES2021)
提供了逻辑运算符的赋值版本。
let a = 2;a ||= 5; // 如果 a 为 falsy,则 a = 5,否则保持不变
20. WeakRefs(ES2021)
允许创建对对象的弱引用,不会阻止对象被垃圾回收。
const weakRef = new WeakRef(object);