diff --git a/chapter1.markdown b/chapter1.markdown
index d9ff15a..85135c3 100644
--- a/chapter1.markdown
+++ b/chapter1.markdown
@@ -44,7 +44,7 @@ JavaScript 是一门面向对象的编程语言,对于那些仓促学习JavaSc
在任何语言中,最简单的操作莫过于定义变量。那么,在JavaScript中定义变量的时候,其实也在和对象打交道。首先,变量自动变为一个被称作“活动对象”的内置对象的属性(如果是全局变量的话,就变为全局对象的属性)。第二,这个变量实际上也是“伪对象”,因为它有自己的属性(属性特性),用以表示变量是否可以被修改、删除或在for-in循环中枚举。这些特性并未在ECMAScript3中作规定,而ECMAScript5中提供了一组可以修改这些特性的方法。
-那么,到底什么是对象?对象能作这么多事情,那它们一定非常特别。实际上,对象是及其简单的。对象只是很多属性的集合,一个名值对的列表(在其他语言中可能被称作关联数组),这些属性也可以是函数(函数对象),这种函数我们称为“方法”。
+那么,到底什么是对象?对象能作这么多事情,那它们一定非常特别。实际上,对象是极其简单的。对象只是很多属性的集合,一个名值对的列表(在其他语言中可能被称作关联数组),这些属性也可以是函数(函数对象),这种函数我们称为“方法”。
关于对象还需要了解,我们可以随时随地修改你创建的对象(当然,ECMAScript5中提供了可阻止这些修改的API)。得到一个对象后,你可以给他添加、删除或更新成员。如果你关心私有成员和访问控制,本书中我们也会讲到相关的编程模式。
@@ -110,7 +110,7 @@ JavaScript语言的核心部分(不包含DOM、BOM和外部宿主对象)是
本书不会讨论ES5新增特性相关的模式,因为在本书截稿时并没有任何浏览器实现了ES5,但本书的示例代码通过一些技巧鼓励开发者向新标准转变:
-- 确保所提供的示例代码在严格模式下不包错
+- 确保所提供的示例代码在严格模式下不报错
- 避免使用并明确指出弃用的构造函数相关的属性和方法,比如arguments.callee
- 针对ES5中的内置模式比如Object.create(),在ES3中实现等价的模式
diff --git a/chapter2.markdown b/chapter2.markdown
index e4516e8..667aa17 100644
--- a/chapter2.markdown
+++ b/chapter2.markdown
@@ -167,7 +167,7 @@ JavaScript 使用函数来管理作用域,在一个函数内定义的变量称
你可以使用一个var语句来声明多个变量,变量之间用逗号分隔。也可以在这个语句中加入变量的初始化,这是一个非常好的实践。这种方式可以避免逻辑错误(所有未初始化的变量都被声明了,且值为undefined)并增加了代码的可读性。过段时间后再看这段代码,你会体会到声明不同类型变量的惯用名称,比如,你一眼就可看出某个变量是对象还是整数。
-你可以在声明变量时多做一些额外的工作,比如在这个例子中就写了sum=a+b这种代码。另一个例子就是当代码中用到对DOM元素时,你可以把对DOM的引用赋值给一些变量,这一步就可以放在一个单独的声明语句中,比如下面这段代码:
+你可以在声明变量时多做一些额外的工作,比如在这个例子中就写了sum=a+b这种代码。另一个例子就是当代码中用到DOM元素时,你可以把对DOM的引用赋值给一些变量,这一步就可以放在一个单独的声明语句中,比如下面这段代码:
function updateElement() {
var el = document.getElementById("result"),
@@ -424,14 +424,14 @@ for-in 循环用于对非数组对象作遍历。通过for-in进行循环也被
- 每个case中的代码整齐缩进
- 每个case都以break作为结束
- 避免连续执行多个case语句块(当省略break时会发生),如果你坚持认为连续执行多case语句块是最好的方法,请务必补充文档说明,对于其他人来说,这种情况看起来是错误的。
-- 以default结束整个switch,以确保即便是在找不到匹配项时也会有正常的结果,
+- 以default结束整个switch,以确保即便是在找不到匹配项时也会有正常的结果。
## 避免隐式类型转换
在JavaScript的比较操作中会有一些隐式的数据类型转换。比如诸如false == 0或""==0之类的比较都返回true。
-为了避免隐式类型转换造对程序造成干扰,推荐使用===和!===运算符,它们较除了比较值还会比较类型。
+为了避免隐式类型转换造对程序造成干扰,推荐使用===和!==运算符,它们除了比较值还会比较类型。
var zero = 0;
if (zero === false) {
@@ -529,7 +529,7 @@ eval()和Function构造函数还有一个区别,就是eval()可以修改作用
确立并遵守编码规范非常重要,这会让你的代码风格一致、可预测、可读性更强。团队新成员通过学习编码规范可以很快进入开发状态、并写出团队其他成员易于理解的代码。
-在开源社区和邮件组中关于编码风格的争论一直不断(比如关于代码缩进,用tab还是空格?)。因此,如果你打算在团队内推行某种编码规范时,要做好应对各种反对意见的心理准备,而且要吸取各种意见,这对确立并一贯遵守某种编码规范是非常重要,而不是斤斤计较的纠结于编码规范的细节。
+在开源社区和邮件组中关于编码风格的争论一直不断(比如关于代码缩进,用tab还是空格?)。因此,如果你打算在团队内推行某种编码规范时,要做好应对各种反对意见的心理准备,而且要吸取各种意见,这对确立并一贯遵守某种编码规范非常重要,而不是斤斤计较地纠结于编码规范的细节。
### 缩进
@@ -724,8 +724,6 @@ JavaScript中没有类,但有构造函数,可以通过new来调用构造函
那么对于那些不是函数的变量应当如何命名呢?变量名通常采用小驼峰式命名,还有一个不错的做法是,变量所有字母都是小写,单词之间用下划线分隔,比如,first_name,favorite_bands和old_company_name,这种方法可以帮助你区分函数和其他标识符——原始数据类型或对象。
-ECMAScript的属性和方法均使用Camel标记法,尽管多字的属性名称是罕见的(正则表达式对象的lastIndex和ignoreCase属性)。
-
在ECMAScript中的属性和方法均使用驼峰式命名,尽管包含多单词的属性名称(正则表达式对象中的lastIndex和ignoreCase)并不常见。
@@ -946,7 +944,7 @@ YUIDoc工具是语言无关的,只解析注释块,而不是JavaScript代码
写出易读的代码(或API),是指别人能轻易读懂程序的思路。所以你需要采用更好的思路来解决手头的问题。
-尽管我们认为“草稿”不甚完美,但至少也算“抱佛脚”的权宜之计,一眼看上去是有点“草”,不过也无所谓,特别是当你处理的是一个关键项目时(会有人命悬与此)。其实你应当扔掉你所给出的第一个解决方案,虽然它是可以正常工作的,但毕竟是一个草率的方案,不是最佳方案。你给出的第二个方案会更加靠谱,因为这时你对问题的理解更加透彻。第二个方案不是简单的复制粘贴之前的代码,也不能投机取巧寻找某种捷径。
+尽管我们认为“草稿”不甚完美,但至少也算“抱佛脚”的权宜之计,一眼看上去是有点“草”,不过也无所谓,特别是当你处理的是一个关键项目时(会有人命悬于此)。其实你应当扔掉你所给出的第一个解决方案,虽然它是可以正常工作的,但毕竟是一个草率的方案,不是最佳方案。你给出的第二个方案会更加靠谱,因为这时你对问题的理解更加透彻。第二个方案不是简单的复制粘贴之前的代码,也不能投机取巧寻找某种捷径。
## 相互评审
diff --git a/chapter3.markdown b/chapter3.markdown
index f32a30e..8006472 100644
--- a/chapter3.markdown
+++ b/chapter3.markdown
@@ -227,7 +227,7 @@ Person构造函数是如何定义的呢?看下面的代码:
console.log(typeof good_morning); // "undefined"
console.log(window.tastes); // "yummy"
-ECMAScript5中修正了这种非正常的行为逻辑。在严格模式中,this是不能指向全局对象的。如果在不支持ES5的JavaScript环境中,仍然后很多方法可以确保构造函数的行为即便在省略new调用时也不会出问题。
+ECMAScript5中修正了这种非正常的行为逻辑。在严格模式中,this是不能指向全局对象的。如果在不支持ES5的JavaScript环境中,仍然有很多方法可以确保构造函数的行为即便在省略new调用时也不会出问题。
### 命名约定
@@ -475,7 +475,7 @@ JavaScript中的正则表达式也是对象,可以通过两种方式创建它
var re = /pattern/gmi;
-使用正则表达式直接量可以让代码更加简洁高效,比如当调用String.prototype.prelace()方法时,可以传入正则表达式参数:
+使用正则表达式直接量可以让代码更加简洁高效,比如当调用String.prototype.replace()方法时,可以传入正则表达式参数:
var no_letters = "abc123XYZ".replace(/[a-z]/gi, "");
console.log(no_letters); // 123
@@ -572,7 +572,7 @@ JavaScript中有很多内置的Error构造函数,比如Error()、SyntaxError()
**name**
-name属性是指创建这个对象的构造函数的名字,通常是“Errora”,有时会有特定的名字比如“RangeError”
+name属性是指创建这个对象的构造函数的名字,通常是“Error”,有时会有特定的名字比如“RangeError”
**message**