JavaScript语言精髓与编程实践 - 勘误

本文列举并修正了一本书中关于JavaScript的多种错误,包括字词、文意、标点及语法错误,同时还提供了额外的补充说明,以帮助读者更好地理解和掌握JavaScript的相关知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  
1. 字词上的错误( 24 处)
==============
代序,页 1 ,倒数第五行
---------
然而一如我现在所见到,
 
改为
然而一如我现在所见到
 

P22 ,表 1-2 ,(含表头)第三行、第二列
---------
也被称为 Cliet -Side JavaScript
 
改为
也被称为 Client -Side JavaScript
 
 
 
P30 ,表 2-2 ,(含表头)第三行、第三列
---------
一些函数 / 方法的回值是数值
 
改为
一些函数 / 方法的回值是数值
 
 

P37 2.2.3.3 节最末处的示例代码
---------
(function foo()
  // ...
});
 
改为
(function foo(){
  // ...
});
 
 

P42 ,正文中部,引用框内
---------
因此有关它的细节请参考 2.5 面向对象编程的语法概要
 
改为
因此有关它的细节请参考 5.7 类型转换
 
 
 
P53 ,中间引用框之上的一行
---------
……
使用 “ identifier: statement” 语句开始一个标签声明。
 
改为
……
使用 “ identifier: statement” 语法开始一个标签声明。
 
 

P101 ,最后一个代码示例块
---------
arr_properties = [
  ['pop'], 0
];
 
改为
array_properties = [
  ['pop'], 1
];
 
 

P147 ,脚注 22 第二行
---------
由于 delete 运算级高于 ……
 
改为
由于 delete 运算符优先级高于 ……
 
 

P157 ,(除代码块之外的正文)第三段第二行
---------
我们在实例不能访问 ob .proto 的情况下, ……
 
改为
我们在实例不能访问 obj .proto 的情况下, ……
 
 

P157 ,(除代码块之外的正文)第三段第三行
---------
……
可以补完对 3-11 中的构造器原型, ……
 
改为
……
可以补全 3-11 中的构造器原型, ……
 
 

P170 ,倒数第二段第二行
---------
也可以在处理句柄中使用 throwe 来重新触发异常。
 
改为
也可以在处理句柄中使用 throw e 来重新触发异常。
 
 

P189 ,第三段第二行
---------
这个特性就是通过接口( interface )向显露系统,以及 ……
 
改为
这个特性就是通过接口( interface )向显露系统,以及 ……
 
 

P209 ,第一段第一行
---------
整个编程的模式被简化了函数( function )与其参数( arguments )的运算, ……
 
改为
整个编程的模式被简化了函数( function )与其参数( arguments )的运算, ……
 
 

P247 ,脚注第二行
---------
例如 “obj.eval('value = 100')”; 将在 obj 的对象闭包中执行代码。
 
改为
例如 “obj.eval('value = 100');” 将在 obj 的对象闭包中执行代码。
 
 

P255 ,最末一段,倒数第三行
---------
原始代码中的,以及当前(装载时的)环境下的符号系统。事实上一些在程度中嵌入
 
改为
原始代码中的以及当前(装载时的)环境下的符号系统。事实上一些嵌入程序中
 
 

P319 ,第一个代码块,第四行(注释)
---------
即时字节类型 (vbByte)
 
改为
即是字节类型 (vbByte)
 
 

P325 ,第二个代码块, 示例 2 中的注释
---------
在(隐式)转换将被忽略
 
改为
在(隐式)转换将被忽略
 
 

P328 ,第二个代码块(行)
---------
行前的行号,应标为 15
 
 

P343 ,图 6-1 下的一段,第一行
---------
……
7 则对 应用 ”……
 
改为
……
6.7 小节 则对 应用 ”……
 
 

P352 ,最末一段第二行
---------
然而如果用户想要 Qomo 充分利用函数式、动态语言以及 ……
 
改为
然而如果用户想要知道 Qomo 如何 充分利用函数式、动态语言以及 ……
 
 

P390 6.3.3 小节中的第一个代码块,第三个函数声明
---------
function f2() {
  return undefined;
}
 
改为
function f3() {
  return undefined;
}
 
 

P438 ,图 6-2 存在较多的错误
---------
[
正确图例如下 ]
 
 

 

 
 
P491 ,第一段第二行
---------
(因此若一定要在 apply() )中使用数组,那么 ……
 
改为
(因此若一定要在 apply() )中使用,那么 ……
 
 
 
2. 文意上的错误( 6 处)
==============
P3 ,倒数第五行
---------
中国可能还有 2/3 IT 人在玩一种叫 电子公告板( BBS ……
 
改为
国内 IT 人中可能还有 2/3 的触网者在玩一种叫 电子公告板( BBS ……
 
 

P8 ,倒数第四段,最末一句
---------
当时还没有 PHP ,而 ASP 也只是刚刚出现,并不成熟。
 
改为
当时我还不知道 PHP ,而 ASP 也并不那么流行。
 
 

P29 ,脚注第二行
---------
Mozilla
Firefox 插件
 
改为
Mozilla Firefox
中的 FireBug 插件
 
 

P37 2.2.3.3 节的最末一段,最后一行
---------
下例所示的代码在 SpiderMonkey JavaScript 的任意位置都不是具名函数 ……
 
改为
下例所示代码中的函数 foo() SpiderMonkey JavaScript 的表达式中,以及其所在表达
式之外(的全局或其它函数闭包中)都是不具名的 ……
  [
说明 ]
SpiderMonkey JavaScript
中,这个函数的名称在它的函数体内部仍然是有意义的。例
如下面的代码仍可以通过函数名来访问它:
(function foo() {
  alert(foo.toString());  //<--
这里仍可以访问标识符 foo
});
 
 

P49 ,第一行
---------
…… 对于引用类型数)据来说,则是存放所引用地址的内存(即指向用数据的指针)
 
改为
…… 对于引用类型数)据来说,则是存放引用地址(指向引用数据的指针)的内存。
 
 

P90 ,表 2-20
---------
(除表头外)第二行、第四列中,应
 
添加内容
数值直接量声明中的符号(正、负或指数)
(除表头外)第三行、第四列中, 参数声明
 
改为
形式参数表
(除表头外)第五行、第四列中, 对象成员存取
移到该行的第三列中。
 
 
 
3. 标点、文法上可以更好的( 12 处)
==============
代序,页 1 ,正文第一段第三行
---------
……
等都被分在 命令式 语言范型的畴; 函数式 语言则是 ……
 
改为
……
等都被分在 命令式 语言范型的畴, 函数式 语言则是 ……
  [
说明 ]
该句是两个单句,不必使用 号。
 
 

代序,页 1 ,正文第一段第五行
---------
当然从语言的实现方式来看, ……
 
改为
当然,从语言的实现方式来看, ……
  [
说明 ]
这时用个 号,停顿更为自然。
 
 

前言末页,倒数第三段第二行
---------
然后试读一二章节,可以先选读一些在你的知识库中看来很新鲜的,以及一些你
自认为已经非常了解的内容。
 
改为
然后试读一些章节。你可以先选读一些在你的知识库中看来很新鲜的,以及一些你
原本已经非常了解的内容, ……
  [
说明 ]
前面的 一二章节 可能存在歧义,被读者误解为确指 第一、二章 。其它修改
以及语句上更为通顺。
 
 

P16 ,倒数第四行
---------
它们不得不面对这种新的技术带来的巨大的网络机会。
 
改为
它们不得不面对这种新技术给互联网带来的巨大的机会。
  [
说明 ]
更为通顺的表达。
 
 

P30 2.2.1.1 小节,第一段
---------
我们称这些类型为基本类型、基础类型或 ……
 
改为
我们称 JavaScript 识别近六种类型为基本类型、基础类型或 ……
  [
说明 ]
此处是新的小节,不宜承前省略。
 
 

P42 ,正文第三段最末一句
---------
例如在下面的表达式中, 逻辑否(!) 运算符强制运算元为 aVar ,因此
无论 aVar 是其他何种类型,都将被转换为 bool 值参与运算:
 
改为
例如在下面的表达式中,无论 aVar 是其它何种类型,都将被 逻辑否(!)
运算符转换为 bool 值参与运算:
  [
说明 ]
更为通顺的表达。
 
 

P45 ,倒数第三段,第一行
---------
……
我们成功地否定了一个惯例性的说法:
 
改为
……
我们成功地否定了一个习惯性的说法:
  [
说明 ]
更适当的用词。
 
 

P48 ,倒数第二段,最末两行
---------
……
因此存储单元是不可写的。表达式运算过程中,赋值的效果(修改
存储单元中的值)无法完成,所以提示出错。
 
改为
……
其存储单元是不可写的,因此在表达式运算过程中,将因赋值的效
果(修改存储单元中的值)无法完成,而提示出错。
  [
说明 ]
更为通顺的表达。
 
 

P57 ,文中第三段分段有一些不当
---------
该段应在倒数第二行 显式声明时可以为变量赋一个初值 ……” 之前结束。
截出的文字部分应该与下一行合并在一段中。新段落成如下形式:
  显式声明时可以 ………… 。而隐式声明与此不同的是 ………… 。换而
言之 …… ,然后完成赋值运算。
 
 

P255 ,正文第二段最末一行
---------
(例如某些 Unix Shell 比) DOS Shell 要强大得多。
 
改为
(例如某些 Unix Shell 比) DOS 批处理要强大得多。
  [
说明 ]
这里是强调两种称谓的差异,因此这里用 “DOS 批处理 更恰当。
 
 

P350 ,脚注第一行
---------
……
在卡通片里,或者我们这样用程序来构建的 原始动物世界 中能看到。
 
改为
……
在卡通片里,或者我们这样用程序来构建的 原始的动物世界 中能看到。
  [
说明 ]
这里应强调这个 动物世界 是原始的、简陋的,避免让读者认为是 原始动物的 世界。
 
 

P455 ,脚注最后一行
---------
(以实现在 beginPaint() 之后)缓存,至 endPaint() 时一次渲染的绘制风格。
 
改为
(以实现在 beginPaint() 之后)缓存、至 endPaint() 时一次渲染的绘制风格。
  [
说明 ]
这里宜使用顿号 表明语义上的连贯。
 
 
 
4. 更多的补充说明( 4 处)
==============
P56 ,最末一段,第一行
---------
最后要强调一点: eval() 函数总是执行语句。
  [
补充 ]
事实上,使用 eval() 也是获得语句结果值,并使之可以参与运算的唯一方法。
 
 
P57 ,倒数第二段
---------
因为一方面有 显式声明时所赋予的初值 ……
  [
补充 ]
事实上,所谓 显式声明时所赋予的初值 只是一个存有误解的、语义上的
表面现象 —— 从其它语言的经验来看, “var i = 100;” 这样的语句是试图
声明一个 有初值变量 。然而事实上,严格地说, JavaScript 并没有语法
期的 变量初值 的概念,在语法分析期,这里只出现了一个 变量声明
赋值符号( = 是不被理解的。而到了代码执行期,这个赋值符号才被
解析,并完成赋值的行为。但有趣的是, JavaScript 的确为 “var i = 100;”
这样的语句做了一些手脚,这与标识符优先系统有关,请参见 “4.6.7 闭包
中的标识符(变量)特例 中的示例4 ~ 6。
 
 

P63 ,第一段,示例
---------
  [
补充 ]
需要强调一下,该示例的本质其实是在函数直接量之前加上了一个运算符( void )。
由于这个运算符的存在,使得 JavaScript 可以将该匿名函数解释为运算元 ——
非一个直接的、全局的函数声明语句 —— 并参与运算。因此,事实上我们也可以
使用下面的代码来达到完全相同的效果:
//
赋值运算符 “=”—— 或其它运算符,也可以强制后面函数直接量为运算元
x = function() {
  // ...
}(1,2);
 
 

P71 ,图 2-15 之后的一段
---------
……
因此事实上该提示信息所指的是 “un-labeled break”……
  [
补充 ]
对于脚本引擎的提示信息来说,这里存在一个翻译上的问题。因为所谓 循环之外
不能有 ‘break’” ,这个 break 其实成了泛指所有形式的 break 子句。然而,我们前
文中的分析表明:在这里可以使用 标签化的 break labeled break ,不能使
用的是仅是独立的、不确切指向某个标签的语句 “break;”—— 亦即是( unlabeled
break
)。这种细微的差异在语句陈述上极其不便,望读者能仔细分辨。
 
 

5.
印刷问题、排版错误( 8 处)
==============

破折号丢失
P116
184 185 189 283 373
正文或代码缩进错误
P152
220 
 
P445 ,第一段代码下的第一行正文
---------
切面对可能目标系统的输入输出产生影响,
 
改为
切面可能对目标系统的输入输出产生影响,
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值