此去经年,那些语言,敌不过流年——记书中的一些‘错误’
2015-10-24
该书是JavaScript经典著作,属进阶读物,有助于理解JS语言中的一些本质特性。然而由于作者写此书时(2007年前后)ECMAScript标准的第3版(简称ES3)正大行其道,ES5尚在“挣扎”中(2009年末发布),书中的内容皆以ES3标准来写。
所以若干年后的今天再看,书中一些内容就有些不妥,甚至是错误(以ES5、ES6标准看),容易给不知情的读者造成困扰。下面罗列了一些我在阅读的时候发现的问题:
1. 第20页第1行:根据最新的ES6标准,JavaScript中的简单数据类型有7种:Number,String,Boolean,Object,Null,Undefined,Symbol。其中,新增了Symbol类型;
2. 第62页第2行:通过Object.create(arrayArg)方法创建的对象,除继承了原型arrayArg中的值和方法外,同样也继承了其length属性;
3. 第70页末和71页初:用正则表达式字面量创建的RegExp对象并非共享同一个单例,在ES5中规定每执行到一个字面量创建的正则表达式便会创建一个新的对象;
4. 第91页正中部分:string.search方法不仅可以接受一个RegExp对象,也可以接受一个字符串;
5. 第103页中关于保留字的几个例子:比如作者说“object = {case: value};”是非法的语句,因为“case”是关键字故无法直接作为对象的属性名,然而我在浏览器中测试却是合法的;
6. 第104页中关于parseInt: ES5中已经废除了“如果第1个字符是0则按照八进制来解析”的语法;
......
古人说:尽信书则不如无书。读书的时候,读者也应该有自己的思考。诚然,语言都是在不断发展的,ES5、ES6与ES3存在很多类似上文的语法差别,我的目的也不仅仅是罗列一下这样的差异。书中存在错误也属正常,更何况是这种因语言API变更而导致的‘错误‘。这是一本JavaScript的经典书籍(作者也是大牛),读者众多,影响广大,如果读者在阅读的时候不注意所存在的这些问题,就有可能会在实践中造成困扰,甚至是给以后的工作埋下祸根。在如今的互联网大潮中,程序员不得不面对的一个问题就是:编程语言还有实践中所使用的技术都在不断更新,只有保持不断学习才有可能不被大浪湮没!
胡诌乱拼,不喜勿喷~~欢迎交流