JavaScript与ECMAScript(ES6~ES10)发展和新特性介绍,看这一篇就够了

本文深入探讨了JavaScript的起源、历史及其与ECMAScript的关系,包括两者之间的差异。详细梳理了从ES6到ES10的主要新特性,如async/await、Promise.finally、正则表达式增强等,并提供了相关资源链接,是一篇全面了解JavaScript和ECMAScript发展历程的指南。
摘要由CSDN通过智能技术生成

JavaScript和ES的文章和介绍还是比较多的,但是大部分不够全面和比较老,
我这里结合最新请再梳理总结一下,使用各位大佬的都加了链接,如果有版权问题请联系我修正。
网上各种【看这一篇就够了】,这里名字也俗气一把跟个风吧。

JavaScript是什么

JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。

JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和函数式风格。

虽然它是作为开发Web页面的脚本而出名的,但是它也被用到了很多非浏览器环境中,比如Nodejs。

遵从ECMAScript标准。

虽然Javascript有比较灵活,但也有很多缺点,比如它没有名称空间,弱类型导致不太适合大项目开发。
现在比较火的Typescript就很大程度解决了Javascript的缺点。这里不再详述,

关于JavaScript的缺点,请参见阮一峰大神的Javascript的10个设计缺陷http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html

JavaScript的历史

网上关于JS的历史有很多文章参考,我这里也简单列一点。

阮一峰大神的【Javascript诞生记】
http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html

From 码农翻身 的版本 
https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513059&idx=1&sn=a2eaf97d9e3000d15a33681d1b720463#rd

英文的(可能要科学上网)
https://auth0.com/blog/a-brief-history-of-javascript/

【Javascript高级程序设计】里面也有相关历史介绍,这里就不多介绍了,有兴趣大家自己看一下吧。

这里主要说明

为什么叫做JavaScript,和Java是否有关系

1995年Sun公司将Oak语言改名为Java,大力宣传其"一次编写,到处运行"(Write Once, Run Anywhere)的特点。
java俨然是明日之星,因此Netscape和Sun进行合作。

由于Netscape但是正缺少一种网页脚本语言,初衷是开发一种能够在 NetscapeNavigator 中运行的类似 Java 的语 言 ,
但 Java 的语 言规范太复杂且不灵活,所 以最终放弃了对 Java 特性和 语法的效仿。
Netscape的管理层当时特别看好Java,要求未来的网页脚本语言要和java类似,但是要简单,能够快速上手。
但是当时的设计者Brendan Eich对Java并不感冒,借鉴了C,self,Scheme,java。只用了10天就写出了Javascript。
因此其实Javascript原创的内容并不多。当然大神自己也想不到他10天开发的Javascript日后会这么流行。

Netscape 公司的市场团队 与 Sun 公司达成协议,将这门语言命名为 JavaScript,
搭上 Java 这个热门词汇作为 一 种市场推广手段。一 直沿用至今。

ECMAScript发展

 

JavaScript和ECMAScript的关系

因为微软山寨开发了一门相似的语言叫 JScript。开发者会面临兼容的问题,未来的差异性可能会更大。

1997 年,网景公司将 JavaScript 1.1 为蓝本提交给欧洲计算机制造协会(ECMA),
该协会负责将 JavaScript 标准化为一种通用的、跨平台、供应商中立的脚本语言。
经过数个月的努力完成了 ECMA-262 —— 定义一种名为 ECMAScript语言标准。

EMACScript (ECMA-262)只是定义了基础的语法和语义的标准,跟具体的浏览器环境没有关系。
EMACScript 来源于 JavaScript,又反向作为 JavaScript 的标准。

JavaScript 的含义比 ECMA-262 中规定的多。 JavaScript 实现应该由三部分组成:

  • 核心(ECMAScript)
  • 文档对象模型(DOM)
  • 浏览器模型(BOM)

ECMA规范最终由TC39敲定。TC39由包括浏览器厂商在内的各方组成,他们开会推动JavaScript提案沿着一条严格的发展道路前进。 从提案到入选ECMA规范主要有以下几个阶段:

  • Stage 0: strawman——最初想法的提交。
  • Stage 1: proposal(提案)——由TC39至少一名成员倡导的正式提案文件,该文件包括API事例。
  • Stage 2: draft(草案)——功能规范的初始版本,该版本包含功能规范的两个实验实现。
  • Stage 3: candidate(候选)——提案规范通过审查并从厂商那里收集反馈
  • Stage 4: finished(完成)——提案准备加入ECMAScript,但是到浏览器或者Nodejs中可能需要更长的时间。

(部分参考:https://juejin.im/post/5ca2e1935188254416288eb2)

当前最新的ECMAScript标准:ECMA-417(June 2019)
https://ecma-international.org/publications/standards/Ecma-417.htm

ECMA最新新闻
https://www.ecma-international.org/news/index.html

下图的标准制定流程,网上找到请参考,图上已有出处。

ECMAScript历史版本

ECMAScript 1

1997年6月发布:

本质上与javascript 1.1 相同

只不过只不过删除了所有针对浏览器的代码并作了一些较小的改动:ECMAScript要求支持Unicode标准,而且对象也变成了平台无关的。


ECMAScript 2

1998年6月发布:

主要是编辑加工的结果。这一版的内容更新是为了与ISO/IEC-16262保持严格一致,没有作任何新增、修改或删节处理。

因此,一般不使用第2版来衡量ECMAScript实现的兼容性。


ECMAScript 3

1999年12月发布:

是对ECMAScript标准第一次真正的修改。

新增了对正则表达式、新控制语句、try-catch异常处理的支持,修改了字符处理、错误定义和数值输出等内容。

从各方面综合来看,第3版标志着ECMAScript成为了一门真正的编程语言。也成为JavaScript的通行标准,得到了广泛支持。


ECMAScript 4

2007年10月ECMAScript 4.0版草案发布

对3.0版做了大幅升级,预计次年8月发布正式版本。

草案发布后,由于4.0版的目标过于激进,各方对于是否通过这个标准,发生了严重分歧。

以Yahoo、Microsoft、Google为首的大公司,反对JavaScript的大幅升级,主张小幅改动;
以JavaScript创造者Brendan Eich为首的Mozilla公司,则坚持当前的草案。

2008年7月ECMAScript 4.0发布前被废弃

由于对于下一个版本应该包括哪些功能,各方分歧太大,争论过于激进,ECMA开会决定,中止ECMAScript 4.0的开发(即废除了这个版本)。

将其中涉及现有功能改善的一小部分,发布为ECMAScript3.1,而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为Harmony(和谐)。

会后不久,ECMAScript 3.1就改名为ECMAScript 5。


ECMAScript 5

2009年12月发布:

ECMAScript 5.0版发布:

Harmony项目则一分为二,
一些较为可行的设想定名为JavaScript.next继续开发,后来演变成ECMAScript 6;
一些不是很成熟的设想,则被视为JavaScript.next.next,在更远的将来再考虑推出。

TC39的总体考虑是,ECMAScript5与ECMAScript3基本保持兼容,较大的语法修正和新功能加入,将由JavaScript.next完成。
(当时,JavaScript.next指的是ECMAScript 6。第六版发布以后,将指ECMAScript 7)
该版本力求澄清第3版中的歧义,并添加了新的功能。

新功能包括:原生JSON对象、继承的方法、高级属性的定义以及引入严格模式。

2011年6月发布:

ECMAscript 5.1版发布:

并且成为ISO国际标准(ISO/IEC16262:2011)。到了2012年底,所有主要浏览器都支持ECMAScript 5.1版的全部功能


ECMAScript 6 (ECMAScript 2015, ES6

2015年6月发布:

ECMAScript 6正式发布,并且更名为“ECMAScript 2015”。

这是因为TC39委员会计划,以后每年发布一个ECMAScirpt的版本,下一个版本在2016年发布,称为“ECMAScript 2016”。

从现在开始,新版本将按照ECMAScript+年份的形式发布。

S6是继S5之后的一次主要改进,语言规范由ES5.1时代的245页扩充至600页。尽管ES6做了大量的更新,但是它依旧完全向后兼容以前的版本。

ES6增添了许多必要的特性,新功能包括:模块和类以及一些实用特性,例如Maps、Sets、Promises、生成器(Generators)等。

(以上大部分来自:https://www.jianshu.com/p/11b58d1bfeed)


ECMAScript 7 (ECMAScript 2016,ES7

2016年6月《ECMAScript 2016 标准》发布。

与前一年发布的版本相比,它只增加了两个较小的特性。

从 ES2016 开始,ECMAScript 标准的制定原则是成文标准要从事实标准中诞生实现先于标准存在
进入标准草案必须有 JavaScript 引擎实现的支持(按照流程,起码要 2 个 JavaScript 引擎的稳定实现,而主流常青浏览器里 JavaScript 引擎总共也才 4 个:FireFox 的 SpiderMonkey,IE/Edge 的 Chakra,Chrome/Opera 的 V8,Safari 的 JavaScriptCore )+ 社区里有充分的人气 + 足够的 test 262 测试,这样才符合每年都发布新版标准的节奏而不至于用各种不成熟的特性 break the Web。
所以 ECMAScript 标准现在相当于事实标准的 Snapshot 而已 。
新的迭代标准的第一年,很多革命性的变更已经在ES6发布了,才导致ES7只有2个比较小的更新。
(部分来自 https://www.zhihu.com/question/39993685/answer/84166978)


ECMAScript 8 (ECMAScript 2017,ES8

2017年6月,《ECMAScript 2017 标准》由 TC39 正式发布,

代表性的特征包括了字符串填充、对象值遍历、对象的属性描述符获取、 函数参数列表与调用中的尾部逗号、
异步函数、共享内存与原子操作等。

  • async/await
  • Object.values()
  • Object.entries()
  • String padding: padStart()padEnd(),填充字符串达到当前长度
  • 函数参数列表结尾允许逗号
  • Object.getOwnPropertyDescriptors()
  • ShareArrayBufferAtomics对象,用于从共享内存位置读取和写入

最主要的是正式引入了 async 函数,使得异步操作的写法出现了根本的变化。


ECMAScript 9 (ECMAScript 2018,ES9

2018年6月,《ECMAScript 2018 标准》由 TC39 正式发布,

  • 异步迭代
  • Promise.finally()
  • Rest/Spread 属性
  • 正则表达式命名捕获Group
  • 正则表达式反向断言
  • 正则表达式dotAll模式
  • 正则表达是Unicode转义
  • 非转义序列模版字符串

ECMAScript 10 (ECMAScript 2019,ES10

ECMAScript 2019,ECMA-262 (ES2019或ES10),于 2019 年 6 月完成。

  • 行分隔符(U + 2028)和段分隔符(U + 2029)符号现在允许在字符串文字中,与JSON匹配
  • 更加友好的 JSON.stringify
  • 新增了Array的flat()方法和flatMap()方法
  • 新增了String的trimStart()方法和trimEnd()方法
  • Object.fromEntries()
  • Symbol.prototype.description
  • String.prototype.matchAll
  • Function.prototype.toString()现在返回精确字符,包括空格和注释
  • 简化try {} catch {},修改 catch 绑定
  • 新的基本数据类型BigInt
  • globalThis
  • import()
  • Legacy RegEx
  • 私有的实例方法和访问器

ES6,ES7,ES8,ES9,ES10新特性

关于这些新特性,已经有好多文章介绍,这里就不在重复转载了

记载比较详细的这篇
https://juejin.im/post/5ca2e1935188254416288eb2#heading-34

有思维导图的这篇,把图暂时转过来
https://zhuanlan.zhihu.com/p/84738394

参考(转载)链接:

https://blog.csdn.net/haha_zhejiejie/article/details/79098512
https://auth0.com/blog/a-brief-history-of-javascript/
https://www.jianshu.com/p/e6132e71daee
https://juejin.im/post/5ca2e1935188254416288eb2
https://www.jianshu.com/p/13c5d002478b
https://www.zhihu.com/question/39993685
https://www.jianshu.com/p/a138a525c287
https://www.jianshu.com/p/57263c84d284
http://javascript.ruanyifeng.com/
https://github.com/ManzDev/frontend-evolution
JavaScript语言的历史
ECMAScript各版本简介及特性
https://zhuanlan.zhihu.com/p/84738394
https://www.holidaypenguin.com/blob/2019-04-17-new-features-of-javsscript-es10-&-es2019/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值