label statement

来源:互联网 发布:星际争霸2和lol知乎 编辑:程序博客网 时间:2024/06/08 19:48

标记语句可以和 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

SpecificationStatusCommentECMAScript 3rd Edition (ECMA-262)StandardInitial definition. Implemented in JavaScript 1.2ECMAScript 5.1 (ECMA-262)
Labelled statementStandard ECMAScript 2015 (6th Edition, ECMA-262)
Labelled statementStandard ECMAScript Latest Draft (ECMA-262)
Labelled statementLiving Standard 

浏览器兼容Edit

  • Desktop 
  • Mobile
FeatureChromeEdgeFirefoxInternet ExplorerOperaSafariBasic Support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)
阅读全文
0 0
原创粉丝点击