关于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只是主要规定了:

  1.   语法
  2.   类型
  3.   语句
  4.   关键字
  5.   保留字
  6.   操作符
  7.   对象

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)[桌面端]。

时间: 2024-08-08 12:02:51

关于JavaScript的相关文章

Javascript中call的使用

call 方法应用于:Function 对象调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[,   [,.argN]]]]])参数:thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选项.将被传递方法参数序列. 说明:call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象.如果没有提供 thisObj 参数,那么 G

你不知道的javascript 之 >>

?远大于符号 在数学公式中,">>"代表远大于符号,表示一个数远大于另一个数,如76>>3,-2>>-99等.庞加莱与波莱尔1901年首先使用了它,很快被数学界所接受,沿用至今. 折叠编辑本段右移运算符 在许多计算机编程语言(例如:C语言.C++语言.Java语言.JavaScript语言.Pascal语言等)中,">>"代表右移运算符,就相当于"shr".该运算符为双目运算符,结合方向为从左到右,

初识JavaScript

JavaScript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能.因为JavaScript兼容于ECMA标准,因此也称为ECMAScript. ECMAScript,描述了该语javascript组成言的语法和基本对象. 文档对象模型(DOM),描述处理网页内容的方法

最全解析如何正确学习JavaScript指南,必看!

划重点 鉴于时不时,有同学私信问我:怎么学前端的问题.这里统一回复一下,如下次再遇到问我此问题同学,就直接把本文链接地址发给你了. "前端怎么学"应该因人而异,别人的方法未必适合自己.就说说我的学习方法吧:我把大部分时间放在学习js上了.因为这个js的学习曲线,先平后陡.项目实践和练习啥的,我不说了,主要说下工作之外的时间利用问题.我是怎么学的呢,看书,分析源码.个人这几天统计了一下,前端书籍目前看了50多本吧,大部分都是js的.市面上的书基本,差不多都看过. 第一个问题:看书有啥好处

JavaScript数据类型检测

一.JavaScript 数据类型 1.基本数据类型(6种) Undefined Null Boolean Number String Symbol (ES6新增) 2.引用数据类型: Object 二.数据类型检测 1. typeof 可以检测除null 外的基本类型.null 和所有对象的typeof都是"object", 不能用于检测用户自定义类型. 比如Date, RegExp, Array, DOM Element的类型都是"object". var s

JavaScript的进阶之路(二)函数简介,变量、作用域和内存问题

<h3>ECMAScript中函数不存在函数签名的概念,没有重载</h3><h3>无需指定返回值,可以在任何时候返回任何值.未指定返回值的函数,返回的是一个特殊的undefined值</h3> <script type="text/javascript"> function sayHi(){ console.log("Hi"); }; sayHi(); function sayName(name,age){

JavaScript 二进制的 AST

本文和大家分享的主要是javascript中二进制的 AST相关内容,一起来看看吧,希望对大家学习javascript有所帮助. 背景介绍 多年来,JavaScript 已经从最慢的脚本语言之一,从老爷车发展为兰博基尼,不管是通过 Web 浏览器还是其他环境.它都能够快到可以运行桌面.服务器.移动甚至嵌入式应用程序. 随着 JavaScript 的增长,应用程序的复杂程度和规模都越来越复杂.然而,二十年前,少数使用过 JavaScript 的网站也就加载几千字节的 JavaScript,许多网站

JavaScript 对象

JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例

实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制. 1 /** 对象克隆 2 * 支持基本数据类型及对象 3 * 递归方法 */ 4 function clone(obj) { 5 var o; 6 switch (typeof obj) { 7 case "undefined": 8 break; 9 case "string": o = obj + &q

javascript的优美与鸡肋

--总结来自:<javascript语言精粹> 任何语言都有其优美的地方和其鸡肋的地方.避归一些语言的糟粕,能相应的降低bug出现的几率. 优美处: 函数是头等对象 基于原型继承的动态对象 对象字面量和数组字面量 糟粕: 1. 全局变量 全局变量有三种表达方式: var声明:var foo = value; 添加属性到全局对象上,即添加到window上:window.foo = value; 未经声明的变量:foo = value; 虽然变量可以未经声明就使用,但是这会导致后期的很多的bug出