我做一个图书馆,我经常检查关闭编译器的输出,看看它是如何做事情的结果(我有单元测试,但我仍希望看到编译后的代码为它如何能压缩更好的提示)。
所以,我发现这非常奇怪的一段代码,这是我从未见过的。
variable : {
some();
code()
}
注:这是不是一个对象字面! 另外,有没有?
任何地方,将使它一?:
条件 。
该代码是在常规功能块 (一个IIFE )。
variable
,在这种情况下,是未定义的变量。 有没有代码,使之真,假,或什么的 ,只是为了确保,我把console.log
在那里,事实上,我得到ReferenceError
。
请大家注意,我在IE8测试我的代码了,所以这不只是在现代浏览器。 这似乎是标准的,普通的旧的JavaScript。
因此,让我们试用一下。 发射了Chrome浏览器的控制台,我得到这样的:
undeclaredVariable:{console.log('does this get logged?')} // yes it does.
trueValue:{console.log('what about this?')} // same thing.
falseValue:{console.log('and this?')} // same thing.
但是之后...
(true):{console.log('does this work too?')} // SyntaxError: Unexpected token :
...和...
so?{console.log('is this a conditional?')}:{alert(123)} // Unexpected token .
那么它有什么作用?
thisThing:{console.log('is used to declare a variable?')}
thisThing // ReferenceError: thisThing is not defined
拜托,我很乐意,如果有人可以给我这个代码的意思做,或至少它做什么解释。
它是一个标签
提供了可以参考使用break或continue语句的标识符的声明。
例如,你可以使用标签来识别一个循环,然后使用break或continue语句用于指示程序是否应中断循环或继续执行。
你看到了另一种常见的地方是,当人们坚持美妙的和无用javascript:
在事件处理程序。
这是一个标签 (以冒号的位结束),随后的块 (由大括号包围的代码)。
块通常遵循控制语句,如if(...) { /*block*/ }
但他们也可以简单地站在自己的,因为在你的榜样。
标签允许在一个时间跳了几个圈continue
或break
; 查看链接MDN页的几个例子,如:
var itemsPassed = 0;
var i, j;
top:
for (i = 0; i < items.length; i++){
for (j = 0; j < tests.length; j++)
if (!tests[j].pass(items[i]))
continue top;
itemsPassed++;
}
在此, top:
是内循环内的代码可以跳转到,为了逃逸到外环的标签。
对于任何人的缘故谁不知道什么是JSON,并认为在什么可能实际上是一个对象一个冒号,并试图弄清楚它是什么,并认为这种讨论,冒号也用于JSON。 有一个JSON对象嵌入功能的做法。 这可能会造成混乱(由于这是给我)的人谁碰巧看到这是第一次。 (每个人都并非天生与JSON和JavaScript编程到他们的头脑中的知识。)所以,如果你在这个讨论中找到你自己,你觉得你每次看到在JavaScript中的冒号,这是一个标签,它可能不是。 这可能是因为它是一个标签后,一个冒号,也可能是JSON的一部分。 事实上,在一个JSON结肠被示为一个字符串,是很多比标签更常见。 中的对象的形式JSON,将显示为[object Object]
,与所有的内容隐藏。 所以,除非JSON是在一个字符串的形式,并且你显示对象到控制台(的console.log(对象))所有你将看到的是[object Object]
。 通常的做法是写JavaScript代码,包在一个对象。 在这种情况下,你会看到在代码的形式JSON。 这时候,你会问自己,“这是什么?什么是结肠?” 然后你会在这个讨论发现自己,并且被告知,这是一个标签,当它真的JSON的一部分。 这次讨论的话题的措辞:“请解释在JavaScript中结肠这种用法”,然后把“正确的答案”被标记为具有一个标签做。 正确的答案是,一个冒号可以在一个以上的方式使用。 所以,如果你不知道JSON是什么,或者认为你知道的(像我一样,但并没有真正理解)在这里读到它: JSON.org
这仅仅是一个label
。
您可以使用continue [label name]
(或break
)在一个循环中去的标签。
它们是什么更多的说明可以在整个interwebs可以看出。
它是用于在jsvascript.check详细标注的声明在这里 。
标记声明可以被用来break
和continue
以后。