- JavaScript实战-JavaScript、jQuery、HTML5、Node.js实例大全(第2版)
- 张泽娜
- 2456字
- 2025-02-24 19:10:51
1.1 认识JavaScript
JavaScript是一个被埋没很久的编程语言,它早在1995年就被布兰登·艾奇(Brendan Eich)设计出来了。
网景(Netscape)公司最初将其脚本语言命名为LiveScript,在与Sun合作之后将其改名为JavaScript,随着Netscape Navigator 2.0(见图1-1)公布于世,虽然想要师出名门的效果,但是网景公司却把它作为非程序人员的编程语言来推广和宣传,非程序开发者并不对其买账,JavaScript由此被埋没长达十年之久。但是JavaScript的确具有很多优秀的特点,近几年的发展势头越来越好,预示着JavaScript春天般的前景。

图1-1 十几年前JavaScript的起源浏览器Netscape Navigator 2.0
1.1.1 浏览器战争
JavaScript一生下来就和浏览器绑在一起,它的发展史就是一部浏览器的战争史。在JavaScript 1.0时期,Netscape Navigator主宰着浏览器市场,微软IE则只是个跟班。
在微软发布IE 3.0(见图1-2)的同时也发布了VBScript语言,同时以JScript的名称发布了一个类似JavaScript的东西,由此缩短了与Netscape Navigator的差距,第一次浏览器世界大战由此展开。

图1-2 IE早期8个版本的LOGO图标
面对竞争,网景(Netscape)公司与Sun公司联合欧洲计算机制造商协会(ECMA)对JavaScript语言进行了标准化,于是出现了ECMA-262标准。由此可见,标准不过是为了竞争而存在的武器。
直到1997年10月,微软IE浏览器发布4.0版本,但是其市场份额仍然不足两成,网景则占据七成。
1999年IE 5.0发布,IE 5.0对CSS 1和CSS 2的支持使得文本渲染得到了增强。
2001微软发布了最具里程碑意义的IE 6.0浏览器,也是在这个时候,微软似乎为其浏览器选定了正确的方向。2002年微软彻底打败网景,占有九成的市场份额,而且与Windows XP的黄金组合统治了互联网多年,到2004年市场份额达到了历史最高点的百分之九十多。
第一次浏览器世界大战宣告结束。
2003年7月,网景将Netscape浏览器源代码开源,同时建立Mozilla Foundation。2004年11月,Mozilla发布第一款Firefox浏览器。第二次浏览器世界大战爆发,时至今日,2008年Google发布的Chrome浏览器、1996年发布的Opera浏览器、2003年苹果发布的Safari浏览器仍在混战中。图1-3是几个具有自主技术的浏览器LOGO。

图1-3 主流浏览器LOGO
遗憾的是,大多数国产浏览器都是OEM“贴牌加工”后的产物,但是在浏览器世界大战中同样可见它们的身影,而且它们还把战线延伸到手机上,如百度浏览器、傲游浏览器、360浏览器、QQ浏览器、搜狗浏览器、金山猎豹浏览器、淘宝浏览器、UC浏览器等。
1.1.2 寄生语言
ECMA-262标准(第2段)说:“ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的……”。
有宿主当然就有寄生,浏览器对于ECMAScript来说是一个宿主环境,但它并不是唯一的宿主环境,比如本书第21章要讲的Node.js也是它的一个宿主环境,还有大部分国产浏览器大都只是把宿主环境给美化一下,其核心依然要“进口”。
JavaScript和ECMAScript之间的关系如图1-4所示,JavaScript包括ECMAScript、DOM (文档对象模型)和BOM(浏览器对象模型)。

图1-4 JavaScript和ECMAScript之间的关系
由图1-4可见,ECMAScript是独立于DOM和BOM的,ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。其他语言可以实现ECMAScript来作为功能的基准,JavaScript就是这样,如图1-5所示,它是JavaScript的一部分,也可以是其他语言的一部分,如Flash中的ActionScript。

图1-5 ECMAScript和其他语言的关系
JavaScript具有强悍的寄生能力,除了用在浏览器上,还广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备上。JavaScript嵌入的设备类型丰富、数量庞大,所以是世界上最流行的编程语言。
1.1.3 DHTML、DOM和W3C
浏览器的竞争和发展大幅扩展了DOM,使得通过JavaScript完成的功能大大增强,而网页设计人员也接触到一个新名词:DHTML(Dynamic HTML)。
DHTML不是语言,它和本书第4章讲解的AJAX是同样性质的东西,它不是一种标准或规范,只是一种将目前已有的网页技术、语言标准整合运用的方式。
由于浏览器发展的早期,各个开发商在扩展DOM时采用了不同的实现方法,于是就形成了各种不同的浏览器差异问题——也就是今天令各种前端开发和设计人员头痛的“浏览器兼容性”问题。于是开发者为同一个网页写两份以上的代码才能完成工作,这是一件相当痛苦的事情。
W3C即万维网联盟(World Wide Web Consortium),又称W3C理事会。
在各大浏览器忙着第一次世界大战时,W3C预知到DOM混乱,研究各家长短后在1998年10月1日推出了一个标准化的DOM Level 1。1999年1月11日,CSS 1推荐也被重新修订,CSS 2推荐发布。DOM Level 2则在2000年11月13日发布。
W3C对DOM的定义是:“一个与系统平台和编程语言无关的、中立的应用程序编程接口(API),允许程序通过接口访问并更改文档的内容、结构和样式。”从此W3C为互联网发展道路制定并推广各种标准。可以去官网(http://www.w3.org/)上查阅所有关于互联网相关技术及标准的资料,也包括JavaScript的资料。
1.1.4 动态语言和静态语言
JavaScript至今仍然被称为“脚本语言”,但正是因为有了“脚”,浏览器才大踏步地前进着、奔跑着、跳跃着,所以它也是一个让全世界都充满活力的语言。虽然C、C++构建的软件像高楼大厦般宏伟,但是它们也如这些建筑一样缺乏足够的生机。
如果说C、C++是经典的静态语言,那么JavaScript则是动态语言的代表。世界上有静就有动,并且动和静都是相对而言的。看到JavaScript越来越活跃,在微软主导的C#静态编程语言中也逐渐可以看到大量的动态语言特性。如果浏览器可以取代或部分取代庞大的操作系统,JavaScript可能正躲藏在浏览器不为人知的角落,偷笑着与自己越来越像的C#这类静态语言。
世界上第一门动态语言(也是世界上第二门编程语言)是Lisp,其后很多语言都从Lisp身上继承了必要的优势基因(比如Smalltalk、Python、Ruby等),动态性就是其中之一。20世纪70年代,Smalltalk语言出现,集合了面向对象和动态性,获得当时开发界的认可;1986年Perl出现,高效的开发效率和极少的语法限制赢得了大量程序员的欢迎,也使更多人领教了动态语言的魅力。目前,主要的动态编程语言有PHP、Visual Basic、Ruby、Python、JavaScript、Groovy和Perl等。
静态类型语言的主要优点在于其结构非常规范,便于调试,类型安全,效率高。动态类型语言的缺点是不方便调试,因为它要运行起来后才能发现一些错误。
动态语言秉承的一个理念是:优化人的时间,而不是机器的时间。提高开发者的生产力,宁肯牺牲部分的程序性能或者购买更高配置的硬件来弥补。随着IT业的不断发展和摩尔定律的作用,硬件价值相对于人的价值一直在贬值,这个理念便符合了现实的发展规律。
最近几年各种语言的发展趋势如图1-6所示。读者要明白JavaScript这种动态语言也不是无所不能,它有自己坚持的理由和奋斗的目标。

图1-6 动态语言和静态语言发展趋势