《JavaScript语言精粹》勘误表

小马在《JavaScript语言精粹》的译者序中写道:“吉尔伯特海特(美国教育家)曾经说过:写了一本很糟糕的书只是犯错而已,而把一本好书翻译得很糟糕则是犯罪。但这样的大师经典之作,即便是冒着犯罪的风险,也值得翻译出来并推荐给大家。”这里就是弥补过错的地方,热烈欢迎您来帮助我们改正。

  1. 前言的致谢小节第3行2009.09.02
    “Julien LeComte”应是“Julien Lecomte”
  2. 16页表2-1右边第3排2009.09.02
    “取模”应是“取余运算”
  3. 20页,3.1 对象字面量小节的第3行代码2009.12.08
    “Jerome”应是“Joe”
    贡献者:约翰
  4. 23页,3.5节最后一行2009.12.08
    “第6章”应是“第5章”
    贡献者:约翰
  5. 28页,方法调用模式小节的第1段代码2009.09.03
    value:0;”应是“value:0,
  6. 29页,第一段代码的最后一句2009.11.15

    document.writeln(myObject.getValue(  ));    // 6
    //应该修改为
    document.writeln(myObject.value);    // 6
    

    贡献者:约翰

  7. 30页,第1段代码的最后1行2009.09.11
    // 令人困惑”应是“// confused
    贡献者:糖伴西红柿
  8. 30页,最后1行注释2010.09.22
    // stats 值为 ‘A-OK’”中的“stats”应该是“status
    贡献者:约翰
  9. 32页,4.6 异常小节第2段代码的最后1行2009.09.03
    Try_It();”应是“try_it();
  10. 33页,第2段代码及其前1行2009.09.03
    Math.ceiling”应是“Math.ceil”,“return Math[this < 0 ? 'ceiling' : 'floor'](this);”中“ceiling”应是“ceil
  11. 33页,最后一段代码2009.10.14
    "if"条件语句结束后加入“return this;”,可以参考本页的第一段代码
    贡献者:约翰
  12. 34页,4.8 递归的第1段代码2009.09.03
    最后1个“}”后面应该加上分号变成“};
  13. 37页,第1段代码的倒数第2行2009.09.03
    }”后面应该加上分号变成“};
  14. 37页,最后一段2010.09.22
    “为什么要用一个getter方法去访问”应该是“为什么要用一个获取方法去访问”
    贡献者:约翰
  15. 39页,第1段代码的倒数第3行2009.09.03
    紧接着“alert(i);”的“}”后面应该加上分号变成“};
  16. 39页,第2段代码块第6行2009.06.08
    alert(e);”应为“alert(i);
    贡献者:李穆
  17. 39页中间2009.09.03
    “add_the_handlers函数目的是给每个时间处理器一个唯一值(i)”中“时间”应是“事件”
  18. 42页,第1段代码的最后1行2009.09.11
    // unique is "Q1000"”应是“// unique 的值是 "Q1000"
  19. 44页,“译​​注​5”​应​​改为“​​译​​注​6”​,“​​译​​注​6”​应改​​为“​​译​​注​7”​。2009.12.08
    贡献者:约翰
  20. 47页,5.1 伪类的第2段第1句2011.02.11
    “当一个函数对象被创建时,Function 构造器产生的函数对象会运行类似这样的一些代码”应为“创建函数对象时,生成该函数对象的 Function 构造器会运行类似如下代码”
    贡献者:Wei Lou
  21. 47页,5.1 伪类的第2段代码2009.09.03
    var that = Object.beget(this.prototype)”后面应该加上分号变成“var that = Object.beget(this.prototype);
  22. 50页,5.2 对象说明符的第2段代码2009.09.03
    first: f,”后应增加1行“middle: m,
    贡献者:sofish
  23. 51页,第1段代码2009.09.03
    return this.says + ' ' + this.name + ' ' + this.says;”应为“return this.says() + ' ' + this.name + ' ' + this.says();
  24. 52页,第1段代码的最后1行2009.09.03
    }”后面应该加上分号变成“};
  25. 54页,第2段代码2009.09.03
    return that;”前面应增加1行“};
  26. 59页,底部译注12010.06.19
    “232-1”应该为“232-1”,即2的32次方减1。
    贡献者: Landy Van Roy
  27. 60页,6.3节的倒数第2行2009.06.08
    “值为‘shi’的属性的键值从‘4’变到‘3’”中“‘4’变到‘3’”应是“‘3’变到‘2’”
    贡献者:李穆
  28. 63页,6.7 维度第1段代码
    return a;”的下1行“}”后面应该加上分号变成“};
  29. 64页,第2段代码2009.09.03
    两处“return mat;”的下1行“}”后面应该加上分号变成“};
  30. 64页,第2段代码2009.09.03
    a[j] = 0;”应为“a[j] = initial;
  31. 65页,第2段2011.05.01
    “它以方法的形式被用于对字符串中的信息进行查找、替换和提取操作。”改成“它和与之对应的方法一起用于查找、替换和提取字符串中的信息。”
  32. 65页,最后一段2011.04.29
    “正则表达式的书写规则出奇地复杂,因为它们把某些位置上的字符串解析为运算符,而把仅在位置上稍微不同的相同字符串当作字面量。比不易书写更糟糕的是,这使得正则表达式不仅难以阅读,而且修改时充满危险。”改成“正则表达式的书写规则出奇复杂,因为它们会把某些位置上的字符解析为运算符,而位置稍有不同时又解析为字面量。比不易书写更糟糕的是,这样的正则表达式不仅难以阅读,而且给修改带来风险。”
  33. 69页,注释2009.09.03
    +)?(?::”应为“+)(?::
  34. 71页,第2段代码2009.09.03
    "\"(?:\\.”应为“"\"(?:\\\\.
  35. 72页,第1段代码2011.05.11
    这个地方应该加入一个译者注:在本书出版时ECMAScript5规范尚未发布,此处代码的运行结果遵循ECMAScript3规范,结果和在Firefox3.6中执行一致。Firefox、Chrome和Safari的最新版本都支持ECMAScript5,而IE在这个问题没有遵循ECMAScript3规范,所以此时正则表达式创建的RegExp对象都是独立的实例,输出值是0。具体可以参考ECMAScript5规范的第24页和第247页,以及《正则表达式字面量在ECMAScript5中的变化》
    贡献者:郑苏波
  36. 74页,第2段代码2009.09.03
    /[A-Za-z\u00C0-\u1FFF\u2800-\uFFFD'\-]+\s+\1/gi”应为“/([A-Za-z\u00C0-\u1FFF\u2800-\uFFFD'\-]+)\s+\1/gi
  37. 76页,“下面是在字符类中需要被转义的特殊字符:”2011.05.11
    此处需要加入译者注:ECMAScript5规范第247页指出未转义的正斜杠“/”可以直接用于字符类中,但在ECMAScript3中正斜杠“/”只能用于正则表达式的开始和结束字符,虽然所有主流浏览器都支持了ECMAScript5实现,但本书在这个问题上遵循ECMAScript3规范。对于任何特殊字符都可以使用反斜杠来使其字面化,保证其安全。
  38. 80页,第1行2010.07.21
    “rray”应该是“array”
    贡献者:Landy Van Roy
  39. 88页,string.charAt(pos )小节2009.09.03

    String.method('charAt', function () {
      return this.slice(0, 1);
    });
    //应为
    String.method('charAt', function (pos) {
      return this.slice(pos, pos + 1);
    });
    
  40. 90页,第3段代码最后1行注释2009.09.03
    p 是 '555-555-1212'”应为“p 是 '555-666-1212'

    贡献者:Wei Lou
  41. 91页,string.split(separator, limit )小节第1段代码最后1行注释2009.09.04
    ['0', '1', '2', '3', '456789']”应为“['0', '1', '2', '3', '4']
  42. 96页,倒数第2段第1行2010.07.21
    “JavaScripty拥有C语言的语法”中的“JavaScripty”应该是“JavaScript”
    贡献者:Landy Van Roy
  43. 105页,A.10. NaN小节的最后1段代码2009.09.04

    function isNumber(value) { return typeof value === 'number' &&
                isFinite(value);
    }
    //应为
    var isNumber = function isNumber(value) { return typeof value === 'number' &&
                isFinite(value);
    };
    
  44. 107页,译注7最后面2011.02.15
    function Object() { [native code] }”的最后面遗漏了“1”,应该是“function Object() { [native code] }1”。
    贡献者:Wei Lou
  45. 117页,表C-1,JSLint的选项2009.09.04
    删掉glovar,见http://www.jslint.com/lint.html
  46. 140页,E.3 一个JSON解析器2009.09.04
    escapee字面量第1个和倒数第2个键值对代码结尾缺少逗号

    escapee = {
        '"':  '"'
        '\\': '\\',
        '/':  '/',
        b:    'b',
        f:    '\f',
        n:    '\n',
        r:    '\r'
        t:    '\t'
    },
    //应为
    escapee = {
        '"':  '"',
        '\\': '\\',
        '/':  '/',
        b:    'b',
        f:    '\f',
        n:    '\n',
        r:    '\r',
        t:    '\t'
    },
    

    贡献者:Wei Lou

有评论 62 条,发表一条新评论 »

《JavaScript语言精粹》 @ 随网之舞说:2009-09-09 23:41 #1

[...] 勘误表 [...]

糖伴西红柿说:2009-09-10 11:20 #2

你好,提供个 javascript 精粹的错误。40页。

// 构造一个 Quo 实例

其中 document.writeln(myQuo.get_status()); // 令人困惑

后面的注释,应该是 返回 confused 这个字符串。感觉这个地方不应该翻译吧,容易引起误解。

Sutra说:2009-09-10 21:29 #3

“取模”和“取余运算”?这个在数学正确性上没区别呀。

秦歌说:2009-09-11 15:18 #4

@糖伴西红柿:多谢。这的确是一个翻译错误,位于在30页,我已经增加到勘误表中。
@Sutra:取模(modulo)和取余(remainder)大部分情况下是等同的,但是还是有些不同,取模结果的符号和除数相同,取余结果符号和被除数相同,而JavaScript中的%和取余相同:
3 modulo 2 = 1
3 modulo -2 = -1
-3 modulo 2 = 1
-3 modulo -2 = -1
3 remainder 2 = 1
3 remainder -2 = 1
-3 remainder 2 = -1
-3 remainder -2 = -1

sofish说:2009-09-11 16:05 #5

15. 50页,5.2 对象说明符的第2段代码 “middle:m,”后应增加1行“last:l,”

似乎是: “first:f,”后应增加1行“middle: m,”…

秦歌说:2009-09-11 16:23 #6

@sofish:你是对的,我本意想写的是“​​last​:​l​,​​”​​后​​应​​增​​加​1​行​​“middle​:​m​,​​”,结果写反了。不过你的建议更能表达这个例子的含义,所以我采用了你的建议。非常感谢。

xthsky说:2009-09-14 18:25 #7

首页那个《JavaScript语言精粹》勘误表的图片里少了个“粹”字。

秦歌说:2009-09-14 18:52 #8

@xthsky:这真是一个很讽刺的事情哈,做图那天被出了问题的PS给整郁闷了,也没有仔细检查,所以就出了这出戏了。多谢,多谢。

watertree说:2009-09-23 15:59 #9

有一个问题请教,在书本35页,定义的getElementsByAttribute函数里有这么一行代码:var actual=node.nodeType===1&&node.getAttribute(att);不是很明白,还有,node是不是要先声明呢?
有好心人给我讲解下这个函数,更好。
谢谢了!

watertree说:2009-09-24 11:58 #10

整个函数如下:

var walk_the_DOM=function walk(node,func){
  func(node);
  node=node.firstChild;
  while(node){
    walk(node,func);
    node=node.nextSlibling;
  }
};

var getElementsByAttribute=function(att,value){
  var results=[];
  walk_the_DOM(document.body,function(node){
    var​ ​actual​=​node​.​nodeType​ =​​=​​=​ 1​&​​& ​node​.​getAttribute​(​att​)​​;
    if(typeof actual === "String" &&
           (actual === value||typeof value !== "String")){
      results.push(node);
    }
  });
  return results;
};
秦歌说:2009-09-24 22:24 #11

​walk_the_DOM是一个遍历整个DOM树函数,它有2个参数node是根节点,func是一个要对遍历到的节点进行操作的函数。这是一个典型的递归函数。
关于函数的细节可以看27页的4.2节。
getElementsBy​​Attribute函数有两个参数,att表示属性,value是可选的属性值,这个函数调用了wal_the_DOM函数,改写后或许可以看得更明白点:

var​ ​getElementsBy​​Attribute​=​function​(​att​,​value​)​​{​​
​​ ​​ ​var​ ​results​=​​[​​]​​,
      get_nodes = function​(​node​)​​{​​
​​ ​​ ​​ ​​ ​    var​​​​ ​​​​actual​​​​=​​​​node​​​​.​​​​nodeType​​​​ ​​=​​​​​​​​=​​​​​​​​=​​​​​ ​1​​​​&​​​​​​​​&​​ ​​​​node​​​​.​​​​getAttribute​​​​(​​​​att​​​​)​​​​​​​​;​​
​​ ​​ ​​ ​​ ​    if​(​typeof​ ​actual​ ​​=​​=​​=​​ ​​"​String​"​​ ​​&​​&​​
​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​(​actual​ ​​=​​=​​=​​ ​value​|​​|​typeof​ ​value​ ​​!​​=​​=​​ ​​"​String​"​​)​​)​​{​​
           //node是walk_the_DOM在执行的时候传递给get_nodes函数的
​​ ​​ ​​ ​​ ​​ ​​ ​    results​.​push​(​node​)​​;​​
​​ ​​ ​​ ​​ ​  ​  }​ ​
​​ ​​ ​​    };
​​ ​​ ​walk​_​the​_​DOM​(​document​.​body​,get_nodes)​​;​​
​​ ​​ ​return​ ​results​;​​
​​}​​;

另外如果对这种长表达式的运算顺序感到迷惑可以看看16页表2-1的运算符优先级。

觅JS高手者说:2009-11-01 19:06 #12

秦歌,你好!

我公司正在寻觅JS开发高手,薪水绝对有吸引力。有兴趣请联系:zqrain@yeah.net 或 MSN: qingrui_zeng(at)hotmail.com

公司简介:

开拓天际是一家专注于无线技术领域的IT公司。我们公司一贯比较低调,有别于国内大多数公司在技术和管理上比较浮躁的,我们一直眼光高远,非常注重在技术上深入积累,形成核心竞争力。在管理上,公司在文化上非常重视一线员工的创造力和贡献,公司CEO到各阶层管理人员,都十分“亲民”,十分尊重一线员工。所以这里相比国内其他公司(包括相比一些知名外企),离职率是非常低的。我们的工程师队伍中,有大量来自国内外一流公司的员工和国内著名大学的毕业生(包括Oracle,Motorola,Nokia,AOL,网易,易查等等)。在公司发展上,我们属于国内中型偏大的IT公司,技术实力,资金实力和市场营销能力都是十分不错的。同时,公司处于战略转型的关键期,公司的发展潜力和员工的发展空间都是非常巨大。

秦歌说:2009-11-01 19:14 #13

呵呵,感谢您的关注,不过目前没有这方面的计划,欢迎就前端相关的任何问题进行交流。

匿名说:2009-11-06 12:48 #14

Hi,我想问问,P39页的第一段代码的第四行”…function(e){ “第五行”alert(i);” 这个e在这里做什么?好像没有用?

tiramisu说:2009-11-06 12:51 #15

接上一问题,是不是应该像第11条勘误一样,把第五行的i改成e呢?

tiramisu说:2009-11-06 12:53 #16

貌似是去掉第四行的e?

秦歌说:2009-11-06 13:38 #17

呵呵,不是,那个e是传入事件参数,比如你在非IE浏览器中运行一下,注意我新增加了alert(e):

var add_the_handlers = function (nodes) {
    var i;
    for (i = 0; i < nodes.length; i += 1) {
        nodes[i].onclick = function (e) {
            alert(e);
            alert(i);
        }
    }
};

在IE下会弹出undefined,因为IE的事件保存在window.event上。
第2短段return function(e)这个e的意义是一样的。

约翰说:2009-11-15 6:57 #18

29页,第一段代码的最后一行是不是错了?
getValue应该是value吧?

约翰说:2009-11-15 12:55 #19

113页,
var foo = function foo() {};
应该是:
var foo = function () {};
吧?

秦歌说:2009-11-15 17:29 #20

@约翰:29页那个的确是个错误,您的修正也是对的,已添加到勘误表中,非常感谢。113页那个没错,两种写法都是对的,第一种写法中的那个foo可以省略,它主要用于递归。具体细节可以看看27页的4.2节。

DemoJameson说:2009-11-24 15:51 #21

11 页底部 “下面列出的值被当做假(falsy)”,falsy 应该改为 false 。

秦歌说:2009-11-24 23:46 #22

@DemoJameson :falsy即假值就是相对于truthy即真值来说。这个地方没有错,它是说下面列出的false、null、undefined、’ ‘、0和NaN都是假值falsy。多谢。

约翰说:2009-11-29 11:03 #23

更正中的第3条,21页,3.2 检索小节的第1行代码
“Joe”应是“Jerome”
不如把20页中的Jerome改为Joe,否则22页的3.3更新很难理解,因为其中的第一行代码也是Jerome,没有任何“更新”。而把20页的Jerome改为Joe后,22的代码意思就是:把Joe更新为Jerome,而21页无须更正。

约翰说:2009-11-29 11:13 #24

一个疑问,向你们请教。
第48页第二行中saying 看不懂,前面(包括前一页)似乎没有定义,到了11行似乎才出现定义,这一页下面的代码也读不太懂,望译者能够做些说明。

第四届D2嘉宾介绍:鄢学鵾 _ D2 前端技术论坛说:2009-12-03 15:31 #25

[...] 鄢学鵾曾与淘宝的小马一起翻译了 Douglas Crockford 的大作《JavaScript语言精粹》。 [...]

Supersha说:2009-12-07 21:51 #26

这本书非常不错,是我床头必备书籍之一……

约翰说:2009-12-08 8:09 #27

再提交一个印刷错误:
第44页,译注5应为译注6,译注6应为译注7.
我愿意向译者提供翻译或印刷错误,可惜没人对我前面的疑问回答,失望啊。

秦歌说:2009-12-08 22:12 #28

@约翰:
1、您在#23提出的修改方案的确是非常恰当的方式。
2、#27提出的印刷错误的确存在非常感谢。
3、48页的saying和前面一页定义是一样,都是对构造函数Mammal原型的扩充,并且当this.saying不存在时返回空。对原型进行扩充是为了实现基于原型的继承,所使用的属性并不需要构造函数一定定义了,如果理解还是比较费劲建议多看看上一章函数以及找一些prototype相关的资料。
4、49页是一个典型函数链式调用,这种方式在jQuery和YUI3.0中大量使用,看起来比较方便,这段代码本身是对48页倒数第二段那整段代码的重构,这段函数其实可以等同于:

var Cat = function (name) {
    this.name = name;
    this.saying = 'meow';
}
Cat.inherits(Mammal);
Cat.method('purr', function (n) {
        var i, s = '';
        for (i = 0; i < n; i += 1) {
            if (s) {
                s += '-';
            }
            s += 'r';
        }
        return s;
    });
Cat.method('get_name', function (  ) {
        return this.says(  ) + ' ' + this.name +
                ' ' + this.says(  );
    });

最后,非常感谢你对本书的关注和建议。另外,最近一直在生病,加上乱七八糟的事情集中在一起,如果不及时的回复让你失望,实在抱歉。

KUN10说:2009-12-30 11:17 #29

第7页的name的铁路图,name最下面的那一条走线圆圈里面到底是 _ 还是 – 让人分不清

KUN10说:2009-12-30 12:28 #30

想和秦歌讨论个问题,我在实际的使用中标识符常常以下划线开头,这样的使用从书上看是不规范的,额,书中的第七页的name铁路图指示必须以letter开头,但是使用的时候用下划线开头也没有引发什么错误,你怎么看这个规范

秦歌说:2010-01-01 12:47 #31

@KUN10 : 第7页的铁路图还好吧,可能是周围没有字母作为参照物所致。至于6页2.2小节中,作者对标识符的定义是比ECMA262中定义的窄的问题,也有朋友问过我,我准备在下一版的时候,增加一个注释来说明这个问题。原因是作者认为很多人以_作为私有变量的开头,但是JavaScript中没有私有变量,容易让人误解,私有变量应该采用私有成员的组成形式。这些想法作者在《JavaScript程序编码规范》中有说明。
译言翻译了这篇文章,由于译言出了意外,所以我就做了一个人工快照。但我发现有些地方漏掉翻译,或者不准。我准备找个时间重新整理一下。

tmac说:2010-01-04 13:17 #32

您好,秦歌,请问能否对第49页部件一小节做一个解释,兴许是我的理解力问题,这一节感觉比较费力…thx

tmac说:2010-01-04 13:18 #33

错了,是第55页~

yje2010说:2010-03-01 18:20 #34

大哥,俺昨天真的就被P30的“// 令人困惑”困惑了好久,今天发到CSDN求达人解惑,又困惑了一群人。

tyfor说:2010-03-24 10:22 #35

《javascript语言精粹》里4.12节函数模块里的一个例子:
String.method(‘deentityify’,function(){
var entity={
quot:’”‘,
lt: ”
};

return function() {

return this.replace(/&([^&;]+);/g,function(a,b) {
var r=entity[b];
return typeof r===’string’?r:a;
}
);
};
}());

document.writeln(‘<">’.deentityify());
在 firefox里一定会报错,我不知道为什么作者在给原型添加方法时要用object.method(name,func)这种形式,我把上面的例子改为:
String.prototype.deentityify=function(){
var entity={
quot:’”‘,
lt: ”
};

return function() {

return this.replace(/&([^&;]+);/g,function(a,b) {
var r=entity[b];
return typeof r===’string’?r:a;
}
);
};
};

document.writeln(‘<">’.deentityify());
结果输出的是:
function () { return this.replace(/&([^&;]+);/g, function (a, b) {var r = entity[b];return typeof r === “string” ? r : a;}); }
明明返回的是个函数对象,怎么输出这么个结果?
我又试着将第8行的return function() { 和 第15行的};注释掉,然后运行得到了正确结果: 。
不知道有没有高人指点一下这个程序的问题所在,还有书上表示希望利用函数作用域和闭包来使得只有deentityify方法有权访问entity这个数据对象。我不清楚如果将第8、15行注释掉,是否还能达到这个效果?另外,如果不能注释掉的话,这个程序应该怎么改?

有光说:2010-07-03 21:15 #36

秦歌 为什么我String或者Fonction . method方法不能用

Kenn说:2010-08-13 10:41 #37

发错一个错误,P40的原代码有错误


​String​.​method​(​​‘​deentityify​’​​,​function​(​​)​​{
  var​ ​entity​=​​{
​    quot​:​​'”​​'​​,
​    lt​:​​ ​​'<',
    gt:'>'
  }​​;

​  return​ ​function​(​​)​​ ​​{

​    return​ ​this​.​replace​(​​/​​&​​(​​[​​^​​&​​;​​]​​+​​)​​;​​/​g​,​function​(​a​,​b​)​​ ​​{
​      var​ ​r​=​entity​[​b​]​​;
​      return​ ​typeof​ ​r​=​​=​​=​​’​string​’​​?​r​:​a​;
    }
  )​​;
}​​;
}​​(​​)​​)​​;

应该更正为



String.method('deentityify',function(){
	var entity={
		quot: '"',
		lt:'&lt',
                gt:'>'
	};
	var that=this;//解决方法,在书中P29中写明
	return function(){
		return that.replace(/&([^&;]+);/g,
		function(a,b){
				var r=entity[b];
				return typeof r==='string' ? r : a;
			});
	}();
});
秦歌说:2010-08-15 1:56 #38

@tyfor & @有光 :你们的问题是相同的,在整个第四章例子是相互贯穿的,在33页 4.7中,作者通过Function.prototype.method给Function原型增加了方法,这样String和Number等都会继承该方法,两位之所以运行失败,是没有前面的增加method到Function原型的代码。加上之后,一切都ok了。
@kenn:这个地方没有错,29页的方法是解决在函数中非对象方法的函数引用时this是全局对象的错误设计,但此处是返回一个定义函数,这个函数通过method方法将变成String的一种方法,所以此时的this就是String。

约翰说:2010-08-29 22:40 #39

23页,3.5节最后一行,“第6章”似乎应该是“第5章”。

秦歌说:2010-08-31 0:55 #40

@约翰:的确是这样,原文也错了,已加入勘误表中,多谢。

约翰说:2010-09-20 11:28 #41

37页,倒数第5行,“getter方法”应该是“get_status方法”吧?
另外,30页的拼写错误:stats 应是status

约翰说:2010-10-01 10:47 #42

47页,“如果 new 运算符是一个方法而不是一个运算符,”这话不好懂,是不是指“如果 new 是一个方法而不是一个运算符,”?

约翰说:2010-10-10 7:54 #43

一个问题需要帮助:
33页中最后一段代码,是不是漏了一句代码:return this;
请比较这一页的第一段代码。

秦歌说:2010-10-14 1:48 #44

@约翰:47页的说法是ok的,new本身就是一个运算符,此处想说的是“如果new运算符不是一个运算符”,其余你提出的问题都很的确存在,具体修改方案请看上面的勘误表。

DOPY说:2010-11-22 10:26 #45

你好,第一版印刷错误比较多,想请问一下什么时候会有修正好的再版?

idamag说:2010-11-23 12:22 #46

收藏了,正在看。这本书貌似没提到隐式__proto__,有些地方让人疑惑。

Wei Lou说:2011-01-23 17:41 #47

在第49页中,“我们的inherits和method方法都返回this”,其中,method方法是在第33页定义的。method方法并没有返回this啊,事实上没有指定return,那就是反馈undefined了。

既然method没有返回this,那么49页就不能有2个级联一起使用了,第二个method应该会出问题的。

请大家指教!谢谢!

秦歌说:2011-02-11 22:39 #48

@weilou:你的理解是对的,第四章的代码是贯穿的,但33页最下面method的定义漏掉了return this,所以导致误解,在勘误表中也说明了这个问题,希望出版社能够在第三版中纠正这个问题。

seasmiles说:2011-07-04 16:45 #49

勘误做的不错,可是重新印刷的时候为什么不把这些错误修正了呢。
手里的书是10年5月第二次印刷的,上述错误无一修改。

另外P39页那段 better example 代码跟英文版不同啊,是版本的问题么?英文版是定义了一个helper函数,中文版里是个匿名函数。

muzuiget说:2011-09-13 12:17 #50

92页里也有错误,在string.toLocaleLowerCase()那一段
> 因为在土耳其语中‘I’转换为‘1’,而不是‘i’
我考据一下,那个不是数字“1”,而是一个unicode字符“ı”
http://zh.wikipedia.org/zh/%E5%B8%A6%E7%82%B9%E4%B8%8E%E4%B8%8D%E5%B8%A6%E7%82%B9I

下面的string.toLocaleUpperCase(),也有类似错误
> 因为在土耳其语中`i’转换为`I’,而不是`I‘。
单引号错误。

当然不知道是不是字体问题了,但我在维基页面在文泉驿正黑和xp自带的宋体都可以明显看出这几个字母是不同的。

袁源说:2011-10-12 18:53 #51

终于明白什么样的模板看久了会看什么都是斑马线了。

Richard说:2011-10-19 11:02 #52

请问此书会发行第二版吗,现在网上缺货,我们这个地区已经买不到了

Gino_wang说:2011-12-02 16:55 #53

再说一处错误:
P81 by函数倒数第五行“ ……sorting by’ + name; ”中最后的分号要去掉,同样的错误还出现在P82

第9期HTML5技术分享沙龙<成都场> | 赴会网说:2011-12-09 9:45 #54

[...] 技术和业务间的结合。业余时间参入翻译了Douglas Crockford的《JavaScript语言精粹》和Steve Souders的《高性能网站建设进阶指南》,博客是http: [...]

ty4z2008说:2012-05-22 12:52 #55

您修改的第19条:44页,“译​​注​5”​应​​改为“​​译​​注​6”​,“​​译​​注​6”​应改​​为“​​译​​注​7”​。

44页更本没有译注7

MeaningLei说:2012-10-10 13:32 #56

修订版的勘误:
12页,倒数第4行
“首先,执行condition,”是“首先,执行initialization,”

MeaningLei说:2012-10-11 21:10 #57

修订版
29页,第一部分代码倒数第1行
去掉 //6

MeaningLei说:2012-10-11 21:26 #58

【接上】
我理解6是接着方法调用模式的代码写的,不过由于两段代码分开并不方便阅读,29页的代码也不需要依赖29页的代码运行,因此觉得原版(不写注释)的方式处理较为妥当

MeaningLei说:2012-10-11 21:27 #59

更正:不需要依赖28页的代码运行

瞬间的永恒说:2012-10-25 15:26 #60

想看看这本书

hunter说:2013-01-05 21:57 #61

你的铁路图的说明翻译的不怎么通顺

jim说:2013-02-24 13:00 #62

这本书的第一章第一个试验场。

document.writeln(‘hello,world!’)
这个例子作者想表达什么意思?打开浏览器什么也看不到呀?
这个例子根本就不能运行。
求解

发表一条评论

您可以在下面评论内容中使用下列XHTML标签:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


回到页眉