【Javascript】介绍下从ES7到ES15的每个版本(ECMAScript)特性举例和代码Demo

255 阅读3分钟

随着技术不断发展,JavaScript的发展已经达到了ES15(ECMAScript 2024)。而每年都会发布新的ECMAScript版本,如未来ES16(ECMAScript 2025)、ES17(ECMAScript 2026),依此类推。

并且每个新版本都会引入一些新的特性和对现有功能的改进。

  下面简单介绍下从ES7到ES15的每个版本特性举例和代码Demo:

ES7 (2016)

指数运算符(**)

  • 解释:提供了一种简洁的方式来进行幂运算。
  • 优势:更易读的语法,减少了使用 Math.pow 的需求。

代码示例:

console.log(2 ** 3); // 输出: 8

ES8 (2017)

Async/Await

  • 解释:使异步代码看起来像同步代码,简化了异步编程。
  • 优势:提高了代码的可读性和易于调试。

代码示例:

async function fetchUser() {
  try {
    const response = await fetch('https://api.example.com/user');
    const user = await response.json();
    console.log(user);
  } catch (error) {
    console.error('Error:', error);
  }
}

ES9 (2018)

异步迭代器(Async Iterators)

  • 解释:允许遍历异步数据源,如流或异步生成器函数。
  • 优势:支持非阻塞式的数据处理,适合处理大量数据或实时数据流。

代码示例:

async function* generateNumbers() {
  for (let i = 0; i < 5; i++) {
    await new Promise(resolve => setTimeout(resolve, 1000));
    yield i;
  }
}

(async () => {
  for await (const num of generateNumbers()) {
    console.log(num);
  }
})();

ES10 (2019)

BigInt 数据类型

  • 解释:提供了对任意精度整数的支持。
  • 优势:能够安全地存储和操作非常大的数字,超过 JavaScript Number 类型的限制。

代码示例:

const bigIntValue = 9007199254740991n + 1n;
console.log(bigIntValue); // 输出: 9007199254740992n

ES11 (2020)

Promise.allSettled

  • 解释:返回一个在所有给定的 promise 已经完成时的状态,不论它们是完成还是拒绝。
  • 优势:当需要等待多个 promise 完成并检查每一个的结果时非常有用。

代码示例:

const promises = [
  Promise.resolve(1),
  Promise.reject('Oops!'),
  Promise.resolve(3)
];

Promise.allSettled(promises).then(results => {
  results.forEach(result => console.log(result.status));
});

ES12 (2021)

逻辑赋值运算符(&&=, ||=, ??=)

  • 解释:这些运算符可以在条件成立的情况下直接赋值,简化了逻辑表达。
  • 优势:减少冗余代码,提高代码可读性。

代码示例:

let x = true;
x ||= false; // 如果x为false,则赋值为false,否则保持不变
console.log(x); // 输出: true

let y;
y ??= 'default'; // 如果y为null或undefined,则赋值为'default'
console.log(y); // 输出: 'default'

ES13 (2022)

私有类字段(#field)

  • 解释:允许定义只能在类内部访问的私有属性。
  • 优势:增强了封装性,防止外部意外修改。

代码示例:

class Counter {
  #count = 0;

  increment() {
    this.#count++;
  }

  get count() {
    return this.#count;
  }
}

const counter = new Counter();
counter.increment();
console.log(counter.count); // 输出: 1

ES14 (2023)

Record 和 Tuple 类型

  • 解释:引入了不可变的数据结构,用于创建固定大小和类型的集合。
  • 优势:提供更强的类型安全性,适用于需要严格类型保证的场景。

代码示例:

type Point = [number, number];
const origin: Point = [0, 0];

ES15 (2024)

Temporal API

  • 解释:一个新的时间处理API,旨在解决现有Date对象的问题。
  • 优势:提供了更精确的时间计算和更好的国际化支持。

代码示例:

const date = new Temporal.PlainDate(2024, 10, 10);
console.log(date.toString()); // 输出: "2024-10-10"

以上就是从ES7到ES15每年最独特的特性和功能简介。请注意,随着标准的发展,浏览器和其他运行环境的支持程度可能会有所不同。因此,在使用新特性时,请确保检查目标环境的兼容性。