label statement

标记语句可以和 break 或 continue 语句一起使用。标记就是在一条语句前面加个可以引用的标识符。

标记的循环或块非常罕见。通常可以使用函数调用而不是循环跳转。

语法Edit

label :
   statement
label
任何不是保留关键字的 JavaScript 标识符。
statement
语句。 break 可用于任何标记语句,而  continue 可用于循环标记语句。

描述Edit

可使用一个标签来唯一标记一个循环,然后使用 break 或 continue 语句来指示程序是否中断循环或继续执行。

需要注意的是 JavaScript 没有 goto 语句,标记只能和 break 或 continue 一起使用。

严格模式中,你不能使用“let”作为标签名称。它会抛出一个SyntaxError(let是一个保留的标识符)。

示例Edit

for 循环中使用带标记 continue

var i, j;

loop1:
for (i = 0; i < 3; i++) {      //The first for statement is labeled "loop1"
   loop2:
   for (j = 0; j < 3; j++) {   //The second for statement is labeled "loop2"
      if (i == 1 && j == 1) {
         continue loop1;
      }
      console.log("i = " + i + ", j = " + j);
   }
}

// Output is:
//   "i = 0, j = 0"
//   "i = 0, j = 1"
//   "i = 0, j = 2"
//   "i = 1, j = 0"
//   "i = 2, j = 0"
//   "i = 2, j = 1"
//   "i = 2, j = 2"
// Notice how it skips both "i = 1, j = 1" and "i = 1, j = 2"

使用带标记 continue 语句

给定一组数据和一组测试,下面的例子统计通过测试的数据。

var itemsPassed = 0;
var i, j;

top:
for (i = 0; i < items.length; i++){
  for (j = 0; j < tests.length; j++){
    if (!tests[j].pass(items[i])){
      continue top;
    }
  }

  itemsPassed++;
}

for 循环中使用带标记的break

var i, j;

loop1:
for (i = 0; i < 3; i++) {      //The first for statement is labeled "loop1"
   loop2:
   for (j = 0; j < 3; j++) {   //The second for statement is labeled "loop2"
      if (i == 1 && j == 1) {
         break loop1;
      }
      console.log("i = " + i + ", j = " + j);
   }
}

// Output is:
//   "i = 0, j = 0"
//   "i = 0, j = 1"
//   "i = 0, j = 2"
//   "i = 1, j = 0"
// Notice the difference with the previous continue example

使用带标记 break 语句

给定一组数据和一组测试,下面的例子判断是否所有的数据均通过了测试。

var allPass = true;
var i, j;

top:
for (i = 0; items.length; i++)
  for (j = 0; j < tests.length; i++)
    if (!tests[j].pass(items[i])){
      allPass = false;
      break top;
    }

在标记块中使用 break

你可以在块中使用记,但只有break语句可以使用非循环标记。

foo: {
  console.log('face');
  break foo;
  console.log('this will not be executed');
}
console.log('swap');

// this will log:

// "face"
// "swap

标记函数声明

从ECMAScript 2015开始,标准的函数声明现在对规范的Web兼容性附件中的非严格代码进行了标准化。

L: function F() {}

严格模式中,这会抛出 SyntaxError

'use strict';
L: function F() {}
// SyntaxError: functions cannot be labelled

生成器函数既不能在严格模式中标记,也不能在非严格模式中标记:

L: function* F() {}
// SyntaxError: generator functions cannot be labelled

规范Edit

Specification Status Comment
ECMAScript 3rd Edition (ECMA-262)StandardInitial definition. Implemented in JavaScript 1.2
ECMAScript 5.1 (ECMA-262)
Labelled statement
Standard 
ECMAScript 2015 (6th Edition, ECMA-262)
Labelled statement
Standard 
ECMAScript Latest Draft (ECMA-262)
Labelled statement
Living Standard 

浏览器兼容Edit

Feature Chrome Edge Firefox Internet Explorer Opera Safari
Basic Support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值