Menu Close

JavaScript continue 语句和break语句的标签

? 右侧不能使用 break、continue语句

请注意,不能在三元运算符 ? 中使用不是表达式的语法结构。特别是,像 breakcontinue 这样的指令是不被允许的。

例如,假设我们有以下代码:

if (i > 5) {
  alert(i);
} else {
  continue;
}

如果使用问号(即三元运算符)重写它:

(i > 5) ? alert(i) : continue; // continue isn't allowed here

它将无法运行:会出现语法错误。

这也是不要用问号运算符 ? 替代 if 的另一个原因。

break/continue 的标签

有时我们需要一次性跳出多个嵌套的循环。

例如,在下面的代码中,我们在 ij 上循环,依次提示输入从 (0,0) 到 (2,2) 的坐标:

for (let i = 0; i < 3; i++) {

  for (let j = 0; j < 3; j++) {

    let input = prompt(`Value at coords (${i},${j})`, '');

    // what if we want to exit from here to Done (below)?
  }
}

alert('Done!');

我们需要一种方法在用户取消输入时停止整个流程。

普通的 break 只能跳出内层循环,这是不够的 —— 这时标签就派上用场了!

标签是加在循环前的一个标识符,后面带一个冒号:

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 an empty string or canceled, then break out of both loops
    if (!input) break outer; // (*)

    // do something with the value...
  }
}

alert('Done!');

在上面的代码中,break outer 会向上查找名为 outer 的标签,并跳出该循环。

因此,控制流会直接从 (*) 跳转到 alert('Done!')

我们也可以将标签放到单独的一行:

outer:
for (let i = 0; i < 3; i++) { ... }

continue 指令也可以与标签一起使用。在这种情况下,代码执行会跳转到标记循环的下一次迭代

标签不允许“跳转”到程序的任何地方

标签不允许我们跳转到代码中的任意位置。

例如,下面的代码是无法实现的:

break label; // jump to the label below (doesn't work)

label: for (...)

break 指令必须位于代码块内部。从技术上讲,任何带标签的代码块都可以,例如:

label: {
  // ...
  break label; // works
  // ...
}

……不过,99.9% 的情况下,break 都是在循环内部使用的,正如我们在上面的例子中所看到的。

continue 只可能在循环内部使用。

 

READ  Hello, World! - 你的第一个javascript脚本
除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in JavaScript 基础

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!