《JavaScript 的诞生》

JavaScript的历史

JS发明人生平(独立篇)

1961年——布兰登(Brendan Eich)生于美国,后由物理学转数学与计算机学位,此后工作7年(负责操作系统与网络开发),又工作三年(负责微内核与电子信号处理相关工作)

1995年——进入网景公司(开发了JS功能)

1998年——协助成立Mozilla.org,担任首席架构师

2014年——晋升CEO,十天后下台(因捐助反同性恋法案)

2015年——成立Brave公司,开发保护隐私的浏览器

一、JS肇始于网景

1993年——NCSA发表了NCSA Mosaic,这是最早流行的图形接口网页浏览器

1994年——Mosaic的主要开发人员随即创立了Netscape公司,并雇用了许多原来的NCSA Mosaic开发者用来开发Netscape Navigator,该公司的目标是取代NCSA Mosaic成为世界第一的网页浏览器。在四个月内,已经占据了四分之三的浏览器市场,并成为1990年代互联网的主要浏览器

1995年——网景招募了布兰登,目标是把Scheme语言嵌入到Netscape Navigator浏览器当中。但更早之前,网景已经跟Sun公司合作在Netscape Navigator中支持Java,这时网景内部产生激烈的争论。后来网景决定发明一种与Java搭配使用的辅助脚本语言并且语法上有些类似,这个决策导致排除了采用现有的语言,例如Perl、Python、Tcl或Scheme。为了在其他竞争提案中捍卫JavaScript这个想法,公司需要有一个可以运作的原型

1995年5月——布兰登仅花了十天时间就把原型设计了出来,最初命名为Mocha。同年9月,在Netscape Navigator 2.0的Beta版中改名为LiveScript,同年12月,Netscape Navigator 2.0 Beta 3中部署时被重命名为JavaScript,当时网景公司与Sun公司组成的开发联盟为了让这门语言搭上Java这个编程语言“热词”,因此将其临时改名为JavaScript,日后这成为大众对这门语言有诸多误解的原因之一

二、浏览器大战

1996年8月——微软IE3发布,支持JScript。此时的微软实现了JS

1996年11月——网景向ECMA提交语言标准,由于版权问题,JS语言标准叫ECMAScript

三、网景之死

1998年——网景浏览器节节败退(缘由:微软IE浏览器由于捆绑进了Windows,很快超越网景),网景公司内忧外患。同年,网景殊死一搏,将浏览器开源(Firefox),最终,市场并没有因此买单

1998年年底——美国在线AOL宣布开始收购网景,收购后网景团队程序员纷纷表示被解雇,布兰登在之后一直协助维护Firefox的运营

四、IE6如日中天

2001年——IE6随着WindowsXP一起发布

2004年——IE6全球市场占有率80%以上。(但IE6不兼容W3C标<主要是CSS>且不断爆出安全漏洞。此时,Firefox打算涅槃重生,重新打败IE)

2005年——IE7发布,但是打不过IE6

2006年——主流浏览器为IE6和Firefox

2010年,中国大部分浏览器还是IE6(由于盗版WindowsXP在国内盛行,多年里IE6始终占据着中国浏览器市场)

五、Chrome横空出世

微软的懈怠:

由于IE6的巨大成功,微软没有了竞争对手,直接解散了IE6开发团队

Firefox的出现让微软重组IE团队,但不是同一队人,完成IE7和8一直问题不断

谷歌抓住机会:

2004年——谷歌雇用了一些Firefox和IE的开发者

2008年——Chrome终于发布,迅速拿下1%份额

2011年——Chrome份额超过Firefox

2016年——Chrome全球份额62%

六、JavaScript兴起

2004年——愚人节,谷歌发布Gmail在线网页(当时人们认为网页只能用来看新闻和图片,Gmail的发布让用户和开发者眼前一亮。)

2005年——Jesse将谷歌用到的技术命名为AJAX(自此,前端技术正式出现,在此之前的网页开发都是由后端和设计师完成。)

2006年——jQuery发布,是目前最长寿的JS库(后来的十年,jQuery大放异彩,直到IE不行)

JavaScript诞生记

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

1995年——Sun公司将Oak语言改名为Java,正式向市场推出。网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。

1995年4月——此时,34岁的系统程序员布兰登登场了。网景公司录用了他。布兰登的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言作为网页脚本语言的可能性。

1995年5月——网景公司做出决策,未来的网页脚本语言必须"看上去与Java足够相似",但是比Java简单,使得非专业的网页作者也能很快上手。这个决策实际上将Perl、Python、Tcl、Scheme等非面向对象编程的语言都排除在外。于是布兰登临危受命,被指定为这种"简化版Java语言"的设计师。为应付公司安排的任务,他只用10天时间就把Javascript设计了出来。

JavaScript的十个设计缺陷

设计缺陷前因(独立篇)

1. 设计阶段过于仓促:Javascript的设计,其实只用了十天。而且,设计师是为了向公司交差,本人并不愿意这样设计。另一方面,这种语言的设计初衷,是为了解决一些简单的网页互动(比如,检查"用户名"是否填写),并没有考虑复杂应用的需要。设计者做梦也想不到,Javascript将来可以写出像Gmail这种极其庞大复杂的网页。

2. 没有先例:Javascript同时结合了函数式编程和面向对象编程的特点,这很可能是历史上的第一例。而且直到今天为止,Javascript仍然是世界上唯一使用Prototype继承模型的主要语言。这使得它没有设计先例可以参考。

3. 过早标准化:Javascript的发展非常快,根本没有时间调整设计。1995年5月,设计方案定稿;10月,解释器开发成功;12月,向市场推出,立刻被广泛接受,全世界的用户大量使用。Javascript缺乏一个从小到大、慢慢积累用户的过程,而是连续的爆炸式扩散增长。大量的既成网页和业余网页设计者的参与,使得调整语言规格困难重重。

一、不适合开发大型程序

Javascript没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。

二、非常小的标准库

Javascript提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备。

三、null和undefined

null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。两者非常容易混淆,但是含义完全不同。在编程实践中,null几乎没用,根本不应该设计它。

四、 全局变量难以控制

Javascript的全局变量,在所有模块中都是可见的;任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性。

五、 自动插入行尾分号

Javascript的所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误。比如,某个函数根本无法达到预期的结果,返回值不是一个对象,而是undefined。原因是解释器自动在return语句后面加上了分号。

六、加号运算符

+号作为运算符,有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。如果一个操作项是字符,另一个操作项是数字,则数字自动转化为字符。这样的设计,不必要地加剧了运算的复杂性,完全可以另行设置一个字符连接的运算符。

七、NaN

NaN是一种数字,表示超出了解释器的极限。与其设计NaN,不如解释器直接报错,反而有利于简化程序。

八、数组和对象的区分

由于Javascript的数组也属于对象(object),所以要区分一个对象到底是不是数组,相当麻烦。

九、== 和 ===

==用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。因此,推荐任何时候都使用"==="(精确判断)比较符。

十、基本类型的包装对象

Javascript有三种基本数据类型:字符串、数字和布尔值。它们都有相应的建构函数,可以生成字符串对象、数字对象和布尔值对象。与基本数据类型对应的对象类型,作用很小,造成的混淆却很大。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript的历史 1994年,网景公司成立。 1995年,布莱登进入网景公司,公司要求给浏览器添加一个脚...
    我是WilliamWang阅读 3,134评论 0 1
  • 背景:1995年,34岁的系统程序员Brendan Eich被网景公司录用,为了应付公司安排的任务,他只用10天就...
    jiejie_coding阅读 1,488评论 0 1
  • JavaScript的诞生 布兰登1995年任职于网景期间,为网景浏览器开发出JavaScript,之后成为浏览器...
    快到碗里阅读 1,547评论 0 1
  • 概述JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、函数...
    pang猴子阅读 2,682评论 0 0
  • JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、函数先行...
    shangjingfan阅读 1,846评论 0 0