JavaScript中冒号的用途

6
  1. 分配对象字面属性 var foo = { bar : 'hello'};
  2. 三元运算符 var cats = happy ? "yes" : "no";
  3. 标记语句 outer_loop: for(i=0; i<3; i++)
  4. 还有什么?

我正在查看一个SharePoint 2010文件,但我一直遇到这种语法。

someFunction: ;

例如,在一个文件中,以下函数在顶部附近声明:
function ULSqvN() {
    var o = new Object;
    o.ULSTeamName = "SharePoint Portal Server";
    o.ULSFileName = "SocialData.js";
    return o;
}

然后,在文档的后面,我们找到了以下内容。
PageUrlNormalizer = function () {
    ULSqvN: ; //<---------------- This guy here --------------------------
    try {
        this._url = _normalizedPageUrlForSocialItem
    } catch (a) {
        this._url = ""
    }
};

这是做什么的?
在这个文件中,ULSqvN: ; 出现了47次。完整文件可以在jsFiddle找到。
编辑:添加了完整代码。
PS:共识似乎是冒号在sharepoint中的使用是“不是实际的javascript,可能被用作某些外部目的的标记”。浏览器将其视为残留标签,因此不会导致错误。感谢所有回复,我已经将实际用途放在顶部,以使问题包含适当的答案。关于相同代码的问题

你的 jsFiddle 链接只是指向了 jsfiddle.com。 - ThinkingStiff
你自己指出了:这是一个标签。它很可能是由混淆器自动生成的(但我没有“为什么”的理由)。而且,像往常一样,可怕的 MS JS 正在展示它丑陋的头部……你有没有看过 Communicator 的东西? :) - user166390
像这样定义的标签是无法使用的。在分号后它将变成undefined: http://jsfiddle.net/ThinkingStiff/3F7UY/. 我能想到的唯一其他用途是跟踪或调试工具,或者可能是单元测试。也许编码人员将它们用作注释?! - ThinkingStiff
@Sinetheta 一个理智的程序员会使用"ULSqvN"吗?SP的东西有很多混淆(甚至在某些地方有更加神秘的名称),所以很可能正在应用处理工具。 - user166390
@ThinkingStiff 哈哈,谢谢。虽然那会很有趣,但这不是我在Sharepoint中发现的最悲惨的事情。 - Sinetheta
4个回答

8
它在 JavaScript 方面没有任何目的(因为在 JavaScript 中,您只会标记可以 继续或中断 的内容),它可能被用作某种注释或标记对于某些解析脚本。最糟糕的情况是只是没有任何目的的死代码。
编辑:看起来 SharePoint 将其用于某些诊断信息:此 JavaScript 代码是做什么的?

除非有人能够找到这段代码的用途,否则您将获得勾选标记。 - Sinetheta
@Sinetheta 我已经澄清了“用于某些解析脚本的标记”部分:D 但对于JavaScript本身完全是死代码的观点仍然成立。 - Esailija
感谢您找到那个问题,“这段Javascript代码是做什么的?”不是我寻找答案时的第一个搜索结果 ;) - Sinetheta

3

这些是标签。通常它们用于一次性跳出多个嵌套循环。

例子

function foo ()
{
    dance:
    for(var k = 0; k < 4; k++){
        for(var m = 0; m < 4; m++){
            if(m == 2){
                break dance;
            }
        }
    }
}

来源:这个回答


抱歉,我应该包含更多的代码。标签不应该紧接着一个循环吗?我的标签孤零零地挂在那里,紧跟着一个分号。 - Sinetheta
@Sinetheta:是啊,这没什么意义。也许这只是被遗弃的代码? :) - Sergio Tulentsev
如果 dance: 后面加上分号,那么这个函数不也会以同样的方式运行吗?也许 OP 代码的编写者并不知道更好的做法。 - ThinkingStiff
@ThinkingStiff 由于这是来自SharePoint 2010的源文件,我真的希望它是有效的有用的JS。 - Sinetheta
@Sinetheta 哇,我错了。它实际上是有问题的:http://jsfiddle.net/ThinkingStiff/3F7UY/。 Uncaught SyntaxError: Undefined label 'dance'。 分号后面不能再使用标签dance - ThinkingStiff

2

这是一个空标签,然后是一个空语句。(我看不出有什么好的理由 - 除非在该函数中后面还有未包含在此处的内容需要使用该标签来跳出循环。)


标签名称恰好是函数名称吗? - Sinetheta
@Sinetheta - 是的。这对我来说毫无意义。脚本无论是否有标签,执行起来都是一样的。 - ziesemer
谢谢您的回复,听起来那似乎是共识。 - Sinetheta

1
第三种用法是为了将语句标记,以便与 breakcontinue 语句一起使用。请参见 spec.

谢谢,忘记包括那个了。我仍在努力弄清楚这个文件中发生了什么。它直接来自Sharepoint 2010,所以我认为它肯定有用途。 - Sinetheta

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