首页 > web前端 > js教程 > ES6(ES2015)及以后:了解JavaScript版本

ES6(ES2015)及以后:了解JavaScript版本

William Shakespeare
发布: 2025-02-15 12:13:11
原创
217 人浏览过

ES6 (ES2015) and Beyond: Understanding JavaScript Versioning

近年来,JavaScript 的发展可谓风起云涌。每年都有新的 ECMAScript 规范发布,这使得 JavaScript 的版本管理、各个版本的功能支持以及如何编写面向未来的代码变得容易混淆。

为了更好地理解这看似持续不断的更新浪潮背后的原因,让我们简要回顾一下 JavaScript 及其版本的历史,并了解标准化过程为何如此重要。

关键要点

  • ES6(也称为 ES2015)标志着 JavaScript 版本管理的重大转变,引入了类、Promise、箭头函数、ES 模块、生成器和迭代器等特性。这是一个重要的基础更新,为未来的年度小型 JavaScript 版本更新奠定了基础。
  • ES2015 建立了基于提案的 TC39 过程,用于讨论和采纳新的语言特性。此过程包含五个阶段:Strawman(雏形)、Proposal(提案)、Draft(草案)、Candidate(候选)、Finished(完成),每个阶段都逐步规范化和实现所提出的特性。
  • ES2015 之后,后续版本每年六月发布,ES2016(ES7)和 ES2017(ES8)引入了增量特性和改进。ES2018 引入了一些强大的新增功能,例如异步迭代器以及对象展开和剩余属性。
  • 将 ES6 重命名为 ES2015 是为了反映其发布年份,并摆脱版本号。此举是为了避免混淆,并表明 JavaScript 是一种不断更新和改进的动态语言。新的命名约定也有助于表明语言更新和改进的规律性。

JavaScript 版本管理的早期历史

JavaScript 的原型于 1995 年 5 月由 Brendan Eich 在短短十天内编写完成。他最初被招募来为 Netscape Navigator 实现 Scheme 运行时,但管理团队推动使用一种 C 风格的语言来补充当时新发布的 Java。

JavaScript 于 1995 年 12 月在 Netscape Navigator 版本 2 中首次亮相。次年,微软对 JavaScript 进行了逆向工程,创建了自己的版本,称为 JScript。JScript 与 Internet Explorer 浏览器版本 3 一起发布,几乎与 JavaScript 完全相同——甚至包括所有相同的错误和怪癖——但它确实有一些额外的 Internet Explorer 独有特性。

ECMAScript 的诞生

确保 JScript(以及任何其他变体)与 JavaScript 保持兼容的必要性促使 Netscape 和 Sun Microsystems 对该语言进行标准化。他们在欧洲计算机制造商协会(ECMA)的帮助下完成了这项工作,ECMA 将负责托管该标准。标准化后的语言被称为 ECMAScript,以避免侵犯 Sun 的 Java 商标——此举造成了相当多的混淆。最终,ECMAScript 用于指代规范,而 JavaScript(现在仍然如此)用于指代语言本身。

负责 JavaScript 版本管理和维护 ECMAScript 的工作组被称为技术委员会 39,或 TC39。它由来自 Apple、Google、Microsoft 和 Mozilla 等所有主要浏览器厂商的代表组成,以及其他对 Web 发展感兴趣的公司受邀的专家和代表。他们定期举行会议,以决定该语言的发展方向。

当 JavaScript 于 1997 年由 TC39 标准化时,该规范被称为 ECMAScript 版本 1。最初,ECMAScript 的后续版本每年发布一次,但由于缺乏共识以及 ECMAScript 4 周围难以管理的大型功能集,最终变得零星。因此,该版本被终止并缩小到 3.1,但并未以该名称最终确定,而是最终演变为 ECMAScript 5。它于 2009 年 12 月发布,距 ECMAScript 3 发布 10 年后,并引入了 JSON 序列化 API、Function.prototype.bind 和严格模式等功能。两年后,发布了一个维护版本来澄清最新迭代 5.1 中的一些歧义。

ECMAScript 2015 和年度发布的复兴

随着 TC39 解决因 ECMAScript 4 导致的分歧,Brendan Eich 强调需要更短期、更小规模的发布。这些新的规范中的第一个是 ES2015(最初命名为 ECMAScript 6 或 ES6)。这个版本是一个庞大但必要的基石,为未来的年度 JavaScript 版本管理提供了支持。它包含许多当今许多开发人员都非常喜欢的特性,例如:

  • Promise
  • 箭头函数
  • ES 模块
  • 生成器和迭代器

ES2015 是第一个遵循 TC39 过程 的版本,这是一个基于提案的模型,用于讨论和采纳语言特性。

TC39 过程

在提案被接受到即将发布的 ECMAScript 版本之前,它必须经过五个阶段。

阶段 0:Strawman(雏形)

这是一个方便的步骤,允许向规范提交想法。任何人都可以提出特性建议——即注册为贡献者的 TC39 成员和非成员。

阶段 1:Proposal(提案)

提案正式化的第一个阶段。必须:

  • 描述该解决方案纠正的任何现有问题
  • 提供 API 概要,以及高级实现细节,以及 polyfill 和/或演示
  • 预先讨论潜在的障碍

必须选择一位 负责人 来采纳和推进该提案。此人必须是 TC39 成员。

阶段 2:Draft(草案)

这是该特性可能包含在 ECMAScript 未来版本中的里程碑。在此,使用规范描述的正式语言详细说明提案的语法和语义。此时应该提供实验性实现。

阶段 3:Candidate(候选)

在此,提案的大部分内容和支持技术已经开发完成,但需要来自用户和实现者(例如浏览器厂商)的进一步反馈。一旦获得并采取行动,概要和规范细节将由指定的审阅者和指定的编辑最终确定和签字。由于此阶段需要符合的实现,因此此后只接受关键更改。

阶段 4:Finished(完成)

该提案已被接受,可以添加到 ECMAScript 中。因此,它固有地:

  • 使用 JavaScript 编写的 Test262 套件的一部分的验收测试已被编写,以证明该特性的符合性和行为
  • 至少有两个符合的实现可用并已发布,所有这些都证明了其健壮性和开发人员可用性
  • 已向官方 ECMA-262 代码库提交拉取请求,并已获得规范编辑的签字。

上述代码库的贡献文档进一步详细说明了使用 GitHub 问题和拉取请求来管理对语言的添加。

展望未来

在完成 ES2015 和建立 TC39 的 JavaScript 版本管理和更新过程之后,后续版本每年六月发布,提案的包含时间限制为一年。在撰写本文时,已经有三个新的规范。

ES2016

也称为 ES7,这是 ECMAScript 的第一个较小、增量版本。除了错误修复之外,它只添加了两个特性。

Array.prototype.includes

此实例方法简化了在数组中搜索值的操作:

// ES2016 之前:
const hasBob = names.indexOf('bob') > -1;

// ES2016:
const hasBob = names.includes('bob');
登录后复制
登录后复制

指数运算符

在 ES2016 之前,可以使用 Math.pow(base, exponent) 执行幂运算。此版本引入了一个运算符(**),它具有自己的优先级:

// ES2016 之前
Math.pow(5, 3); // => 125

// ES2016
5 ** 3; // => 125
登录后复制
登录后复制

ES2017

ES2017(又名 ES8)是一个稍大的版本,包含一些有用的方法和语法结构。

异步函数

Promise 已将我们从回调地狱中解救出来,但它们的 API 仍然表现出冗长。异步函数使用与同步代码非常相似的语法对它们进行了抽象:

// Promise
const getProfile = name => {
  return fetch(`https://some-api/people/${name}`)
    .then(res => res.json())
    .then(({ profile }) => profile); // 从解析的对象中解构 `profile`
};

// async/await
const getProfile = async name => {
  const res = await fetch(`https://some-api/people/${name}`);
  const { profile } = await res.json();
  return profile;
};
登录后复制

字符串填充方法

String.prototype.padStart(length, padder) 和 padEnd(length, padder) 将分别在字符串的开头和结尾重复添加 padder(这是可选的,默认为空格),直到达到 length 个字符:

'foo'.padStart(6);          // => '   foo';
'foo'.padEnd(6);            // => 'foo   ';
'foo'.padStart(10, 'bar');  // => 'barbarbfoo';
'foo'.padEnd(10, 'bar');    // => 'foobarbarb';
登录后复制

其他特性包括尾随逗号、共享内存和原子操作以及静态对象方法(Object.entries()、Object.values() 和 Object.getOwnPropertyDescriptors())。

ES2018

在撰写本文时,这个最新版本引入了一小部分强大的新增功能。

异步迭代器

虽然 Promise.all() 允许您等待多个 Promise 的解析,但在某些情况下,您可能需要顺序迭代异步检索的值。现在可以与 Promise 数组一起等待异步迭代器:

// ES2016 之前:
const hasBob = names.indexOf('bob') > -1;

// ES2016:
const hasBob = names.includes('bob');
登录后复制
登录后复制

对象展开和剩余属性

表面上看,由于 Babel 等编译器的可用性,这两个语法改进在 JavaScript 开发人员中已经很流行。对象展开和剩余属性类似于数组展开和剩余属性,并允许浅复制和对象属性的分组解构:

// ES2016 之前
Math.pow(5, 3); // => 125

// ES2016
5 ** 3; // => 125
登录后复制
登录后复制

其他已接受的提案包括 Promise.prototype.finally(),以及对正则表达式和模板字面量的增强。

结语

JavaScript 在很短的时间内得到了极大的发展。虽然这归功于 ECMAScript 标准和 TC39 的出色工作,但由于之前 JavaScript 版本管理和开发缺乏稳定性和凝聚力,这最初是一段艰辛的旅程。

由于提案过程相对成熟,该语言只能以务实和可控的方式改进。对于 Web 开发人员来说,这是一个伟大的时代!

关于 JavaScript 版本管理的常见问题解答:ES6 和 ES2015

ES6 和 ES2015 的主要区别是什么?

ES6 和 ES2015 本质上是相同的。ES6 是由 ECMA 国际标准化的 ECMAScript 编程语言的第六版。ES2015 只是 ES6 的新名称,反映了它发布的年份。重命名是为了反映发布年份并摆脱版本号,这可能会造成混淆。

为什么将 ES6 重命名为 ES2015?

将 ES6 重命名为 ES2015 是为了反映其发布年份并摆脱版本号。此举是为了避免混淆,并表明 JavaScript 是一种不断更新和改进的动态语言。新的命名约定也有助于表明语言更新和改进的规律性。

ES6/ES2015 中引入了哪些关键特性?

ES6/ES2015 为 JavaScript 引入了许多新特性,包括用于变量声明的 letconst、用于更短函数语法的箭头函数、用于字符串插值的模板字面量、用于面向对象编程的类、用于异步编程的 Promise 以及用于代码组织的模块等等。

ES6/ES2015 如何改进 JavaScript 编码?

ES6/ES2015 通过多种方式改进 JavaScript 编码。它引入了使该语言更强大且更易于使用的新语法和特性。例如,箭头函数提供了更简洁的函数编写语法,而 Promise 使处理异步操作更容易。模块的引入也有助于更好地组织代码,使其更易于管理和维护。

如何在我的 JavaScript 代码中开始使用 ES6/ES2015 特性?

要在 JavaScript 代码中开始使用 ES6/ES2015 特性,您可以使用像 Babel 这样的转译器,它将 ES6 代码转换为可在当前浏览器中运行的 ES5 代码。您还可以使用像 Webpack 这样的模块打包器来管理和捆绑您的 JavaScript 模块。

ES6/ES2015 是否存在任何兼容性问题?

虽然大多数现代浏览器都支持 ES6/ES2015 的大部分特性,但与旧版浏览器可能存在一些兼容性问题。为了确保兼容性,您可以使用 polyfill,它提供了您期望浏览器原生支持的功能。

JavaScript 和 ECMAScript 之间有什么区别?

JavaScript 是一种最初由 Netscape 开发的编程语言。ECMAScript 是由 ECMA 国际标准化的 JavaScript 标准版本。JavaScript 实现 ECMAScript,这意味着它遵循 ECMAScript 标准中定义的规则和结构。

ES6/ES2015 之后 JavaScript 的未来如何?

ES6/ES2015 之后,JavaScript 将继续发展,每年都会发布新版本,每个版本都会引入新的特性和改进。JavaScript 的未来可能会看到更强大的特性、更好的性能以及跨不同平台和设备的更高兼容性。

TypeScript 与 ES6/ES2015 的关系如何?

TypeScript 是 JavaScript 的超集,它为该语言添加了静态类型。它支持 ES6/ES2015 的所有特性,甚至包括 JavaScript 中找不到的一些附加特性。TypeScript 代码被转译为 JavaScript,因此它可以在任何 JavaScript 环境中运行。

使用 ES6/ES2015 比使用早期版本的 JavaScript 有什么好处?

与早期版本的 JavaScript 相比,使用 ES6/ES2015 提供了许多好处。它引入了使该语言更强大且更易于使用的新语法和特性。它还改进了代码组织和可维护性,并为复杂的应用程序和大型代码库提供了更好的支持。

以上是ES6(ES2015)及以后:了解JavaScript版本的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板