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