JavaScript学习 第一章

JavaScript简介

JavaScript诞生于 1995年。当时,它的主要目的是处理以前由服务器端语言(如 Perl)负责的一 些输入验证操作。今天的 JavaScript已经成为一门功能全面的编程语言,能够处理复杂的计算和交互,拥有了闭包、匿名(lamda, 拉姆达)函数,甚至元编程等特性。JavaScript从一个简单的输入验证器发展成为一门强大的编程语言,完全出乎人们的意料。应该说, 它既是一门非常简单的语言,又是一门非常复杂的语言。说它简单,是因为学会使用它只需片刻功夫; 而说它复杂,是因为要真正掌握它则需要数年时间。要想全面理解和掌握 JavaScript,关键在于弄清楚 它的本质、历史和局限性。

JavaScript实现

一个完整的 JavaScript 实现应该由下列三个不同的部分组成:

核心(ECMAScript)
文档对象模型(DOM)
浏览器对象模型(BOM)

1. ECMAScript

ECMA-262定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。 我们常见的 Web 浏览器只是 ECMAScript 实现可能的宿主环境之一。宿主环境不仅提供基本的 ECMAScript 实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互。而这些扩展——如 DOM,则利用 ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。其他 宿主环境包括 Node(一种服务端 JavaScript平台)和 Adobe Flash。它规定了这 门语言的下列组成部分:

  • 语法

  • 类型

  • 语句

  • 关键字

  • 保留字

  • 操作符

  • 对象

ECMAScript就是对实现该标准规定的各个方面内容的语言的描述。JavaScript实现了 ECMAScript, Adobe ActionScript同样也实现了 ECMAScript。

2. ECMAScript兼容

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

支持 ECMA-262描述的所有“类型、值、对象、属性、函数以及程序句法和语义”(ECMA-262 第 1页);

支持 Unicode字符标准。

此外,兼容的实现还可以进行下列扩展:

添加 ECMA-262没有描述的“更多类型、值、对象、属性和函数”。ECMA-262所说的这些新增 特性,主要是指该标准中没有规定的新对象和对象的新属性。

支持 ECMA-262 没有定义的“程序和正则表达式语法”。(也就是说,可以修改和扩展内置的正 则表达式语法。)

上述要求为兼容实现的开发人员基于 ECMAScript开发一门新语言提供了广阔的空间和极大的灵活 性,这也从另一个侧面说明了 ECMAScript受开发人员欢迎的原因。

3. Web浏览器对 ECMAScript的支持

下表列出了 ECMAScript受主流 Web 浏览器支持的情况:


文档对象模型(DOM)

文档对象模型(DOM,Document Object Model)是针对 XML但经过扩展用于 HTML的应用程序编 程接口(API,Application Programming Interface)。DOM把整个页面映射为一个多层节点结构。HTML 或 XML页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。

看下面这个 HTML页面:

​<html>
  <head>  
      <title>Sample Page</title>          
  </head>
  <body>
      <p>Hello World!</p>
  </body>
</html> ​

在 DOM中,这个页面可以通过如图所示的分层节点图表示:


1. DOM级别

DOM1级由两个模块组成:DOM 核心(DOM Core)和 DOM HTML。其中,DOM核心规定的是如何映射基于 XML的文档结构,以便 简化对文档中任意部分的访问和操作。DOM HTML 模块则在 DOM 核心的基础上加以扩展,添加了针 对 HTML的对象和方法。

DOM2级在 原来 DOM的基础上又扩充了(DHTML一直都支持的)鼠标和用户界面事件、范围、遍历(迭代 DOM 文档的方法)等细分模块,而且通过对象接口增加了对 CSS(Cascading Style Sheets,层叠样式表)的 支持。DOM1级中的 DOM核心模块也经过扩展开始支持 XML命名空间。 DOM2级引入了下列新模块,也给出了众多新类型和新接口的定义。 DOM视图(DOM Views):定义了跟踪不同文档(例如,应用 CSS之前和之后的文档)视图的 接口;

DOM事件(DOM Events):定义了事件和事件处理的接口;

DOM样式(DOM Style):定义了基于 CSS为元素应用样式的接口;

DOM遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口。

DOM3 级则进一步扩展了 DOM,引入了以统一方式加载和保存文档的方法——在 DOM 加载和保 存(DOM Load and Save)模块中定义;新增了验证文档的方法——在 DOM验证(DOM Validation)模块中定义。DOM3 级也对 DOM 核心进行了扩展,开始支持 XML 1.0 规范,涉及 XML Infoset、XPath 和 XML Base。

2. 其他 DOM标准

除了 DOM核心和 DOM HTML接口之外,另外几种语言还发布了只针对自己的 DOM标准。下面 列出的语言都是基于 XML的,每种语言的 DOM标准都添加了与特定语言相关的新方法和新接口:

  • SVG(Scalable Vector Graphic,可伸缩矢量图)1.0;

  • MathML(Mathematical Markup Language,数学标记语言)1.0;

  • SMIL(Synchronized Multimedia Integration Language,同步多媒体集成语言)。

还有一些语言也开发了自己的 DOM实现,例如 Mozilla的 XUL(XML User Interface Language,XML 用户界面语言)。但是,只有上面列出的几种语言是 W3C的推荐标准。

3. Web浏览器对 DOM的支持

浏览器对象模型(BOM)

Internet Explorer 3和 Netscape Navigator 3有一个共同的特色,那就是支持可以访问和操作浏览器窗 口的浏览器对象模型(BOM,Browser Object Model)。开发人员使用 BOM可以控制浏览器显示的页面 以外的部分。而 BOM真正与众不同的地方(也是经常会导致问题的地方),还是它作为 JavaScript实现 的一部分但却没有相关的标准。这个问题在 HTML5中得到了解决,HTML5致力于把很多 BOM功能写 入正式规范。HTML5发布后,很多关于 BOM的困惑烟消云散.

从根本上讲,BOM只处理浏览器窗口和框架;但人们习惯上也把所有针对浏览器的 JavaScript扩展 算作 BOM的一部分。下面就是一些这样的扩展:

  • 弹出新浏览器窗口的功能;

  • 移动、缩放和关闭浏览器窗口的功能;

  • 提供浏览器详细信息的 navigator 对象;

  • 提供浏览器所加载页面的详细信息的 location 对象;

  • 提供用户显示器分辨率详细信息的 screen 对象;

  • 对 cookies的支持;

  • 像 XMLHttpRequest 和 IE的 ActiveXObject 这样的自定义对象。

JavaScript版本

下表列出了 Netscape/Mozilla 浏览器中 JavaScript版本号的递增过程:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269