作者:DavidFlanagan_淘宝前端团队 页数:1018 出版社:empty |
译者序
O'Reily Media通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978年开始, O'Rei y一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来, 而我们关注真正重要的技术趋势—通过放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中话跃的参与者, O'Reilly的发展充满了对创新的侣导、创造和发扬光大,O'Reilly为软件开发人员带来革命性的“动物书”, 创建第一个商业网站(GNN) , 组织了影响深远的开放源代码峰会, 以至于开源软件运动以此命名:创立了Make杂志, 从而成为DIY革命的主要先锋; 公司一如既往地通过多种形式络结信息与人的纽带。O'Reily的会议和峰会集聚了众多超级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想,作为技术人士获取信息的选择, O'Reily现在还特先锋专家的知识传递给普通的计算机用户。无论是通过书籍出版, 在线服务成者面投课程, 每一项O'Reilly的产品都反映了公司不可动摇的理念——信息是激发创新的力量。
“o'Rely凭借一系列(真希望当初我也想到了) 非凡想法建了数百万美元的业务.·*o*Reilly Conference是聚集关健思想领袖的绝对范, ·“一本O'Reily的书就代表一个有用、有前途、需要学习的主题。”“Tim是位特立独行的商人, 他不光放联于最长远、最广阔的视野并且切实地按照Yogi Berra的建议去做了:如果你在路上遇到禽路口, 走小路(岔路) , '四顾过去Tim似子每一次都选择了小路, 而且有几次都是一闪即逝的机会, 尽管大路也不错,”从1996年以来, U JavaScript权威指南》已经成为JavaScript程序员公认的《圣经》, 该书凭借着完整的内容、细致的讲解以及大量针对性的示例而受到读者的一贯好评,十多年来一直畅销不衰, JavaScript之父Brendan Eich对它如是评价:“本书是JavaScript程序员的必备参考……内容组织得很好,而且非常详如,“作为JavaScript最经典的工具书, 它的历次改版见证了Web发展的历程与深刻变革:从玩具式的“轻脚本”到革命性的Ajax, 从传统的桌面系统到新潮的手持端, 从风靡一时的英库到现在主流当道的Web富应用开发, 从纯浏笔器脚本语言到面向服务器端的JavaScript……HTML 5、CSS 3、j Query和Node JS等新技术的出现进一步丰富了Web前端开发的内涵,而本书第6次改版则是一场及时雨,系统翔实地收录了五年来前技术的这些变革,并提供了大量的实例,可以边学边用,同时来承了前几版的“学术气质”是JavaScript和前端开发领域不可多得的佳作。本书第6版涵盖了HTML 5和ECMAScript 5, 很多章节完全重写, 增加了当今Web开发的最佳实践的内容, 断增的章节包括j Query、服务路端JavaScript、图形编程以及JavaScript式的面向对象, 本书第6版不仅适合初学者系统学习, 而且适合有经验的JavaScript开发者随手翻。淘宝前端团队非常荣幸地承担这本大厚书的翻译任务。本书书名为《JavaScript权威指南(第6版)》,我们作为译者深知自己知识面有限,难达到“权威”的高度,所以翻译过程难免疏漏,但不管怎样,这項任务是一种荣誉,更是一种责任,本次翻译共有7位译者,李晶(拔赤)、张散集(一舟)、吴美杰(李札)、赵静(澄净)、陈成(云谦)王保平(玉怕)和学腾(三七),感谢赵泽欣(小马)为促成本次翻译做出的努力,此外为了保证翻译质量,我们还邀请了热心网友来参与部分章节的校对,尤其是杨明明、孙博、未琦三位读者为本书关键幸节提出了中肯的修改意見,非常感谢他们,最后要特别感谢机械工业出版社华章公司的陈康老师和谢晓芳编辑,不仅容恩我们再三推迟交棉,还不断毁励我们“多花些时间来保证质量”。在此对上述各位同学和老师致以深深的感谢,淘宝前端团队
前言
本书要讲述的内容涵盖Java Seri pt语言本身, 以及Web浏览器所实现的JavaScript API,本书更适合有一定编程经验的人阅读。对于那些希望学习JavaScript和已经开始使用JavaScript的程序员来说, 如果想让自己对JavaScript语言和Web平台的理解和掌握再上一个台阶, 本书最适合不过了。本书旨在系统权威地讲解JavaScript这门语言以及运行它的各种平台环境。本书对各个知识点的讲解都非常详细,以至于本书成了大块头。我希望每个读者都能认真阅读本书, 这会让你的JavaScript编程基本功更加夯实, 你所花费的时间和精力终究会有成倍的回报。本书分为4部分, 第一部分主要讲述JavaScript这门语言。第二部分主要讲述客户端JavaScript:HTML5和相关标准定义的JavaSeriptAPI以及Web浏览器实现的API。第三部分是JavaScript语言核心部分的参考手册。第四部分是客户端JavaScript的参考手册, 第1章包含前两部分的章节提纲和简介(参照1.1节),本书第6版同时涵盖ECMAScript 5(JavaScript语言核心的最新版本) 和HTML 5(Web平台的最新版本) , 第一部分包含ECMAScript 5相关的资料, 而与HTML 5相关的新资料主要在第二部分末尾的章节讲述,当然其他章节也有提到。第6版新增的章节有:第11章、第12章、第19章以及第22章,如果你阅读过前几版,则会发现第6版中很多章节都完全重写了。第一部分中的核心章节都涵盖全新的内容(对象、数组、函数以及类),这些内容都是当下最前沿的编程技术和最佳实践,同样,第二部分的核心章节,比如第15章和第17章,也与时俱进全都重写了,关于盗版如果你(或你的雇主)没有为阅读本书电子版付(或者从其他的付费读者那里借本书),么你的行为很可能涉及侵权,撰写本书第6版是我的全职工作,花费了我一年多时间,我能得到的所有报酬均来自读者的购买费用,如果第6版的撰写为我带来的收益无法继续支撑我的工作,我无法完成本书第7版的编撰,尽管正版行为让人不可客忍,但如果你手上已经有了一本盗版书,不妨试着读一读你感兴趣的几章。相信你会发觉本书的价值所在, 它的确是你学习JavaScript不可多得的好教材——内容安排清晰、质量上乘,这绝不是随便从网上拿来几篇文章拼凑成的二流读物。如果你能认识到这是一套非常不错的学习材料的话,请你从正当途径购买此书(电子版或纸质书),反过来讲,如果你的确觉得本书没有内上的免费信息有价值,那么请停止你的侵权行为,去使用互联网上的免费信息。本书约定本书使用下列排版约定:斜体(Ira lic)等宽字体(Constant width)等宽斜体(Constant width italic)用于强调重点或者表示术语的首次使用,此外它还用来表示电子邮件地址、网址和文件名。所有的JavaScript代码、HTML和CSS代码清单都使用等宽字体表示, 以及程序设计时要输人的任何内容也用等宽字体表示。等宽斜体用来表示函数参数名或者表示一个占位符,占位符常用来替换成程序中的实际值。示例代码本书中的所有示例代码都可以在网上找到。可以从O'Reilly出版社网站给出的本书的分类页面中找到想要的代码:这里的代码是为了帮助你更好地理解本书的内容的。通常,可以在程序成文档中使用本书中的代码, 而不需要联系O*Reilly获得许可, 除非需要大段大段地复制代码, 例如,本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可。但销售或发布O'Reilly的配套CD-ROM则需要O*Reil iy出版社的许可。引用本书的示例代码来回答一个问题也不需要许可:将本书中的示例代码的很大一部分放人到自己的产品文档中确实需要获得许可,非常欢迎读者使用本书中的代码,不用注明出处,注明出处的形式包含标题、作者、出版社和ISBN, 例如:“JavaScript:The Definitive Guide, by David Flanagan(O'Reilly) .Copyright 2011 David Flanagan, 978-0-596-80552-4”,关于O'Reilly的代码重用许可政策的更多规定, 可以参阅;http://oreilly.com/publaloreilly/ask_tim/200I/code policy.html。如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permission@oreilly.com联系我们.勘误表以及如何联系我们出版社会维护本书的一个勘误表。你可以查阅这个勘误表,同样你也可以将自己发现的问题提交给我们,通过访问本书的网站:如果你想评论或提问关于本书的技术问题,请用这个邮件和我们联系:关于书籍、研讨会、资源中心以及O'Reilly的官方网址的更多信息, 请访问这个地址:我们在Facebook上的地址是:http:/lfacebook.com/oreilly我们在Twitter上的地址是:http://twiner.com/oreillymedia我们在YouTube上的地址是:http://www.youtube.com/oreilymedia在写本书的过程中得到了很多人的热情帮助。感谢本书的编辑Mike Lou kid es, 他协助我规划了本书, 提出的很多建设性的意见。同样感谢本书的技术审校者:Zachary Kess in,他负责审校了本书第一部分, 以及Raffaele Cecco, 他审校了第19章以及第21章的
致谢前言|3
目负责人非常尽责, 有效的保证了本书的进度, Teresa Elsey的排版工作同样出色, RobRomano为本书绘制了很多插图和图表, 最后Ellen Troutman Z aig为本书创建了索引,这是一个信息时代,本书的所有技术细节都能在互联网上找到渊源,我也和广大网友保持了密切的联系。我在ES 5、w3c以及whatwg邮件列表中提了很多技术问题, 也得到了同仁们很专业的回答, 在此我非常感谢他们。同样非常感谢那些在网上分享JavaScript知识的人们, 很抱欺我没办法列出所有人的名字, Java Seri pt开发者社区非常活跃, 将自己投身其中让人感觉非常忘我、身心愉悦,编辑、审校者以及本书的之前几版的贡献者包括:Andrew Schulman, Angelo Sir igos、Aristotle Pagaltzis、Brendan Eich、Christian Heilmann、Dan Shafer、DaveC.Mitchell,Deb Cameron、Douglas Crockford、Dr.Tank red Hirschmann、Dylan Schiemann、FrankWillison, Geoff Stearns、Herman Venter、Jay Hodges、Jeff Yates、Joseph Kesselman,Ken Cooper、Larry Sullivan, Lynn Rollins, Neil Berkman, Nick Thompson、NorrisBoyd, Paula Ferguson, Peter-Paul Koch, Philippe Le Hegaret, Richard Y aker,Sanders Kleinfeld、Scott Furman、Scott Issacs、Shon Katzenberg er、Terry Allen.Todd Ditch end orf、Vid urAp para o以及Waldemar H or wat,为了完成本书,我经常加班到深夜,在此我要感谢我的家人对我的理解和鼓励,我爱他们。
第1章JavaScript概述
JavaScript是面向Web的编程语言。绝大多数现代网站都使用了JavaScript, 并且所有的现代Web浏览器——基于桌面系统、游戏机、平板电脑和智能手机的浏览器——均包含了JavaScript解释器, 这使得JavaScript能够称得上史上使用最广泛的编程语言。JavaScript也是前端开发工程师必须掌握的三种技能之一:描述网页内容的HTML、描述网页样式的CSS以及描述网页行为的JavaScript, 本书能帮助你掌握JavaScript这门语言,如果你有其他语言的编程经历, 这会有助于你了解JavaScript是一门高端的, 动态的、弱类型的编程语言, 非常适合面向对象和函数式的编程凤格。JavaScript的语法源自Java,它的一等函数(first-class function) 来自于Scheme, 它的基于原型(prototype-based)的继承来自于Self。但使用本书学习JavaScript不必去了解那些(Java/Scheme/Self) 语言或熟悉那些术语。“Java Seri pt”这个名字经营被误解, 除了语法看起来和Java类似之外, JavaScript和Java是完全不同的两种编程语言。JavaScript早已超出了其“脚本语言”(scripting-language)本身的范畴,而成为一种集健壮性、高效性和通用性为一身的编程语言。最新的语言版本为严谨的大型软件开发定义了诸多新的特性,JavaScript:名字和版本JavaScript是由Web发展初期的网景(Netscape) 公司创建, “Java Seri pt”是Sun Microsystem公司(现在的Oracle) 的注册商标, 用来特指网景(现在的Mozilla) 对这门语言的实现, 网景将达门语言作为标准提交给了ECMA——欧洲计算机制造协会——由于商标上的冲突,这门语言的标准版本改了一个丑随的名字“ECMAScript”, 同样由于商标的冲突, 微款对这门语言的实现版本取了一个广为人知的名字“Jscript”.实际上, 儿乎所有人都符这门语言叫做“JavaScript”.本书也仅仅使用“ECMAScript”来插代语言标准。在最近10年间, 所有的Web浏笔器都实现了第3版ECMAScript标准, 我们也已经不必再去考虑版本号了:语言标准已经很稳定了,并且被儿乎所有浏笔器完整地实现了.最近, ECMAScript第5版定义了新的语言标准, 在撰写本书时, 测宽器已经开始实现它了, 除了ECMAScript 3长期保留下来的特性, 本书还漏盖了所有ECMAScript 5的新特性, 正如我们经常将JavaScript简写成JS一样, ECMAScript 3和ECMA Seri pt 5有时也会简写成ES 3和ES 5,当我们提到这门语言本身时, 通常所指的语言版本是ECMAScript 3和ECMAScript 5(ECMAScript 4已经开发了数年, 但由于太过庞大, 从木发布过正式版本) 。有时会看到JavaScript的版本号(比如Java Seri pt 1.5或JavaScript 1.8) 。这些是Mozilla的版本号:版本1.5基本上就是ECMAScript 3, 后续版本包含了非标准的语言扩展(参照第11章) .最后, JavaScript解释器或者“引辈”(engine) 也有版本号, 比如, Google将它的JavaScript解释器叫做V 8, 在撰写本书时V 8引最新版本是3.0.为了有用起见, 通常每一种编程语言都有各自的开发平台, 标准库或API函数, 用来提供诸如基本输人输出的功能。JavaScript语言核心针对文本、数组, 日期和正则表达式的操作定义了很少的API, 但是这些API不包括输入输出功能。输入和输出功能(类似网络、存储和图形相关的复杂特性) 是由JavaScript所属的“宿主环境”(hostenviroment) 提供的。这里所说的宿主环境通常是Web浏览器(第12章会介绍两个不基于Web浏览器的JavaScript宿主环境) , 本书第一部分涵盖了语言本身的特性以及少量的内置API, 第二部分讲解了JavaScript如何在Web浏览器中工作, 并涵盖基于浏览器的API—这部分也称做“客户端JavaScript”,本书第三部分是核心API的参考手册。比如, 在这部分, 可以查找“Array”以获得JavaScript数组操作API的详细信息, 第四部分是客户端JavaScript参考手册, 比如, 你可以在这部分查找“canvas”来获得HTML 5