重新回顾JS的笔记系列(四)
1.条件分支
- if语句
if(...)
语句计算括号里的条件表达式,如果计算结果是 true
,就会执行对应的代码块。
示例:
let year = prompt('In which year was ECMAScript-2015 specification published?', '');
if (year == 2015) alert( 'You are right!' );
- else
if
语句有时会包含一个可选的 “else” 块。如果判断条件不成立,就会执行它内部的代码。
示例:
let year = prompt('In which year was ECMAScript-2015 specification published?', '');
if (year == 2015) {
alert( 'You guessed it right!' );
} else {
alert( 'How can you be so wrong?' ); // 2015 以外的任何值
}
- else if
有时我们需要测试一个条件的几个变体。我们可以通过使用 else if
子句实现。
let year = prompt('In which year was ECMAScript-2015 specification published?', '');
if (year < 2015) {
alert( 'Too early...' );
} else if (year > 2015) {
alert( 'Too late' );
} else {
alert( 'Exactly!' );
}
- 三目运算符 ? :
let result = condition ? value1 : value2;
计算条件结果,如果结果为真,则返回 value1
,否则返回 value2
。
注意:此处还存在多个?的形式。
示例:
let age = prompt('age?', 18);
let message = (age < 3) ? 'Hi, baby!' :
(age < 18) ? 'Hello!' :
(age < 100) ? 'Greetings!' :
'What an unusual age!';
alert( message );
- 第一个问号检查
age < 3
。 - 如果为真 — 返回
'Hi, baby!'
。否则,会继续执行冒号":"
后的表达式,检查age < 18
。 - 如果为真 — 返回
'Hello!'
。否则,会继续执行下一个冒号":"
后的表达式,检查age < 100
。 - 如果为真 — 返回
'Greetings!'
。否则,会继续执行最后一个冒号":"
后面的表达式,返回'What an unusual age!'
。
2.逻辑运算符
JavaScript 中有四个逻辑运算符:||
(或),&&
(与),!
(非),??
(空值合并运算符)。
||
(或)
在传统的编程中,逻辑或仅能够操作布尔值。如果参与运算的任意一个参数为 true
,返回的结果就为 true
,否则返回 false
示例:
let hour = 12;
let isWeekend = true;
if (hour < 10 || hour > 18 || isWeekend) {
alert( 'The office is closed.' ); // 是周末
}
**注意:**JS中的特殊例子
result = value1 || value2 || value3;
或运算符 ||
做了如下的事情:
-
从左到右依次计算操作数。
-
处理每一个操作数时,都将其转化为布尔值。如果结果是
true
,就停止计算,返回这个操作数的初始值。 -
如果所有的操作数都被计算过(也就是,转换结果都是
false
),则返回最后一个操作数。
例子:
alert( 1 || 0 ); // 1(1 是真值)
alert( null || 1 ); // 1(1 是第一个真值)
alert( null || 0 || 1 ); // 1(第一个真值)
alert( undefined || null || 0 ); // 0(都是假值,返回最后一个值)
使用这个性质可以从几个数据当中挑选出真值。
&&
(与)
在传统的编程中,当两个操作数都是真值时,与运算返回 true
,否则返回 false
示例:
let hour = 12;
let minute = 30;
if (hour == 12 && minute == 30) {
alert( 'Time is 12:30' );
}
注意:类似或,与也有特殊性质。
给出多个参加与运算的值:
result = value1 && value2 && value3;
与运算 &&
做了如下的事:
-
从左到右依次计算操作数。
-
在处理每一个操作数时,都将其转化为布尔值。如果结果是
false
,就停止计算,并返回这个操作数的初始值。 -
如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数。
例如:
// 如果第一个操作数是真值,
// 与运算返回第二个操作数:
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// 如果第一个操作数是假值,
// 与运算将直接返回它。第二个操作数会被忽略
alert( null && 5 ); // null
alert( 0 && "no matter what" ); // 0
!
(非)
逻辑非运算符接受一个参数,并按如下运作:
- 将操作数转化为布尔类型:
true/false
。 - 返回相反的值。
例如:
alert( !true ); // false
alert( !0 ); // true
特殊用法:可以使用两个非运算将某个值转换为布尔类型:
alert( !!"non-empty string" ); // true
alert( !!null ); // false
3.空值合并运算符
空值合并运算符的写法为两个问号 ??
。
a ?? b
的结果是:
- 如果
a
是已定义的,则结果为a
, - 如果
a
不是已定义的,则结果为b
。
换句话说,如果第一个参数不是 null/undefined
,则 ??
返回第一个参数。否则,返回第二个参数。
例如:
let user;
alert(user ?? "匿名"); // 匿名(user 未定义)
可以看出来它的作用和或有点类似。
但是存在一定的差别:
||
返回第一个 真 值。??
返回第一个 已定义的 值。
示例:
let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
height || 100
首先会检查height
是否为一个假值,它是0
,确实是假值。
**注意:**JavaScript 禁止将 ??
运算符与 &&
和 ||
运算符一起使用
4.基础循环
- while循环
语法如下:
while (condition) {
// 代码
// 所谓的“循环体”
}
当 condition
为真时,执行循环体的 code
。
示例:
let i = 0;
while (i < 3) { // 依次显示 0、1 和 2
alert( i );
i++;
}
- do···while循环
语法:
do {
// 循环体
} while (condition);
循环首先执行循环体,然后检查条件,当条件为真时,重复执行循环体。
例如:
let i = 0;
do {
alert( i );
i++;
} while (i < 3);
- for循环
语法:
for (begin; condition; step) {
// ……循环体……
}
我们通过示例来了解一下这三个部分的含义。下述循环从 i
等于 0
到 3
(但不包括 3
)运行 alert(i)
:
for (let i = 0; i < 3; i++) { // 结果为 0、1、2
alert(i);
}
注意:
-
for循环的三个部分都是可以删去的。
-
三种循环都可以直接使用
break
指令强制退出 -
continue
指令是break
的“轻量版”。它不会停掉整个循环。而是停止当前这一次迭代
示例:
for (let i = 0; i < 10; i++) {
//如果为真,跳过循环体的剩余部分。
if (i % 2 == 0) continue;
alert(i); // 1,然后 3,5,7,9
}
- 标签
标签 是在循环之前带有冒号的标识符:
labelName: for (...) {
...
}
break <labelName>
语句跳出循环至标签处:
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`Value at coords (${i},${j})`, '');
// 如果是空字符串或被取消,则中断并跳出这两个循环。
if (!input) break outer; // (*)
// 用得到的值做些事……
}
}
alert('Done!');
上述代码中,break outer
向上寻找名为 outer
的标签并跳出当前循环。
因此,控制权直接从 (*)
转至 alert('Done!')
。
Last modified on 2023-03-04