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
12 changes: 6 additions & 6 deletions 1-js/02-first-steps/08-comparison/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

- 大于 / 小于:<code>a &gt; b</code>,<code>a &lt; b</code>。
- 大于等于 / 小于等于:<code>a &gt;= b</code>,<code>a &lt;= b</code>。
- 检测两个值的相等:`a == b`(注意表达式中是两个等号 `=`,若写为单个等号 `a = b` 则表示赋值)。
- 检测两个值不相等,在数学中使用 <code>&ne;</code> 符号,而在 JavaScript 中则通过在赋值符号前加叹号表示:<code>a != b</code>。
- 检查两个值的相等:`a == b`(注意表达式中是两个等号 `=`,若写为单个等号 `a = b` 则表示赋值)。
- 检查两个值不相等,在数学中使用 <code>&ne;</code> 符号,而在 JavaScript 中则通过在赋值符号前加叹号表示:<code>a != b</code>。

## 比较结果为 Boolean 类型

Expand Down Expand Up @@ -171,9 +171,9 @@ alert( null >= 0 ); // (3) *!*true*/!*

是的,上面的结果完全打破了你对数学的认识。在最后一行代码显示“`null` 大于等于 0”的情况下,前两行代码中一定会有一个是正确的,然而事实表明它们的结果都是 false。

为什么会出现这种反常结果,这是因为相等性检测 `==` 和普通比较符 `> < >= <=` 的代码逻辑是相互独立的。进行值的比较时,`null` 会被转化为数字,因此它被转化为了 `0`。这就是为什么(3)中 `null >= 0` 返回值是 true,(1)中 `null > 0` 返回值是 false。
为什么会出现这种反常结果,这是因为相等性检查 `==` 和普通比较符 `> < >= <=` 的代码逻辑是相互独立的。进行值的比较时,`null` 会被转化为数字,因此它被转化为了 `0`。这就是为什么(3)中 `null >= 0` 返回值是 true,(1)中 `null > 0` 返回值是 false。

另一方面,`undefined` 和 `null` 在相等性检测 `==` 中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值。这就解释了为什么(2)中 `null == 0` 会返回 false。
另一方面,`undefined` 和 `null` 在相等性检查 `==` 中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值。这就解释了为什么(2)中 `null == 0` 会返回 false。

### 特立独行的 undefined

Expand All @@ -190,7 +190,7 @@ alert( undefined == 0 ); // false (3)
原因如下:

- `(1)` 和 `(2)` 都返回 `false` 是因为 `undefined` 在比较中被转换为了 `NaN`,而 `NaN` 是一个特殊的数值型值,它与任何值进行比较都会返回 `false`。
- `(3)` 返回 `false` 是因为这是一个相等性检测,而 `undefined` 只与 `null` 相等,不会与其他值相等。
- `(3)` 返回 `false` 是因为这是一个相等性检查,而 `undefined` 只与 `null` 相等,不会与其他值相等。

### 规避错误

Expand All @@ -204,6 +204,6 @@ alert( undefined == 0 ); // false (3)

- 比较运算符始终返回布尔值。
- 字符串的比较,会按照“词典”顺序逐字符地比较大小。
- 当对不同类型的值进行比较时,它们会先被转化为数字(不包括严格相等检测)再进行比较。
- 当对不同类型的值进行比较时,它们会先被转化为数字(不包括严格相等检查)再进行比较。
- 在非严格相等 `==` 下,`null` 和 `undefined` 相等且各自不等于任何其他的值。
- 在使用 `>` 或 `<` 进行比较时,需要注意变量可能为 `null/undefined` 的情况。比较好的方法是单独检查变量是否等于 `null/undefined`。
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ importance: 3

---

# 检测值是否位于范围之外
# 检查值是否位于范围之外

写一个 `if` 条件句,检查 `age` 是否不位于 14 到 90 的闭区间。

Expand Down
10 changes: 5 additions & 5 deletions 1-js/03-code-quality/05-testing-mocha/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,9 +172,9 @@ function pow() {

除此之外,还有一个规范值得遵循。

**一个测试检测一个东西。**
**一个测试检查一个东西。**

如果我们在看测试代码的时候,发现在其中有两个相互独立的检测 —— 最好将它拆分成两个更简单的检测
如果我们在看测试代码的时候,发现在其中有两个相互独立的检查 —— 最好将它拆分成两个更简单的检查

因此让我们继续使用第二种方式。

Expand Down Expand Up @@ -336,12 +336,12 @@ describe("pow", function() {
新加的测试失败了,因为我们的实现方式是不支持它们的。这就是 BDD 的做法:我们首先写一些暂时无法通过的测试,然后去实现它们。

```smart header="Other assertions"
请注意断言语句 `assert.isNaN`:它用来检测 `NaN`。
请注意断言语句 `assert.isNaN`:它用来检查 `NaN`。

在 [Chai](http://chaijs.com) 中也有其他的断言,例如:

- `assert.equal(value1, value2)` —— 检测相等 `value1 == value2`。
- `assert.strictEqual(value1, value2)` —— 检测严格相等 `value1 === value2`。
- `assert.equal(value1, value2)` —— 检查相等 `value1 == value2`。
- `assert.strictEqual(value1, value2)` —— 检查严格相等 `value1 === value2`。
- `assert.notEqual`,`assert.notStrictEqual` —— 执行和上面相反的检查。
- `assert.isTrue(value)` —— 检查 `value === true`。
- `assert.isFalse(value)` —— 检查 `value === false`。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ importance: 4

# 原位(in place)过滤范围

写一个函数 `filterRangeInPlace(arr, a, b)`,该函数获取一个数组 `arr`,并删除其中介于 `a` 和 `b` 区间以外的所有值。检测:`a ≤ arr[i] ≤ b`。
写一个函数 `filterRangeInPlace(arr, a, b)`,该函数获取一个数组 `arr`,并删除其中介于 `a` 和 `b` 区间以外的所有值。检查:`a ≤ arr[i] ≤ b`。

该函数应该只修改数组。它不应该返回任何东西。

Expand Down
2 changes: 1 addition & 1 deletion 2-ui/1-document/03-dom-navigation/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ elem.childNodes[0] === elem.firstChild
elem.childNodes[elem.childNodes.length - 1] === elem.lastChild
```

这里还有一个特别的函数 `elem.hasChildNodes()` 用于检测节点是否有子节点
这里还有一个特别的函数 `elem.hasChildNodes()` 用于检查节点是否有子节点

### DOM 集合

Expand Down
2 changes: 1 addition & 1 deletion 2-ui/3-event-details/1-mouse-events-basics/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@

在测试台下面记录了所有的鼠标事件,如果它们之间的延迟时间超过 1 秒,那么它们会被水平分割线分开。

我们还可以看出 `which` 属性允许检测鼠标按钮
我们还可以看出 `which` 属性允许检查鼠标按钮

<input onmousedown="return logMouse(event)" onmouseup="return logMouse(event)" onclick="return logMouse(event)" oncontextmenu="return logMouse(event)" ondblclick="return logMouse(event)" value="Click me with the right or the left mouse button" type="button"> <input onclick="logClear('test')" value="Clear" type="button"> <form id="testform" name="testform"> <textarea style="font-size:12px;height:150px;width:360px;"></textarea></form>
```
Expand Down
2 changes: 1 addition & 1 deletion 2-ui/99-ui-misc/02-selection-range/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -550,7 +550,7 @@ button.onclick = () => {

我们也可以使用 `setRangeText` 在“光标处”插入一些东西。

这是一个按钮,按下后会在光标位置插入 `"HELLO"`,然后光标紧随其后。如果选择不为空,则将其替换(我们可以通过比较 `selectionStart!=selectionEnd` 来进行检测,为空则执行其他操作):
这是一个按钮,按下后会在光标位置插入 `"HELLO"`,然后光标紧随其后。如果选择不为空,则将其替换(我们可以通过比较 `selectionStart!=selectionEnd` 来进行检查,为空则执行其他操作):

```html run autorun
<input id="input" style="width:200px" value="Text Text Text Text Text">
Expand Down
4 changes: 2 additions & 2 deletions 5-network/01-fetch/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ let promise = fetch(url, [options])

获取响应通常需要经过两个阶段。

**第一阶段,当服务器发送了响应头,`promise` 就使用其内建的 [Response](https://fetch.spec.whatwg.org/#response-class) 类来解析该对象。
**第一阶段,当服务器发送了响应头,`promise` 就使用其内建的 [Response](https://fetch.spec.whatwg.org/#response-class) 类来解析该对象。**

因此,我们可以通过检测 HTTP 状态来确定请求是否成功,或者当响应体还没有返回时,通过检查响应头来确定状态。
因此,我们可以通过检查 HTTP 状态来确定请求是否成功,或者当响应体还没有返回时,通过检查响应头来确定状态。

如果 `fetch` 无法建立一个 HTTP 请求,例如网络问题,亦或是请求的网址不存在,那么 promise 就返回 reject。HTTP 错误,即使是 404 或者 500,也被视为正常的过程。

Expand Down