推荐序3
同大多数读者一样,我最早看到阮一峰先生的文字是在其博客上。他的第一篇博文于2003年写就,迄今已有1500多篇文章,可谓高产。阮先生并非计算机相关专业,但这一点并没有妨碍他从事技术写作,其文字朴实,思路清晰,所有人都能看懂,更能感受到他写文章的用心程度,而这本书完美地体现了他的一贯风格。另外,这本书是开源作品,也很好地践行了他一贯的贡献原则。
自我写下第一行前端代码到现在已经十来年了,前端的基础设施也发生了巨大的变化。变化最大的还是浏览器环境,从原来烂熟IE6的各种bug和hack,到现在IE6已经完全不在我的考虑范围内。其次是前端的工程化程度,2011 年,我做 FIS(http://fis.baidu.com)时,完全没想到前端的工程化进展会如此之快。而变化最慢的,要数语言本身了,1999年发布的ECMAScript 3.0其实相当于第1版;10年后的2009年发布了第2版:ECMAScript 5.0;ECMAScript 6则是2015年发布的。
我的一贯主张是,要学好JavaScript,ECMAScript标准比什么书都强。ECMAScript标准已经用最严谨的语言和最完美的角度展现了语言的实质和特性。理解语言的本质后,你已经从沙堆里挑出了珍珠,能经受得起时光的磨砺。
我从2009年开始正式接触ECMAScript规范,当时我在写百度的JavaScript基础库Tangram 1.0,ECMAScript 5还处于草案状态。我自己打印了一本小册子,上下班时在地铁上慢慢看。那时才知道,有很多问题在网络上被包装了太多次,解释得千奇百怪,但用规范的语言来描述竟是如此简单。
ECMAScript标准经历了很多变故——尤其是ECMAScript 4那次——也从语言的角度反映了各大厂商之间的立场差异。不过,ECMAScript 5的正式发布和发展,为所有Web开发者奠定了稳定的基础,尽管浏览器之间存在大量差异,尤其是DOM,但在JavaScript语言层面,都相对严格地遵循着ECMAScript 5的规范。
JavaScript遵守“一个JavaScript”的原则,所有版本都需要向后兼容。Web语言的解释器版本不是由开发者而是由用户决定的,所以JavaScript无法像Python、Ruby、Perl那样,发布一个不向下兼容的大版本,这也就是ECMAScript 4 失败的根源,由于它会导致大量已有网页的“bug”,浏览器厂商会强烈反对。当然,ECMAScript 6 的strict mode也在尝试逐步淘汰一些不良实践。
ECMAScript 6相比5有了很大的进步。经过这次改进,JavaScript语法更精简,变得更有表现力了;在严格模式下,开发者受到了适当而必要的约束;新增了几种数据类型(map、set)和函数能力(Generator、迭代器);进一步强化了JavaScript的特点(promise、proxy);并且让JavaScript能适用于更大型的程序开发(modules、class)。更重要的是,这个规范会被浏览器厂商、不同的平台广泛支持。
实际上,所有的语言改进都是从使用者的最佳实践中提炼出来的。JavaScript的约束一直很少,这一灵活性让开发者能相当自由地积累形形色色的使用经验和实践,也就是说,我们所有ECMAScript的使用者,也是其标准的间接贡献者。
百度高级工程师、前端通用组技术负责人,雷志兴
雷志兴(网名berg),资深工程师,2007年加入百度工作至今,负责过多项前端基础技术、架构的设计和搭建;骑行爱好者,行程万余公里;微信公众号“行云出岫”(DevLife)的维护者。