1.1 编程简介对于很多人来说,“计算机编程”使他们脑海里浮现出这样的情景:拥有超常智慧的家伙在键盘前弯腰而坐,连续数小时飞快地敲击着几乎难以理解的、含混不清的语言。确实,某些编程工作就是那样的。编程可能像是非凡之人表演的复杂魔术。虽然很多编程概念很难掌握,但是,在编程语言中,JavaScript对于非程序员来说算是相对友好的。然而,JavaScript比HTML或CSS都要复杂,并且,对于Web设计者来说,编程往往是一个陌生的世界。因此,本书的目标之一是帮助你像一个程序员一样思考。在本书中,你将学习基本的编程概念,不管你是编写JavaScript、ActionScript或者甚至使用C++编写桌面程序,这些概念都适用。更重要的是,你将学习如何完成一个编程任务,从而在把JavaScript添加到Web页面之前,就确切地知道自己想要做什么。很多Web设计师受到JavaScript中用到的奇怪符号和单词的影响而望而却步。常见的JavaScript程序中充满了符号({ } [ ] ; , ( ) !=)和不熟悉的单词(var、null、else if)。这看上去就像是一门外语,并且很多时候,学习编程语言和学习其他语言很相似。你需要学习新单词、新标点,并且理解如何把它们组合起来以便成功沟通。实际上,每种编程语言都有它自己的一组关键字和字符,以及组合这些关键字和字符的一组规则,即语言的语法。学习JavaScript的语法就像学习其他语言的词汇表和语法一样。我们需要记住这种语言的单词和规则(或者至少有一本书在手边作为参考)。当学习一门新的语言的时候,我们会很快意识到,如果在错误的音节加了重音,可能使单词变得无法理解。同样,一个简单的输入错误或者甚至是遗漏了标点符号,都可能使得JavaScript程序无法运行,或者在Web浏览器中产生一个错误。在开始学习编程的时候,我们会犯很多的错误,这只是编程的本质所导致的。快速熟悉客户端与服务器端JavaScript是一种客户端语言,这意味着它在Web浏览器中工作。Web编程语言的另一种类型叫做服务器端语言,可以在PHP、.NET、ASP、ColdFusion、Ruby on Rails以及其他Web服务器技术构建的页面中看到。正如其名字的含义,服务器端语言在Web服务器上运行。它们可以通过访问数据库、处理信用卡并在全球范围内发送E-mail而展示出很多的智能。服务器端语言的问题在于,它们需要Web浏览器向Web服务器发送请求,强迫访问者等待带有新信息的新页面的到来。另外,客户端语言可以立即做出反应并且改变访问者在他的Web浏览器中所看到的内容,而不需要下载一个新的页面。根据访问者和页面如何交互,内容可能出现或消失,在屏幕上移动或者自动更新。这种响应性使得创建出的Web站点更像是桌面程序,而不是静态Web页面。也可以使用插件来为Web页面增加编程的智能。Java applet就是一个例子。这些使用Java编程语言编写的小程序在Web浏览器中运行。它们往往启动较慢并且由于造成浏览器崩溃而为人所知。Flash是另外一种基于插件的技术,它提供复杂的动画、视频、音频和很多交互性潜力。实际上,有时候很难分辨一个交互性的Web页面是使用JavaScript还是Flash。例如,Google Maps也可以用Flash来创建(实际上,Yahoo Maps曾经是Flash应用程序,直到Yahoo使用JavaScript重新开发它)。区分二者的一种快速方法是:在页面上你认为可能是Flash的部分单击鼠标右键(在这个例子中,就是在地图上单击),如果是Flash,将会看到包含了“About the Flash Player”的一个弹出式菜单。我们将在本书第三部分中学习Ajax,Ajax把客户端和服务器端融合到了一起。Ajax是使用JavaScript和服务器交互的一种方法,它从服务器获取信息并更新Web页面,而不需要载入新的Web页面。Google Maps使用这种技术使得我们能够在地图上移动而不必载入一个新的Web页面。实际上,JavaScript也是一种服务器端编程语言。例如,node.js Web服务器(http://nodejs.org/)使用JavaScript作为一种服务器端编程语言,以连接到数据库、访问Web服务器的文件系统,并且在Web服务器上执行很多其他的任务。然而,本书不会讨论JavaScript编程的这方面话题。首先,你可能会发现用JavaScript编程令人沮丧,你要花很多的时间去找出自己在录入脚本时所犯的错误。此外,你可能会发现刚开始的时候一些和编程相关的概念有些难以理解。但是,不要担心,如果你过去尝试学习过JavaScript并且因为觉得它太难而放弃,本书将帮助你越过那些经常绊倒编程新手的障碍。(并且,如果你已经有了编程经验,本书将教会你针对Web浏览器编程时用到的JavaScript的特性以及独特概念。)此外,本书不只是介绍JavaScript,还介绍了jQuery——世界上最流行的JavaScript库。jQuery使得复杂的JavaScript编程变得更加容易,而且容易很多。因此,只需要有一些JavaScript的知识,再加上jQuery的帮助,你将能够立刻创建高级的、可交互性的Web站点。计算机程序当你为Web页面添加JavaScript的时候,就是在编写一个计算机程序。当然,大多数JavaScript程序要比用来阅读E-mail、修复照片和构建Web页面的程序简单得多。但是,即便JavaScript程序(也叫做脚本)较简单并且较短,但是它们还是具有很多和较复杂的程序相同的属性。简而言之,任何计算机程序都是以指定的顺序完成的一系列步骤。假设你想要用浏览Web页面的人的名字来显示一条欢迎消息,例如, “Welcome, Bob!”。要完成这个任务需要做几件事情:
询问访问者的名字。获得访问者的响应。在Web页面上打印(即显示)消息。虽然你可能不想在Web页面上显示一条欢迎消息,但这个例子展示了编程的基本过程:确定想要做什么,然后把任务分解为完成它所必须经过的每个步骤。每次想要创建一个JavaScript程序,你必须经历这个过程来确定实现目标所需的步骤。一旦知道了这些步骤,你就准备好编写程序了。换句话说,把思路翻译成程序代码(单词和字符),这些代码让Web浏览器去做我们想要的事情。常见问题编译型语言与脚本编程语言JavaScript是一种脚本编程语言。这个术语也用来描述PHP和ColdFusion这样的语言。那么,什么是脚本编程语言呢?在计算机上运行的大多数程序都是使用编译型语言编写的。编译是指把程序员编写的代码转换为计算机能够理解的指令的过程。一旦编译了程序,就可以在计算机上运行它,既然编译后的程序已经直接转换为计算机能够理解的指令了,那么,它比脚本编程语言所编写的程序运行得要快。遗憾的是,编译一个程序是耗费时间的过程,你必须编写程序、编译它,然后测试它。如果程序不工作,还必须重复整个过程。另外,脚本编程语言只有在解释器(这是可以把脚本转换为计算机能够理解的内容的另外一个程序)读取它的时候才编译。以JavaScript为例,解释器内置到了Web浏览器中。因此,当Web浏览器把带有JavaScript程序的一个Web页面读入其中的时候,Web浏览器就把JavaScript翻译成计算机能够理解的内容。因此,脚本编程语言运行起来比编译型语言要更慢些,因为每次脚本程序运行的时候,都要为计算机进行翻译。脚本编程语言对于Web开发者来说是很好的,脚本通常要比桌面程序规模小而且结构没有那么复杂,因此,速度上的缺失并不是那么重要。此外,既然它们不需要编译,那么创建和测试使用脚本编程语言的程序就是一个较快的过程。
相关资源:JavaScript王者归来