js 流程控制
一、 条件语句
通常在写代码时,您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。
在 JavaScript 中,我们可使用以下条件语句:
if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
if...else if....else 语句- 使用该语句来选择多个代码块之一来执行
switch 语句 - 使用该语句来选择多个代码块之一来执行
1. if 语句
只有当指定条件为
true
时,该语句才会执行代码。请使用小写的 if。使用**大写字母(IF)**会生成 JavaScript 错误!
if 后面的圆括号
( )
是必须的,但大括号{}
不是必须的,除非有两条以上的语句。
语法
if (condition)
{
当条件为 true 时执行的代码
}
2. if...else 语句
使用 if....else
语句在条件为 true
时执行代码,在条件为 false
时执行其他代码。
语法
if (condition)
{
当条件为 true 时执行的代码
}
else
{
当条件不为 true 时执行的代码
}
3. if...else if....else 语句
使用 if
....else if
...else
语句来选择多个代码块之一来执行。
语法
if (condition1)
{
当条件 1 为 true 时执行的代码
}
else if (condition2)
{
当条件 2 为 true 时执行的代码
}
else
{
当条件 1 和 条件 2 都不为 true 时执行的代码
4. switch 语句
switch
语句用于基于不同的条件来执行不同的动作。
工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case
的值做比较。如果存在匹配,则与该 case
关联的代码块会被执行。请使用 break
来阻止代码自动地向下一个 case
运行。
if 语句在程序执行过程中创建一条分支,并且可以使用elseif
来处理多条分支。然而,当所有的分支都依赖于同一个表达式的值时,elseif
并不是最佳解决方案。在这种情况下,重复计算多条 if 语句中的条件表达式是非常浪费的做法。而switch
语句就提供了更好的解决方案。
语法
switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
与 case 1 和 case 2 不同时执行的代码
}
实例
显示今天的星期名称。请注意 Sunday=0
,Monday=1
, Tuesday=2
, 等等:
var d = new Date().getDay();
switch (d) {
case 0:
x = "今天是星期日";
break;
case 1:
x = "今天是星期一";
break;
case 2:
x = "今天是星期二";
break;
case 3:
x = "今天是星期三";
break;
case 4:
x = "今天是星期四";
break;
case 5:
x = "今天是星期五";
break;
case 6:
x = "今天是星期六";
break;
}
//x 的运行结果:
//今天是星期二
二、 循环语句
不同类型的循环
JavaScript 支持不同类型的循环:
for
- 循环代码块一定的次数for/in
- 循环遍历对象的属性while
- 当指定的条件为 true 时循环指定的代码块do/while
- 同样当指定的条件为 true 时循环指定的代码块
1. for 循环
语法
for(1.初始状态; 2.条件; 4.执行循环完毕后,再执行的语句 ){
3.执行循环体语句
}
实例
var sum = 0;
for (var times = 1; times <= 100; times++) {
sum = sum + times;
}
console.log(sum);
2. for/in 循环
主要用于对象的遍历,可枚举的属性
实例
var person = { fname: "John", lname: "Doe", age: 25 };
for (x in person) {
// x 为属性名
txt = txt + person[x];
}
补充 es6 中的 for..of
for..of
为 ES6 新增的方法,主要来遍历可迭代的对象(包括 Array, Map, Set, arguments 等),它主要用来获取对象的属性值,而 for..in 主要获取对象的属性名。
var colors = ["red", "green", "blue"];
colors.length = 5;
colors.push("yellow");
for (var i in colors) {
console.log(colors[i]); // red green blue yellow
}
for (var j of colors) {
console.log(j); // red green blue undefined undefined yellow
}
可以看到使用 for..of
可以输出包括数组中不存在的值
在内的所有值。
3. while 循环
注意:和 for 循环相比,while 只需要写条件即可,所以控制条件的变量也要在循环里面去修改
语法
while (条件) {}
实例
var i = 0;
while (i < 10) {
console.log(i);
i++;
}
4. do/while 循环
至少执行一次, 无论条件是否满足
语法
do {
循环;
} while (条件);
实例
var j = 10;
do {
console.log("do while", j);
j--;
} while (j > 0);
三、 break 和 continue 语句
break 语句用于跳出循环。(跳过整个循环)
continue 用于跳过循环中的一个迭代。(跳过循环中的一次)
1. break 语句
break 跳出循环后,会继续执行该循环之后的代码(如果有的话):
实例
for (i = 0; i < 10; i++) {
if (i == 3) {
break;
}
x = x + "The number is " + i + "<br>";
}
console.log("我是循环体后的代码");
2. continue 语句
continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。 该例子跳过了值 3:
实例
for (i = 0; i <= 10; i++) {
if (i == 3) continue;
x = x + "The number is " + i + "<br>";
}
四、 try/catch/finally 语句
try/catch/finally
语句用于处理代码中可能出现的错误信息。
错误可能是语法错误,通常是程序员造成的编码错误或错别字。也 可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。
try
语句允许我们定义在执行时进行错误测试的代码块。
catch
语句允许我们定义当 try
代码块发生错误时,所执行的代码块。
finally
语句在 try
和 catch
之后无论有无异常都会执行。
注意: catch
和 finally
语句都是可选的,但你在使用 try
语句时必须至少使用一个。
提示: 当错误发生时, JavaScript 会停止执行,并生成一个错误信息。使用 throw
语句 来创建自定义消息(抛出异常)。如果你将 throw
和 try
、 catch
一起使用,就可以控制程序输出的错误信息。
语法
try {
tryCode - 尝试执行代码块
}
catch(err) {
catchCode - 捕获错误的代码块
}
finally {
finallyCode - 无论 try / catch 结果如何都会执行的代码块
}
参数值
参数 | 描述 |
---|---|
tryCode | 必须。检查是否有错误的代码块。 |
err | 必须(如果使用 catch)。指定局部变量应用的错误。该变量可以引用 Error 对象 (包含发生的错误信息,如 "'addlert' 没有定义")。如果异常通过 throw 语句创建 , 该 变量引用了为在 throw 语句中指定的对象 (查看 "更多实例") |
catchCode | 可选。如果 try 语句发生错误执行的代码块。如果 try 语句没发生错误该代码不会执行。 |
finallyCode | 可选。无论 try / catch 的结果如何都会执行。 |
五、 throw 语句
定义和用法
throw 语句抛出一个错误。
当错误发生时, JavaScript
会停止执行并抛出错误信息。
描述这种情况的技术术语是:JavaScript
将抛出一个错误。
throw
语句创建自定义错误。
技术术语是: 抛出异常。
异常可以是 JavaScript
字符串
、数字
、逻辑值
或对象
:
throw "Too big"; // 抛出文本
throw 500; // 抛出数字
如果把 throw
与 try
和 catch
一起使用,那么您能够控制程序流,并生成自定义的错误消息。
实例
本例检测输入变量的值。如果值是错误的,会抛出一个异常(err)
异常 (err)
通过 catch
语句捕获并自定义输出错误信息:
<!DOCTYPE html>
<html>
<body>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text" />
<button type="button" onclick="myFunction()">Test Input</button>
<p id="message"></p>
<script>
function myFunction() {
var message, x;
message = document.getElementById("message");
message.innerHTML = "";
x = document.getElementById("demo").value;
try {
if (x == "") throw "is Empty";
if (isNaN(x)) throw "not a number";
if (x > 10) throw "too high";
if (x < 5) throw "too low";
} catch (err) {
message.innerHTML = "Input " + err;
}
}
</script>
</body>
</html>