JavaScript二十年pdf下载pdf下载

JavaScript二十年百度网盘pdf下载

作者:
简介:本篇主要提供JavaScript二十年pdf下载
出版社:电子工业出版社
出版时间:2021-05
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

产品特色

编辑推荐

适读人群 :前端开发者,计算机专业院校师生,编程语言与计算机技术爱好者等

√ 语言诞生、标准创立、改革失败、既往开来四大华彩乐章,真实且深刻地记录了JS发展关键节点的每一个人每一种选择每一次牺牲,用语言缔造者的独到视角、敏锐观察和深刻理解,将这门伟大语言的峥嵘与妙趣一一呈现。


√ 跟随当事人穿梭于 JavaScript 二十年发展史之间,从十天发明 JavaScript 的历史故事再到 ES1 标准化的合纵连横,再到 ES4 的失意、ES5 的妥协与 ES6 的成功,本书将为你解答种种“语言为什么要设计成这样”的问题。


√ 以下中外前端风云人物撰文力荐此书:周爱民|Hax|Douglas(老道)|justjavac|死月|月影|李玉北|张云龙|顾轶灵|黄轶|于航|沈毅|黄玄|工业聚|小爝|一丝|题叶|染陌|Jasin Yip|LucasHC|小帅|寒雁|太狼|敖天羽|xcatliu|Himself65。


√ 本书可谓由JavaScript发明者与ES6规范首席作者联袂出品的语言演化史研究,不仅解读了语言标准化背后技术与商业上的种种竞争与合作,JavaScript诞生以来历次语言设计变革的思想根源,均可在其中找到答案。


内容简介

本书主要讲述了从 1995 年到 2015 年这20年间,JavaScript在创建、设计和演变方面所经历的过程。全书分为4个部分,每个部分都涵盖了 JavaScript 发展和演化的一个主要阶段,其中不仅涉及语言发展的技术细节,还介绍了人们和组织如何在竞争与合作中逐渐塑造 JavaScript 语言的故事。

本书适合JavaScript初学者和开发人员阅读和使用,也适合非JavaScript从业者翻阅。


作者简介


Allen Wirfs-Brock是编程语言及实现方面的专家,在开发编译器、虚拟机、编程环境和完整的计算机系统方面有着丰富的经验。他是面向对象编程技术兴起时期的技术创新者和业务领导者,并深度参与了 Smalltalk编程语言的开发过程。在2009-2015年,他是ECMAScript语言规范的项目编辑。


Brendan Eich是Brave Software和Basic Attention Token的联合创始人兼CEO。他曾担任Mozilla公司的CTO和CEO。在此之前,他是Mozilla项目和基金会的联合创始人。在Mozilla工作期间,他协助推出了屡获殊荣的Firefox网络浏览器。Brendan Eich也是JavaScript的发明者,这是互联网上使用最广泛的编程语言之一。


精彩书评

长期以来,JavaScript一直是世界上极易被误解的编程语言之一。本书终于纠正了外界对JavaScript历史的诸多误解。

——《JavaScript 语言精粹》作者 Douglas Crockford

本书由 JavaScript 之父 Brendan Eich执笔,介绍了只用十天开发出的 JavaScript 是如何一步一步成为流行的编程语言之一的。如果你是一名前端开发者,这本书绝对不容错过。

——Deno 核心贡献者 迷渡(justjavac)

JavaScript 已经有二十多年历史了,回望过去,它从当初毛毛糙糙的“小东西”变成了现在如同变形金刚一样的编程语言。本书帮助我们回忆了 JavaScript 的历史,甚至讲了一些我们从不知道的故事,可谓是一本让人读到“停不下来”的好书。

——Node.js Core Collaborator,《Node.js:来一打 C++ 扩展》作者 死月

作为 JavaScript程序员、前端工程师,我也算完整经历了JavaScript这段20年的历史。JavaScript互联网的发展紧密结合深入地改变了人们的生活,因此,我们每个人都是这段历史的获益者。本书以故事的形式将JavaScript精彩的历史呈现在我们面前,帮助我们更好地了解JavaScript并参与其未来发展。让我们一起把JavaScript变得更好!

——字节跳动技术中台前端负责人 月影

随着互联网技术的蓬勃发展,Web 应用可以说是无处不在,JavaScript 在这个发展过程中扮演了非常关键的角色。如今,基于JavaScript开发的应用已不限于 Web 应用的场景,其在 Serverless、IoT 等领域都有不错的表现。本书系统阐述了 JavaScript 在过去20年间的发展历史,以及在社区、商业公司和标准组织的推动下,JavaScript如何从最初的一个“玩具”发展到可以支持大型复杂应用的现代编程语言。通过回顾这段历史,我们可以更加坚信JavaScript的未来有无限的可能性。

——字节跳动前端基础工程团队负责人 李玉北

不知不觉,JavaScript 已走过 20 年的历史,从一个用 10 天时间匆匆设计出的简陋语言,发展到如今使用广泛的编程语言,其中离奇曲折的故事数不胜数。如今的前端工程师在使用 JS 构建各种终端应用时,应该做到“知其然,亦知其所以然”,了解 JS 的历史,有助于工程师掌握 JS 背后的语言设计和发展演变逻辑。这不仅是一本优秀的“考古书”,更是一本不可多得的前端必备知识手册。

——巧子科技创始人 张云龙

Web 技术的崛起深刻影响着我们的生活,作为其核心编程语言,JavaScript在历史上拥有着极为特殊的地位。这门具有独特魅力的语言是如何诞生的,经历了怎样的发展、困境和繁荣,相信JavaScript 语言规范的主要编辑 Allen Wirfs-Brock 和JavaScript创始人 Brendan Eich 是最合适的讲述者。这部译作拉近了中国JavaScript开发者与这段历史的距离,让我们对这门熟悉又陌生的语言有了新的认识。面对历史,心潮澎湃,希望本书能带动更多的读者参与到JavaScript语言规范的演进过程中来,为开放的 Web 平台注入新的能量。

——百度资深研发工程师,W3C 中文兴趣组联合主席 顾轶灵

本书不仅讲述了 JavaScript 的诞生历史,还重点讲解了 ES 技术的发展历程,以故事叙述的手法介绍了 JavaScript 技术从创建标准、设计到实现的演进过程。本书的语言风格轻松有趣,有助于读者更加深刻地理解和学习JavaScript语言。此外,书中还加入了大量的参考文献和详细的代码注释,可以说,这是一本不可多得的优秀图书。

——Zoom 前端架构师,开源项目 better-scroll 作者 黄轶

时至今日,在 TC39 会议上,我们仍然能够经常看到Mark Miller 和 Waldemar Horwat 等人的身影。不仅如此,浏览器实现方、各公司的 TC39 成员代表,乃至提案者个人,也都会以各自的方式和立场在这场会议上展开“battle”,并为 JavaScript 注入更多的新鲜血液。通过阅读本书,你能够了解到 JavaScript 背后的“辛酸”发展史、Allen Wirfs-Brock与Brendan Eich等人在整个 JavaScript 发展历史中所承担的重要角色、微软与雅虎是如何“阻碍” ES4 标准发展的,以及曾经的 ES3.1 是如何变为 ES5 标准的,等等。相信在读过本书之后,你会对 JavaScript拥有全新的看法——它不再是枯燥的符号,而是有血有肉的编程语言。

——PayPal Staff Engineer,TC39 Member,《深入浅出 WebAssembly》作者 于航

还记得2009 年刚读大学时,我接触了谷歌新推出的 O3D ,当时没想到 JS 能在浏览器里画出游戏中复杂的 3D 场景,也没想到后来前端技术发展如此之快,更没想到自己在后来9年的工作中大多在用 JS 做 2D 和 3D 渲染。这本书在满足我的“技术八卦欲”的同时,也让我再次回顾了曾亲身经历的JavaScript技术变迁。我深感当初选择JavaScript是一件非常幸运的事。

——Apache EChartsPMC 成员,ClayGL作者 沈毅

JavaScript 常常被戏称为“一种偶然成功的玩具语言”,而实际上,它不仅出身名门,并且成长在聚光灯下。纵观历史,有资格被标准化的编程语言寥寥无几,JavaScript因此而成为多方角力的战场,也有幸同时得到业界与学界先驱的亲传。时至今日,我们甚至难以判断是JavaScript背负了太多妥协,还是这些妥协成就了JavaScript。以史为鉴,或许你会有自己的答案。

——Facebook 软件工程师(编程语言、JS 引擎、前端基础设施) 黄玄

JavaScript——世界上流行的编程语言之一,从诞生之初便饱受争议。在从事前端工作多年后,我对它依旧爱恨交加。感谢这本书,揭示了JavaScript的来源。阅读本书,或许你能和我一样,与 JavaScript 和解。

——前端技术博主,开源项目作者 古映杰(工业聚)

初学 JS 时,我就发现没有一本完整介绍 JS 历史的书,而本书现在弥补了这一空白。它完整地讲述了JS 二十年的前世今生及其标准化之路。了解历史,才能理解未来,我强烈推荐所有前端技术人员都读一读这本书。

——新浪移动,前端基础架构组负责人,Darukjs 框架作者 付强(小爝)

本书是一本难得一见的JavaScript“史记”。本书译者以其丰富的技术阅历和生动有趣的文字,带我们领略了 JavaScript 的前世今生。阅读此书,我们能更好地理解 JavaScript 中某个 API 为什么如此设计,以及未来它会走向何方,仿佛有一个声音在耳边回荡:有人创造技术,有人毁灭技术,在技术的“革命”道路上,我们该何去何从?

——iconfont 开发者,PostCSS 官方团队成员 一丝

在各类编程语言涌现、编译器技术演进的数十年间,JavaScript背负着维护Web向后兼容的重担,但它依然在不断前进——改进语法语义、优化引擎,并取得了显著的效果,这实在是一项“壮举”。

——ClojureScript 爱好者 题叶

Web凭借其强大的生态以及开放的标准成为当下非常火热的技术,这背后离不开 JavaScript语言的支持。本书将带领读者了解JavaScript语言的诞生、标准化及发展过程,让读者对JavaScript语言有一个更全面的认识。我诚挚推荐广大JavaScript开发者阅读本书。

——阿里巴巴淘系前端架构团队成员,《剖析 Vue.js 内部运行机制》作者 染陌

JavaScript早已远超最初设计时的应用范围,然而对于它的演变历史,我们却往往只停留在前辈讲述和道听途说的故事中。本书将JavaScript的历史梳理清楚,也是我目前看过的唯一一本讲述编程语言演变进程的“历史书”,值得细品!

——知乎 JavaScript 话题优秀回答者,美团及阿里巴巴高级前端工程师 叶俊星(Jasin Yip)

本书译者不仅真实还原了原著的内容,更凭借其深厚的功力升华了内容,堪称常读常新。在阅读了部分章节后,我毫不犹豫地将本书推荐给每一位前端开发者。

——两部前端畅销书作者,知乎前端优秀回答者 侯策(LucasHC)

在很多开发者眼里,JavaScript不是一门严肃的编程语言,但正是那些看起来不那么严肃的特性使其成为了极具影响力的编程语言之一,帮助开发者不断重塑万维网。本书告诉我们JavaScript的成功并非偶然,而是业界优秀技术人士的智慧碰撞出来的结果。本书不仅让我们了解了JavaScript语言的历史和演进过程,更重要的是使我们深刻地认识到了标准和规范的重要性,并启发我们如何参与到标准和规范的制定中。

——稿定科技 CTO 姚东旭(小帅)

我的第一本编程入门图书是《JavaScript 语言精粹》,令我印象深刻的是,这本书反复倡导代码编写者应用“取其精华,去其糟粕”的理念规避JavaScript的问题,而《JavaScript二十年》再一次让我看到这个理念在标准委员会中落地,展示了技术理想与责任碰撞的过程。

——流行开源项目作者,稿定设计创意网页生产力工具负责人 糖饼

我看过王译锋学弟的很多文章,他的技术造诣和文字功底都非常好,也很有想法。我也曾想过翻译这本书,后来发现他已经做得很好了!这是一本前端必读书,强烈推荐!

——Fundebug 创始人,阿里巴巴前端技术专家 寒雁

跟随本书回到JavaScript诞生的那个年代,以当下的视角重新审视JavaScript的变迁历史,你会发现 JavaScript的流行并不是偶然。在了解了JavaScript语言中那些令人摸不着头脑的特性和行为的诞生过程后,你会不会跟我一样会心一笑?

——《Learning TypeScript中文版》译者,napi-rs 作者 龙逸楠(太狼)

现在市场上充斥着各类JavaScript“从入门到精通”实用工具书和教程,但是真正介绍JavaScript 如何演进的图书却很少。作为很少见的“考古”图书,本书带我们从另一个角度了解JS这种“前端霸主”语言。当我们真正走进 JavaScript,会在痛并快乐着的同时,做到“知其然,亦其所以然”。

——全栈工程师,bilibili 国际版运营管理平台负责人 敖天羽

互联网的爆发使JavaScript成为了流行的编程语言之一但其发展经历了一段很长的低谷期——直到ES6的诞生,JavaScript才有了更先进的标准和更稳定的迭代。让我们跟随本书一起重新体验一下JavaScript波澜壮阔的发展之路吧!

——《TypeScript 入门》作者,开源项目 Pagic 作者 刘易成(xcatliu)

本书既是一本JavaScript标准的历史书,也是一本JavaScript教程,很多 JavaScript特有的问题都可以在这里找到答案。无论你是新人还是老手,读后都能有所收获。

——Node.js & Hexo.js Member Himself65

目录

第 1 篇 语言诞生

第 1 章 史前时代 ..................................................................................3

1.1 Brendan Eich 加入网景 ........................................................................4

1.2 Mocha 的故事 ......................................................................................5

第 2 章 JavaScript 1.0 与 1.1................................................................8

2.1 JavaScript 语法 ..................................................................................10

2.2 数据类型与表达式 .............................................................................11

2.3 对象 ...................................................................................................14

2.4 函数对象 ............................................................................................17

2.5 内置库 ...............................................................................................18

2.6 执行模型 ............................................................................................20

2.7 迷惑行为与 bug .................................................................................22

2.7.1 冗余声明 ...............................................................................22

2.7.2 隐式类型转换与 = = 运算符 ..................................................23

2.7.3 32 位算术 ..............................................................................23

2.7.4 this 关键字.............................................................................24

2.7.5 arguments 对象 ......................................................................24

2.7.6 对数值属性键的特殊处理 .....................................................25

2.7.7 原始值的属性 ........................................................................26

2.7.8 JavaScript 中的 HTML 注释 ..................................................26

xxiv | JavaScript二十年

第 3 章 微软 JScript ...........................................................................28

第 4 章 从 Mocha 到 SpiderMonkey ....................................................30

第 5 章 插曲 :风评被害 ......................................................................35

第 2 篇 创立标准

第 6 章 寻找场地 ................................................................................39

第 7 章 首次 TC39 会议 ......................................................................41

第 8 章 编写规范 ................................................................................45

第 9 章 命名标准 ................................................................................50

第 10 章 ISO 快速通道 .......................................................................52

第 11 章 定义 ECMAScript 3 ..............................................................53

第 12 章 插曲 :JavaScript 不需要 Java ..............................................63

12.1 布道师 .............................................................................................63

12.2 富互联网应用与 AJAX ....................................................................64

12.3 浏览器博弈论 ..................................................................................67

第 3 篇 改革失败

第 13 章 不满于成功 ...........................................................................71

第 14 章 对 ES4 的第一轮尝试 ............................................................72

第 15 章 另一条死路 ...........................................................................78

第 16 章 Flash 与 ActionScript ...........................................................80

目录 | xxv

第 17 章 对 ES4 的第二轮尝试 ............................................................82

17.1 重置 TC39-TG1 ...............................................................................82

17.2 重新设计 ES4 ..................................................................................83

17.3 阻力 .................................................................................................87

17.4 寻求和谐 ..........................................................................................93

第 18 章 插曲 :认真对待 JavaScript ................................................. 100

18.1 JavaScript 性能革命 .......................................................................100

18.2 CommonJS 和 Node.js ...................................................................101

18.3 成为浏览器通用运行时的 JavaScript.............................................103

第 4 篇 继往开来

第 19 章 开发 ES3.1/ES5 ................................................................. 109

19.1 ES5 技术设计 ................................................................................114

19.1.1 严格模式 ...........................................................................114

19.1.2 Getter、Setter 和对象元操作 .............................................116

19.1.3 对象的完整性与安全性特性 ..............................................122

19.1.4 活动对象(Activation Object)的移除 .............................125

19.1.5 其他 ES5 特性 ...................................................................126

19.2 实现与测试 ....................................................................................127

第 20 章 从 Harmony 到 ECMAScript 2015 ....................................... 130

20.1 开始投入 Harmony ........................................................................130

20.1.1 稻草人(Strawman)与目标 .............................................130

20.1.2 倡导者模型 ........................................................................132

20.1.3 选择特性集 ........................................................................132

20.1.4 开始编写规范 ....................................................................133

20.1.5 One JavaScript ...................................................................134

20.1.6 Brendan 的梦想 .................................................................135

20.2 重新打造规范 ................................................................................138

20.2.1 重组规范结构 ....................................................................139

20.2.2 新的术语 ...........................................................................140

20.2.3 新的语义种类 ....................................................................141

20.3 ES2015 语言特性 ...........................................................................142

20.3.1 Realms、Jobs、Proxies 和元对象编程(MOP) ................142

xxvi | JavaScript二十年

20.3.2 块级声明作用域 ................................................................147

20.3.3 类 .......................................................................................151

20.3.4 模块 ...................................................................................156

20.3.5 箭头函数 ...........................................................................159

20.3.6 其他特性 ...........................................................................161

20.3.7 延期和被放弃的特性 .........................................................162

20.4 Harmony 转译器 ............................................................................162

20.5 完成 ECMAScript 2015 .................................................................163

第 21 章 总结 ................................................................................... 166

致谢 ................................................................................................... 168

附录 A 登场人物 ............................................................................... 170

附录 B 登场组织 ............................................................................... 175

附录 C 术语表 .................................................................................. 177

附录 D 缩略语和首字母缩写词 .......................................................... 182

附录 E 时间线 .................................................................................. 184

附录 F 1995 年 12 月 4 日的 JavaScript 公告 ..................................... 200


前言/序言

推荐序

一幅画是一个加法的总和。至于我,一幅作品如同一个减法的得数。——毕加索

版画《公牛》是毕加索的代表作之一,它记录了这位绘画大师如何在十余次的描摹与抽象迭代后,在最终的作品中深刻地体现了牛的健壮、斗志及其外在的结构特征。然而,并不是每件作品的创作历程都能得到这样的记录和展示。

JavaScript 从最初的一个可用成品发展到如今最优秀的跨端语言之一,在这个过程中既有激昂的战斗,也有悄然的沉没。它曾是“独拥天下的王者”,但也历经“濒死复生的涅槃”。

荣光的背后是十多年的灰暗时代,即便是 ES5,也只如同一道曙光却未能让 JavaScript走出语言特性匮乏的阴霾。包括我在内的许多人,在多年之后仍然惊讶于人们在那个时代的绝望与沉默,多数人选择了在 ES3 的基础上添加一个又一个的语言扩展包,把JavaScript 打造成“自己想要的样子”——其实更像其他某种语言的模样。而同时我们

又对每个与之类似的东西付之一笑 :这要么又是一个轮子发明,要么又是一个空想世界。

在 TC39 的不懈努力下,如今的 JavaScript 已经成为了另一个“加法的总和”。这种以产品化与应用性为主导的力量推动了 JavaScript 得以被重新定义并再次启程,而曾经厂商之间的博弈、规范制定者的取舍、社区中褒贬不一的声音等都湮没在了历史的沙尘中。

与毕加索最终画成的极简风格的抽象公牛相反,JavaScript 已经从早期的简单粗陋进化到如今的异常复杂。如同所有伟大的设计作品一样,JavaScript 也有着独特的思想、美好的期望,加上其本身的混合语言特性,我们已经很难再从这种语言中找到如同“牛的抽象”般的内在实质。而如果我们要从渐行渐远的历史片段中寻找和获取这样的实质,

是需要拥有像毕加索一样的独特的透视能力与抽象技法的。如果未能领悟 JavaScript 的结构与性质,也就无法有效地推动它的进化,它可能因此变得不伦不类,甚至成为其他语言的代名词。

抽象的加法是在其减法之后再进行的。在某个时刻,向系统中增加一个特性远比删减一个特性更难。这是在 ES6 之后 TC39 面临的最大挑战,也是我们深入理解和应用JavaScript时必须面对的真相。而本书足以让读者去探索那些不朽思想与远大期望的由来,

追溯 JavaScript 自诞生以来所存的精神实质。我们将看到 Eich 对早期 JavaScript 的忆述,以及 Allen 在 TC39 工作中推进 ECMAScript 的详实记录。其中的每一个人、每一种选择、每一次“牺牲”,都通过作者独到的视角、敏锐的观察和深刻的理解呈现在我们面前。

感谢作者和译者带给我们的关于 JavaScript 的真实且深刻的记录,向我们完整地展示了JavaScript 的成长过程。这本书如同“毕加索的牛”一般,让我们看见了思想的碰撞、言辞的论辩,以及看似决断之下的内心挣扎。我真诚地向你推荐它!

——周爱民

2021 年 4 月 3 日

译者序

作为经常因面试而接触同行的前端开发者,我常常感叹于 JavaScript 的用途之广。无论是农业、娱乐业,还是航天、军工等行业,都存在基于 JavaScript 的 Web 技术栈所实现的各种项目。毫无疑问地,JavaScript 深刻地影响着这个世界。

值得庆幸的是,和行业先驱者的直接交流尚属“年轻的”计算机业界的特权。试想,今天的火箭工程师们还有机会向冯布劳恩和科罗廖夫请教经验吗?尤其像编程语言这样深受历史决策影响的领域,要想解读诸多特性设计上的取舍,更需要了解其历史渊源。所幸在本书两位作者 Allen Wirfs-Brock 和 Brendan Eich 的努力下,JavaScript 从诞生到成

熟的二十年演化历史终于得到了系统性的整理和沉淀。从 ES1 的诞生到 ES4 的失意,再到 ES5 的妥协与 ES6 的成功,作为这段历史进程的权威参与者和见证者,两位作者正是最适合完成这项工作的人选。

在历史长河中,二十年看似微不足道,但足以使一个孩子长大成人,使一种编程语言脱胎换骨。1995 年,当 Brendan Eich 在十天的时间里写出 Mocha 解释器时,我才刚满一周岁 ;当 Allen Wirfs-Brock 在 TC39 组建茶歇联盟并合纵连横反对 ES4 时,我还在上初中。回顾自己小时候照片的同时,联想一下彼时的 JavaScript 发展到了什么程度,实在是一件很有趣的事情。

作为译者,我有幸邀请到了前端社区的许多知名人士为本书撰写推荐语,其中不仅有年过花甲的 Douglas 老先生,也有出生在 21 世纪的“小朋友”。这些来自不同时代、具有不同背景的人们,因为互联网和 JavaScript 而产生了互动和联系,这也让我感受到了行业的发展和传承。我坚信,能用 JavaScript 实现的东西还有很多,回顾历史,会让我们能更好地面向未来。

感谢稿定科技提供的宽松的工作环境,使我有条件利用业余时间完成本书的翻译工作。

感谢博文视点的张春雨老师对纸质版图书项目的悉心策划,以及编辑张爽的耐心校订。

最后特别感谢我的妻子林瑾瑜,她的陪伴和鼓励使我能愉快地完成这项工作。

——王译锋(雪碧)

2021 年 4 月

中文版序

语言是人类的核心,是定义人类社区的主要因素。当 Tim Berners-Lee 定义万维网技术时,他实现了人类从未拥有过的东西,即一个可能覆盖了世界上所有人的社区。万维网的基础是一组人造的语言 :HTML、CSS 和 JavaScript。正是这些语言,使人们能够编织和分享 Web 的内容。

自然语言产生于许多世纪以前,并以冰川形成般的速度缓慢发展,我们几乎不会注意到它们所发生的变化。而人造的计算机语言在这方面则有所不同,它们通常由个人发明,且其快速进化的过程是由同一个人或其他个别人所指导的。Web 编程语言的进化,则是由各种国际人员组成的技术委员会中不断变化的成员的共识所推动的。由于人们的参与,因此这不只是一项技术进程,也是一项社会进程。

本书讲述了 JavaScript 编程语言的创建及其前 20 年的演化故事。这个故事并不仅仅是关于一项技术的,也是关于塑造这项技术的人和组织的。Brendan Eich 和我都希望,它能展示关于 JavaScript 起步的权威历史。

参与这个故事的个人、组织和国际委员一般会用英语交流和记录他们的工作,这使得不精通英语的万维网社区成员很难独立理解和研究 JavaScript 的历史。我很高兴地得知王译锋将我们的工作内容翻译成了中文版本。我希望这能让中国的 Web 开发者有机会更好地了解这项重要的技术,这或许能激励一些人积极地参与到 JavaScript 下一阶段的发展中来。

Allen Wirfs-Brock

美国俄勒冈州舍伍德 2020 年 10 月


前言

2020 年,万维网已经无处不在。整个网络上有超过 10 亿个网站,它们都可以经由数十亿个与其相连的设备来访问。在所有设备上都运行着网络浏览器一类的程序,用于处理和显示这些网站的页面,而这些页面中的大部分嵌入或加载了用 JavaScript 编程语言所编写的代码。2020 年的 JavaScript 可能是世界上获得最广泛部署的编程语言。Stack Overflow 2018 年的调查显示,JavaScript 已被 71.5% 的专业开发者使用,这使其成为了世界上使用最广泛的编程语言。

本书主要讲述了 JavaScript 从 1995 年到 2015 年之间的创建、设计和演变过程。但本书所介绍的并不仅仅是语言的技术细节,还有人们和组织是如何在竞争与合作中逐渐塑造出 JavaScript 语言的故事。JavaScript 主导了 2020 年的 Web 开发。

这个故事相当漫长而复杂。为了让读者更容易理解,本文主要分为 4 个部分,每个部分都涵盖了 JavaScript 发展和演化的一个主要阶段。在各部分之间会有一段简短的插曲,其中介绍了当时的软件开发者是如何看待和使用 JavaScript 的。

1995 年,Web 和 Web 浏览器还是新技术,当时 Netscape 公司曾主导过 Web 浏览器的开发。JavaScript 在 1995 年 5 月由该公司的 Brendan Eich 设计实现,他是本书的作者之一。

JavaScript 旨在成为一种简单且易于使用的动态语言,其代码片断能被包含在网页的定义之中。浏览器会在渲染页面时解释执行这些代码片段,使页面能动态定制其展示形式,并响应用户交互。

第一部分“语言诞生”介绍的是 JavaScript 的诞生和早期演化。这部分介绍了 Netscape公司在开发第一个版本的 JavaScript 时相应的动机和设计取舍。由于名称上的接近,JavaScript 经常被人们与 Java 编程语言相混淆,第一部分解释了 JavaScript 语言的命名过程、两种语言在设想中的联系,以及实际所发生的情况。对于这种语言最初的特性,

以及这些特性背后的设计决策,本部分也进行了概述。第一部分还追溯了 JavaScript 诞生后的最初几年在 Netscape 和其他公司的早期演化过程。

Web 的基石之一,就是它所基于的非专有的开放技术 。任何人都能创建一个网页,将其托管在来自不同厂商的各式 Web 服务器上,使其供不同浏览器访问。一份通用的规范有利于保证各个独立实现之间的互操作性。在 JavaScript 诞生之初,人们就意识到它需要某种形式的标准规范。仅在该语言发布的第一年,Web 开发者就已经遇到了 Netscape 的 JavaScript 与微软的逆向工程实现之间的互操作性问题。1996 年,JavaScript 的标准化进程在 Ecma 国际标准化组织的主持下启动。1997 年,Ecma 以“ECMAScript”的名义发布了该语言的第一份正式标准规范。到 1999 年年底,Ecma 又发布了两份修订版和增强版规范,它们主要基于 Netscape 对 JavaScript 的改动。

第二部分“创建标准”探讨了 JavaScript 的标准化工作。包括标准化进程是如何启动的、规范是如何创建的、谁为这项工作做出了贡献,以及如何做决策。

到 2000 年,JavaScript 在 Web 上获得了广泛的应用。但此时 Netscape 公司正迅速衰落,Eich 也已转战其他项目。要由谁来引领 JavaScript 未来的进化呢?由于缺少企业或个人形式的“终身仁慈独裁者” 2 ,因此演化 JavaScript 的责任就落在了 ECMAScript 标准委员会的身上。职责的交接并不顺利,在长达十年的时间里,ECMAScript 标准委员会试图找到自己的语言发展道路。委员会在这期间经历了错误的开始、标准化进程的中断,以及在错误方向上的投入。与此同时,JavaScript 的实际使用量正迅速增长,用户通常会使用实现所提供的特殊语言进行扩展。这导致出现了大量依赖 JavaScript 但又未受维护的网页,并暴露了新的互操作性问题。Web 开发者开始创建复杂的客户端 JavaScript Web 应用,这也需要标准化的新增语言特性来支持。

第三部分“改革失败”讲述了修订语言时的失败尝试、标准委员会内部的动荡,以及这种动荡最终是如何解决的。

2008 年,标准委员会恢复了正常运作,着手制定一份适度加强后的标准版本,这版标准于 2009 年发布。有了这一成功经验,标准委员会终于能承担起在保持兼容的基础上推进 JavaScript 语言现代化的任务了。在历时 7 年的过程中,委员会大幅提高了语言规范性,其成果被称为 ECMAScript 2015。这是 JavaScript 持续发展的基础。在完成 2015 年的发布后,委员会再次修改了流程,以便实现更快的增量发布,现在每年都会定期完成修订。

第四部分“继往开来”讲述了在创建 2009 版和 2015 版 ECMAScript 标准时所涉及的人员和流程。本部分涵盖了这两个版本的目标,以及它们是如何满足 JavaScript 社区不断演化的需求的。这一部分介绍了每个版本中对语言做出的重大基础性改变,以及为语言添加的重要的新特性。

本书中的原始材料力求使用当时的原始文件。幸运的是,这类文件现存甚多。本书作者确保只通过参考资料中的网址即可自由而方便地在网上查阅几乎所有的原始文件。原始文件中还补充了一些直接参与故事的人们的访谈和交流内容。两位作者都是本书所涉及的许多事件的重要参与者,他们的回忆与第三方信息提供者的回忆均以类似的方式

进行了处理。

JavaScript 二十年来的完整故事很长,本书也是如此。其中涉及数百项不同的事件,以及几十个组织和个人。附录 A ~附录 E 可以帮助读者了解这些细节。附录 A 和附录 B提供了带有注释的人员名单,以及故事中所出现的组织。附录 C 是一份术语词汇表,其中定义的术语要么为 JavaScript 所特有,要么可能与 2020 年的计算机业界常见用法不同,

要么含义可能发生变化,或对读者来说显得陌生。本书中首次使用的英文术语词汇通常使用加粗斜体字。附录 D 列出了读者会遇到的缩略语。附录 E 包含 4 份详细的事件时间表,对应本书的 4 个部分。

名称、数字与缩略语

JavaScript 的世界可能是一个混乱的地方,其中看似相同的东西却往往有多种名称。当进一步进入标准化组织的世界时,这种情况就更加严重了。这些组织通常使用两三个字母的缩写和数字来标识他们的组织单位和工作产品。为了最大限度地减少这种混乱,我们将对这些名称和缩略语进行定义,并指定一些本书将遵循的约定。

“JavaScript”是一种编程语言的通用名称。它最初是由 Netscape 公司开发的用于网页的语言。但无论是在 Web 上还是在其他环境中,它的用途都已远远超出了这个范围。每天都有数以百万计的程序员来思考和谈论这种语言。JavaScript 编程语言与 Java 编程语言截然不同,在技术上也有很大的区别,但它们相似的名称却经常引起人们的混淆。

JavaScript ® 也是一个注册商标,最初由 Sun 公司注册。截至本书出版之日,此商标由 Oracle 公司持有。这个商标由 Sun 公司授权给了 Netscape 公司,后来又授权给了Mozilla 基金会。Netscape 和 Mozilla 使用诸如“JavaScript 1.4”这样的名称来描述其开发的语言实现的特定版本。一些语言的实现者为了避免可能出现的商标问题,会选择

使用其他名称。由于 JavaScript 的多种名称问题、商标问题及其易与 Java 混淆,许多现代用户、图书作者和工具实现者都将这种语言简称为“JS”。另外,“js”则是常用的 JavaScript 源代码的文件扩展名。在本书中,当我们宽泛地谈论这种语言及其在特定版本、宿主环境或语言实现之外的用法时,使用“JavaScript”这个不加限定的术语。

在为语言制定标准规范时,“JavaScript ”一词是被规避的。作为替代,规范中使用了“ECMAScript”这一名称。“JavaScript”和“ECMAScript”这两个名字在本质上是同一事物的不同名称。在本书中,当我们使用“ECMAScript”一词时,是指专门讨论由标准所定义的语言。

ECMAScript 名称中的“ECMA”部分来源于 Ecma 国际,这是一个总部设在瑞士的标准化组织。ECMAScript 标准就是在该组织的主持下制定的。“ECMA”最初是“欧洲计算机制造商协会”的首字母缩写,其最初的名称后来演变为 Ecma 国际。Ecma 国际组织已不再认为“ECMA”是一个缩写,目前只将“Ecma”中的“E”大写。但在过去的不同时期,

他们曾使用过将所有字母大写的名称,在 ECMAScript 开发初期就是如此。这也是语言名称以 5 个大写字母开头的原因。在本书中,当提到 Ecma 国际标准组织时,我们通常会使用“Ecma”这个词。

Ecma 开发了许多与计算机产业有关的标准。制定标准的实际工作由 Ecma 技术委员会(Tech Committee)负责,该委员会简称“TC”。当一个新的 Ecma TC 被创建时,会给它分配一个序列号作为唯一标识。TC39 就是为了标准化 JavaScript 而创建的 TC。一些Ecma TC 又被细分为不同的任务组(Task Group),缩写为“TG”,它们具备特定的职责。

从 2000 年到 2007 年,TC39 的职责扩大,覆盖到了除 JavaScript 之外的其他编程语言。

在此期间,维护 ECMAScript 的职责被分配给了 TC39-TG1。在本书中,我们使用“TG1”作为 TC39-TG1 的缩写。

Ecma 会为其 TC 撰写的每份不同的标准各分配一个编号,并为这些编号添加“ECMA-”前缀作为代号。ECMAScript 标准即被指定为“ECMA-262”。当一份标准被修订时,新版本会以相同编号后接一个版本号的形式来发布。例如,ECMAScript 标准第 3 个版本的正式名称是“ECMA-262 第 3 版”。在 TC39 内部以及范围更大的 JavaScript 社区内,

也出现了使用类似“ES3”形式的缩写作为官方版本名称缩写的惯例。这里的“ES”代表“ECMAScript”。下表列出了 1997—2016 年 ECMA-262 的各个版本及其在本书中所使用的缩写。

人们定义第 4 版标准的尝试历时近十年,其中主要包括两轮大体上互相独立的设计工作。

在本书中,术语“初版 ES4”和“新版 ES4”被用来特指其中的某一种1 ;而“ES4”则用在描述对创建第 4 版标准整体投入的语境中。

自第 6 版标准发布起,TC39 采用了以标准出版年份作为缩写的约定。因此,“ES6”和“ES2015”都是“ECMA-262 第 6 版”的非正式缩写。人们一般更倾向于使用“ES2015”,但“ES6”仍是第 6 版标准制定过程中最常用的缩写。TC39 成员还使用“Harmony”和“ES.next”作为第 6 版开发项目的代号。

本书使用了大量的行内代码片段来说明 JavaScript 中的概念。其中的一些代码段只对JavaScript/ECMAScript 的特定版本有效,其他代码段则描述了一些不属于该语言的特性。

对于那些无法在所有版本的 JavaScript/ECMAScript 中可用的代码段,本书中都加入了适当的标注。

注意事项

英文原书中包含附录 A~ 附录 Q。其中,附录 F 是标志着 JavaScript 正式诞生的公告,而附录 G ~附录 Q 则主要包括 JavaScript 演化过程中的文献记录,如会议纪要、提案示例、邮件列表记录、规范节选等。由于附录 G ~ 附录 Q 的性质更接近参考文献,故本书中并未包含此部分,有需要的读者可以在博文视点社区(www.broadview.com.cn)的本书页面中自行下载并查阅。

形如 Mosaic 的 加粗斜体英文词汇,可在附录 C 中找到相应的解释。

形如[1]的为参考文献,全书参考文献较多且绝大部分为超链接,因此将其作为本书附赠的电子资源提供给读者,以便于读者查阅,请读者在博文视点社区的本书页面中下载。