diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md index 4920407468..ec822e83a9 100644 --- a/1-js/01-getting-started/1-intro/article.md +++ b/1-js/01-getting-started/1-intro/article.md @@ -54,7 +54,7 @@ JavaScript 的能力依赖于它执行的环境。例如:[Node.js](https://wik - 在网页中插入新的 HTML,修改现有的网页内容和网页的样式。 - 响应用户的行为,响应鼠标的点击或移动、键盘的敲击。 - 向远程服务器发送请求,使用 [AJAX](https://en.wikipedia.org/wiki/Ajax_(programming)) 和 [COMET](https://en.wikipedia.org/wiki/Comet_(programming)) 技术下载或上传文件。 -- 获取或修改 cookie,向用访问者提出问题、发送消息。 +- 获取或修改 cookie,向访问者提出问题、发送消息。 - 记住客户端的数据(本地存储)。 ## 浏览器中的 JavaScript 不能做什么? diff --git a/1-js/02-first-steps/16-javascript-specials/article.md b/1-js/02-first-steps/16-javascript-specials/article.md index b163a40106..f8c6018e85 100644 --- a/1-js/02-first-steps/16-javascript-specials/article.md +++ b/1-js/02-first-steps/16-javascript-specials/article.md @@ -75,7 +75,7 @@ for(;;) { - 非拉丁字母和象形文字也是允许的,但通常不会使用。 -变量的值可以动态改变数据类型,它们可以存储任何价: +变量的值可以动态改变数据类型,它们可以存储任何值: ```js let x = 5; diff --git a/1-js/03-code-quality/02-coding-style/article.md b/1-js/03-code-quality/02-coding-style/article.md index 2270d71217..47cd5b680b 100644 --- a/1-js/03-code-quality/02-coding-style/article.md +++ b/1-js/03-code-quality/02-coding-style/article.md @@ -283,7 +283,7 @@ function pow(x, n) { 最出名的工具有: - [JSLint](http://www.jslint.com/) -- 第一批 linters 之一。 -- [JSHint](http://www.jshint.com/) -- 比 JSHint 多了更多设置。 +- [JSHint](http://www.jshint.com/) -- 比 JSLint 多了更多设置。 - [ESLint](http://eslint.org/) -- 可能是最新的一个。 它们都能够做这些工作。笔者使用 [ESLint](http://eslint.org/). diff --git a/1-js/03-code-quality/03-comments/article.md b/1-js/03-code-quality/03-comments/article.md index b85b00710c..c83bac1011 100644 --- a/1-js/03-code-quality/03-comments/article.md +++ b/1-js/03-code-quality/03-comments/article.md @@ -18,7 +18,7 @@ complex; code; ``` -但在良好的代码中,这种“解释性”评论的数量应该是最小的。严肃的说,就算没有它们,代码也应该很容易理解。 +但在良好的代码中,这种“解释性”注释的数量应该是最小的。严肃的说,就算没有它们,代码也应该很容易理解。 关于这一点有一个很棒的原则:“如果代码不够清晰以至于需要一个注释,那么或许它应该被重写。” diff --git a/1-js/04-object-basics/01-object/article.md b/1-js/04-object-basics/01-object/article.md index 8d6215dcf1..7153f2b71c 100644 --- a/1-js/04-object-basics/01-object/article.md +++ b/1-js/04-object-basics/01-object/article.md @@ -1,7 +1,7 @@ # 对象 -正如我们从《引言:类型》那章中知道的那样,JavaScript 中有很七种类型。有六种原始类型,因为他们的值只包含一种东西(字符串,数值或者其他)。 +正如我们从《引言:类型》那章中知道的那样,JavaScript 中有七种数据类型。有六种原始类型,因为他们的值只包含一种东西(字符串,数值或者其他)。 相反,对象用来存储键值对和更复杂的实体。在 JavaScript 中,对象深入到这门语言的方方面面。所以在我们深入理解这门语言之前,必须先理解对象。 对象可以通过花括号 `{…}` 和其中包含一些可选的**属性**来创建。属性是一个键值对,键是一个字符串(也叫做属性名),值可以是任何类型。 diff --git a/1-js/04-object-basics/05-object-toprimitive/article.md b/1-js/04-object-basics/05-object-toprimitive/article.md index 00f5d23c9f..81b2d76bc0 100644 --- a/1-js/04-object-basics/05-object-toprimitive/article.md +++ b/1-js/04-object-basics/05-object-toprimitive/article.md @@ -5,7 +5,7 @@ 在对象中有特殊的方法用来做转换。 -在 一章中,我们已经看到了数值,字符串和布尔转换的规则。但是我们给对象留了一个空隙。正如我们所知道的方法和符号一样,现在我们可以关闭它。 +在 一章中,我们已经看到了数值,字符串和布尔转换的规则。但是我们给对象的原始值转换留下了一点疑问。正如我们所知道的方法和符号一样,现在我们可以解决这个问题了。 对于对象,不存在 to-boolean 转换,因为所有对象在布尔上下文中都是 `true`。所以只有字符串和数值转换。 diff --git a/1-js/05-data-types/02-number/article.md b/1-js/05-data-types/02-number/article.md index ca5438fdda..9c7d1a830b 100644 --- a/1-js/05-data-types/02-number/article.md +++ b/1-js/05-data-types/02-number/article.md @@ -207,7 +207,7 @@ alert( 0.1 + 0.2 ); // 0.30000000000000004 一个数字以二进制形式存储在内存中,一个 1 和 0 的序列。但是像十进制数字系统看起来很简单的 `0.1`,`0.2` 这样的分数实际上是二进制形式的无限分数。 -换句话说,什么是 `0.1`?十分之一除以十分之一,即十分之一。在十进制数字系统中,这些数字很容易表示。将它比作三分之一:`1/3`。它变成了无尽的分数 `0.33333(3)`。 +换句话说,什么是 `0.1`?`0.1` 就是把 1 除以 10 `1/10`,即十分之一。在十进制数字系统中,这些数字很容易表示。将它比作三分之一:`1/3`。它变成了无尽的分数 `0.33333(3)`。 所以,按这种用 `10` 划分可以保证在十进制系统中运行良好,但用 `3` 划分不是。出于同样的原因,在二进制数字系统中,`2` 的幂的分割保证工作,但 `1/10` 变成一个无限的二进制分数。 diff --git a/1-js/05-data-types/03-string/article.md b/1-js/05-data-types/03-string/article.md index 0e709b7e27..1f104edb6b 100644 --- a/1-js/05-data-types/03-string/article.md +++ b/1-js/05-data-types/03-string/article.md @@ -526,7 +526,7 @@ alert( str ); ### 正确的比较 -执行字符串比较的“正确”算法比看起来更复杂,因为不同语言的字母都不想同。相同的字母可能位于不同的字母表中。 +执行字符串比较的“正确”算法比看起来更复杂,因为不同语言的字母都不相同。相同的字母可能位于不同的字母表中。 因此浏览器需要知道要比较的语言。 diff --git a/1-js/05-data-types/04-array/article.md b/1-js/05-data-types/04-array/article.md index 2dc5361f99..3336a3b3bb 100644 --- a/1-js/05-data-types/04-array/article.md +++ b/1-js/05-data-types/04-array/article.md @@ -206,7 +206,7 @@ alert( arr === fruits ); // true arr.push("Pear"); // 通过引用修改数组 -alert( fruits ); // Banana, Pear — 现在只有 2 项了 +alert( fruits ); // Banana, Pear — 现在有 2 项了 ``` ...但是数组真正特殊的是它们的内部实现。JavaScript 引擎尝试把这些元素一个接一个地存储在连续的内存区域,就像本章的插图显示的一样,而且还有一些其它的优化,以使数组运行得非常快。 diff --git a/1-js/05-data-types/05-array-methods/article.md b/1-js/05-data-types/05-array-methods/article.md index 56f4cef483..d9f3963eef 100644 --- a/1-js/05-data-types/05-array-methods/article.md +++ b/1-js/05-data-types/05-array-methods/article.md @@ -667,7 +667,7 @@ let users = [ ]; *!* -// 找到比 users 小的所有 user +// 找到比 user 小的所有 users let youngerUsers = users.filter(user.younger, user); */!* diff --git a/1-js/05-data-types/07-map-set-weakmap-weakset/article.md b/1-js/05-data-types/07-map-set-weakmap-weakset/article.md index 45163ce6f3..00c3a3722a 100644 --- a/1-js/05-data-types/07-map-set-weakmap-weakset/article.md +++ b/1-js/05-data-types/07-map-set-weakmap-weakset/article.md @@ -31,7 +31,7 @@ map.set('1', 'str1'); // 字符串作为 key map.set(1, 'num1'); // 数字作为 key map.set(true, 'bool1'); // 布尔值作为 key -// 还记得普通对象 Object 吗?它将会吧所有的键转化为字符串类型 +// 还记得普通对象 Object 吗?它将会把所有的键转化为字符串类型 // 但是 Map 将会保留键的类型,所以下面这两个是不同的: alert( map.get(1) ); // 'num1' alert( map.get('1') ); // 'str1' @@ -395,7 +395,7 @@ let unreadSet = new WeakSet(messages); // 我们可以使用 unreadSet 来看一个 message 是否未读 alert(unreadSet.has(messages[1])); // true -// 读过之后就讲它从 set 中移除 +// 读过之后就将它从 set 中移除 unreadSet.delete(messages[1]); // true // 当我们对消息列表做 shift 操作,set 就会自动清理 diff --git a/1-js/05-data-types/08-keys-values-entries/article.md b/1-js/05-data-types/08-keys-values-entries/article.md index beaed243b3..3ba7685ac0 100644 --- a/1-js/05-data-types/08-keys-values-entries/article.md +++ b/1-js/05-data-types/08-keys-values-entries/article.md @@ -3,7 +3,7 @@ 单个数据结构告一段落,下面我们让讨论如何迭代它们。 -在前面的章节中,我们认识了 `map.keys()`,`map.value()`,`map.entries()`。 +在前面的章节中,我们认识了 `map.keys()`,`map.values()`,`map.entries()`。 这些方法是通用的,有一个共同的约定来将它们用于各种数据结构。如果我们创建一个我们自己的数据结构,我们也应该实现这些方法。 diff --git a/1-js/06-advanced-functions/01-recursion/article.md b/1-js/06-advanced-functions/01-recursion/article.md index 34fa931f75..bcc4af5f7e 100644 --- a/1-js/06-advanced-functions/01-recursion/article.md +++ b/1-js/06-advanced-functions/01-recursion/article.md @@ -416,7 +416,7 @@ let arr = [obj1, obj2, obj3]; ...但是用数组有个问题。「删除元素」和「插入元素」操作代价非常大。例如,`arr.unshift(obj)` 操作必须对所有元素重新编号以便为新的元素 `obj` 腾出空间,而且如果数组很大,会很耗时。`arr.shift()` 同理。 -唯一对数组结构做修改而不需要大量重排的操作就是在数组的两端:`arr.push/pop`。所以对大队列来说,数组会很慢。 +唯一对数组结构做修改而不需要大量重排的操作就是在数组的末端:`arr.push/pop`。所以对大队列来说,数组会很慢。 如果我们真的需要快速插入、删除的话,我们可以选择另一种叫做[链表](https://en.wikipedia.org/wiki/Linked_list)的数据结构。 diff --git a/1-js/07-object-oriented-programming/10-class-inheritance/animal-rabbit-extends.png b/1-js/07-object-oriented-programming/10-class-inheritance/animal-rabbit-extends.png new file mode 100644 index 0000000000..2db88f3663 Binary files /dev/null and b/1-js/07-object-oriented-programming/10-class-inheritance/animal-rabbit-extends.png differ diff --git a/2-ui/1-document/02-dom-nodes/article.md b/2-ui/1-document/02-dom-nodes/article.md index 99097124d0..733391d507 100644 --- a/2-ui/1-document/02-dom-nodes/article.md +++ b/2-ui/1-document/02-dom-nodes/article.md @@ -184,7 +184,7 @@ drawHtmlTree(node6, 'div.domtree', 690, 500); 表示整个文档的 `document` 对象在形式上也是一个 DOM 节点。 -有 [12 中节点类型](https://dom.spec.whatwg.org/#node)。实际上,我们通常用到的是其中的 4 个: +有 [12 种节点类型](https://dom.spec.whatwg.org/#node)。实际上,我们通常用到的是其中的 4 个: 1. `document`—— DOM 中的“入口点”。 2. 元素节点 —— HTML 标签,树构建块。 diff --git a/2-ui/1-document/04-searching-elements-dom/article.md b/2-ui/1-document/04-searching-elements-dom/article.md index 4f5f42f595..c5e52bbe2e 100644 --- a/2-ui/1-document/04-searching-elements-dom/article.md +++ b/2-ui/1-document/04-searching-elements-dom/article.md @@ -365,7 +365,7 @@ CSS 选择器的伪类,如 `:hover` 和 `:active` 都是被支持的。例如 -请注意,只有在文档 `document.getElementById(...)` 的上下文中才能调用 `getElementById` 和 `getElementsByName`。但元素中没有 `elem.getElementById(...)` 回报错。 +请注意,只有在文档 `document.getElementById(...)` 的上下文中才能调用 `getElementById` 和 `getElementsByName`。但元素中没有 `elem.getElementById(...)` 会报错。 也可以在元素上调用其他方法,例如 `elem.querySelectorAll(...)` 将会在 `elem`(在 DOM 子树中)内部进行搜素。 diff --git a/2-ui/1-document/07-modifying-document/article.md b/2-ui/1-document/07-modifying-document/article.md index 7ddb26cf11..86248d20e8 100644 --- a/2-ui/1-document/07-modifying-document/article.md +++ b/2-ui/1-document/07-modifying-document/article.md @@ -4,7 +4,7 @@ DOM(document object model 文档对象模型,此文中全部以缩写 DOM 以下的例子向我们展示如何创建一个“弹幕”新元素并且修改它在页面中展示的内容。 -这里我们先展示出一个建单的例子,随后会逐一向你说明。 +这里我们先展示出一个简单的例子,随后会逐一向你说明。 ## 例子:展示一条信息 diff --git a/2-ui/1-document/09-size-and-scroll/article.md b/2-ui/1-document/09-size-and-scroll/article.md index c406b0c5da..79683bbbba 100644 --- a/2-ui/1-document/09-size-and-scroll/article.md +++ b/2-ui/1-document/09-size-and-scroll/article.md @@ -62,7 +62,7 @@ JavaScript 中存在许多属性让我们能够读取元素的宽度、高度或 1. CSS 定位(`position` 为 `absolute`、`relative` 或 `fixed`), 2. 或者 ``、``、``, -2. 或者 ``。 +3. 或者 ``。 在大多数实际情况下,我们可以使用 `offsetParent` 来获得最近的 CSS 定位祖先。`offsetLeft/offsetTop` 提供相对于元素左上角的 x/y 坐标。