中文版序
我和JavaScript 的缘分
大学毕业以后,我先做了几年.NET开发,但由于国内.NET整体生存状态不佳,我开始寻求转型,并在2011年幸运地拿到了华为C++程序员的offer。但是让我没想到的是,入职后,我连一句C++代码都还没来得及写,就被分配去开发IPTV机顶盒上的Web应用程序。这也是我第一次和JavaScript这门语言亲密接触。
更让我没想到的是,这次“意外”影响了我的整个职业生涯,我从此迷上了JavaScript这门语言。不夸张地说,我在程序员生涯中第一次有了开窍的感觉,以至于在TypeScript如日中天的今天,我仍然偏爱写JavaScript。
我和死月的缘分
我是通过GitHub认识死月的。当时我们分别开发了RocketMQ的一个客户端,我是用纯JavaScript实现的,而死月是通过Node.js C++ Addon封装的官方客户端。我们为此有过简单的交流。不久后,死月加入蚂蚁集团体验技术部,成了我的同事。我们一起在Node.js基础技术领域奋斗了两年,随后又一起开发过Cloud IDE这个产品。总体来说,我们是有革命感情的。
我看这本书
说实话,我很久没有关注过编程语言类的图书了,要不是死月请我作序,我可能也不会看这本书。但是,翻阅完这本书之后,我还是觉得收获良多。
首先,和其他编程图书不一样的是,作者并没有死板地教你语法、技巧,而是用多年的经验告诉你JavaScript为什么被设计成这样。
● JavaScript的数值类型为什么只有number一种,而不是像其他语言一样区分int、long、float和double等?
● 在JavaScript里,为什么0.1 + 0.2 !== 0.3?
● 为什么变量名中间不能有空格?
● 数组的下标为什么从0开始,而不是从1开始?
● ……
其次,作者告诉你虽然JavaScript并不完美,甚至有很多让人抓狂的地方,但是通过避其糟粕,我们可以写出更好的代码。
● 如何让Array.prototype.sort返回稳定的排序结果?
● 如何安全地使用模板字符串?
● 如何避免NaN导致的逻辑判断错误?
● ……
同时,你可以把这本书当成一本工具书,里面有不少实用的代码,可以直接用在日常开发中。
● 如何解决JavaScript里高精度整数和浮点数的运算问题?
● 如何实现一个异步的控制流?
● 如何设计一个数据交换格式?(JSON的起源)
● ……
最后,不得不提一下死月的翻译。虽然我不清楚他是否准确还原了道格拉斯老爷子的犀利文风,但中文版里的很多用词、小细节甚至脚注都可以体现死月的用心。所以,我把这本书推荐给你,希望它能对你有所帮助!
宗羽(高晓晨、gxcsoccer)
阿里巴巴高级前端专家
2021年5月19日