Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript变量名中使用冒号(例如a:b:c)_Javascript - Fatal编程技术网

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

在javascript变量名中使用冒号(例如a:b:c),javascript,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”符号时,有人知道发生了什么吗?ECMAscript中的冒号有三个原因 将对象关键帧与其值分离 内联条件语句

我刚刚注意到我可以在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”符号时,有人知道发生了什么吗?

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
语句直接“瞄准”标签。在许多其他语言中,这与转到非常接近,看起来像

foobar:
for(var i = 0; i < 10; i++) {
    for(var j = 0; j < 10; j++) {
        if( j === 2 )
            continue foobar;
    }
}
foobar:
对于(变量i=0;i<10;i++){
对于(var j=0;j<10;j++){
如果(j==2)
继续foobar;
}
}

引用ECMAScript标准:“语句的前缀可以是一个标签。带标签的语句只能与带标签的
break
continue
语句一起使用。”标签由标识符和冒号组成。所以
a:b:c:d=“快乐的日子”
只是一个分配语句
d=“快乐的日子”以三个标签作为前缀,这三个标签本身没有任何效果。

就是说,这很奇怪。您甚至可以重新读取值,这是我真的没有想到的。
a:b:c:d=“快乐时光”
的“快乐日子”分配给
d
。不要使用
a:b:c:d
。初始化
a:b:c:d
后,键入
a:bbbb:cccccc:garble:d
旁注:这是完全合法的:
窗口[“a:b:c:d”]=“快乐日子”@lwburk-谢谢你。你的评论是我找到解决这个问题的方法所需要的推动力。见下文。我同意这些是标签,但我认为“case x:”是冒号的另一种用法,因为标签似乎严格用作break和continue语句的参考点,而不是switch语句。另外,如果你想完整,冒号也可以用在内联开关语句中(a?b:c;)。@skier88:是的,你说得对,忘了内联条件。对于
开关/case
,我一直认为case几乎被视为一个标签,但我将对此进行研究。