1.4 JavaScript和其他常见技术的比较
在我开始学习外语之前,从未真正领会英语语法的课程:有时候掌握一种思想只需要一些比较和对照。在接下来的几页当中,我将说明如何将JavaScript与其他你可能已经熟悉的常见技术进行比较,希望你能够更加完整地理解将要掌握的这种语言。
HTML和CSS
HTML(HyperText Markup Language,超文本标记语言)是用于创建网页的技术。(顺便说一句,如果你还不知道这一点,就需要在进一步学习本书之前学习HTML。)HTML和JavaScript一样,两者都以Web浏览器为主要目标,但是相似之处也就仅止于此。HTML是向用户显示内容的方法,JavaScript是建立动态内容的方法。
CSS(Cascading Style Sheets,层叠样式表)也用于Web浏览器,但是它的关注点在于视觉表现。CSS有时可能也被描述为动态的技术,可以在不同的浏览器中应用不同的CSS规则,但是这种动态级别和JavaScript所能提供的不同。CSS和JavaScript一样,也使用DOM(Document Object Model,文档对象模型),这是页面中HTML的表现形式。实际上,jQuery框架使用和CSS类似的选择符进行自己的DOM操纵。
你可能听说过MVC(模型、视图、控制器)设计模式,这是将数据(称作模型)、视觉表现(视图)和动作(控制器)分离开来的软件开发方法。在这些术语中,可以将HTML看作模型(你将要处理的数据),CSS当作视图(表现),而将JavaScript当作控制器(改变和活动的代理)。
PHP
PHP是用于创建动态网站的最流行的语言(也是我喜爱的语言之一)。PHP和JavaScript一样都是脚本语言,这意味着它们都是:
代码对事件作出响应;
通过可执行程序运行脚本。
相比之下,C和C++以及其他语言可以用于编写独立的应用程序。这样的应用程序可以自行采取行动,而不需要考虑事件。
PHP和JavaScript之间的最大不同是,JavaScript主要运行于Web浏览器(也就是客户机),而PHP仅运行于服务器。Web浏览器包含JavaScript引擎以执行JavaScript代码,而Web服务器应用(如Apache)则包含了用于执行PHP代码的PHP模块。JavaScript响应用户和基于浏览器的事件,而PHP则响应基于服务器的事件,如特定页面的请求或者表单的提交。
这两种语言在功能上还有少数重叠的部分(例如,它们都能处理Cookie、生成图像、重定向Web浏览器,但是没有太多进一步的重叠)。但是PHP可以用于动态生成JavaScript,就像它能够用于在运行中创建HTML或者CSS那样(图1.7)。PHP还能够采用过程性或者面向对象的方法编写,而JavaScript只是一种面向对象语言。不过,这两种语言都是弱类型的。
图1.7 PHP能够在Web服务器上动态生成HTML、CSS和JavaScript,然后发送给浏览器
虽然两种语言有很多不同,但是如果你了解PHP,JavaScript应该相对比较容易学习。Web编程人员总是被认为应该同时了解客户端和服务器端的编程,所以对两者都进行学习是合理的。在本书中,PHP将用于任何服务器端需求,例如Ajax示例,但是这些例子并不是PHP大师才能掌握的。
Flash
我将Flash包括在与JavaScript进行比较的技术之列,是因为Flash常常作为JavaScript的替代方案,用于为网页增添动态行为。对用户交互的响应、与服务器的通信等方面做得更好的现代网站,实际上是Web应用程序—常常被称作RIA(Rich Internet Applications,富互联网应用)。RIA主要使用JavaScript或Flash创建。Flash是Adobe公司控制的专利技术,可以两种不同方式(Flash本身不是编程语言)创建。
尽管Flash可以用于许多与JavaScript相同的目的,但是Flash在浏览器中的工作方式(需要一个Flash Player插件)是它们之间关键差别。JavaScript可以通过DOM与HTML页面交互,而Flash内容实际上与HTML页面本身分离(但是JavaScript可以用于Flash和Web浏览器之间的通信)。而且,Flash在移动设备、可访问性和其他非传统Web体验等方面碰到了难题。尽管如此,有证据表明大部分高级的RIA,如游戏、用图表表现的大量数据等,可以在Flash中更快速而可靠地创建。可是,同样不是每个人都能运行Flash……
注意: 在我编写本书的时候,Adobe公司开始发出改变对Flash态度的信号,这意味着这种普遍适用的技术的未来现在变得非常不确定。
ActionScript
ActionScript是Flash和Flex(Flex是用于创建Flash内容的一个框架)的编程语言。ActionScript与JavaScript极其相似,因为两者系出同门—ECMAScript。虽然两种语言都是面向对象的,但是ActionScript是强类型的,而且不是基于原型的(也就是说,你可以在ActionScript中定义类)。同样,如果你了解ActionScript,那么掌握JavaScript就会比较容易,反之亦然。