返回

未被 ECMAScript 2017 采纳的有趣提案

前端

追随 JavaScript 发展中所有新特性的提案进度可能是一项艰巨的任务。每年,负责 JavaScript 发展的委员会 TC39 都会收到数十个提案。由于大多数提案都无法进入下一阶段,因此很难确定哪些提案值得关注,哪些提案只是异想天开。随着越来越多的提案涌现,很难跟上所有这些特性提案的步伐。

ES2017 尤其如此。它引入了许多改变游戏规则的新特性,例如异步函数、扩展运算符和对象展开。然而,也有一些引人注目的提案没有进入最终版本。这些提案涵盖了广泛的主题,从语法改进到新的数据结构。在本文中,我们将探讨一些最有趣且尚未被采纳的 ES2017 提案。

异步迭代器

异步迭代器是一种新的迭代器类型,它允许你以异步方式遍历集合。这对于需要从远程来源或需要花费大量时间处理每个元素的集合中获取数据非常有用。异步迭代器使用新的 asyncawait ,这些关键字在 ES2017 中引入。

async function* asyncIterator() {
  for (let i = 0; i < 10; i++) {
    yield await Promise.resolve(i);
  }
}

for await (const i of asyncIterator()) {
  console.log(i);
}

模式匹配

模式匹配是一种新的语法特性,它允许你将值与模式进行比较。这对于从对象和数组中提取数据的复杂任务非常有用。模式匹配使用新的 switch 语句,该语句在 ES2017 中进行了扩展。

const obj = {
  name: 'John',
  age: 30
};

switch (obj) {
  case { name: 'John', age: 30 }:
    console.log('Hello, John!');
    break;
  case { age: 30 }:
    console.log('You are 30 years old.');
    break;
  default:
    console.log('Unknown object.');
}

可选链

可选链是一种新的语法特性,它允许你安全地访问嵌套对象的属性。这对于处理可能为 nullundefined 的对象非常有用。可选链使用新的 ?. 运算符,该运算符在 ES2017 中引入。

const user = {
  name: 'John',
  address: {
    street: 'Main Street'
  }
};

console.log(user?.address?.street); // 'Main Street'

这些只是 ES2017 中一些未被采纳的有趣提案。尽管它们可能不会立即成为 JavaScript 的一部分,但了解这些提案可以洞察语言的未来。随着 JavaScript 的不断发展,我们很可能会在未来的版本中看到这些提案或类似的提案。