JavaScript权威指南(原书第7版)(经典的JavaScript犀牛书全新升级) (OReilly精品图书系列) (大卫·弗拉纳根(David Flanagan) 李松峰 [译]) (Z-Library)

Author: 大卫·弗拉纳根(David Flanagan), 李松峰 [译]

技术

No Description

📄 File Format: PDF
💾 File Size: 23.1 MB
57
Views
0
Downloads
0.00
Total Donations

📄 Text Preview (First 20 pages)

ℹ️

Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

📄 Page 1
(This page has no text content)
📄 Page 2
O'Reilly精品图书系列 JavaScript权威指南(原书第7版) JavaScript: The Definitive Guide, Seventh Edition (美)大卫·弗拉纳根(David Flanagan) 著 李松峰 译 ISBN:978-7-111-67722-2 本书纸版由机械工业出版社于2021年出版,电子版由华章分社(北 京华章图文信息有限公司,北京奥维博世图书发行有限公司)在中 华人民共和国境内(不包括中国香港、澳门特别行政区及中国台湾 地区)制作与发行。 版权所有,侵权必究 客服热线:+ 86-10-68995265 客服信箱:service@bbbvip.com 官方网址:www.hzmedia.com.cn 新浪微博 @华章数媒 微信公众号 华章电子书(微信号:hzebook)
📄 Page 3
目录 O'Reilly Media,Inc.介绍 本书赞誉 译者序 前言 第1章 JavaScript简介 1.1 探索JavaScript 1.2 Hello World 1.3 JavaScript之旅 1.4 示例:字符频率柱形图 1.5 小结 第2章 词法结构 2.1 JavaScript程序的文本 2.2 注释 2.3 字面量 2.4 标识符和保留字 2.5 Unicode 2.6 可选的分号 2.7 小结 第3章 类型、值和变量 3.1 概述与定义 3.2 数值 3.3 文本 3.4 布尔值 3.5 null与undefined 3.6 符号 3.7 全局对象 3.8 不可修改的原始值与可修改的对象引用 3.9 类型转换 3.10 变量声明与赋值 3.11 小结 第4章 表达式与操作符 4.1 主表达式 4.2 对象和数组初始化程序 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 操作符概述
📄 Page 4
4.8 算术表达式 4.9 关系表达式 4.10 逻辑表达式 4.11 赋值表达式 4.12 求值表达式 4.13 其他操作符 4.14 小结 第5章 语句 5.1 表达式语句 5.2 复合语句与空语句 5.3 条件语句 5.4 循环语句 5.5 跳转语句 5.6 其他语句 5.7 声明 5.8 小结 第6章 对象 6.1 对象简介 6.2 创建对象 6.3 查询和设置属性 6.4 删除属性 6.5 测试属性 6.6 枚举属性 6.7 扩展对象 6.8 序列化对象 6.9 对象方法 6.10 对象字面量扩展语法 6.11 小结 第7章 数组 7.1 创建数组 7.2 读写数组元素 7.3 稀疏数组 7.4 数组长度 7.5 添加和删除数组元素 7.6 迭代数组 7.7 多维数组 7.8 数组方法 7.9 类数组对象 7.10 作为数组的字符串 7.11 小结
📄 Page 5
第8章 函数 8.1 定义函数 8.2 调用函数 8.3 函数实参与形参 8.4 函数作为值 8.5 函数作为命名空间 8.6 闭包 8.7 函数属性、方法与构造函数 8.8 函数式编程 8.9 小结 第9章 类 9.1 类和原型 9.2 类和构造函数 9.3 使用class关键字的类 9.4 为已有类添加方法 9.5 子类 9.6 小结 第10章 模块 10.1 基于类、对象和闭包的模块 10.2 Node中的模块 10.3 ES6中的模块 10.4 小结 第11章 JavaScript标准库 11.1 集合与映射 11.2 定型数组与二进制数据 11.3 正则表达式与模式匹配 11.4 日期与时间 11.5 Error类 11.6 JSON序列化与解析 11.7 国际化API 11.8 控制台API 11.9 URL API 11.10 计时器 11.11 小结 第12章 迭代器与生成器 12.1 迭代器原理 12.2 实现可迭代对象 12.3 生成器 12.4 高级生成器特性 12.5 小结
📄 Page 6
第13章 异步JavaScript 13.1 使用回调的异步编程 13.2 期约 13.3 async和await 13.4 异步迭代 13.5 小结 第14章 元编程 14.1 属性的特性 14.2 对象的可扩展能力 14.3 prototype特性 14.4 公认符号 14.5 模板标签 14.6 反射API 14.7 代理对象 14.8 小结 第15章 浏览器中的JavaScript 15.1 Web编程基础 15.2 事件 15.3 操作DOM 15.4 操作CSS 15.5 文档几何与滚动 15.6 Web组件 15.7 可伸缩矢量图形 15.8 <canvas>与图形 15.9 Audio API 15.10 位置、导航与历史 15.11 网络 15.12 存储 15.13 工作线程与消息传递 15.14 示例:曼德布洛特集合 15.15 小结及未来阅读建议 第16章 Node服务器端JavaScript 16.1 Node编程基础 16.2 Node默认异步 16.3 缓冲区 16.4 事件与EventEmitter 16.5 流 16.6 进程、CPU和操作系统细节 16.7 操作文件 16.8 HTTP客户端与服务器
📄 Page 7
16.9 非HTTP网络服务器及客户端 16.10 操作子进程 16.11 工作线程 16.12 小结 第17章 JavaScript工具和扩展 17.1 使用ESLint检查代码 17.2 使用Prettier格式化代码 17.3 使用Jest做单元测试 17.4 使用npm管理依赖包 17.5 代码打包 17.6 使用Babel转译 17.7 JSX:JavaScript中的标记表达式 17.8 使用Flow检查类型 17.9 小结 关于作者 关于封面
📄 Page 8
O'Reilly Media,Inc.介绍 O'Reilly以“分享创新知识,改变世界”为己任。40多年来我 们一直向企业、个人提供成功所需之技能及思想,激励他们创新并 做得更好。 O'Reilly业务的核心是独特的专家及创新者网络,众多专家及 创新者通过我们分享知识。我们的在线学习(Online Learning) 平台提供独家的直播培训、图书及视频,使客户更容易获取业务成 功所需的专业知识。几十年来O'Reilly图书一直被视为学习开创未 来之技术的权威资料。我们每年举办的诸多会议是活跃的技术聚会 场所,来自各领域的专业人士在此建立联系,讨论最佳实践并发现 可能影响技术行业未来的新趋势。 我们的客户渴望做出推动世界前进的创新之举,我们希望能助 他们一臂之力。 业界评论 “O'Reilly Radar博客有口皆碑。” ——Wired “O'Reilly凭借一系列非凡想法(真希望当初我也想到了)建 立了数百万美元的业务。” ——Business 2.0 “O'Reilly Conference是聚集关键思想领袖的绝对典范。” ——CRN “一本O'Reilly的书就代表一个有用、有前途、需要学习的主 题。” ——Irish Times “Tim是位特立独行的商人,他不光放眼于最长远、最广阔的 领域,并且切实地按照Yogi Berra的建议——如果你在路上遇到岔
📄 Page 9
路口,那就走小路——去做了。回顾过去,Tim似乎每一次都选择 了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。” ——Linux Journal
📄 Page 10
本书赞誉 “本书包含的JavaScript知识是前所未有的。作者对这门语言 有极其精深的理解,跟着作者的脚步,你将穿过JavaScript的重重 迷雾,探索令人叹为观止的真知,让你的JavaScript代码质量和编 程效率更上一层楼,最终折服于本书的惊人魅力。” ——Schalk Neethling,MDN Web Docs的资深前端工程师 “David Flanagan带领读者领略了JavaScript的全景,包括语 言及其生态,展现在读者眼前的是一幅巨细无遗的美丽画卷。” ——Sarah Wachs,前端开发者、Women Who Code Berlin负责人 “任何有志于最大限度地利用JavaScript特性(包括最新和最 前沿的特性)来高效产出代码的开发者,都能通过这本全面且权威 的著作收获满满。” ——Brian Sletten,Bosatsu Consulting总裁
📄 Page 11
译者序 翻译这本“犀牛书”是我十几年来的一个夙愿。尽管由于种种 原因错过了原书第5版和第6版,但终于还是得偿所愿。2021年是我 从事技术翻译的第十五个年头。因此,本书也是我倾注多年经验翻 译而成的。 虽然翻译本书前前后后花了6个多月,但囿于工作和生活的压 力,我确实做不到对书中每一句话都反复推敲。我当然知道“好译 文是改出来的”,但翻译也是一门“遗憾的艺术”,所以我的翻译 肯定不是完美无缺的。如果要我对这本书(或者说对我近十年来翻 译出版的所有技术专著,包括2020年上市的“红宝书”第4版)的 翻译过程打个比方,我想最贴切的比喻莫过于即兴视奏:面对一本 从未见过的乐谱,你必须从奏响第一个音符开始,一气呵成地把整 首曲子演奏完。演奏开始后,唯一的目标就是全神贯注,心无旁 骛,快速看懂每个音符、每个节奏,尽最大努力把内容按照原样准 确无误地呈现出来。当然,不同的是,翻译过程中虽然也有假想的 读者存在,但这些“读者”并不妨碍我在发觉之前章节的翻译有问 题时回过头去修正。 这其实正是我期望的理想翻译状态,即“一边阅读,一边翻 译”。技术图书翻译属于非文学翻译或者技术翻译的范畴。技术翻 译的主要目的是译文准确、通顺,确保其当时当下的实用性。除此 之外,对文笔或修辞的技巧无须做过高要求。一本优秀的技术图 书,最终让读者受益的是它的内容和思想,而不是它的文字。文字 作为形式或载体固然重要,但从译者的角度来说,不让自己的文字 成为传达内容的阻碍就是最大的贡献。回顾我的技术翻译生涯,十 几年来从未间断翻译实践。随着翻译经验的不断积累,我对翻译的 认知也经历了深入浅出的过程。从最初的“翻译即翻译”,到后来 的“翻译即写作”,再到如今的“翻译即阅读”,经历了几次较大 的扬弃。“翻译”和“写作”,强调的其实是“转换”和“表 达”,而“阅读”强调的则是对原文的理解。某种程度上,这可能 也说明自己已经比较成功地解决了“转换”和“表达”的问题,从 而可以把精力更多地放到“阅读”和“理解”上。 JavaScript无疑是一门成功的语言,而且是世界上使用最多的 语言。这本“犀牛书”在很多工程师心目中有着至高无上的地位。 如果你由于种种原因错过了它之前的版本,那一定不要再错过这一 版了。在我看来,尽管市面上讲解JavaScript语言和技术的专著层
📄 Page 12
出不穷,但像这本书这样能够贴近ECMAScript和W3C规范的著作并 不多见。ECMAScript和W3C规范是用英文写的,这对母语为中文的 工程师无疑是个巨大的障碍。希望本书在字里行间流露出的与各种 规范千丝万缕的联系,能够时刻提醒每一位读者多花一些时间去研 究语言本身和规范本身。这不仅仅是个“知其然,也知其所以然” 的问题,更是一个追赶和超越的问题。相信再过5年、10年、20 年,中文开发者社区一定能够涌现出更多屹立在时代潮头的工程师 和作者。 本书翻译的顺利完成也离不开一些工程师的支持。感谢月影 (吴亮)、樊华、张荣剑、刘业、巫新华、包卓娜、宋思嘉、陈雁 楠、翟梦男、关婷婷、王若铮以及刘敏在我翻译期间,在工作方面 给予我的大力支持。感谢机械工业出版社华章公司的编辑王春华、 李忠明、孙榕舒、关敏为本书出版付出的心血,也感谢老朋友杨福 川为我翻译本书牵线搭桥。最后感谢我的妻子,为了让我按时交 稿,她每天都会督促我翻译几页,终于“积水成渊”。 李松峰 2021年1月3日
📄 Page 13
前言 本书介绍JavaScript语言和由浏览器及Node实现的JavaScript API。本书适合有一定编程经验、想学习JavaScript的读者,也适 合已经在使用JavaScript但希望更深入地理解进而真正掌握这门语 言的程序员。本书的目标是全面、权威地讲解JavaScript语言,对 JavaScript程序中可能用到的最重要的客户端API和服务器端API提 供深入的介绍。因此本书篇幅较长,内容非常详尽,相信认真研究 本书的读者都能获益良多。 本书之前的版本都包含一个完整的参考部分。如今,在网上可 以迅速、轻易地获取最新的参考资料,因此已经完全没必要在纸质 版中再包含这些内容。如果你想查找与核心JavaScript或客户端 JavaScript相关的任何资料,可以访问MDN网站 (https://developer.mozilla.org)。对于服务器端Node API, 推荐直接查阅Node.js参考文档(https://nodejs.org/api)。 排版约定 本书中使用以下排版约定: 斜体(Italic) 表示重要的术语、URL、电子邮件地址、文件名和文件扩展 名。 等宽字体(Constant width) 用于程序清单,以及段落中的程序元素,例如变量名、函数 名、数据库、数据类型、环境变量、语句以及关键字。 等宽粗体(Constant width bold) 表示应由用户直接输入的命令或其他文本。 等宽斜体(Constant width italic) 表示应由用户提供的值或由上下文确定的值替换的文本。
📄 Page 14
该图示表示一般性说明。 该图示表示警告或注意。 示例代码 可以从https://oreil.ly/javascript_defgd7下载补充材料 (示例代码、练习、勘误等)。 这里的代码是为了帮助你更好地理解本书的内容。通常,可以 在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许 可,除非需要大段地复制代码。例如,使用本书中所提供的几个代 码片段来编写一个程序不需要得到我们的许可,但销售或发布示例 代码则需要获得许可。引用本书的示例代码来回答问题也不需要许 可,将本书中的很大一部分示例代码放到自己的产品文档中则需要 获得许可。 非常欢迎读者使用本书中的代码,希望(但不强制)注明出 处。注明出处的形式包含书名、作者、出版社和ISBN,例如: JavaScript:The Definitive Guide, Seventh Edition,作 者David Flanagan,由O'Reilly出版,书号978-1-491-95202-3 如果读者觉得对示例代码的使用超出了上面所给出的许可范 围,欢迎通过permissions@oreilly.com联系我们。 O'Reilly在线学习平台 40多年来,O'Reilly Media致力于提供技术 和商业培训、知识和卓越见解,来帮助众多公司取得成功。 我们拥有独一无二的专家和革新者组成的庞大网络,他们通过 图书、文章、会议和我们的在线学习平台分享知识和经验。 O'Reilly的在线学习平台(O'Reilly Online Learning)允许你按 需访问现场培训课程、深入的学习路径、交互式编程环境,以及 O'Reilly和200多家其他出版商提供的大量文本和视频资源。有关 的更多信息,请访问http://oreilly.com。 如何联系我们
📄 Page 15
对于本书,如果有任何意见或疑问,请按照以下地址联系本书 出版商。 美国: O'Reilly Media,Inc. 1005 Gravenstein Highway North Sebastopol,CA 95472 中国: 北京市西城区西直门南大街2号成铭大厦C座807室(100035) 奥莱利技术咨询(北京)有限公司 要询问技术问题或对本书提出建议,请发送电子邮件至 bookquestions@oreilly.com。 本书配套网站https://oreil.ly/javascript_defgd7上列出了 勘误表、示例以及其他信息。 关于书籍、课程、会议和新闻的更多信息,请访问我们的网站 http://www.oreilly.com。 我们在Facebook上的地址:http://facebook.com/oreilly 我们在Twitter上的地址:http://twitter.com/oreillymedia 我们在YouTube上的地址: http://www.youtube.com/oreillymedia 致谢 很多人对本书的创作有贡献。感谢本书的编辑Angela Rufino,是她帮我把控进度,并容忍我拖稿。也要感谢本书的技术 审校者Brian Sletten、Elisabeth Robson、Ethan Flanagan、 Maximiliano Firtman、Sarah Wachs和Schalk Neethling,他们的 意见和建议让本书变得更好。
📄 Page 16
O'Reilly的制作团队像往常一样出色地完成了他们的工作: Kristen Brown负责印制,Deborah Baker是产品编辑,Rebecca Demarest画了插图,Judy McConville编制了索引。 也要感谢本书之前版本的编辑、审校者和贡献者:Andrew Schulman、Angelo Sirigos、Aristotle Pagaltzis、Brendan Eich、Christian Heilmann、Dan Shafer、Dave C. Mitchell、 Deb Cameron、Douglas Crockford、Dr. Tankred Hirschmann、 Dylan Schiemann、Frank Willison、Geoff Stearns、Herman Venter、Jay Hodges、Jeff Yates、Joseph Kesselman、Ken Cooper、Larry Sullivan、Lynn Rollins、Neil Berkman、Mike Loukides、Nick Thompson、Norris Boyd、Paula Ferguson、 Peter-Paul Koch、Philippe Le Hegaret、Raffaele Cecco、 Richard Yaker、Sanders Kleinfeld、Scott Furman、Scott Isaacs、Shon Katzenberger、Terry Allen、Todd Ditchendorf、 Vidur Apparao、Waldemar Horwat,以及Zachary Kessin。 写作本书让我无数个深夜不能陪伴在家人左右。我爱他们,感 谢他们对我不在身边的宽容。 David Flanagan 2020年3月
📄 Page 17
第1章 JavaScript简介 JavaScript是Web编程语言。绝大多数网站都使用 JavaScript,所有现代Web浏览器(无论是桌面、平板还是手机浏 览器,书中以后统称为浏览器)都包含JavaScript解释器,这让 JavaScript成为有史以来部署最广泛的编程语言。过去十年, Node.js让浏览器之外的JavaScript编程成为可能,Node的巨大成 功意味着JavaScript如今也是软件开发者最常用的编程语言。无论 你是从头开始,还是已经在工作中使用JavaScript,本书都能帮你 掌握这门语言。 如果你已经熟悉其他编程语言,那有必要知道JavaScript是一 门高级、动态、解释型编程语言,非常适合面向对象和函数式编程 风格。JavaScript的变量是无类型的,它的语法大致与Java相仿, 但除此之外这两门语言之间没有任何关系。JavaScript从Scheme借 鉴了一类(first class)函数,从不太知名的Self借鉴了基于原 型的继承。但要阅读本书或学习JavaScript不需要了解这些语言, 也不必熟悉这些术语。 JavaScript这个名字相当有误导性。除了表面上语法相似,它 与Java是完全不同的两门编程语言。JavaScript经历了很长时间才 从一门脚本语言成长为一门健壮高效的通用语言,适合开发代码量 巨大的重要软件工程和项目。 JavaScript:名字、版本和模式 JavaScript是Netscape在Web诞生初期创造的。严格来讲, JavaScript是经Sun Microsystems(现Oracle)授权使用的一个注 册商标,用于描述Netscape(现Mozilla)对这门语言的实现。 Netscape将这门语言提交给Ecma International[1]进行标准化,由 于商标问题,这门语言的标准版本沿用了别扭的名字 “ECMAScript”。实践中,大家仍然称这门语言为JavaScript。本 书在讨论这门语言的标准及版本时使用“ECMAScript”及其缩写 “ES”。 2010年以来,几乎所有浏览器都支持ECMAScript标准第5版。 本书以ES5作为兼容性基准,不再讨论这门语言的更早版本。ES6发 布于2015年,增加了重要的新特性(包括类和模块语法)。这些新
📄 Page 18
特性把JavaScript从一门脚本语言转变为一门适合大规模软件工程 的严肃、通用语言。从ES6开始,ECMAScript规范改为每年发布一 次,语言的版本也以发布的年份来标识(ES2016、ES2017、 ES2018、ES2019和ES2020)。 随着JavaScript的发展,语言设计者也在尝试纠正早期(ES5 之前)版本中的缺陷。为了保证向后兼容,无论一个特性的问题有 多严重,也不能把它删除。但在ES5及之后,程序可以选择切换到 JavaScript的严格模式。在这种模式下,一些早期的语言错误会得 到纠正。本书5.6.3节将介绍切换到这种模式使用的use strict指 令。该节也会总结传统JavaScript与严格JavaScript的区别。在 ES6及之后,使用新语言特性经常会隐式触发严格模式。例如,如 果使用ES6的class关键字或者创建ES6模块,类和模块中的所有代 码都会自动切换到严格模式。在这些上下文中,不能使用老旧、有 缺陷的特性。本书会介绍JavaScript的传统特性,但会细心地指出 它们在严格模式下无法使用。 为了好用,每种语言都必须有一个平台或标准库,用于执行包 括基本输入和输出在内的基本操作。核心JavaScript语言定义了最 小限度的API,可以操作数值、文本、数组、集合、映射等,但不 包含任何输入和输出功能。输入和输出(以及更复杂的特性,如联 网、存储和图形处理)是内嵌JavaScript的“宿主环境”的责任。 浏览器是JavaScript最早的宿主环境,也是JavaScript代码最 常见的运行环境。浏览器环境允许JavaScript代码从用户的鼠标和 键盘或者通过发送HTTP请求获取输入,也允许JavaScript代码通过 HTML和CSS向用户显示输出。 2010年以后,JavaScript代码又有了另一个宿主环境。与限制 JavaScript只能使用浏览器提供的API不同,Node给予了 JavaScript访问整个操作系统的权限,允许JavaScript程序读写文 件、通过网络发送和接收数据,以及发送和处理HTTP请求。Node是 实现Web服务器的一种流行方式,也是编写可以替代shell脚本的简 单实用脚本的便捷工具。 本书大部分内容聚焦JavaScript语言本身。第11章讲述 JavaScript标准库,第15章介绍浏览器宿主环境,第16章介绍Node 宿主环境。 全书首先从底层基础讲起,然后逐步过渡到高级及更高层次的 抽象。这些章节的安排多多少少考虑了阅读的先后次序。不过学习
📄 Page 19
一门新语言不可能是一个线性的过程,对一门语言的描述也不可能 是线性的。毕竟每个语言特性都可能与其他特性有关系。本书的交 叉引用非常多,有的指向前面的章节,有的指向后面的章节。本章 会先快速地过一遍这门语言,介绍一些对理解后续章节的深入剖析 有帮助的关键特性。如果你是一名JavaScript程序员,可以跳过这 一章(但在跳过之前,读一读本章末尾的示例1-1应该会让你很开 心)。 [1] 读 者 可 以 参 考 Allen Wirfs-Brock 和 Brendan Eich(JavaScript 之父)为第4 届编程语言历史大会(2020年6 月 ) 撰 写 的 论 文 “ JavaScript: The First 20 Years” (http://www.wirfs-brock.com/allen/posts/866)以及维基百科 词条(https://en.wikipedia.org/wiki/Ecma_International)。
📄 Page 20
1.1 探索JavaScript 学习一门新编程语言,很重要的是尝试书中的示例,然后修改 这些示例并再次运行,以验证自己对这门语言的理解。为此,你需 要一个JavaScript解释器。 要尝试少量JavaScript代码,最简单的方式就是打开浏览器的 Web开发者工具(按F12、Ctrl+Shift+I或Command+Option+I),然 后选择Console(控制台)标签页。之后就可以在提示符后面输入代 码,并在输入的同时看到结果。浏览器开发者工具经常以一组面板 的形式出现在浏览器窗口底部或右侧,不过也可以把它们拆分为独 立的窗口(如图1-1所示),这样通常更加方便。 图1-1:Firefox开发者工具中的JavaScript控制台 尝试JavaScript代码的另一种方式是下载并安装Node(下载地 址https://nodejs.org/)。安装完Node之后,可以打开终端窗口, 然后输入node并回车,像下面这样开始交互式JavaScript会话:
The above is a preview of the first 20 pages. Register to read the complete e-book.

💝 Support Author

0.00
Total Amount (¥)
0
Donation Count

Login to support the author

Login Now
Back to List