Skip to content

Commit d6e485c

Browse files
authored
Merge pull request #445 from MartinsYong/sync-1-02-11
Update: 1-js/02-first-steps/11-logical-operators
2 parents 4e04aa1 + 8b15fe7 commit d6e485c

File tree

4 files changed

+158
-9
lines changed

4 files changed

+158
-9
lines changed
Lines changed: 101 additions & 0 deletions
Loading
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
3+
```js run demo
4+
let userName = prompt("Who's there?", '');
5+
6+
if (userName == 'Admin') {
7+
8+
let pass = prompt('Password?', '');
9+
10+
if (pass == 'TheMaster') {
11+
alert( 'Welcome!' );
12+
} else if (pass == '' || pass == null) {
13+
alert( 'Canceled' );
14+
} else {
15+
alert( 'Wrong password' );
16+
}
17+
18+
} else if (userName == '' || userName == null) {
19+
alert( 'Canceled' );
20+
} else {
21+
alert( "I don't know you" );
22+
}
23+
```
24+
25+
请注意 `if` 块中水平方向的缩进。技术上是非必需的,但会增加代码的可读性。
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
importance: 3
2+
3+
---
4+
5+
# 登陆验证
6+
7+
实现使用 `prompt` 进行登陆校验的代码。
8+
9+
如果访问者输入 `"Admin"`,那么使用 `prompt` 引导获取密码,如果输入的用户名为空或者按下了 `key:Esc` 键 —— 显示 "Canceled",如果是其他字符串 —— 显示 "I don't know you"。
10+
11+
密码的校验规则如下:
12+
13+
- 如果输入的是 "TheMaster",显示 "Welcome!",
14+
- 其他字符串 —— 显示 "Wrong password",
15+
- 空字符串或取消了输入,显示 "Canceled."。
16+
17+
流程图:
18+
19+
![](ifelse_task.svg)
20+
21+
请使用嵌套的 `if` 块。注意代码整体的可读性。
22+
23+
提示:将空字符串输入,prompt 会获取到一个空字符串 `''`。Prompt 运行过程中,按下 `key:ESC` 键会得到 `null`
24+
25+
[demo]

1-js/02-first-steps/11-logical-operators/article.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ if (1 || 0) { // 工作原理相当于 if( true || false )
3939
}
4040
```
4141

42-
大多数时间,或 `||` 会被用在 `if` 语句中,用来测试是否有**任何**给定的条件是正确的
42+
大多数时间,或 `||` 会被用在 `if` 语句中,用来测试是否有**任何**给定的条件是 `true`
4343

4444
例如:
4545

@@ -143,7 +143,7 @@ alert( undefined || null || 0 ); // 0(所有的转化结果都是 false,返
143143
alert(x); // 1
144144
```
145145

146-
赋值操作只是一个很简单的情况,其他副作用同样可以被包含进来
146+
赋值操作只是一个很简单的情况。可能有副作用,如果计算没有到达,副作用就不会发生
147147

148148
正如我们所见,这种用法是“`if` 语句的简便方式”。第一个操作数被转化为布尔值,如果是假,那么第二个参数就会被执行。
149149

@@ -231,13 +231,9 @@ alert( 1 && 2 && 3 ); // 3,最后一个值
231231
```
232232

233233
````smart header="与运算 `&&` 在或操作符 `||` 之前执行"
234-
与运算 `&&` 的优先级比或运算 `||` 要高,所以它将会比或运算先执行
234+
与运算 `&&` 的优先级比或运算 `||` 要高。
235235

236-
下面代码中的,`1 && 0` 将会首先被运算:
237-
238-
```js run
239-
alert( 5 || 1 && 0 ); // 5
240-
```
236+
所以代码 `a && b || c && d` 完全跟 `&&` 表达式加了括号一样: `(a && b) || (c && d)`
241237
````
242238

243239
就像或运算一样,与运算 `&&` 有时候能够代替 `if`
@@ -297,9 +293,11 @@ alert( !!null ); // false
297293

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

300-
这是一个更详细的方法,完成的同样的事情 -- 一个内置的 `Boolean` 函数:
296+
这是一个更详细的方法,完成的同样的事情 —— 一个内置的 `Boolean` 函数:
301297

302298
```js run
303299
alert( Boolean("non-empty string") ); // true
304300
alert( Boolean(null) ); // false
305301
```
302+
303+
非运算符 `!` 的优先级在所有逻辑运算符里面最高,所以它总是在 `&&` 或者 `||` 前执行。

0 commit comments

Comments
 (0)