JS历史小记

487 阅读5分钟

开始于网景

1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。

网景公司当时有两个选择:一个是采用现有的语言,比如Perl、Python、Tcl、Scheme等等,允许它们直接嵌入网页;另一个是发明一种全新的语言。这两个选择各有利弊。第一个选择,有利于充分利用现有代码和程序员资源,推广起来比较容易;第二个选择,有利于开发出完全适用的语言,实现起来比较容易。1995年Sun公司将Oak语言改名为Java,正式向市场推出,其宣扬的“一次编写,到处运行”的特性,令网景决定与Sun公司结盟。 同年(1995年),网景公司招进了布莱登,要求目标是把Scheme语言嵌入到Netscape Navigator浏览器当中,使得浏览器可以与网页互动。但由于之前,网景已经跟sun合作在Netscape Navigator中支持Java,这时网景内部产生激烈的争论。

之后,网景决定发明一种与Java搭配使用的辅助脚本语言并且语法上有些类似,能使得非专业人员迅速上手使用。然而为了在其他竞争提案中捍卫JavaScript这个想法,公司急需有一个可以运作的原型。于是布莱登在1995年5月仅花了十天时间就把原型设计出来了。

之后,网景与sun公司联合推入此语言市场,为了蹭Java的流量,命名为JavaScript。

浏览器大战

JavaScript推出后在浏览器上大获成功,微软公司在不久后就为IE3浏览器推出了JScript。JScript是JavaScript的翻版,这两个版本共存意味着语言标准化的缺失。发展初期,JavaScript的标准并未确定,同期有网景的JavaScript,微软的JScript双峰并峙。除此之外,微软做了一点“手脚”,使不少网页使用非微软平台及浏览器无法正常显示,导致在浏览器大战期间网页设计者通常会把“用Netscape可达到最佳效果”或“用IE可达到最佳效果”的标志放在主页。随着IE4的发布,微软引入了动态HTML的概念,但由于标准化的缺失,每家浏览器脚本不太一样,阻碍了JavaScript的普及进程。

由于IE浏览器捆绑进了Windows,导致IE在浏览器大战中占了上风。1998年,节节败退的网景放手一搏,将浏览器开源,同年11月网景被AOL收购。在之后的很长一段时间中,IE浏览器一直统治着市场。2001年IE6随着XP一同发布,在2004年时,IE6的市场份额便已超过80%,由于Windows XP在中国的风行,IE6在非常长的一段时间中统治者中国浏览器市场。

网景在被收购钱建立开放源代码计划Mozilla,并成立了相应组织。网景的火种就此流传下来,Firefox也通过Mozilla孕育诞生,在与IE的竞争中一度占据不小的份额。

而Chrome浏览器在2008年发布时便迅速拿下1%份额,在2011年时超过Firefox,在2016年达62%,成为最主流的浏览器。

标准化

1996年11月,网景正式向ECMA(欧洲计算机制造商协会)提交语言标准。1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262,为第一版。1999年12月发布第三版,为使用最广泛的版本。直至2009年12月才发布了第五版,中间曾发布第四版,但最终流产。2015年6月发布第六版,为目前新浏览器均支持的版本。之后每年发布一版,版本号以年份命名。

ECMAScript是纸上的标准,JS是浏览器的实现,前者往往落后于浏览器,因为制订过程是先实现后写进标准。

JS设计缺陷

有三个客观原因导致设计缺陷:

  1. 设计阶段过于仓促
  2. 没有先例。JS同时结合函数式编程和面向对象编程,目前仍然是位移使用Prototype继承模型的主要语言。
  3. 过早的标准化。推出一年半后国际标准便问世,规格未能充分调整。

设计缺陷有:设计缺陷:不适合开发大型程序;提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备;null和undefined两者非常容易混淆,但是含义完全不同;全局变量难以控制;自动插入行尾分号;加号运算符、NaN、== 和 ===的使用、基本类型的包装对象的理解、数组和对象的区分令人头疼等。

以上内容有参考于:

  1. Javascript诞生记
  2. Javascript的10个设计缺陷