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 支持不同类型的循环:

  1. for - 循环代码块一定的次数

  2. for/in - 循环遍历对象的属性

  3. while - 当指定的条件为 true 时循环指定的代码块

  4. 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 语句在 trycatch 之后无论有无异常都会执行。

注意catchfinally 语句都是可选的,但你在使用 try 语句时必须至少使用一个。

提示: 当错误发生时, JavaScript 会停止执行,并生成一个错误信息。使用 throw 语句 来创建自定义消息(抛出异常)。如果你将 throwtrycatch一起使用,就可以控制程序输出的错误信息。

语法

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; // 抛出数字

如果把 throwtrycatch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。

实例
本例检测输入变量的值。如果值是错误的,会抛出一个异常(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>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 226,679评论 6 526
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,610评论 3 411
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 174,336评论 0 372
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,146评论 1 306
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,001评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,522评论 1 318
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,633评论 3 433
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,777评论 0 283
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,291评论 1 329
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,272评论 3 352
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,410评论 1 363
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,977评论 5 354
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,671评论 3 342
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,086评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,299评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,991评论 3 385
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,397评论 2 369

推荐阅读更多精彩内容

  • 一. innerHTML 获取标签内部的所有内容,可以获取出标签里面的标签 二. innerText 获取标签里面...
    熊熊熊熊丽阅读 140评论 0 0
  • 流程控制 在一个程序执行过程中,代码顺序对程序结果是有影响的,所以需要控制代码的执行顺序 顺序结构 分支结构(if...
    llll__llll阅读 274评论 0 1
  • 条件判断语句 if...else... if语句中,指定的条件为真,会指定if后面的语句;如果条件为假,则执行另一...
    记录经历阅读 56评论 0 0
  • 流程控制 在一个程序的执行过程中,各条代码的执行顺序对程序的结果是由直接影响的,很多时候我们要通过控制代码的执行顺...
    佛系那莫觅阅读 96评论 0 2
  • 2 - 流程控制 2.1 流程控制概念 2.2 顺序流程控制 ​ 顺序结构是程序中最简单、最基本的流程控制,它...
    王玉伟的伟阅读 375评论 0 0