以下冒号在javascript中有什么用途?

6

以下代码块已成功执行。我想知道除了用于循环之外,这种标记的用途是什么?

<script>

js:
{
   alert("x");  
}

</script>

8
那是一个冒号 :P - Lews Therin
3
这是实际的完整代码吗? - Ja͢ck
4
hth http://james.padolsey.com/javascript/labelled-blocks-useful/ - Fatmuemoo
5个回答

6
< p > : 在 JavaScript 中有几种用途,至少我知道的是这些。

  1. 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;
    }
    
  2. Mark the beginning of a code block - Move to a block of code

    begin:
    for(int i = 0; i < 10; i++){
        break begin;
    }
    
  3. 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


1
对象字面量呢? :) - Ian
1
@Ian 我怎么会忘记了,现在更新。 - What have you tried

3

这是一个带有标签的语句。您可以使用带有 breakcontinue 语句形式的标签语句:

outer: for (var i = 0; i < 1000; ++i) {
  for (var j = 0; j < 1000; j++) {
    if (somethingBad())
      break outer;
  }
}

在内部嵌套循环中跳出到外部迭代级别是(很少)有用的。我认为在成千上万行代码中从未使用过它。在原始问题中发布的示例代码中,标签没有明显的目的。


1
它是否总是与breakcontinue一起使用?还有其他跳转可能性吗? - Stephane Rolland
@StephaneRolland 它也可以与continue一起使用。JavaScript中没有goto - Pointy

3

在 JavaScript 中它被称为 标签 [MDN]

myPrettyLabel:
{
   alert('testMe');
}

提供一个带有标识符的语句,您可以使用break或continue语句引用该标识符。

例如,您可以使用标签来标识循环,然后使用break或continue语句指示程序是否应中断循环或继续执行。

与一般程序中的goto相同。


请注意

避免使用标签,因为标签在JavaScript中不常用,它们会使程序难以阅读和理解。尽可能避免使用标签,并根据情况选择调用函数或抛出错误。


参考:SO - JavaScript中的冒号(:)代表什么?

你如何从代码中的任何位置跳转到这个 myPrettyLabel 标签? - Kuzey
这里提供了各种示例,位于Mozilla开发者网络中[此处](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/label),我已在我的答案中提到。顺便说一句,请不要误解,但即使您已经接受了答案,您也应该重新考虑所有答案...因为我认为被接受的答案从开发者的角度来看帮助不大。祝愉快! - Harsh Baid

2
这是如何标记标签的方法,这是一种非常糟糕的做法,它使得实现旧的“goto”成为可能,这意味着可以在顺序执行代码时进行简单的跳转。

JavaScript 中没有 goto - Pointy
2
@Pointy他们没有说有一个goto运算符或类似的东西,只是用来实现“goto”的。在你的答案中,breakgoto一样好。 - Ian
1
使用标签从嵌套循环中跳出,在我看来,是一个相当合理的类似于goto的行为。 - robertklep
3
“goto”命令可以无限制地跳转到任何地方。而使用“break”和“continue”时会有隐含的限制条件。 - Pointy
没有什么特别的。只是偶然遇到了创建标签的内容,我想知道如果我们能够创建它们,那么我们如何跳转到这些标签。虽然我理解在循环中使用它们。 - Kuzey
显示剩余3条评论

-1

冒号用于添加标签。正如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}, ... }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接