首页 > 代码库 > 关于JavaScript
关于JavaScript
“要想全面理解和掌握JavaScript,关键在于弄清楚它的本质,历史和局限性”
历史
JavaScript诞生于1995年,当时Web日益流行,因为网速太慢,为了减轻用户负担,减少请求服务端验证次数,当时走在技术革新最前端的Netscape(网景)公司,决定开发一种客户端语言,用来处理简单的验证。可以说JavaScript的诞生只是为了减轻服务器和负担,减少用户等待时间。但是今日,JavaScript的功能已不仅仅限于此了。
当时就职于Netscape公司的布兰登·艾克(Brendan·Eric),开始为Netscape Navigator开发一种名为LiveScript的语言,后来随着Sun和Netscape的合作,为了搭上媒体热炒Java的顺风车,临时把LiveScript改名为JavaScript,JavaScript虽然和Java有相似之处,但是并不是Java的子集。JavaScript的主要设计原则是基于Self和Scheme.
随着JavaScript获得成功,Netscape公司随即在Netscape Navigator 3发布了JavaScript1.1。随着Web的受关注,Microsoft向Spyglass公司买下Spyglass Mosaic的授权,发布了IE浏览器的第一本版本—Internet Explorer 1,当时Netscape和Microsoft是主要的竞争者,并且都以飞速更新浏览器版本和增加新功能,不过Netscape Navigator仍然是其中的王者,市占率超过八成。Microsoft在IE3中也加入了名为JScript的JavaScript实现(主要是为了避免有关授权的问题)并且,自此Microsoft 的Internet Explorer市占率开始紧追Netscape Navigator。1997年,Internet Exploer 4发布,IE4包括了不少新功能,提高了对W3C标准的支持。Netscape和Microsoft的竞争引发的浏览器大战的第一回合。
(1997年,部分Netscape员工前往IE4发布会现场,推到代表IE的E标志,树立了Mozilla的恐龙,并协商Netscape 72,Microsoft 18,代表当时的市占率。)浏览器大战时间表:http://upload.wikimedia.org/wikipedia/commons/7/74/Timeline_of_web_browsers.svg
当时Microsof(JScript)t和Netscape(JavaScript)还有CEnvi(ScriptEase)并没有统一JavaScript的标准,几种不同版本加重了业内的担心,随后JavaScript的标准化被提上日程。
JavaScipt的核心标准——ECMA-262
1997年,以JavaScript1.1的蓝本被提交给欧洲计算机制造商协会(ECMA,Europen Computer Manufactures Association)该协会指定39号技术委员会指定相关标准“标准化一种通用,跨平台,供应商中立的脚本语言的语法和语义”。TC39由来自Netscape,Sun,Microsoft,Borland及其他关注脚本语言发展的公司程序员组成,他们经过数月的努力完成了ECMA262-定义一种名为ECMAScript的新脚本语言的标准。第二年,ISO/IEC也采用了ECMAScript作为标准,浏览器开始实现以ECMAScript为基础的JavaScript。
制定ECMAScrit标准和实现是两个部分,JavaScript的实现不仅仅是靠ECMAScript(核心),还有BOM(浏览器对象模型—Broswer Object Model用于改变浏览器行为)和DOM(文档对象模型—Document Object Model:用于改变文档结构和样式)。
ECMAScript和Web浏览器没有依赖关系,ECMAScript也可以在其他宿主环境中实现,包括Node,Adobe Flash。我们常见的Web浏览器只是主要的宿主环境,宿主环境不仅仅提供ECMAScript的实现,还包括一些扩展接口,以便环境和语言实现对接交互。
ECMA只是主要规定了:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 操作符
- 对象
ECMAScript就是对实现标准规定的各个方面内容的语言描述。JavaScript实现了ECMAScript,AdobeScript也实现了ECMAScript。
- ECMAScript的最新版本是ECMAScript5(第五版),又称ECMA-262规范的第5版。实现最广的ECMAScript3.
- ECMA-262的第一本版本和JavaScript1.1区别不大,只是删除了针对浏览器的代码并做了一些小改动。ECMA-262要求支持Unicode标准(实现支持多语言)。使ECMA-262和平台无关,这就是两者的小区别。
- ECMA-262的第二版进行了格式修正,使得其形式和ISO/IEC16262国际标准一致。
- ECMA-262的第三版增加了很多新特性,增加了正则表达式支持,更好的词法作用域链处理,新的控制语句,try-catch异常处理,错误定义更加明确,数据输出的格式化及其它改变,这使得JavaScript变成了一门真正的编程语言。
- ECMA-262的第四版对这门语言进行了一次全面的修改,增加了强类型变来那个,新语句和数据结构,真正的类和经典继承,还定义了于数据交互的新方式,但是由于对于语言的复杂性的分歧,最终提出一个名为ECMAScript3.1的修改方案,只进行了少量改进,最终ECMA-262第四版被放弃。
- ECMAScript3.1成为了ECMA-262的第五版,并且于09年12月三日发布,新功能包括严格模式,澄清了许多第三版中的模糊概念。增加对原生JSON的支持。
新的ECMAScript
ECMAScript6标准预期将于2015年中旬发布,ECMAScript6的代号叫ECMAScript Harmony或ES.next,预期ECMAScript6将包括多个新的概念和语言特性,Harmony的意思是“和谐”.ECMAScript6的草案已经完成了,接下来增加的主要是ECMAScript7,大家可以查阅http://www.nczonline.net/blog/2014/06/03/my-ecmascript-7-wishlist/ 《JavaScript高级程序设计》作者的ES7希望加入的内容。
各大浏览器对于ECMAScript5的兼容,可以查阅:http://kangax.github.io/compat-table/es5/.
DOM
文档对象模型(DOM,document object model)是针对XML但经过扩展用于HTML的应用程序编程接口(application programming interface).DOM并不是针对JavaScript的,很多语言也实现了DOM。不过DOM已经成为JavaScript的重要一部分。DOM源于当时的浏览器大战,Netscape要和Microsoft Internet Explorer一绝生死,又是都给浏览器赋予大量新的功能,包括VBScript,ActiveX和DHTML(Dynamic HTML,无需重新加载网页,从而改变网页外观和结构),致使不少网页不能同时在Netscape Navigator和Internet Explorer显示正常,使Web开发者不得不写两套不同的内容。如果不对他们进行控制,就会出现两强割据的局面。负责指定Web通信标准的W3C(World Wide Web Consortium)联盟,开始标准化DOM。
- DOM1(DOM Level1)于1998年10月成为W3C的推荐标准,DOM1级由两个模块组成:DOM Core 和DOM HTML。DOM核心规定是如何映射基于XML的文档结构,以便对文档中任意部分的访问和操作。DOM HTML模块则在DOM Core基础上进行了扩展,添加了HTML的对象和方法。
- DOM2( DOM Level2 )级在DOM1的标准上又扩充了DHTML一直支持的鼠标和用户界面时间,范围,遍历等细分模块。而且通过对象接口增加了对CSS(Cascading Style Sheet)的支持,DOM核心模块扩展开始支持XML命名空间。
- DOM3(DOM Level3级则进一步扩展了DOM,引入了统一方式加载和保存文档的方法——在DOM加载和保存(DOM Load and Save)模块中定义;新增验证文档的方法——在DOM验证(DOM Validation)模块中定义。DOM3也对DOM核心进行了扩展,开始支持XML1.0规范,设计XML infoset,XPath,和XML Base;
- DOM0标准并不存在。指的是最初支持的DHTML
其他DOM标准包括:除了DOM核心和DOM HTML扩展之外,另外几种语言还发布了只针对自己的DOM扩展,下面都是基于XML的,每种都添加了与其相关的新方法和新接口:
- SVG( Scalable Vector Graphic,可缩放矢量图 ) 1.0
- MathML( Mathematical Markup Language ,数学标记语言)1.0
- SMIL(Synchronized Multimedia Integration Language, 同步多媒体集成语言)
还有一些,包括Mozilla的XUL(XML User Interface Language,XML界面语言),但是只有上面几种符合W3C标准。
Web浏览器对于DOM的支持,可以查询:http://www.webbrowsercompatibility.com/dom/desktop/
BOM
Internet Explorer3和Netscape Navigator3有一个共同的特色,那就是支持访问和操作浏览器接口的浏览器对象模型(BOM Broswer Object Model).开发人员使用BOM可以控制页面之外的部分,但是它作为JavaScript重要的一部分,却没有标准。不过这个问题最终在HTML5得到解决,HTML5试图把相关的BOM纳入规范。HTML5也于今天发布,不过相关的HTML5.1还在指定中。
BOM只处理窗口和框架,下面是一些扩展:
- 弹出浏览器窗口的
- 移动,缩放和关闭浏览器
- 提供浏览器详细信息的navigator对象
- 所加载页面和location对象
- 提供用户显示器分辨率的screen对象
- 对cookies的支持
- XMLHttpRequest和IE AcitveXObject这样的自定义对象。
BOM虽然也有一些事实标准,但是各个浏览器的实现都是不一致的。
未来
依靠跨平台,容易上手等优势,JavaScript已经成为最受欢迎的编程语言之一。随着引擎如V8和框架如Node.js的发展和事件驱动和异步IO等特性,JavaScript越来越被用来作为服务端开发。JavaScript的未来推荐看一个视频,名字为2050年的JavaScript。
总结
JavaScript是一种专为与网页交互而设计的脚本语言。为了减少服务端请求和减少用户等待时间,当时的浏览器霸主Netscape Navigator走在技术革新的前面。它的员工布兰登在1995年发布了JavaScript语言,后来Microsoft进入浏览器领域,也加入名为JScript的实现,为了标准化JavaScript,ECMA T39指定了语法核心标准。叫ECMAScript或ECMA-262定义。这两者和JavaScript的联系只是规范了相关的核心语法功能,JavaScript的实现还包括BOM和DOM两个重要部分,浏览器对ECMAScript第三版支持大体不错,对于第五版的标准支撑程度也越来越多。对于DOM,各家支持的程度都差不多,对已经正式纳入HTML5标准的BOM来说,现在各家浏览器的实现还是因浏览器而已。现在市场上五个主要浏览器是(IE , Firefox(Netscape的继承人),Chrome , Safari , 和 Oprea)[桌面端]。
关于JavaScript