《JavaScript高级程序设计(第2版)》

寻人启示

lyongde 同学,请尽快将你的名字发到我的邮箱里面(lsf.email[at]gmail.com),以便在第二次印刷时加到译者序中以表感谢。

儒家经典《大学》将“格物致知”奉为做学问、养身性的最高境界。

尼古拉斯•扎卡斯重新修订的这个最新版本,为各层次的JavaScript爱好者和Web前端开发人员提供了一条“格物致知”的捷径。

新版本的原书不仅篇幅由原来的600多页增加到800页,而且几乎全部更新、重写了上一版的内容,删除了上一版中与今天的职业需求无关的主题,新增了大量比上一版更有价值、更能反映JavaScript最新发展成果的内容。从颇具深度的JavaScript语言基础到作用域(链),从JavaScript引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(BOM)到客户端检测,从文档对象模型(DOM)到基于事件的Web脚本编程,从错误处理到前端调试,从XML(E4X)到Ajax及JSON,从高级前端开发技术到前沿的客户端存储,从最佳编程实践到展望即将成为现实的API,直至JavaScript未来的发展。全书基本上囊括了JavaScript技术的各个方面,几乎涉及到了Web前端开发的所有热门话题。值得一提的是,本书还涵盖了当前最受开发人员关注的HTML5和移动设备(如iPhone)开发的内容。可以预见,本书一定会成为Web前端开发人员不可多得的经典之作。

需要提请读者注意的是,本书第22章讲到了JavaScript未来的变化,里面大部分讲的是ECMAScript 4/JavaScript 2,而ECMAScript 4已经被放弃了,新标准是ECMAScript 5。请读者参考http://www.ecmascript.org/。感谢周涛(Snandy)指出此问题。

本书文前和第1章至第17章由李松峰翻译,第18章至第22章及附录由曹力翻译。武卫东老师审读斧正了序的翻译,责任编辑朱巍为本书早日出版多方协调,执行编辑毛倩倩发现了译稿中多处错译和漏译,排校负责人董秋霞、谢凌老师严把三道排校质量关、谢廷晟全面审校了第1章至第17章,吴玺喆(George Wing)、吴生辉(千年一梦)、周裕波、梁超(LC)、张树恒(shuzai)、罗永德(lyongde)也审校了前17章的部分内容,为确保本书翻译质量起到了重要作用,在此对上述老师和同学致以深深的谢意。

译者
2010年5月

眼下,我正在翻译Beginning Android 2(Apress,March 2010)这本书。之所以翻译这本书,一来是因为这本书比较急,而全书又有接近400页的内容需要翻译,如果找其他译者,少说得3个月;而我打算在1个月左右搞定。二来也是为了学习一下Android开发,以后审稿子也可以做到“胸有成竹”。

之所以想到公开征寻技术审稿人,一是上一本书的样章吸引了120多位朋友的热情参与(“经典名著,精选样章”),几位热心的朋友在出版前也为我指出了一些问题,而这些问题在出版前都得到了妥善解决,保证了最终出书的质量;二是在今天这个开放的环境下,如果还延续那种一个人关起门来翻译的模式,不仅会显得译者自己缺乏公开的勇气,更会拖延译稿中问题的解决(译者无法解决书中全部问题很正常),影响出书进度。况且,样章早晚都是要放出来给潜在读者先睹为快的,后放不如早放,这样也有利于潜在读者提前了解这本书的价值所在和翻译质量——“先尝后买”嘛。

当然,征寻技术审稿人的主要目的,还是为了请领域专家来给译稿把关,尽最大努力来消除翻译中存在的错误或问题,确保最终出书的质量。下面就说一说对技术审稿人的要求:

1、对Android开发有浓厚的兴趣和一定的开发经验;
2、愿意花时间“先睹为快”并有能力指出错误和问题;
3、有一定的中文文字表达能力,能够看懂英文原文。

有意参与这本书技术审校的朋友,请给我发邮件(lsf.email[at]gmail.com)吧,邮件标题请填“Beginning Android 2审校”(以便过滤归类)。

声明一下:对所有参与审校的朋友,我会在译者序中具名致谢。对参与审校而且指出问题较多的朋友,届时将赠送样书(样书可以是本书中文版,或者我翻译过的其他图书,或者图灵公司出版的其他图书——届时我们可以再商量)

另外,对于只是想“先睹为快”的朋友,也可以给我发邮件,邮件标题请填“Beginning Android 2试读”,我会给大家共享部分样章。

期待Android开发专家、高手、大牛、爱好者,伸出援手、不吝赐教!让我们共同携手,为Android开发社区和爱好者又快又好地奉献一本优秀的引进版图书。

Beginning Android 2

Beginning Android 2

在一年一度的新春佳节即将到来之际,应热心读者的要求,为满足大家先睹为快的愿望,也为了答谢朋友们对本博客长期以来的支持,即日起到春节前夕,本站将发布尚未出版的《JavaScript高级程序设计(第2版)》一书的样章(暂定为3章,约115页)。

申请办法

1、发邮件到:lisf@turingbook.com。
2、邮件主题:《JavaScript高级程序设计(第2版)》样章;邮件内容:您的Email地址。
3、24小时内收到样章,先睹为快!

备注:样章格式为PDF,托管在“Google文件”,可以在线查看(无须登录),也可以下载和打印。希望在线查看PDF的朋友,请在邮件正文中注明“希望接收Google文件”字样,即可收到样章的链接(也可以下载);否则,将收到PDF文件(*请确保有5M以上的空余邮箱空间)
样章列表(详细目录

第3章 基本概念
第4章 变量、作用域及内存问题
第5章 引用类型

《JavaScript高级程序设计(第2版)》简介

本书是人民邮电出版社图灵公司引进出版的大畅销书、JavaScript权威著作《JavaScript高级程序设计》的最新升级版。《JavaScript高级程序设计》自2006年11月出版以来,已经累计销售逾30000册,而且至今仍然十分畅销。这一点可以通过北京新华文化发展有限公司(新华书店)近期的店面销售数据看出来(大家可以自行比较一下其他畅销书的销量)。应该说,在Web 2.0革命爆发的同时,人民邮电出版社图灵公司引进出版的本书成就了计算机图书市场上难得一见的奇迹。

本书作者尼古拉斯·扎卡斯(Nicholas C. Zakas)现为Yahoo!公司首席前端工程师,世界顶级Web技术专家。原书第1版曾被选为Yahoo!公司YUI(Yahoo! User Interface Library,Yahoo!用户界面库)团队的内部培训教材。

2009年初,本书第2版面世(《Professional JavaScript for Web developers, 2nd Edition》)。新版本不仅篇幅由原来的600多页增加到800页,而且几乎全部更新、重写了上一版的内容,删除了上一版中与今天的职业需求无关的主题,新增了大量比上一版更有价值、更能反映JavaScript最新发展成果的内容。从颇具深度的JavaScript语言基础到作用域(链),从JavaScript引用类型到面向对象编程的最佳实践,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(BOM)到客户端检测,从文档对象模型(DOM)到基于事件的Web脚本编程,从错误处理到前端调试,从XML(E4X)到Ajax及JSON,从高级前端开发技术到前沿的客户端存储,从最佳编程实践到展望即将成为现实的API,直至JavaScript未来的发展。全书彻底涵盖了JavaScript技术的各个方面,几乎涉及到了Web前端开发的每一处细节。可以预见,这部著作一定会成为Web前端开发人员不可多得的又一部经典。

目前,《JavaScript高级程序设计(第2版)》的翻译工作已经进入后期阶段(全书22章,所剩不到5章)。而且,为确保新版及时上市与读者见面,出版社采取了与译者同步翻译、同步编辑审校的特别措施。新版本预计2010年上半年可以上市;当然,在确保出版品质的前提下一定会尽量往前赶!

样章详细目录

第3章 基本概念 1
3.1 语法 1
3.1.1 区分大小写 1
3.1.2 标识符 1
3.1.3 注释 2
3.1.4 语句 2
3.2 关键字和保留字 3
3.3 变量 4
3.4 数据类型 5
3.4.1 typeof操作符 5
3.4.2 Undefined类型 6
3.4.3 Null类型 7
3.4.4 Boolean类型 7
3.4.5 Number类型 8
3.4.6 String类型 14
3.4.7 Object类型 16
3.5 操作符 17
3.5.1 一元操作符 17
3.5.2 位操作符 20
3.5.3 布尔操作符 26
3.5.4 乘性操作符 29
3.5.5 加性操作符 30
3.5.6 关系操作符 32
3.5.7 相等操作符 34
3.5.8 条件操作符 35
3.5.9 赋值操作符 36
3.5.10 逗号操作符 36
3.6 语句 37
3.6.1 if语句 37
3.6.2 do-while语句 38
3.6.3 while语句 38
3.6.4 for语句 38
3.6.5 for-in语句 40
3.6.6 label语句 40
3.6.7 break和continue语句 41
3.6.8 with语句 42
3.6.9 switch语句 43
3.7 函数 45
3.7.1 理解参数 47
3.7.2 没有重载 48
3.8 小结 49

第4章 变量、作用域和内存问题 1
4.1 基本类型和引用类型的值 1
4.1.1 动态属性 2
4.1.2 复制变量值 3
4.1.3 传递参数 4
4.1.4 检测类型 6
4.2 执行环境及作用域 6
4.2.1 延长作用域链 9
4.2.2 没有块级作用域 10
4.2.3 声明变量 10
4.2.4 查询标识符 11
4.3 垃圾收集 12
4.3.1 标记清除 12
4.3.2 引用计数 13
4.3.3 性能问题 14
4.3.4 管理内存 15
4.4 小结 15

第5章 引用类型 1
5.1 Object类型 1
5.2 Array类型 3
5.2.1 转换方法 6
5.2.2 栈方法 7
5.2.3 队列方法 8
5.2.4 重排序方法 9
5.2.5 操作方法 11
5.3 Date类型 12
5.3.1 继承的方法 14
5.3.2 日期格式化方法 15
5.3.3 日期/时间组件方法 15
5.4 RegExp类型 17
5.4.1 RegExp实例属性 19
5.4.2 RegExp实例方法 19
5.4.3 RegExp构造函数属性 21
5.4.4 模式的局限性 23
5.5 Function类型 23
5.5.1 没有重载(深入理解) 25
5.5.2 函数声明与函数表达式 25
5.5.3 作为值的函数 26
5.5.4 函数内部属性 27
5.5.5 函数属性和方法 29
5.6 基本包装类型 31
5.6.1 Boolean类型 32
5.6.2 Number类型 33
5.6.3 String类型 35
5.7 内置对象 42
5.7.1 Global对象 43
5.7.2 Math对象 46
5.8 小结 49

埃里克·米拉利亚(Eric Miraglia)

从诞生至今的大部分时间里,焦虑、抨击、蔑视和误解一直与JavaScript如影随形。JavaScript刚刚问世那几年,很多“严肃的程序员”都认为它不够严肃。

相比之下,.COM泡沫时期加入Web开发行列的许多文科生,则普遍觉得JavaScript深不可测、晦涩难懂。就算那些耐力和韧性俱佳者能够把JavaScript琢磨得很透,但仍然摆脱不掉竞争性浏览器提供的不同实现给他们带来的麻烦。凡此种种,最终导致粗制滥造的脚本越来越多。另一方面,拜Web前端代码的无比开放性所赐,各种坏习惯不断从一个站点被粘贴进另一个站点的源代码中。那些实现活该臭名昭著,可是,JavaScript这门语言也因此被严重拖累,背上了不该有的坏名声了。

2001年前后(随着Internet Explorer 6的发布),浏览器实现已经大为改进,Web开发实践也开始得到改善,呈现出了二者水乳交融的局面。作为Ajax核心的XMLHttpRequest对象正慢慢地为人们所发现,一种新的桌面风格的用户交互模式出现在浏览器中。允许JavaScript操作Web文档结构和内容的DOM API已经定型。而CSS,不管人们如何曲解或者无视它,也无论浏览器开发商怎样丧心病狂地实现它,都已经成长得足够茁壮,它的美妙和反应敏捷令它能够与新的Web交互能力配合无间。最终,JavaScript一扫颓势,变得令人惊诧、让人兴奋、使人敬畏。想想2004年第一次使用Google Maps时的情景吧,那种感觉你或许还记忆犹新。

Google Maps是新兴应用程序的典型代表。这类浏览器编程与后端编程并重的应用程序,不禁令人对Web浏览器窗口中那块“画布”的未来浮想联翩。(除Google Maps之外,早在2003年就基于网页邮件客户端提供类似Outlook功能的Oddpost,也是这类应用程序的一个了不起的先驱。)随着这类应用程序如雨后春笋般大量涌现,以及支持它们的浏览器的市场份额不断攀升,一个Web应用全面复兴的时代真的到来了。“Web 2.0”诞生了,Ajax也成了“IT”技术。Web似乎在一夜之间脱胎换骨,重新激发起了人们的兴趣。而JavaScript作为唯一的Web编程语言,也变得更有意思了。

有意思,但用好它却不简单。JavaScript以及在DOM和BOM中为其定义的API不一致的实现,给跨浏览器编程造成了比原本大得多的困难。前端设计行业还远未成熟。大学教学计划并没有(至今仍没有)做出相应的调整,以满足相关的培训要求。

到2004年底,JavaScript无疑已经成为最重要的编程语言。但从学术角度看,它依然不具备进入一类学科的资格。Web虽然已经翻开了新的一页,但在培养足够的知识全面、训练有素的人才方面,我们依然面临着严峻的挑战。

为此,很多技术作者挺身而出,撰写了不少有关JavaScript的图书。几年来,这类书虽然也出了不下几十本,但总体来说仍然不尽如人意。其中有的在推销与落伍的浏览器有关的技术,有的则在卖弄容易剪贴但却不好扩展和维护的技术。让人想不通的是,许多JavaScript图书让人觉得作者好象并不真正喜欢JavaScript,或者他们不认为读者应该喜欢它,再或者他们根本不相信读者能够完全理解JavaScript。

2005年,Nicholas C. Zakas这本书的第一版面世,为前端工程领域奉献了一本真正的好书。当时,我和雅虎的同事们正在创建YUI(Yahoo! User Interface Library,Yahoo!用户界面库),打算将其作为公司前端工程的基础,同时也借以推广我们这门新学问的最佳实践。每到周五,我们就聚到一间教室里讨论前端工程,也向大家讲解JavaScript、CSS以及在浏览器中创建Web应用程序的知识。我们从已出版的高级JavaScript及DOM脚本编程方面的图书中认真挑选了几本,想让新工程师通过它们掌握如何构建耐用、基于标准且容易维护的Web应用程序。Zakas的书一出版,马上就被选为我们的JavaScript内部培训课本。

从那时起我们就一直使用他的书。我们一致认为这本书太有用了,于是就跟Zakas商量,让他加入雅虎帮我们建立公司的前端工程社区。

Zakas在书中传达的理念与众不同——JavaScript既需要严肃认真地对待,但也是完全可以理解和掌握的。如果你是个程序员,这本书会告诉你JavaScript与各种编程语言的关系,以及如何运用你已经习以为常的各种编程模式。你可以理解JavaScript的继承机制及其固有的动态特性(虽不合传统,但却十分自由十分强大),可以从Zakas这位尊重和理解JavaScript的同道那里学会欣赏JavaScript这门语言。

如果你曾经是一名文科生,在网络泡沫时期步入了这个行业,至今也没有转行,而且想要弥补自己在JavaScript方面的不足,你会发现Zakas是一位难得的良师益友。他可以帮你实现从“会做”到“做好”的转变。他能让你认真地理解这门严肃的学问。最重要的是,他不会让你先入为主地产生对这门语言应该理解多深的想法。相反,通过他严肃、耐心、通俗易懂的讲解,你自然而然地会对这门语言有同样深刻的认识。

本书是经过扩展、更新和改进后的第二版,删除了上一版中与今天的职业需求无关的主题,并用我们在2005年至2008年学习的新知识更新了剩余的内容。这几年是JavaScript发展的重要时期,Zakas则始终位于最前沿孜孜不倦地学习这些新知识。他这些年一直在致力于建造新一代最流行的Web个人门户(My Yahoo!),以及开发Web上最受欢迎的站点(Yahoo!主页)的新版本。Zakas以他作为老师和作者的独特视角,筛选出由这些超复杂、超大型应用程序磨砺出的经验,并将这些经验融入到了本书的字里行间。

他给出的解决方案远远超出了一本好书的范畴,只有每天都与代码同呼吸共命运的人,才有可能与读者分享如此具有实用价值的知识。

说实话,本书新版的面世对我和各位读者而言真是个莫大的喜讯。因为它的内容比上一版更有价值、更能反映JavaScript最新的发展成果,因此也更加令人不可错过。

埃里克·米拉利亚(Eric Miraglia)
YUI高级技术经理 哲学博士
于加利福尼亚州森尼维耳市

Nicholas C. Zakas,Yahoo!主页首席前端工程师Nicholas C. Zakas,Yahoo!主页首席前端工程师,个人网站www.nczonline.net。《Professional JavaScript for Web developers, 2nd Edition》作者。最新专著《High Performance JavaScript》(O’Reilly Media; 1 edition,March 15, 2010)。