首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

label

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

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

语法

代码语言:javascript
复制
label :
   statement

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

描述

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

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

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

示例

for 循环中使用带标记 continue

代码语言:javascript
复制
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?语句

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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?语句

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

代码语言:javascript
复制
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语句可以使用非循环标记。

代码语言:javascript
复制
foo: {
  console.log('face');
  break foo;
  console.log('this will not be executed');
}
console.log('swap');

// this will log:

// "face"
// "swap 

标记函数声明

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

代码语言:javascript
复制
L: function F() {}

严格模式中,这会抛出SyntaxError

代码语言:javascript
复制
'use strict';
L: function F() {}
// SyntaxError: functions cannot be labelled

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

代码语言:javascript
复制
L: function* F() {}
// SyntaxError: generator functions cannot be labelled

规范

Specification

Status

Comment

ECMAScript 3rd Edition (ECMA-262)

Standard

Initial definition. Implemented in JavaScript 1.2

ECMAScript 5.1 (ECMA-262)The definition of 'Labelled statement' in that specification.

Standard

?

ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Labelled statement' in that specification.

Standard

?

ECMAScript Latest Draft (ECMA-262)The definition of 'Labelled statement' in that specification.

Draft

?

浏览器兼容性

Feature

Chrome

Edge

Firefox (Gecko)

Internet Explorer

Opera

Safari

Basic support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

Feature

Android

Chrome for Android

Edge

Firefox Mobile (Gecko)

IE Mobile

Opera Mobile

Safari Mobile

Basic support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com