以下代码块已成功执行。我想知道除了用于循环之外,这种标记的用途是什么?
<script>
js:
{
alert("x");
}
</script>
以下代码块已成功执行。我想知道除了用于循环之外,这种标记的用途是什么?
<script>
js:
{
alert("x");
}
</script>
:
在 JavaScript 中有几种用途,至少我知道的是这些。
ternary operator
- used to evaluate an if
statement in a single line:
var x = "yes" == "yes" ? true : false;
The above line of code is functionally equivalent to:
if("yes" == "yes"){
var x = true;
}
else{
var x = false;
}
Mark the beginning of a code block - Move to a block of code
begin:
for(int i = 0; i < 10; i++){
break begin;
}
Object Literals - Thanks @Ian for the reminder
var someObject= {
item: 'some value',
anotherItem: 2 // Can put any type of variable here
};
This type of notation is commonly seen when using JSON
这是一个带有标签的语句。您可以使用带有 break
和 continue
语句形式的标签语句:
outer: for (var i = 0; i < 1000; ++i) {
for (var j = 0; j < 1000; j++) {
if (somethingBad())
break outer;
}
}
在内部嵌套循环中跳出到外部迭代级别是(很少)有用的。我认为在成千上万行代码中从未使用过它。在原始问题中发布的示例代码中,标签没有明显的目的。
break
和continue
一起使用?还有其他跳转可能性吗? - Stephane Rollandcontinue
一起使用。JavaScript中没有goto
。 - Pointy在 JavaScript 中它被称为 标签 [MDN]
myPrettyLabel:
{
alert('testMe');
}
提供一个带有标识符的语句,您可以使用break或continue语句引用该标识符。
例如,您可以使用标签来标识循环,然后使用break或continue语句指示程序是否应中断循环或继续执行。
与一般程序中的goto相同。
避免使用标签,因为标签在JavaScript中不常用,它们会使程序难以阅读和理解。尽可能避免使用标签,并根据情况选择调用函数或抛出错误。
goto
。 - Pointygoto
运算符或类似的东西,只是用来实现“goto”的。在你的答案中,break
和goto
一样好。 - Iangoto
的行为。 - robertklep冒号用于添加标签。正如MDN文档中所解释的那样:
为语句提供一个标识符,您可以使用break或continue语句引用该标识符。
例如,您可以使用标签来标识循环,然后使用break或continue语句指示程序是否应中断循环或继续执行。
MDN还包括一个代码示例:
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;
} else {
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"
{ js: {1}, ... }