通过js高级程序设计学js 一、JavaScript简介

102 阅读6分钟

JavaScript历史回顾

JavaScript诞生于1995年,它诞生的主要目的是处理服务器端负责的一些输入验证操作。在JavaScript问世之前,只有把表单数据发送到服务器端才能确定用户是否输入了必填内容或者无效的值。因为在当时那个拨号上网的年代,速度之慢是对用户耐心的极大考验。

而现如今,JavaScript已成为一门功能全面的编程语言能够处理复杂的计算和交互,拥有闭包、匿名函数(lambda 拉姆达),甚至元编程等特性。

维基百科:`元编程` (meta programming)是一种编程技术,编写出来的计算机程序能够将其他程序作为数据来处理。

js是一门简单又复杂的语言,简单是因为它极易入门并且上手。复杂是因为要想真正弄懂它可能需要几年的时间。要想全面理解掌握js,关键在于弄清楚它的本质、历史和局限性。

JavaScript简史

在当时那个年代,绝大多数因特网用户都使用速度仅为28.8kbit/s的猫(调制解调器,就是你装宽带上门给你安的那个盒子,不是路由器)上网。但是随着网页的复杂性不断提升,为完成简单的表单验证频繁的和服务端交互数据,无疑是为用户添加负担。想象一下当你填写完表单,点击提交按钮,然后等待30秒,服务器告诉你有必填的字段没有填或者你输入了无效的数据,又得再来一次是多么的崩溃。

就在这时Netscape(网景)公司决定开发一种客户端语言,来处理这种简单的验证。

当时就职于网景公司的布兰登·艾奇开始着手为计划1995年2月发布的Navigator 2开发一种名为LiveScript的脚本语言--该语言将同时在浏览器和服务器中运行(在服务器中名为LiveWire),在Navigator 2正式发布前夕,网景公司为了蹭java的热度,临时改名为JavaScript。

JavaScript 1.0获得巨大成功,网景随即在Navigator 3中又发布了JavaScript 1.1版本,虽然Web羽翼未丰,但用户的关注度屡创新高。然后微软便加入了(打不过就加入),同网景竞争自家的产品IE(Internet Explorer)。在Navigator 3发布不久微软便发布了自家的IE3,并加入了名为JScript(命名主要为了避开与网景有关的授权问题)脚本语言。

因为微软的加入,意味着出现了两个不同版本的JS。因为JS不像C和Java等其他编程语言一样有标准规定,其两个版本不同的语法和特性便暴露出来。JavaScript标准化提上了议事日程。

1997年,JavaScript 1.1版本作为蓝本提交给欧洲计算机制造商协会(ECMA)。数月后ECMAScript诞生并作为新脚本语言的标准。自此以后浏览器开发商开始致力于ECMAScript作为各自JavaScript实现的基础。

JavaScript实现

虽然JavaScript和ECMAScipt通常被我们用来表达相同的含义,但是JavaScript的含义要比ECMAScript多得多,一个完整的JavaScript实现包括三种不同的组成部分。

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

1.2.1 ECMAScript

ECMAScript与Web浏览器并没有依赖关系,ECMA-262定义的只是这门语言的基础,在这个基础之上可以构建更完善的脚本语言。

那它都规定了些什么呢?

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 对象

1.2.2 文档对象模型(DOM)

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

<html>
  <head>
    <title>HELLO</title>
  </head>
  <body>
    <span>hello world</span>
  </body>
</html>

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

通过DOM创建的表达文档的树形图,开发人员获得了控制页面的内容和结构的主动权。借助DOM提供的API,开发人员可以轻松的删除、添加或修改任何节点。

为什么要使用DOM

在IE4和N4分别支持的不同形式的DHTML基础上,开发人员首次无需重新加载网页就可以修改其外观和内容了。然而DHTML在给web技术发展的同时也带来了巨大的问题。由于网景和微软在DHTML上面的各抒己见,过去那个只需要编写一份HTML页面就能在网页上运行的时代结束了。

对我们开发人员来说要想继续保持web跨平台的天性,就必须做一些额外的工作(兼容)如果不加以限制就会出现浏览器互不兼容的局面,此时,负责制定Web通信标准的W3C(万维网联盟)开始着手规划DOM。

浏览器对象模型(BOM)

IE3和N3有一个共同的特色。那就是支持可以访问和操作浏览器窗口的浏览器对象模型(BOM),开发人员使用BOM可以控制浏览器显示页面以外的部分。而BOM真正与众不同的地方,还是它作为JavaScript实现的一部分但却没有相关标准。这个问题在HTML5中得到了解决。

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

  • 弹出新浏览器窗口功能
  • 移动、缩放和关闭浏览器功能
  • 提供浏览器详细信息navigator对象
  • 提供浏览器所加载页面详情信息的location对象
  • 提供用户显示器分辨率详细信息的screen对象
  • 对cookies的支持
  • 像XMLHttpRequest和IE的ActiveXObject这样的自定义对象

小结

JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的组成部分:

  1. ECMAScript,有ECMA-262定义,提供核心语言功能;
  2. 文档对象模型(DOM),提供访问和操作网页内容的方法和接口;
  3. 浏览器对象模型(BOM),提供与浏览器交互的方法和接口;

JavaScript的这三个组成部分,在当前五个主流浏览器(IE,Firefox,Chrome,Safari、Opear)中都得到不同程度的支持。其中,所有浏览器对ECMAScript第3版的支持大体上还不错,而对ECMAScript第5版的支持程度也越来越高,但对DOM的支持则彼此相差比较多。对已经正式纳入HTML5标准的BOM来说,尽管各浏览器都实现了某些总所周知的共同特性,其他特性还是会因不同的浏览器而异。