语句
条件分支
可以使用 if
、else
、else if
语句或条件运算符 ?
(三元运算符)来实现:
let year = prompt('输入年份', '');
if (year < 2019) {
// ...
} else if (year >= 2019 && year <= 2025) {
// ...
} else {
// ...
}
let age = prompt('输入年龄', '');
let isAdult = age >= 18 ? true : false;
循环
基础循环:while
、do..while
、和 for
while
let i = 3;
while (i < 0) {
console.log(i);
i--;
}
// 只有一条语句可以省略大括号
// while (i) console.log(i--);
do..while
一般很少使用,除非希望不管条件是否为真,循环体至少执行一次
let i = 0;
do {
conosle.log(i);
i++;
} while (i < 3)
for
for 循环的任何语句段都可以被省略:
let i = 0;
// i 已经声明并被赋值
for(; i < 3; i++) {
console.log(i);
}
// 相当于 while(i < 3)
for(; i < 3;) {
console.log(i++);
}
// 无限循环
for(;;) {}
跳出循环
使用 break
指令强制退出循环
let sum = 0;
while (true) {
let value = +prompt("Enter a number", '');
if (!value) break;
sum += value;
}
继续下一次迭代
使用 continue
停止当前这一次迭代,并强制启动新一轮循环
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) continue;
console.log(i); // 1,3,5,7,9
}
不建议
?
代替if
的一个原因是,非表达式的语法结构(如:break/continue
指令)不能与三元运算符 ? 一起使用
if (i > 0) { console.log(i); } else { continue; } // 报错 (i > 0) ? console.log(i) : continue;
break/continue 标签
有时候需要一次从多层嵌套循环中跳出来:
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`Value at coords (${i},${j})`, '');
// 这里如果用户输入为空或者点取消,想直接跳出这两个循环输出 done
}
}
console('Done');
普通的 break
只会打破内层循环,而标签可以直接跳出循环至标签处
标签是在循环之前带有冒号的标识符:
labelName: for(...) {
...
}
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;
}
}
console.log('done');
标签也可以单独一行:
outer:
for (let i = 0; i < 3; i++) {}
switch
用于代替多个 if
判断
switch(x) {
case 1: // if (x === 1)
console.log(1);
case 2: // if (x === 2)
console.log(2);
break;
case 3: // 没有 break 程序将继续往下执行
case 4:
conosle.log(34); // if (x === 1 || x === 2)
break;
default:
console.log(0);
break;
}