工业革命是钢铁铸就的,互联网革命则是 JavaScript 造就的。25 年的反复锻造与打磨,成就了 JavaScript 在今天的应用程序开发中毋庸置疑的统治地位,但并非一开始就是如此。

Brendan Eich 只用 10 天就写出了 JavaScript 的第一版。初生的 JavaScript 看似弱不禁风,但历史表明,第一印象并不代表一切。今天,这门语言的每个细节,也就是这本书所涉及的方方面面,都是反复推敲的产物。并非所有决定都让人满意,也没有完美的编程语言,不过单从无所不在这方面看,JavaScript 倒是很接近完美。它是目前唯一一个可以随处部署的语言:服务器、桌面浏览器、手机浏览器,甚至原生移动应用程序中都有它的身影。

JavaScript 目前的使用者有不同层次的软件工程师,他们的背景各异。无论是以开发设计精良、优雅的软件为目标,还是仅仅为了完成业绩而简单堆砌一个系统,JavaScript 都能派上用场。

怎么使用 JavaScript 完全取决于你。一切尽在你的掌握之中。

在我超过 15 年的软件开发生涯中,JavaScript 工具和最佳实践已经发生了天翻地覆的变化。2004 年,我开始接触这门语言,当时还是雅虎地球村(Geocities)、雅虎群组(Yahoo Groups)和 Macromedia Flash 播放器的天下。JavaScript 给人感觉像个玩具,当时我在 RSS、MySpace Profile Pages 等流行的沙盒环境中开始使用它。后来我又帮助一些个人网站修改和自定义功能,那种感觉就像在狂野的西部拓荒,而我也因此喜欢上了它。

当初我创建第一家公司的时候,配置主机装个数据库要花几天时间,而 JavaScript 只要扔到 HTML 里就可以跑起来。“前端应用程序”是不存在的,主要是零七碎八的函数。后来 Ajax 因为 jQuery 火了而变得更加流行,这才打开了通向新世界的大门,可靠、稳定的应用程序应运而生。这股风潮愈演愈烈,直到有一天遇到了发展瓶颈,但突然间,强大的框架诞生了。前端模型、数据绑定、路由管理、反应式视图,全都爆发出来了。我就在这个时候搬到硅谷,帮人打理一家公司。很快,使用我代码的用户达到了几百万。置身硅谷这么长时间以来,我也为开源做了一些贡献,培训了不计其数的软件工程师,也走了一点儿运。我的上一家公司在 2018 年被 Stripe 收购,我现在就供职于这家公司,致力于为互联网构建其经济基础设施。

我很高兴在马特第一次到帕洛阿尔托的一家小型创业公司领导工程化时结识了他。那家公司叫 Claco,当时我刚成为它的顾问。他追求伟大软件的活力和激情溢于言表,而这家羽翼未丰的公司很快就开发出一款漂亮的产品。一如为硅谷公司设立标杆的惠普,这家创业公司也诞生在一间平房里。但这可不是寻常的民房,而是一间“黑客屋”,里面十几位才华横溢的软件工程师经常通宵达旦地工作。虽然过的不是什么高档次生活——他们坐的都是别人扔在大街上的那种沙发床和旧椅子——他们在这间房子里每天所写代码的数量和质量却引人瞩目。连续工作几小时后,大多数人会把精力投入到公司的另一个子项目上,然后又是几个小时的工作。不太会写代码的人也常受启发,发现自己学习的渴望,然后仅仅几个星期后就变成了代码能手。

马特是促成这种开发效率的关键角色。他是“黑客屋”里经验最丰富的人,恰好也是思维最清晰、最专业的一个。拿到计算机工程学位并不能说明什么,只要在窗户或者白板上看到马特写的算法、性能计算以及代码,你就知道马特又在专注于他的下一个大项目。随着我对他了解的加深,我们成为了好朋友。他的领悟能力,他对培训工作的热爱,以及几乎可以把所有东西转化成笑话的能力,都是我所欣赏的品质。

虽然马特是一位极具才华的软件工程师和项目领导,但他之所以能成为本书作者独一无二的人选,还是凭借他独有的经验和知识。

他不仅仅花时间教别人,而且还把这本书写完了。

在 Claco,他开发了多款整体性产品,端到端地帮助教师在课堂上提供更好的学习体验。在 DoorDash,他是第一位工程师,开发了一个可靠的物流配送系统并实现了高速增长,目前公司估值超过了 120 亿美元。最后,在 Google,马特写的软件已经被这个星球上的数十亿人使用了。

全情投入,快速增长,誉满天下——多数软件工程师终其一生也只能体验到其中一项,而且还得运气好。马特不仅体验到了全部,还成为了畅销书作者。除了本书,他还写了两本 JavaScript 和 Angular 的书。说实话,我就想知道他什么时候能写一本书,把自己管理时间的奥秘分享出来。

本书是一部翔实的工具书,满满的都是 JavaScript 知识和实用技术。我热切希望本书读者能够不断学习,并亲手打造属于自己的梦想。欢迎大家多多挑错,多记笔记,别忘了打开代码编辑器,毕竟互联网革命才刚刚开始!

Zach Tratar

Stripe 软件工程师

Jobstart 前联合创始人兼 CEO

目录

  • 版权声明
  • 献词
  • 译者序
  • 前言
  • 致谢
  • 第 1 章 什么是JavaScript
  • 第 2 章 HTML中的JavaScript
  • 第 3 章 语言基础
  • 第 4 章 变量、作用域与内存
  • 第 5 章 基本引用类型
  • 第 6 章 集合引用类型
  • 第 7 章 迭代器与生成器
  • 第 8 章 对象、类与面向对象编程
  • 第 9 章 代理与反射
  • 第 10 章 函数
  • 第 11 章 期约与异步函数
  • 第 12 章 BOM
  • 第 13 章 客户端检测
  • 第 14 章 DOM
  • 第 15 章 DOM扩展
  • 第 16 章 DOM2和DOM3
  • 第 17 章 事件
  • 第 18 章 动画与Canvas图形
  • 第 19 章 表单脚本
  • 第 20 章 JavaScript API
  • 第 21 章 错误处理与调试
  • 第 22 章 处理XML
  • 第 23 章 JSON
  • 第 24 章 网络请求与远程资源
  • 第 25 章 客户端存储
  • 第 26 章 模块
  • 第 27 章 工作者线程
  • 第 28 章 最佳实践
  • 附录 A ES2018和ES2019
  • 附录 B 严格模式
  • 附录 C JavaScript库和框架
  • 附录 D JavaScript工具
  • 作者简介