Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 1-js/02-first-steps/08-operators/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ alert( n ); // 16 (右边部分先被计算,等同于 n *= 8)

## 自增/自减

<!-- 在标题中无法写出 --,因为内置的解析器会将其转换为“长破折号” —— -->
<!-- 在标题中无法写出 --,因为内建的解析器会将其转换为“长破折号” —— -->

对一个数进行加一、减一是最常见的数学运算符之一。

Expand Down
2 changes: 1 addition & 1 deletion 1-js/02-first-steps/11-logical-operators/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ alert( !!null ); // false

也就是,第一个非运算将该值转化为布尔类型并取反,第二个非运算再次取反。最后我们就得到了一个任意值到布尔值的转化。

有更多详细的方法可以完成同样的事 —— 一个内置的 `Boolean` 函数:
有更多详细的方法可以完成同样的事 —— 一个内建的 `Boolean` 函数:

```js run
alert( Boolean("non-empty string") ); // true
Expand Down
2 changes: 1 addition & 1 deletion 1-js/02-first-steps/15-function-basics/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

函数是程序的主要“构建模块”。函数使该段代码可以被调用很多次,而不需要写重复的代码。

我们已经看到了内置函数的示例,如 `alert(message)`、`prompt(message, default)` 和 `confirm(question)`。但我们也可以创建自己的函数。
我们已经看到了内建函数的示例,如 `alert(message)`、`prompt(message, default)` 和 `confirm(question)`。但我们也可以创建自己的函数。

## 函数声明

Expand Down
2 changes: 1 addition & 1 deletion 1-js/03-code-quality/01-debugging-chrome/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ function hello(name) {
一次接一次地点击此按钮,整个脚本的所有语句会被逐个执行。

<span class="devtools" style="background-position:-62px -192px"></span> —— “跨步(Step over)”:运行下一条指令,但 **不会进入到一个函数中**,快捷键 `key:F10`。
: 跟上一条命令“下一步(Step)”类似,但如果下一条语句是函数调用则表现不同。这里的函数指的是:不是内置的如 `alert` 函数等,而是我们自己写的函数。
: 跟上一条命令“下一步(Step)”类似,但如果下一条语句是函数调用则表现不同。这里的函数指的是:不是内建的如 `alert` 函数等,而是我们自己写的函数。

“下一步(Step)”命令进入函数内部并在第一行暂停执行,而“跨步(Step over)”在无形中执行函数调用,跳过了函数的内部。

Expand Down
2 changes: 1 addition & 1 deletion 1-js/03-code-quality/02-coding-style/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ function pow(x, n) {

你也可以从网上下载风格规则集并进行扩展。有关安装的更多详细信息,请参见 <http://eslint.org/docs/user-guide/getting-started>。

此外,某些 IDE 有内置的检查器,这非常方便,但是不像 ESLint 那样可自定义。
此外,某些 IDE 有内建的检查器,这非常方便,但是不像 ESLint 那样可自定义。

## 总结

Expand Down
2 changes: 1 addition & 1 deletion 1-js/03-code-quality/05-testing-mocha/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ describe("pow", function() {

- [Mocha](http://mochajs.org/) —— 核心框架:提供了包括通用型测试函数 `describe` 和 `it`,以及用于运行测试的主函数。
- [Chai](http://chaijs.com) —— 提供很多断言(assertion)支持的库。它提供了很多不同的断言,现在我们只需要用 `assert.equal`。
- [Sinon](http://sinonjs.org/) —— 用于监视函数、模拟内置函数和其他函数的库,我们在后面才会用到它。
- [Sinon](http://sinonjs.org/) —— 用于监视函数、模拟内建函数和其他函数的库,我们在后面才会用到它。

这些库都既适用于浏览器端,也适用于服务器端。这里我们将使用浏览器端的变体。

Expand Down
2 changes: 1 addition & 1 deletion 1-js/04-object-basics/01-object/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ for(let code in codes) {
所以,"49" 是一个整数属性名,因为我们把它转换成整数,再转换回来,它还是一样的。但是 "+49" 和 "1.2" 就不行了:

```js run
// Math.trunc 是内置的去除小数部分的方法
// Math.trunc 是内建的去除小数部分的方法
alert( String(Math.trunc(Number("49"))) ); // "49",相同,整数属性
alert( String(Math.trunc(Number("+49"))) ); // "49",不同于 "+49" ⇒ 不是整数属性
alert( String(Math.trunc(Number("1.2"))) ); // "1",不同于 "1.2" ⇒ 不是整数属性
Expand Down
2 changes: 1 addition & 1 deletion 1-js/04-object-basics/06-constructor-new/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ john = {

我们可以使用构造函数来创建多个类似的对象。

JavaScript 为许多内置的对象提供了构造函数:比如日期 `Date`、集合 `Set` 以及其他我们计划学习的内容。
JavaScript 为许多内建的对象提供了构造函数:比如日期 `Date`、集合 `Set` 以及其他我们计划学习的内容。

```smart header="对象,我们还会回来哒!"
在本章中,我们只介绍了关于对象和构造器的基础知识。它们对于我们在下一章中,学习更多关于数据类型和函数的相关知识非常重要。
Expand Down
4 changes: 2 additions & 2 deletions 1-js/04-object-basics/08-symbol/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,6 @@ Symbol 有两个主要的使用场景:

因此我们可以使用 Symbol 属性“秘密地”将一些东西隐藏到我们需要的对象中,但其他地方看不到它。

2. JavaScript 使用了许多系统 Symbol,这些 Symbol 可以作为 `Symbol.*` 访问。我们可以使用它们来改变一些内置行为。例如,在本教程的后面部分,我们将使用 `Symbol.iterator` 来进行 [迭代](info:iterable) 操作,使用 `Symbol.toPrimitive` 来设置 [对象原始值的转换](info:object-toprimitive) 等等。
2. JavaScript 使用了许多系统 Symbol,这些 Symbol 可以作为 `Symbol.*` 访问。我们可以使用它们来改变一些内建行为。例如,在本教程的后面部分,我们将使用 `Symbol.iterator` 来进行 [迭代](info:iterable) 操作,使用 `Symbol.toPrimitive` 来设置 [对象原始值的转换](info:object-toprimitive) 等等。

从技术上说,Symbol 不是 100% 隐藏的。有一个内置方法 [Object.getOwnPropertySymbols(obj)](mdn:js/Object/getOwnPropertySymbols) 允许我们获取所有的 Symbol。还有一个名为 [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) 的方法可以返回一个对象的 **所有** 键,包括 Symbol。所以它们并不是真正的隐藏。但是大多数库、内置方法和语法结构都没有使用这些方法
从技术上说,Symbol 不是 100% 隐藏的。有一个内建方法 [Object.getOwnPropertySymbols(obj)](mdn:js/Object/getOwnPropertySymbols) 允许我们获取所有的 Symbol。还有一个名为 [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) 的方法可以返回一个对象的 **所有** 键,包括 Symbol。所以它们并不是真正的隐藏。但是大多数库、内建方法和语法结构都没有使用这些方法
4 changes: 2 additions & 2 deletions 1-js/05-data-types/06-iterable/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ let range = {
// for(let num of range) ... num=1,2,3,4,5
```

为了让 `range` 对象可迭代(也就让 `for..of` 可以运行)我们需要为对象添加一个名为 `Symbol.iterator` 的方法(一个专门用于使对象可迭代的内置 symbol)。
为了让 `range` 对象可迭代(也就让 `for..of` 可以运行)我们需要为对象添加一个名为 `Symbol.iterator` 的方法(一个专门用于使对象可迭代的内建 symbol)。

1. 当 `for..of` 循环启动时,它会调用这个方法(如果没找到,就会报错)。这个方法必须返回一个 **迭代器(iterator)** —— 一个有 `next` 方法的对象。
2. 从此开始,`for..of` **仅适用于这个被返回的对象**。
Expand Down Expand Up @@ -296,7 +296,7 @@ alert( str.slice(1, 3) ); // 乱码(两个不同 UTF-16 扩展字符碎片拼
- `obj[Symbol.iterator]()` 的结果被称为 **迭代器(iterator)**。由它处理进一步的迭代过程。
- 一个迭代器必须有 `next()` 方法,它返回一个 `{done: Boolean, value: any}` 对象,这里 `done:true` 表明迭代结束,否则 `value` 就是下一个值。
- `Symbol.iterator` 方法会被 `for..of` 自动调用,但我们也可以直接调用它。
- 内置的可迭代对象例如字符串和数组,都实现了 `Symbol.iterator`。
- 内建的可迭代对象例如字符串和数组,都实现了 `Symbol.iterator`。
- 字符串迭代器能够识别代理对(surrogate pair)。(译注:代理对也就是 UTF-16 扩展字符。)


Expand Down
2 changes: 1 addition & 1 deletion 1-js/05-data-types/07-map-set/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ for (let entry of recipeMap) { // 与 recipeMap.entries() 相同
迭代的顺序与插入值的顺序相同。与普通的 `Object` 不同,`Map` 保留了此顺序。
```

除此之外,`Map` 有内置的 `forEach` 方法,与 `Array` 类似:
除此之外,`Map` 有内建的 `forEach` 方法,与 `Array` 类似:

```js
// 对每个键值对 (key, value) 运行 forEach 函数
Expand Down
2 changes: 1 addition & 1 deletion 1-js/05-data-types/12-json/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ alert( JSON.stringify(meetup) );
*/
```

在这儿我们可以看到 `date` `(1)` 变成了一个字符串。这是因为所有日期都有一个内置的 `toJSON` 方法来返回这种类型的字符串。
在这儿我们可以看到 `date` `(1)` 变成了一个字符串。这是因为所有日期都有一个内建的 `toJSON` 方法来返回这种类型的字符串。

现在让我们为对象 `room` 添加一个自定义的 `toJSON`:

Expand Down
2 changes: 1 addition & 1 deletion 1-js/06-advanced-functions/05-global-object/article.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

# 全局对象

全局对象提供可在任何地方使用的变量和函数。默认情况下,这些全局变量内置于语言或环境中
全局对象提供可在任何地方使用的变量和函数。默认情况下,这些全局变量内建于语言或环境中

在浏览器中,它的名字是 "window",对 Node.js 而言,它的名字是 "global",其它环境可能用的是别的名字。

Expand Down
2 changes: 1 addition & 1 deletion 1-js/06-advanced-functions/06-function-object/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ alert( arr[0].name ); // <空字符串>

## 属性 "length"

还有另一个内置属性 "length",它返回函数入参的个数,比如:
还有另一个内建属性 "length",它返回函数入参的个数,比如:

```js run
function f1(a) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ func(2);

让我们来解决这个问题。

有一个特殊的内置函数方法 [func.call(context, ...args)](mdn:js/Function/call),它允许调用一个显式设置 `this` 的函数。
有一个特殊的内建函数方法 [func.call(context, ...args)](mdn:js/Function/call),它允许调用一个显式设置 `this` 的函数。

语法如下:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ user.name = "Pete"; // Error

现在让我们向 `user` 添加一个自定义的 `toString`。

通常,对象的内置 `toString` 是不可枚举的,它不会显示在 `for..in` 中。但是如果我们添加我们自己的 `toString`,那么默认情况下它将显示在 `for..in` 中,如下所示:
通常,对象中内建的 `toString` 是不可枚举的,它不会显示在 `for..in` 中。但是如果我们添加我们自己的 `toString`,那么默认情况下它将显示在 `for..in` 中,如下所示:

```js run
let user = {
Expand Down
4 changes: 2 additions & 2 deletions 1-js/08-prototypes/03-native-prototypes/article.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 原生的原型

`"prototype"` 属性在 JavaScript 自身的核心部分中被广泛地应用。所有的内置构造函数都用到了它
`"prototype"` 属性在 JavaScript 自身的核心部分中被广泛地应用。所有的内建构造函数都用到了它

首先,我们将看看原生原型的详细信息,然后学习如何使用它为内建对象添加新功能。

Expand Down Expand Up @@ -84,7 +84,7 @@ alert(arr); // 1,2,3 <-- Array.prototype.toString 的结果
![](native-prototypes-array-tostring.svg)


浏览器内的工具,像 Chrome 开发者控制台也会显示继承性(可能需要对内置对象使用 `console.dir`):
浏览器内的工具,像 Chrome 开发者控制台也会显示继承性(可能需要对内建对象使用 `console.dir`):

![](console_dir_array.png)

Expand Down
2 changes: 1 addition & 1 deletion 2-ui/1-document/02-dom-nodes/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ drawHtmlTree(node6, 'div.domtree', 690, 500);
![](inspect.svg)

在工具的右侧部分有以下子选项卡:
- **Styles** — 我们可以看到按规则应用于当前元素的 CSS 规则,包括内置规则(灰色)。几乎所有内容都可以就地编辑,包括下面的方框的 dimension/margin/padding。
- **Styles** — 我们可以看到按规则应用于当前元素的 CSS 规则,包括内建规则(灰色)。几乎所有内容都可以就地编辑,包括下面的方框的 dimension/margin/padding。
- **Computed** — 按属性查看应用于元素的 CSS:对于每个属性,我们可以都可以看到赋予它的规则(包括 CSS 继承等)。
- **Event Listeners** — 查看附加到 DOM 元素的事件侦听器(我们将在本教程的下一部分介绍它们)。
- ……等。
Expand Down
2 changes: 1 addition & 1 deletion 2-ui/1-document/08-styles-and-classes/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ document.body.style.display = "none"; // 隐藏
setTimeout(() => document.body.style.display = "", 1000); // 恢复正常
```

如果我们将 `display` 设置为空字符串,那么浏览器通常会应用 CSS 类以及内置样式,就好像根本没有这样的 `style` 属性一样。
如果我们将 `display` 设置为空字符串,那么浏览器通常会应用 CSS 类以及内建样式,就好像根本没有这样的 `style` 属性一样。

````smart header="用 `style.cssText` 进行完全的重写"
通常,我们使用 `style.*` 来对各个样式属性进行赋值。我们不能像这样的 `div.style="color: red; width: 100px"` 设置完整的属性,因为 `div.style` 是一个对象,并且它是只读的。
Expand Down
2 changes: 1 addition & 1 deletion 6-data-storage/03-indexeddb/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ libs:

# IndexedDB

IndexedDB 是一个浏览器内置的数据库,它比 `localStorage` 强大得多。
IndexedDB 是一个浏览器内建的数据库,它比 `localStorage` 强大得多。

- 通过支持多种类型的键,来存储几乎可以是任何类型的值。
- 支撑事务的可靠性。
Expand Down
2 changes: 1 addition & 1 deletion 7-animation/2-css-animations/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ CSS:
}
```

CSS 提供几条内置的曲线:`linear`、`ease`、`ease-in`、`ease-out` 和 `ease-in-out`。
CSS 提供几条内建的曲线:`linear`、`ease`、`ease-in`、`ease-out` 和 `ease-in-out`。

`linear` 其实就是 `cubic-bezier(0, 0, 1, 1)` 的简写 —— 一条直线,刚刚我们已经看过了。

Expand Down
2 changes: 1 addition & 1 deletion 7-animation/3-js-animation/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ bounceEaseInOut = makeEaseInOut(bounce);

## 总结

JavaScript 动画应该通过 `requestAnimationFrame` 实现。该内置方法允许设置回调函数,以便在浏览器准备重绘时运行。那通常很快,但确切的时间取决于浏览器。
JavaScript 动画应该通过 `requestAnimationFrame` 实现。该内建方法允许设置回调函数,以便在浏览器准备重绘时运行。那通常很快,但确切的时间取决于浏览器。

当页面在后台时,根本没有重绘,因此回调将不会运行:动画将被暂停并且不会消耗资源。那很棒。

Expand Down
16 changes: 8 additions & 8 deletions 8-web-components/2-custom-elements/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@

我们可以通过描述带有自己的方法、属性和事件等的类来创建自定义 HTML 元素。

在 custom elements (自定义标签)定义完成之后,我们可以将其和 HTML 的内置标签一同使用
在 custom elements (自定义标签)定义完成之后,我们可以将其和 HTML 的内建标签一同使用

这是一件好事,因为虽然 HTML 有非常多的标签,但仍然是有穷尽的。如果我们需要像 `<easy-tabs>`、`<sliding-carousel>`、`<beautiful-upload>`…… 这样的标签,内置标签并不能满足我们
这是一件好事,因为虽然 HTML 有非常多的标签,但仍然是有穷尽的。如果我们需要像 `<easy-tabs>`、`<sliding-carousel>`、`<beautiful-upload>`…… 这样的标签,内建标签并不能满足我们

我们可以把上述的标签定义为特殊的类,然后使用它们,就好像它们本来就是 HTML 的一部分一样。

Custom elements 有两种:

1. **Autonomous custom elements (自主自定义标签)** —— "全新的" 元素, 继承自 `HTMLElement` 抽象类.
2. **Customized built-in elements (自定义内置元素)** —— 继承内置的 HTML 元素,比如自定义 `HTMLButtonElement` 等。
2. **Customized built-in elements (自定义内建元素)** —— 继承内建的 HTML 元素,比如自定义 `HTMLButtonElement` 等。

我们将会先创建 autonomous 元素,然后再创建 customized built-in 元素。

Expand Down Expand Up @@ -68,7 +68,7 @@ customElements.define("my-element", MyElement);
```smart header="Custom element 名称必须包括一个短横线 `-`"
Custom element 名称必须包括一个短横线 `-`, 比如 `my-element` 和 `super-button` 都是有效的元素名,但 `myelement` 并不是。

这是为了确保 custom element 和内置 HTML 元素之间不会发生命名冲突。
这是为了确保 custom element 和内建 HTML 元素之间不会发生命名冲突。
```

## 例子: "time-formatted"
Expand Down Expand Up @@ -115,7 +115,7 @@ customElements.define("time-formatted", TimeFormatted); // (2)
></time-formatted>
```

1. 这个类只有一个方法 `connectedCallback()` —— 在 `<time-formatted>` 元素被添加到页面的时候,浏览器会调用这个方法(或者当 HTML 解析器检测到它的时候),它使用了内置的时间格式化工具 [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat),这个工具可以非常好地展示格式化之后的时间,在各浏览器中兼容性都非常好。
1. 这个类只有一个方法 `connectedCallback()` —— 在 `<time-formatted>` 元素被添加到页面的时候,浏览器会调用这个方法(或者当 HTML 解析器检测到它的时候),它使用了内建的时间格式化工具 [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat),这个工具可以非常好地展示格式化之后的时间,在各浏览器中兼容性都非常好。
2. 我们需要通过 `customElements.define(tag, class)` 来注册这个新元素。
3. 接下来在任何地方我们都可以使用这个新元素了。

Expand Down Expand Up @@ -302,15 +302,15 @@ customElements.define('user-info', class extends HTMLElement {

我们可以很明显地看到外层元素并没有等待内层元素。

并没有任何内置的回调方法可以在嵌套元素渲染好之后通知我们。但我们可以自己实现这样的回调。比如,内层元素可以分派像 `initialized` 这样的事件,同时外层的元素监听这样的事件并做出响应。
并没有任何内建的回调方法可以在嵌套元素渲染好之后通知我们。但我们可以自己实现这样的回调。比如,内层元素可以分派像 `initialized` 这样的事件,同时外层的元素监听这样的事件并做出响应。

## Customized built-in elements

我们创建的 `<time-formatted>` 这些新元素,并没有任何相关的语义。搜索引擎并不知晓它们的存在,同时无障碍设备也无法处理它们。

但上述两点同样是非常重要的。比如,搜索引擎会对这些事情感兴趣,比如我们真的展示了时间。或者如果我们创建了一个特别的按钮,为什么不复用已有的 `<button>` 功能呢?

我们可以通过继承内置元素的类来扩展和定制它们
我们可以通过继承内建元素的类来扩展和定制它们

比如,按钮是 `HTMLButtonElement` 的实例,让我们在这个基础上创建元素。

Expand Down Expand Up @@ -359,7 +359,7 @@ customElements.define('hello-button', HelloButton, {extends: 'button'});
*/!*
```

我们新定义的按钮继承了内置按钮,所以它拥有和内置按钮相同的样式和标准特性,比如 `disabled` 属性。
我们新定义的按钮继承了内建按钮,所以它拥有和内建按钮相同的样式和标准特性,比如 `disabled` 属性。

## 引用参考

Expand Down
2 changes: 1 addition & 1 deletion 9-regular-expressions/01-regexp-introduction/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

正则表达式是搜索和替换字符串的一种强大方式。

在 JavaScript 中,正则表达式通过内置的“RegExp”类的对象来实现,并与字符串集成。
在 JavaScript 中,正则表达式通过内建的“RegExp”类的对象来实现,并与字符串集成。

请注意,在各编程语言之间,正则表达式是有所不同的。在本教程中,我们只专注于 JavaScript。当然,它们有很多共同点,但在 Perl、Ruby 和 PHP 等语言下会有所不同。

Expand Down