我刚刚注意到我可以在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'符号时,有没有人知道发生了什么?
答案 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标准:“声明可能以标签为前缀。标记语句仅与标记的break
和continue
语句一起使用。“标签由标识符和冒号组成。所以a:b:c:d = "happy days";
只是一个赋值语句d = "happy days";
,前缀为三个标签,这些标签没有效果。