在javascript变量名中使用冒号(例如a:b:c)

时间:2012-01-09 00:57:28

标签: javascript

我刚刚注意到我可以在javascript中执行以下操作...

a:b:c:d = "happy days";
a:b:c = function(text){alert(text);};

但我不能......

var a:b:c:d = "happy days"; 
// or
var myObj = {prop:a:b:c:d};

我并不期望这种语法在任何情况下都能正常工作。当我成功使用'a:b = x'符号时,有没有人知道发生了什么?

2 个答案:

答案 0 :(得分:14)

ECMAscript中的冒号有三个原因

  • 将对象键与其值分开
  • 内联条件语句
  • 标记
你发现了后者。你基本上做的是创建一个名为a的标签,然后是b,然后是c,最后你要为全局变量d分配一个值。所以

之后
a:b:c:d = "happy days";

console.log(a); // reference error
console.log(d); // "happy days";

最常见的用法是在switch语句中,我们这样做

switch( foo ) {
    case 0: break;
    case 1: break;
    // etc
}

但您也可以使用continue语句直接“定位”标签。这与许多其他语言中的goto非常接近,看起来像

foobar:
for(var i = 0; i < 10; i++) {
    for(var j = 0; j < 10; j++) {
        if( j === 2 )
            continue foobar;
    }
}

答案 1 :(得分:4)

引用ECMAScript标准:“声明可能以标签为前缀。标记语句仅与标记的breakcontinue语句一起使用。“标签由标识符和冒号组成。所以a:b:c:d = "happy days";只是一个赋值语句d = "happy days";,前缀为三个标签,这些标签没有效果。