JavaScript的发展史

声明:

本文为转载文章,由微信公众号 -《前端技术江湖》整理

原文链接: https://mp.weixin.qq.com/s/62U2qLeN4dz9Si68yhDohA

从公众号中了解到了这篇文章,写的很全面,详细讲解了JavaScript语言的发展史,于是就转载了这篇文章,分享给大家,让大家了解其发展历史,这是学前端必须要掌握了解的知识。

Nombas 和 ScriptEaseh

大概在 1992 年,一家称作 Nombas 的公司开发了一种叫做 C 减减(C-minus-minus,简称 Cmm)的嵌入式脚本语言。Cmm 背后的理念很简单:一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与 C (和 C ++)足够的相似性,以便开发人员能很快学会。这个脚本语言捆绑在一个叫做 CEnvi 的共享软件中,它首次向开发人员展示了这种语言的威力。

Nombas 最终把 Cmm 的名字改成了 ScriptEase,原因是后面的部分(mm)听起来过于消极,同时字母 C “令人害怕”。

现在 ScriptEase 已经成为了 Nombas 产品背后的主要驱动力。

Mosaic

1992 年浏览器中大部分是单纯的 HTML 查看器,用户还需要依靠外部辅助应用程序来查看图片等富媒体内容。真正让大家眼前一亮的产品是 Mosaic,第一个可以显示图片的浏览器。这是美国国家超级电脑应用中心(NCSA)在 1993 年开发的一款适用于多平台的网页浏览器,Mosaic 是第一个被人普遍接受的浏览器,它让许多人了解了Internet 。它的技术随后被授权给了多家公司,于是,商业公司们也可以基于其上开发新产品了。

在这些商业公司里,最值得注意的一家叫网景。还有一家,叫微软。

Mosaic 页面不错哦。

Netscape 和 JavaScript(LiveScript)

1994年Mosaic研发的核心成员马克·安德森(Marc Andreessen)和几何图形发生器的发明人吉姆·克拉克(Jim.H.Clark)共同创立了Mosaic Communication Corporation。同年11月为了避免与NCSA的法律纠葛,公司更名为Netscape Communication Corporation即网景公司,并一直沿用。

说明 : NCSA:美国国家超级计算机应用中心

二人试图打破Mosaic的垄断并取得业界的领导地位。所以研发了一款新浏览器,名为 Netscape Navigator,即“导航者”。对内其1.0版本的研发代号则为Mozilla!网景公司员工也常将其称作Moz或Mozzie。

当 Netscape Navigator 崭露头角时,Nombas 开发了一个可以嵌入网页中的 CEnvi 的版本。这些早期的试验被称为 Espresso Page(浓咖啡般的页面),它们代表了第一个在万维网上使用的客户端语言。而 Nombas 丝毫没有料到它的理念将会成为万维网的一块重要基石。

JavaScript的雏形出现了 - 注意,是Nombas。

发现问题

当网上冲浪越来越流行时,对于开发客户端脚本的需求也逐渐增大。此时,大部分因特网用户还仅仅通过 28.8 kbit/s 的调制解调器连接到网络,即便这时网页已经不断地变得更大和更复杂。而更加加剧用户痛苦的是,仅仅为了简单的表单有效性验证,就要与服务器进行多次地往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了 30 秒的处理后,看到的却是一条告诉你忘记填写一个必要的字段。

那时正处于技术革新最前沿的 Netscape,开始认真考虑开发一种客户端脚本语言来解决简单的处理问题。

Eich是在1995年4月加入Netscape,当时Netscape 1.1已经发布。Eich是被请来开发运行在浏览器上的编程语言,是基于Scheme,而Eich是通过《Structure and Interpretation of Computer Programs》这本书学会了Scheme。结果到了Netscape后他被告知Netscape正与Sun合作在Java基础上开发新的语言,不要Scheme了。JavaScript的开发代号是Mocha,Eich认为Java并不适合被业余程序员或新手使用。

Netscape 的 Brendan Eich,开始着手为即将在 1995 年发行的 Netscape Navigator 2.0 开发一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。Netscape 与 Sun 及时完成 LiveScript 实现。

就在 Netscape Navigator 2.0 即将正式发布前,Netscape 将其更名为 JavaScript,目的是为了利用 Java 这个因特网时髦词汇。Netscape 的赌注最终得到回报,JavaScript 从此变成了因特网的必备组件,网景也得到了物质回报。

1995年8月9日,公司首次公开募股获得巨大成功。原本股票价值,为每股14美元,但因这个临时决定,股价倍增至每股28美元。第一天收市,股价升至每股75美元,几乎是当时创记录的“首日获利”。1995年,该公司的收入每季上升一倍。

微软和Jscript

一直到 1995 年中,市场上的网页浏览器标准都以 Netscape 主导,没公司相争,也没公司想争。随着网景的发展,它已多次尝试创做一种能够让用户通过浏览器操作的网络应用系统。这引起微软注意,担心网景可能威胁到微软的操作系统和应用程序市场。

这个就类似于微信客户端是苹果手机的一款应用,但是微信自己还搞了一个内置应用——小程序,这会直接影响苹果商店的应用使用问题,苹果当然会很警惕,只不过在这次较量中微信的头比苹果的硬而已。

微软是第一个破局者。微软作为IT界老大,看到JavaScript 1.0 如此成功必然心里不舒服,于是在1995年买下Mosaic的授权,在获取 Mosaic 的授权后,微软迅速推出了 Internet Explorer 1.0,并于 1995 年 8 月起通过“Windows 95 Plus ! ”搭配出售。

但是我们要清楚一点,微软最初的商业侧重点并不是互联网,而是PC 操作系统这块市场,到底是谁给了微软这么大的决心,要和几乎已经在浏览器市场坐稳的网景公司“背水一战”?

是比尔盖茨。

1995 年 5 月 26 日,比尔盖茨向微软内部所有员工发送了一份名为“互联网潮汐”的备忘录。在备忘录里,盖茨明确表示,他打算集中公司所有的技术力量,all in 互联网。

盖茨在这份备忘录里发出警示:“互联网用户聚集在一起,也许会创造出比 PC 更有价值的东西。目前我不认为我们的产品可以做到,不过,我们已经找到了一个出生在互联网上的对手,Netscape,它是我们必须要打败的。”

三个月后,IE 2.0 正式上线,网景和微软的战争就此真正开始。

随后,1996年8月13日,微软IE3发布。IE 3.0 搭载了一个 JavaScript 的克隆版,叫做 JScript(这样命名是为了避免与 Netscape 潜在的许可纠纷)。微软进军浏览器市场,双方激烈竞争就此展开。网景公司的Netscape Navigator与微软公司的Internet Explorer之间的竞争,后来被称为“浏览器大战”。

IE 势头凶猛

网景和微软的员工不仅暗地里牟足了劲,明面上也剑拔弩张。

1997 年 10 月,IE 4.0正式推出,微软在旧金山举行产品发布会,竖起了一个 10 尺长的巨型“e”标志。

第二天早上,Netscape 的员工们惊讶地发现,这个标志跑到了自家的草坪上,而且上面赫然写上了来自对手的挑衅:“We Love You,From the IE team”。

这让 Netscape 十分愤怒,他们立刻上前一把推翻对手的标志,然后摆上自己的恐龙吉祥物把微软标志踩在脚下。而且,恐龙手上拿了一个展板,上面写着“Netscape 72, Microsoft 18”(代表当时“ IE 弱 Netscape 强”的市场格局)。

这种小事只是插曲。随着 IE 4.0 的推广,微软越战越猛,而网景颓势渐显。

微软步入 Web 浏览器领域的这重要一步虽然令其声名狼藉,但也成为 JavaScript 语言发展过程中的重要一步。

三足鼎立与标准化

在微软进入后,有 3 种不同的 JavaScript 版本同时存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。与 C 和其他编程语言不同的是,JavaScript 并没有一个标准来统一其语法或特性,而这 3 种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。

1997 年,JavaScript 1.1 作为一个草案提交给欧洲计算机制造商协会(ECMA)。

名词解释:ECMA

这个组织的目标是评估,开发和认可电信和计算机标准。大家决定把ECMA的总部设在日内瓦是因为这样能够让它与其它与之协同工作的标准制定组织更接近一些,比方说国际标准化组织(ISO)和国际电子技术协会(IEC)。ECMA是“European Computer Manufacturers Association”的缩写,中文称欧洲计算机制造联合会。是1961年成立的旨在建立统一的电脑操作格式标准–包括程序语言和输入输出的组织。- 来自百度百科

第 39 技术委员会(TC39)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”(http://www.ecma-international.org/memento/TC39.htm)。由来自 Netscape、Sun、微软、Borland 和其他一些对脚本编程感兴趣的公司的程序员组成的 TC39 锤炼出了 ECMA-262,该标准定义了名为 ECMAScript 的全新脚本语言。

在接下来的几年里,国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。

名词解释:TC39

TC39(Technical Committee #39)39号技术委员会

  1. TC93制定了ECMA-262标准。

  2. ECMA-262是ECMAScript的标准,ECMA-262定义了ECMAScript。

  3. 由ECMA-262定义的ECMAScript与web服务器没有依赖关系。ECMA-262定义的只是ECMAScript的语言基础。我们常见的web浏览器只是ECMAScript实现可能的宿主环境之一。宿主环境不仅提供基本的ECMAScript实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互。

  4. Javascript实现了ECMAScript。

  5. 尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:
    a、核心(ECMAScript)
    b、文档对象模型(DOM)
    c、浏览器对象模型(BOM)

ECMAScript版本

ECMA-262第 1 版(1997年6月)本质上与 Netscape 的 JavaScript 1.1相同——只不过作了一些较小的改动:

  1. 删除了所有针对浏览器的代码。
  2. 支持 Unicode标准(从而支持多语言开发)。
  3. 对象与平台无关(Netscape JavaScript 1.1的对。
  4. 象在不同平台中的实现不一样,例如 Date 对象)。

这三条规则奠定了JavaScript的可移植性,比如现在比较火爆的node.JS,是一门服务端语言。试想一下如果JavaScript的特性与特定的浏览器绑定的话,前端将是多么混乱的世界。所以,站的高度不同,分析问题的角度,解决问题的角度也会不同,这就是传说中的格局?

这也是 JavaScript 1.1和 1.2与 ECMA-262第 1版不一 致的主要原因。

ECMA-262第 2 版(1998年8月)

主要是编辑加工的结果。这一版中内容的更新是为了与 ISO/IEC-16262保持严格 一致,没有作任何新增、修改或删节处理。因此,一般不使用第 2版来衡量 ECMAScript实现的兼容性。

ECMA-262第 3 版(1999年12月)

ECMA-262第 3 版 才是对该标准第一次真正的修改。修改的内容涉及字符串处理、错误定义和数 值输出。这一版还新增了对正则表达式、新控制语句、try-catch 异常处理的支持,并围绕标准的 国际化做出了一些小的修改。从各方面综合来看,第 3版标志着 ECMAScript成为了一门真正的编程 语言。

ECMA-262第 4 版

ECMA-262第 4 版对这门语言进行了一次全面的检核修订。由于 JavaScript在 Web 上日益流行,开 发人员纷纷建议修订 ECMAScript,以使其能够满足不断增长的 Web 开发需求。作为回应,ECMA TC39 重新召集相关人员共同谋划这门语言的未来。结果,出台后的标准几乎在第 3版基础上完全定义了一门 新语言。

第 4版不仅包含了强类型变量、新语句和新数据结构、真正的类和经典继承,还定义了与数据 交互的新方式。与此同时,TC39下属的一个小组也提出了一个名为 ECMAScript 3.1的替代性建议,该建议只对这 门语言进行了较少的改进。这个小组认为第 4版给这门语言带来的跨越太大了。因此,该小组建议对这门语言进行小幅修订,能够在现有 JavaScript引擎基础上实现。

这也是为什么我们查阅的有关JavaScript资料时,从来没看到过在第四版定义过什么属性或者方法,都是在ES3、ES5中定义的,但也不能说ES4就是废弃物了,现在流行的ES6的原型就是ES4。

终,ES3.1附属委员会获得的支持超过 了 TC39,ECMA-262第 4版在正式发布前被放弃。

ECMA-262第 5版

ECMAScript 3.1 - 著名的 ES5

ECMAScript 3.1成为 ECMA-262第 5版,并于 2009年 12月 3日正式发布。

ECMA-262第 5 版力求澄清第 3 版中已知的歧义并增添了新的功能。新功能包括原生 JSON对象(用于解析和序列化 JSON数据)、继 承的方法和高级属性定义,另外还包含一种严格模式,对 ECMAScript引擎解释和执行代码进行了补充 说明。

ECMAScript 5.1

2011年06月:使规范更符合ISO/IEC 16262:2011第三版。

ECMAScript 6 - ES6

2015年06月:第六版的名字有很多,可以叫ECMAScript 6(ES6),也可以叫ECMAScript 2015(ES2015)。

此版本增加了非常重要的东西:let、const、class、modules、 arrow functions,、template string, destructuring, default, rest argument、binary data、promises等等。

规范地址:http://www.ecma-international.org/ecma-262/6.0/

ECMAScript 7

2016年06月:也被称为ECMAScript 2016。完善ES6规范,还包括两个新的功能:求幂运算符(*)和array.prototype.includes方法。

规范地址:http://www.ecma-international.org/ecma-262/7.0/

ECMAScript 8

2017年06月:增加新的功能,如并发、原子操作、Object.values/Object.entries、字符串填充、promises、await/asyn等等。

规范地址:http://www.ecma-international.org/ecma-262/8.0/

鹿死谁手?

这是一场从一开始就不公平的对决。

微软始终拥有两大优势:第一,财力雄厚。Netscape 浏览器虽然一度达到 90% 以上的占有率,但网景公司规模不大,加上只有浏览器及相关产品,总收入拍马也赶不上微软。第二,Windows 早就垄断了操作系统市场。就算 IE 在早期的评价不如 Netscape,微软只要把 IE 和 Windows 捆绑销售,就可以迅速提升市占率。再加上 IE 的免费政策,只要等到 IE 产品功能和 Netscape 差不多了,大多数用户自然会逐渐放弃 Netscape,转向 IE。

凭借这两个优势,微软的策略也是妙招不断:

1、切断 Netscape 财源。既然 Netscape 通过销售服务器软件来发布浏览器赚钱,那么微软也开发类似的产品,而且专门往便宜了卖,积极开打价格战。

2、看重市场推广。在授权 Windows 给其他主机厂商的时候,微软要求对方必须在桌面展示 IE 的图标,不能加入 Netscape,否则就以涨价威胁。

3、统一战线。把中小型 ISP(网络提供商)、电信运营商都拉入战局,要求他们以 IE 作为主接口,鼓励用户改用 IE 浏览器。

4、布局产业上下游。积极收购知名网页设计工具(比如 FrontPage),故意加入非标准的专属标签,使得作出的网页只适用于 IE 浏览器。

这些手段刀刀命中要害,再加上网景后来在商业决策上犯了错,Netscape 终于在 1998 年年底被 IE 击败。

至此,网页浏览器之争的第一阶段落下帷幕,美国在线(AOL)以 42 亿美元收购网景业务为这场战争划下终点。再往后,IE 逐步成为浏览器市场的霸主,其份额最高达到 2002 年的 96%,比 Netscape 的顶峰还高。

面对微软的强大威胁,Netscape在1998年11月决定将软件免费、且公开所有的程序源码,将主要力量放在商业市场。这个措施几乎还没来得及实施, Netscape就被AOL美国在线所收购。

不过,AOL并非是想开发浏览器同微软的IE竞争,而是将它作为对微软的反垄断案的一个筹码。之后, Netscape虽然陆续发展出4.X、6.X系列乃至7.X系列,但都毫无影响力可言。

微软与AOL的反垄断官司在2003年5月完结, Netscape项目在7月份就被AOL冻结并将大部分Netscape 开发人员解雇,到此为止属于Netscape的时代就完全结束了。

不过AOL还是作了一件好事,所有的Netscape原始代码被送给开源社群自行开发,同时协助成立了非盈利性的“Mozilla基金会(Mozilla Foundation)”,它也是现在Firefox浏览器的管理和推进组织。

现在很多的浏览器都是以之为雏形开发设计的。为了向其致敬,chrome、safari等浏览器代码里都有Browser name: Netscape。

可喜可贺

到了 2008年,五大主流 Web 浏览器(IE、Firefox、Safari、Chrome和 Opera)全部做到了与 ECMA-262兼容。IE8是第一个着手实现 ECMA-262第 5版的浏览器,并在 IE9中提供了完整的支持。Firefox 4也 紧随其后做到兼容。下表列出了 ECMAScript受主流 Web 浏览器支持的情况。

IE也有他功绩的一面

  1. IE4 中率先使用了ajax的模式,写法为 new ActiveXObject(“Microsoft.XMLHTTP”);

  2. IE8 是第一个实现Object.defineProperty()方法的浏览器版本。然而,这个版本的实现存在诸多限制:只能在 DOM对象上使用这个方法,而且只能创建访问器属性。

由于实现不彻底,建议读者不要在 IE8 中使用 Object.defineProperty() 方法。你是否了解Vue实现双向数据绑定的原理?

但是,他做的恶事绝对比他做的好事要多得多

2015年3月,微软确认将放弃IE品牌,代号为“Project Spartan”的新版浏览器被正式命名为“Microsoft Edge”,但IE仍会存在于某些版本的Windows 10中。

2016年1月13日(美国时间12日),微软停止为IE8/9/10这些旧版本的IE 浏览器提供技术支持。微软也最后一次放出了一个更新文件包(KB3123303),里面含有安全更新和“寿终正寝” 的升级提醒。

2018年12月6日上午9点,微软通过其博客官方宣布:未来将采用 Chromium 内核开发桌面版 Edge 浏览器,以便为用户带来更好的 Web 兼容性,并为所有 Web 开发者减少 Web 碎片化。因此,微软计划成为 Chromium 项目的“重要贡献者”。

采用 Chromium 意味着微软将用 Blink 渲染引擎替代自己的 EdgeHTML 引擎,用 V8 替代 Chakra JS 引擎。在 Android 上微软将使用 Blink/Chromium,而 iOS 上将使用 WebKit/WKWebView。对于使用 EdgeHTML 或 Chakra 的 Windows 10 应用,它们可以暂时保持现状,微软最终会向它们提供 Edge 采用的 Chromium 方案。开发者现在可以继续采用旧的方案或切换到 Chromium。

微软还计划将 Edge 浏览器引入 macOS 平台。此外,新版 Edge 可运行在所有受支持的 Windows 版本上,包括 Windows 7 和 Windows 8 系列 —— 直到微软终止支持,而不仅仅是 Windows 10。

所以在更新频率方面,Edge 浏览器也将会与 Windows 10 的更新分离。微软将为 Microsoft Edge 带来更高频率的更新交付。

微软表示,采用 Chromium 内核的 Edge 浏览器预览版将于2019年年初推出。

chrome是Netscape的延续,到底谁嬴了?总之JavaScript已空前强大。

布兰登·艾奇(Brendan Eich),JavaScript的发明人

布兰登·艾奇(生于1961年7月4日),美国技术专家和JavaScript 编程语言的创作者。他共同创办了Mozilla的项目的Mozilla基金会和Mozilla公司,并担任Mozilla公司的首席技术官,并简要的首席执行官。他是Brave Software的首席执行官。

他于1995年4月开始在Netscape Communications Corporation工作.Eich最初加入了打算将Scheme “放入浏览器”,但他的Netscape上司坚持认为该语言的语法要类似于Java,因为网景公司的整个管理层,都是Java语言的信徒,而且网景公司以与Sun公司结成联盟,当时的Sun已经把Java成功地推向了市场。

但是,布兰登·艾奇对Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果Brendan Eich预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?

总的来说,他的设计思路是这样的:1.借鉴C语言的基本语法; 2.借鉴Java语言的数据类型和内存管理; 3.借鉴Scheme语言,将函数提升到”第一等公民”(first class)的地位; 4.借鉴Self语言,使用基于原型(prototype)的继承机制。

如果不是公司的决策,Brendan Eich绝不可能把Java作为Javascript设计的原型。作为设计者,他一点也不喜欢自己的这个作品:”与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:’它的优秀之处并非原创,它的原创之处并不优秀。’ (the part that is good is not original, and the part that is original is not good.)”

一些疑问 和 解释

Javascript 和 java 的关系

Brendan Eich在 1995 年发行的 Netscape Navigator 2.0 开发了一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。Netscape 与 Sun 及时完成 LiveScript 实现。

就在 Netscape Navigator 2.0 即将正式发布前,Netscape 将其更名为 JavaScript,目的是为了利用 Java 这个因特网时髦词汇。Netscape 的赌注最终得到回报,JavaScript 从此变成了因特网的必备组件,网景也得到了物质回报。

所以Javascript有点是蹭热度。

Javascript 和 ECMAScript的区别?

Sun(现在的Oracle)公司持有着“Java”和“JavaScript”的商标。这就让微软不得不把自己的JavaScript方言称之为“JScript”。然后,在这门语言被标准化的时候,就必须使用一个与二者都不同的名字。“ECMAScript”就这样诞生了,这个名字的来由是因为执行标准化的组织是Ecma国际。通常来说,术语“ECMAScript”和“JavaScript”指的是同一个东西。但如果把JavaScript看成是“Mozilla或其他组织的ECMAScript实现”,那么ECMAScript就是实现JavaScript所依据的标准。

为什么有两种叫法 - ES6和 ES2015

在 ES2015 之前,ECMAScript 规范通常按其版本命名。因此,ES5 是 2009 年更新发布的ECMAScript 规范的官方名称。

为什么会这样呢?

在 ES2015 诞生的过程中,这个名字从 ES6 变成了 ES2015 ,原因是由于这个过程比较晚,人们仍然把它习惯性的称为 ES6 ,社区并不是忘记了 ES2015 版本的命名 —— 只不过大家仍然在按照版本号来称呼 ES 的版本。

2015年6月发布:ECMAScript 6正式发布,并且更名为“ECMAScript,从那时开始,新版本将按照ECMAScript+年份的形式发布。

可以根据下图对照一下

ES.Next 始终指示下一版本 JavaScript 的名称。

参考资料

作者:火锅伯南克

https://www.jianshu.com/p/33c1d8505975

https://www.html.cn/archives/9925


希望本文可以让你对 javascript 语言有更多的理解。

另外,如果有想学习前端的小伙伴,可以关注这个作者的公众号哦,前端大佬,写的全是精华文章。