JavaScript简介

JavaScript简介

媒介:最近在细读Javascript高等顺序设想,关于我而言,中文版,书中许多处所一笔带过,所以用自身所明白的,尝试仔细解读下。若有马虎或毛病,会异常感谢您的指出。文中绝大部份内容援用自《JavaScript高等顺序设想第三版》。

JavaScript诞生于1995年。当时,它的主要目的是处置惩罚之前由有服务器言语(如Perl)担任的一些输入考证操纵。

在JavaScript问世之前,必需把表单数据发送到服务器端才肯定用户是不是没有填写某个必填项,是不是输入了无效的值。

Netscape Navigator愿望经由过程JavaScript来处理这个题目。在人们广泛运用电话拨号上网的年代,能够在客户端完成一些基本的考证使命相对是令人兴奋的。毕竟,拨号上网的速率之慢,致使了与服务器的每一次数据交流都成了对人们耐烦的一次磨练。

自此以后,JavaScript逐步成为世面上罕见浏览器必备的一项特征功用。如今,JavaScript的用处早不再局限于简朴的数据考证,而是具有了与浏览器窗口及其内容等险些一切方面交互的才能。

本日的JavaScript已成为了一门功用周全的编程言语,能够处置惩罚庞杂的盘算和交互,具有了闭包、匿名(lambda,拉姆达)函数,设置元编程等特征。

作为Web的一个主要构成部份,JavaScript的主要性是显而易见的,就连手机浏览器,以至那些特地为残障人士设想的异常规浏览器都支撑它。

固然,微软的例子更加典范。虽然有自身的客户端脚本言语VBScript,但微软仍然在Internet Explorer的夙兴版本中加入了自身的JavaScript完成。

JavaScript从一个简朴的输入考证器生长成为一门壮大的编程言语,完全出乎人们的预料。

它既是一门异常简朴的言语,又是一门异常庞杂的言语。

说它简朴,是因为学会运用它只需少焉工夫;而说它庞杂,是因为要真正掌握它须要数年时刻。要想周全明白和掌握JavaScript,关键在于弄清楚它的实质、汗青和局限性。

JavaScript简史

在Web日趋盛行的同时,人们对客户端脚本言语的需求也愈来愈猛烈。谁人时刻,绝大多数因特网用户都运用速率仅为28.8bit/s的“猫”(调制解调器)上网,但网页的大小和庞杂性却不停增添。

为完成简朴的表单考证而频仍地狱服务器交流数据只会加重用户的累赘。设想一下:用户填写完一个表单,单击“提交”按钮,然后守候30秒钟,终究服务器返回音讯说有一个必填字段没有填好…..当时走在手艺革新最前沿的Netscape公司,决议动手可开辟一种客户端言语,用来处置惩罚这类简朴的考证。

当时就任于Netscape公司的Brendan Eich,最先动手为设计于1995年2月宣布的Netscape Navigator 2 开辟一种名为 LiveScript的脚本言语——该言语将同时在浏览器和服务器中运用(它在服务器上的名字叫LiveWire)。为了赶在宣布日期前完成LiveScript的开辟,Netscape与Sun公司建立了一个开辟同盟。在Netscape Navigator 2恰是宣布前夜,Netscape为了搭上媒体热炒Java的顺风车,暂时把LiveScript改名为JavaScript。

因为JavaScript 1.0获得了庞大胜利,NetScape随即在Netscape Navigator 3中又宣布了JavaScript 1.1。Web虽然羽翼未丰,但用户关注度却屡创新高。在如许的背景下,Netscape把自身定位为市场首脑型公司。与此同时,微软决议与Navigator合作的自家产物Internet Explorer浏览器投入更多资本。Navigator 3 宣布后不久,微软就在其Internet Expolorer 3中加入了名为JScript的JavaScript完成(定名为JScript是为了避开与Netscape有关的受权题目)。以如今的眼力来看,微软1996年8月为进入Web浏览器范畴而实行的这个严重行动,是致使Netscape往后蒙羞的一个标志性时刻。这也标志着JavaScript作为一门言语,其开辟向前迈进了一大步。

微软推出其JavaScript完成意味着有了两个差别的JavaScript版本:Netscape Navigator中的JavaScript、Internet Explorer中的JScript。

与C及其他编程言语差别,当时还没有范例划定JavaScript的语法和特征,两个差别版本并存的局势已完全暴露了这个题目。跟着页面忧郁的日趋加剧,JavaScript的范例化题目被提上了议事日程。

1997年,以JavaScript 1.1 为底本的发起被提交给了欧洲盘算机制造商协会(ECMA,European Computer Manufacturers Association)。该协会指定39号手艺委员会(TC39,Technical Committee #39)担任“范例化一种通用、跨平台、供应商中立的脚本言语的语法和语义”。TC39由来自Netscape、Sun、微软、Borland及其他关注脚本言语生长的公司的顺序员构成,他们经由数月的勤奋完成了ECMA-262——定义一种名为ECMAScript的新脚本言语的范例。

第二年,ISO/IEC(International Organization for Standardization and International Electrotechnical Commission,国际范例化构造和国际电工委员会)也采用了ECMAScript作为范例(即ISO/IEC-16262)。自此以后,浏览器开辟上就最先致力于将ECMAScript作为各自JavaScript完成的基本,也在差别水平上取得了胜利。

JavaScript的完成

虽然JavaScript和ECMAScript一般都被人们用来表达雷同的寄义,但JavaScript的寄义却比ECMA-262划定的要多得多。

一个完全的JavaScript完成应该由以下三个差别的部份构成。

  • 中心(ECMAScript)
  • 文档对象模子(DOM)
  • 浏览器对象模子 (BOM)

ECMAScript

由ECMA-262定义的ECMAScript与Web浏览器没有依靠关联。实际上,这门言语自身并不包含输入和输出定义。ECMAScript-262定义的只是这门言语的基本,而在此基本之上能够构建更完美的脚本言语。

我们罕见的Web浏览器只是ECMAScript完成能够的宿主环境之一。宿主环境不仅供应基本的ECMAScript完成,同时也会供应该言语的扩大,以便言语与环境之间对接交互。而这些扩大——如DOM,则运用ECMAScript的中心范例和语法供应更多更详细的功用,以便完成针对环境的操纵。其他宿主环境包含Node(一种服务端JavaScript平台)和Adobe Flash。

既然ECMA-262范例没有参照Web浏览器,那它划定了些什么内容?大抵来讲,它划定了这门言语的以下构成部份。

  • 语法
  • 语句
  • 对象
  • 范例
  • 关键字
  • 保留字
  • 操纵符

ECMAScript就是对完成该范例划定的各个方面内容的言语的形貌。
JavaScript完成了ECMAScript,Adobe ActionScript一样也完成了ECMAScript。

  1. ECMAScript的版本

这里只说下第五版。

ECMAScript 3.1成为 ECMAScript-262第五版,并于2009年12月3日正式宣布。第5版力图廓清第3版中已知的歧义并增添了新的功用。新功用包含原生JSON对象(用于剖析和序列化JSON数据)、继承的要领和高等属性定义,别的还包含一种严厉情势,对ECMAScript引擎诠释和实行代码举行了补充申明。

  1. 什么是ECMAScript兼容

ECMA-262给出了ECMAScript兼容的定义。要想成为ECMAScript的完成,则该完成必需做到:

  • 支撑ECMA-262形貌的一切“范例、值、对象、属性、函数以及顺序句法和语义。”
  • 支撑Unicode字符范例

另外,兼容的完成还能够举行以下扩大。

  • 增加ECMA-262没有形貌的“更多范例、值、属性和函数”。ECMA-262所说的这些新增特征,主假如指该范例中没有划定的新对象和对象的新属性。
  • 支撑ECMA-262没有定义的“顺序和正则表达式语法”。(也就是说,能够修正和扩大内置的正则表达式语法。)
  1. Web浏览器对ECMAScript的支撑

到了2008年,五大主流Web浏览器(IE、Firefox、Safari、Chrome和Opera)悉数做到了与ECMAScript-262兼容。IE8是第一个动手完成ECMAScript-262第5版的浏览器,并在IE9中供应了完全的支撑。Firefox 4也紧随其后做到兼容。

文档对象模子(DOM)

文档对象模子(DOM,Document Object Model)是针对XML但经由扩大用于HTML的运用顺序编程接口(API,Application Programming Interface)。DOM把全部页面映照为一个多层节点构造。HTML或XML页面中的每一个构成部份都是某种范例的节点,这些节点又包含差别范例的数据。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Sample Page</title>
    </head>
    <body>
        <p>hello world</p>
    </body>
</html>

经由过程DOM建立的这个示意文档的树形图,开辟人员获得了掌握页面内容和构造的主动权。借助DOM供应的API,开辟人员能够轻松自如地删除、增加、替代或修正任何节点。

  1. 为何要运用DOM

在IE4和Netscape Navigator4离别支撑的差别情势的DHTML(Dynamic HTML)基本上,开辟人员初次无需从新加载网页,就能够修正其表面和内容了。然则,DHTML在给Web手艺生长带来庞大进步的同时,也带来了庞大的题目。因为Netscape和微软在开辟DHTML方面互不相让,过去谁人只编写一个HTML页面就能够在任何浏览器中运转的时期完毕了。

对开辟人员来讲,假如想继承坚持Web跨平台的天分,就必需分外多做些事情。而人们真正忧郁的是,假如不对Netscape和微软加以掌握,Web开辟范畴就会涌现手艺上两强割据,浏览器互不兼容的局势。

此时,担任制订Web通讯范例的W3C(World Wide Web Consortium,万维网同盟)最先动手计划DOM。

  1. DOM级别

DOM1级(DOM Level1)于1998年10月成为W3C的引荐范例。DOM1级由两个模块构成:DOM中心(DOM Core)和DOM HTML。

个中,DOM中心划定的是怎样映照基于XML的文档构造,以便简化对文档中恣意部份的接见和操纵。

DOM HTML模块则在DOM中心的基本上加以扩大,增加了针对HTML的对象和要领。

DOM并不只是针对JavaScript的,许多别的言语月都完成了DOM。不过,在Web浏览器中,基于ECMAScript完成的DOM确实已成为JavaScript这门言语的一个主要构成部份。

假如说DOM1级的目的主假如映照文档的构造,那末DOM2级的目的就要广泛多了。DOM2级在本来DOM的基本上又扩大了鼠标和用户界面时刻、局限、遍历(迭代DOM文档的要领)等细分模块,而且经由过程对象接口增添了对CSS(Cascading Style Sheets,层叠款式表)的支撑。DOM1级中的DOM中心模块也经由扩大最先支撑XML定名空间。

DOM2级引入了以下新模块,也给出了浩瀚新范例和新接口的定义。

  • DOM视图(DOM Views):定义了跟踪差别文档(运用CSS之前和以后的文档)视图的接口;
  • DOM事宜 (DOM Events):定义了事宜和事宜处置惩罚的接口;
  • DOM款式(DOM Style): 定义了基于CSS为元素运用款式的接口;
  • DOM遍历和局限(DOM Tranversal and Range):定义了遍历和操纵文档数的接口。

DOM3级则进一步扩大了DOM,引入了以一致体式格局加载和保留文档的要领——在DOM加载和保留(DOM Load and Save)模块中定义;

新增了考证文档的要领——在DOM考证(DOM Validation)模块中定义。DOM3级也对DOM中心举行了扩大,最先支撑XML 1.0范例,触及XML Infoset、XPath和XML Base。

在浏览相干参考文档的时刻,能够会看到DOM0级(DOM Level 0)的字眼。实际上,DOM0级范例是不存在的;所谓DOM0级只是DOM汗青坐标中的一个参照点罢了。详细来讲,DOM0级指的是IE 4和Natscape Navigator 最初支撑的DHTML。

  1. 其他DOM范例

除了DOM中心和DOM HTML接口之外,别的几种言语还宣布了只针对自身的DOM范例。下面列出的言语都是基于XML的,每种言语的DOM范例都增加了与特定言语相干的新要领和新街口:

  • SVG(Scalable Vector Graphic,可伸缩矢量图) 1.0;
  • MathML(Mathematrical Markup Language,数学标记言语) 1.0;
  • SMIL(Synchronized Multimedia Intgration Language,同步多媒体集成言语)。

另有一些言语也开辟了自身的DOM完成,比方Mozilla的XUL(XML User Interfacce Language,XML用户界面言语)。然则,只要上面列出的几种言语是W3C的引荐范例。

  1. Web浏览器对DOM的支撑

在DOM范例涌现了一段时刻后,Web浏览器才最先完成它。微软IE5初次尝试完成DOM,晓得IE5.5才算是真正支撑DOM1级。在随后的IE6和IE7中,微软都没有引入新的DOM功用,而到了IE8才对之前DOM完成中的bug举行了修复。

Netscape直到Netscape6(Mozilla 0.60)才最先支撑DOM。在Netscape7以后,Mozilla把开辟中心转向了Firefox浏览器。Firefox 3完成支撑DOM1级,险些完全支撑DOM2级,以至还支撑DOM3级的一部份。(Mozilla开辟团队的目的是构建与范例100%兼容的浏览器,而他们的勤奋也获得了报答。)

支撑DOM已成为浏览器开辟商的主要目的,主流浏览器每次宣布新版本都邑革新对DOM的支撑。

浏览器对象模子(BOM)

IE3和Netscape Navigator 3有一个配合的特征,那就是支撑能够接见和草祖宗浏览器窗口的浏览器对象模子(BOM,Broswer Object Model)。开辟人员运用BOM能够可掌握浏览器显现的页面之外的部份。而BOM真正异乎寻常的处所(也是经常会致使题目的处所),照样它作为JavaScript完成的一部份但却没有相干范例。这个题目在HTML5中获得了处理,HTML5致力于把许多BOM功用写入正式范例。

HTML5宣布后,许多关于BOM的疑心云消雾散。

从根本上讲,BOM只处置惩罚浏览器窗口和框架,但人们习惯上也把一切针对浏览器的JavaScript扩大算作BOM的一部份。

  • 弹出新浏览器窗口的功用;
  • 挪动、缩放和封闭浏览器窗口的功用;
  • 供应浏览器详细信息的navigator对象;
  • 供应浏览器加载页面的详细信息的location对象;
  • 供运用户显现器分辨率详细信息的screen对象;
  • 对cookies的支撑;
  • 像XMLHttpRequest和IE的ActiveXObject如许的自定义对象。

因为没有BOM范例能够遵照,因而每一个浏览器都有自身的完成。
虽然也存在一些事实范例,比方、要有window对象和navigator对象等,但每一个浏览器都邑为这两个对象以致其他对象定义自身的属性和要领。

小结

JavaScript是一种专为与网页交互而设想的脚本言语,由以下三个差别的部份构成:

  • ECMAScript,由ECMA-262定义,供应中心言语功用;
  • 文档对象模子(DOM),供应接见和操纵网页内容的要领和接口;
  • 浏览器对象模子(BOM),供应与浏览器交互的要领和接口。

JavaScript的这三个构成部份,在当前五个主流浏览器(IE,FF,Chrome, Safari和Opera)中都获得了差别水平的支撑。

对已正式归入HTML5范例的BOM来讲,只管各浏览器都完成了某些尽人皆知的配合特征,但其他特征照样因浏览器而异。

    原文作者:来自卡冈图雅
    原文地址: https://segmentfault.com/a/1190000017047110
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞