引 言
只要你在过去几年中对JavaScript有一丁点留意,你就会听过这个说法:JavaScript将会是下一个重量级语言。这个曾经被用于半成品实现和滚动信息展示的语言,如今已经演进为一个***的、面向对象的动态语言,无论是在客户端还是在服务器端,都有超高速的实现。
一方面,JavaScript的设计者通过EcmaScript 5(ES5)标准为JavaScript注入了新鲜健康的血液;另一方面,各种强大的JavaScript引擎(比如V8、JavaScriptCore、SpiderMonkey、Rhino和Carakan)以及不断涌现的标准和技术(在这方面,CommonJS 和Node 处于领先地位),使JavaScript既适合在浏览器端工作,也适合独立在服务器端构建强大的架构。甚至连微软*新推出的Internet Explorer 9也大幅提高了JavaScript的运行速度。
JavaScript不仅仅是一门强大的动态语言,而且是一个庞大的生态系统,这个系统由它的开发工具、基础设施、框架和工具箱构成。JavaScript功能全面,易于编写,适用于各种编程任务,尤其是那些基于Web的应用和服务。
是时候进入JavaScript的世界了!
本书内容和读者对象
本书并没有打算从语言的角度来讲解JavaScript。首先,JavaScript的语法并不复杂,只要你拥有一些主流编程语言的经验——哪怕只了解基本的概念(诸如变量、循环等),就已经足够了。本书并不需要你拥有JavaScript的经验(当然有的话会更好),更不要求你是编程专家。
事实上,如果你打算研究JavaScript的语言精髓或是核心技术细节,那*好还是去读一些专门的材料,Opera提供的Web标准课程中的“JavaScript核心技能”部分就很不错。如果你需要了解更复杂的语言实现细节,则可以去参考官方的语言标准,或是阅读那些圣经级的大部头,比如David Flanagan的JavaScript:The Definitive Guide 。
针对常见的客户端JavaScript任务,本书提供了快捷且定性的解决方案,这些任务从简单(比如获取一个DOM元素的引用)到复杂(比如基于Ajax的自动完成)。这也意味着我们需要使用JavaScript、CSS、DOM、Ajax、JSON等技术。本书绝大部分在讲客户端(浏览器端)技术,服务器端的内容则很少。为了便于说明,本书也用了一些PHP脚本,不过你可以使用你喜欢的技术,比如通过Node用JavaScript编写服务器端程序!
不要直接照搬本书中的代码。本书每个任务都围绕着某个核心概念、潜在问题或技术技巧展开论述。你要理解这些概念、问题和技巧并灵活运用,而不要拘泥于特定的任务。*终,学完本书,你将成为一名更出色的JavaScript程序员。
本书与JavaScript库
坦率地说,如果你正在进行重要的JavaScript开发,却没有使用已有的**框架,那你就已经做错了。在浏览器端编写**的网页脚本是一项挑战。你会碰到各种各样的障碍:DOM中的不一致、错误的语言实现、CSS quirk和诡异的Ajax bug等。在服务器端,即使已经有了运行时的支持,你仍需要把数据存储、网络栈和模块系统等基本服务器模块组合在一起,这涉及大量的工作。
幸运的是,**的***已经为你解决了这些难题。现在有大量的**框架(尤其在客户端)供你选择。附录C详细介绍了主流的JavaScript框架。
任何称职且注重实效的JavaScript***都会依赖一个或多个**框架,因此,对于那些在我看来相当“基本”的任务,本书会介绍它们在所有主流客户端框架中的实现方法。我选择的框架包括Prototype、jQuery、MooTools、YUI、Dojo和ExtJS,它们覆盖了***心仪的大部分框架。
对于不那么“基本”的任务,我主要用我的*爱Prototype 来处理(光箱**除外,因为我认为在这个任务中jQuery插件更合适)。不过说实话,当你掌握了基本技巧之后,就可以用你常用的库来改写或重写我的解决方案。事实上,为了处理这种情况,我们在GitHub上建立了一个公用代码库。因此,如果你需要用其他库(比如jQuery),只需要简单地点一下GitHub的分支(Fork)按钮,而且查找这些代码库的派生版本也很容易。
此外,本书所有代码都被打包并存档在本书网站上。如果想测试这些代码的效果,请访问http://demo.pocketjavascript.com。
本书内容简介
本书按主题划分成不同的部分,每个部分均包含了一系列任务。书的末尾有一些附录,你在阅读正文之前很可能需要查阅其中一些内容,尤其是附录A(JavaScript快速参考)和附录B(介绍JavaScript调试技术)。
·**部分包含了JavaScript***经常忽视但又非常重要的JavaScript编码模式。这些编码模式和框架关系不大,但为了编写良好的JavaScript代码,它们不可或缺。务必从这一部分开始阅读。
·第二部分主要讲述前面提到的“基本”任务,主要包括基本的DOM和CSS操纵,以及事件处理和定时器的使用。由于它们都很“基本”,所以我列出了所有主流框架下这些任务的实现代码,你可以根据需要来选择。*好结合附录C阅读这一部分,从而对这些主流框架有一个全面的认识,作出可靠的决策。
·第三部分主要讲用户界面,尤其是视觉效果和简洁的UI理念:漂亮的tooltip、光箱**、图片预载入、无限滚动等。
·第四部分是对第三部分的补充,主要讲绝大多数Web应用的重要组成部分——表单。此外,这部分会提到一系列用来辅助、简化和验证输入的工具。
·第五部分主要讲客户端和服务端之间的关系,涉及的话题包括cookie、JSON以及Ajax(域内和域间)。
·第六部分是本书的*后一部分。这部分内容主要讲解如何利用混搭(mashup)思想和使用第三方服务。在这里,我选择了3个流行主题:Twitter应用、Flickr应用以及地理位置相关的API。
·附录A是我编写的一份JavaScript快速参考。其中总结了一些我认为很重要的JavaScript语言元素,并收录了一些实用的小贴士。希望它能对你有用。
·附录B主要讨论如何调试JavaScript。阅读这部分的所有内容是很有必要的,但愿它可以省去你在电脑前抓耳挠腮的大量时间,尤其是你使用Internet Explorer的时候。
·附录C简要地介绍了本书收录的主流JavaScript框架。我已尽我所能地为这些框架逐一给出了**的描述,并且展示出它们的特点,同时我还为如何选择JavaScript框架提供了一些建议。
·附录D提供了一份快速参考,列出了有关JavaScript及其主流框架的帮助资源。这部分总结了附录C中的相关内容,并加入了一些额外资源(多数和JavaScript语言有关)。我把这部分放在本书的*后,以便查阅。
如何阅读本书
在本书中,每一个任务都编排成对开的两页:一页是文字解说,另一页则是代码。如果你阅读的是纸质版,这样的排版方式会让你感到流畅自然;如果你阅读的是电子版,请把阅读器设置成双页模式,以获得*佳的阅读效果。