序言
我确信你已经注意到,虽然谩骂JavaScript这门语言的怪癖可能是我们的共识,但是书名中的JS并不是什么诅咒JavaScript的缩写。
在web早期, JavaScript是驱动我们和内容交互的一项基本技术。闪烁的鼠标痕迹和烦人的弹出框大概是 JavaScript的七点,在将近20年后的今天, JavaScript的技术和能力有了长足的进步,没有人再怀疑它对于世界上最广泛应用的软件平台心脏web的重要性。
但是JavaScript作为一门语言,人们无休止的评论它,一方面由于它的后遗症,更重要的是它的设计哲学。正如Brendan Eich曾经说的,从它的名字可以看出,相比于成熟的大哥哥Java,它只是一个不愿说话的小弟弟。但是它的名字只不过是市场营销的一个意外。这两门语言有很大的不同,"JavaScript"相比于"Java"正如"Carnival"相比于"Car".
由于JavaScript从一些语言借鉴了很多概念和语法,包括(实在不会翻译,请谅解!proud C-style procedural roots as well as subtle, less obvious Scheme/Lisp-style functional roots)。对于绝大多数开发者甚至没有编程经验的的人,JavaScript都非常和蔼可亲。在早期学习中,JavaScript版的"Hello World"是如此的简单,让人可以很容易上手。
虽然JavaScript可能是启动和运行的最简单的语言之一,但是它的一些怪癖使得它并不如一些语言一样容易精通。就像C或者C++语言一样,用JavaScript写一个完整的程序完整的产品需要有非常深入的知识,只是蜻蜓点水是不行的。
一些成熟的概念深深地植根于这门语言中,比如传递一些函数当做回调,鼓励 JavaScript开发者放心使用而不用关心内部的实现。它即使一门简单的容易使用的语言,同时又有复杂的细微差别的语法,如果不注意仔细学习,并能真正掌握。
在JavaScript中有个悖论,就像这门语言的阿基里斯之踵,我们都要面对的问题。由于JavaScript可以在不用理解的情况下使用,那么我们可能并不会去理解它。
任务
如果在JavaScript中你遇到了意料之外的或者令人沮丧的东西,你的反应是将它列入黑名单。久而久之,JavaScript的宝藏对于你来说只是一个空壳。
JavaScript的好的部分十分著名("The Good Parts"),我会恳求你,亲爱的读者,不要老想着简单的部分,安全的部分或者不完整的部分。这个You Don't Know JavaScript系列提出了一个相反的挑战,学习并且深入理解JavaScript的全部,甚至并且特别是艰难的部分。
在这里,我们倾向于让JS开发者学会刚刚好的知识,并不是强迫他们弄清楚语言行为背后的怎样以及为什么。同事,我们尽量避免让他们在学习变得困难时去放弃。
我没有说,你们也不应该仅仅停留在一些东西能够工作,并不真正知道为什么能够工作。我希望温柔地挑战你们,在崎岖不平的路上进行一段旅程,走过"少有人走过的路",拥抱JavaScript的方方面面。不需要技术和框架,不需要花里胡哨的语言,这些知识将拓展你的知识体系。
这系列书中的每一本都会介绍这门语言的一个核心主题,并且全面彻底地深入其中。这些主题常常被人误解或者理解不够。你在读这些书时,不要受制于自己的已有知识,不要先入为主,同时不要只停留在理论层面上,要多多练习。
你当前所知的JavaScript可能只是本身就一知半解的人教给你的一部分,这只是真实JavaScript的影子。你还没真正理解JavaScript,但是如果你深入本系列书籍,你将会理解。读起来,我的朋友。JavaScript等着你。
总结
JavaScript是令人惊叹的。学习它的一部分是容易的,但学习完整是比较困难的。当开发者们遭遇困惑,他们常常归咎于语言的本身,而不是自身理解的缺乏。这些书旨在修正这一点,会激起你对于这门语言极大的兴趣,而这些内容正是你应该深入去理解的。
注释:这本书中的很多例子假定运行在现代JavaScript引擎环境,比如 ES6。其中一写代码可能在一些老的引擎(pre-ES6)不能工作。