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

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
JavaScript数据类型:浏览器和nodejs之间是否有区别?JavaScript数据类型:浏览器和nodejs之间是否有区别?May 14, 2025 am 12:15 AM

JavaScript核心数据类型在浏览器和Node.js中一致,但处理方式和额外类型有所不同。1)全局对象在浏览器中为window,在Node.js中为global。2)Node.js独有Buffer对象,用于处理二进制数据。3)性能和时间处理在两者间也有差异,需根据环境调整代码。

JavaScript评论:使用//和 / * * / * / * /JavaScript评论:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:开发人员的比较分析Python vs. JavaScript:开发人员的比较分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

Python vs. JavaScript:选择合适的工具Python vs. JavaScript:选择合适的工具May 08, 2025 am 12:10 AM

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript:了解每个的优势Python和JavaScript:了解每个的优势May 06, 2025 am 12:15 AM

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

JavaScript的核心:它是在C还是C上构建的?JavaScript的核心:它是在C还是C上构建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript应用程序:从前端到后端JavaScript应用程序:从前端到后端May 04, 2025 am 12:12 AM

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

Python vs. JavaScript:您应该学到哪种语言?Python vs. JavaScript:您应该学到哪种语言?May 03, 2025 am 12:10 AM

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能