请解释在JavaScript中结肠这种用法(Please explain this usage of

2019-07-05 05:33发布

我做一个图书馆,我经常检查关闭编译器的输出,看看它是如何做事情的结果(我有单元测试,但我仍希望看到编译后的代码为它如何能压缩更好的提示)。

所以,我发现这非常奇怪的一段代码,这是我从未见过的。

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

拜托,我很乐意,如果有人可以给我这个代码的意思做,或至少它做什么解释。

Answer 1:

它是一个标签

提供了可以参考使用break或continue语句的标识符的声明。

例如,你可以使用标签来识别一个循环,然后使用break或continue语句用于指示程序是否应中断循环或继续执行。

你看到了另一种常见的地方是,当人们坚持美妙的和无用javascript:在事件处理程序。



Answer 2:

这是一个标签 (以冒号的位结束),随后的 (由大括号包围的代码)。

通常遵循控制语句,如if(...) { /*block*/ }但他们也可以简单地站在自己的,因为在你的榜样。

标签允许在一个时间跳了几个圈continuebreak ; 查看链接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:是内循环内的代码可以跳转到,为了逃逸到外环的标签。



Answer 3:

对于任何人的缘故谁不知道什么是JSON,并认为在什么可能实际上是一个对象一个冒号,并试图弄清楚它是什么,并认为这种讨论,冒号也用于JSON。 有一个JSON对象嵌入功能的做法。 这可能会造成混乱(由于这是给我)的人谁碰巧看到这是第一次。 (每个人都并非天生与JSON和JavaScript编程到他们的头脑中的知识。)所以,如果你在这个讨论中找到你自己,你觉得你每次看到在JavaScript中的冒号,这是一个标签,它可能不是。 这可能是因为它是一个标签后,一个冒号,也可能是JSON的一部分。 事实上,在一个JSON结肠被示为一个字符串,是很多比标签更常见。 中的对象的形式JSON,将显示为[object Object] ,与所有的内容隐藏。 所以,除非JSON是在一个字符串的形式,并且你显示对象到控制台(的console.log(对象))所有你将看到的是[object Object] 。 通常的做法是写JavaScript代码,包在一个对象。 在这种情况下,你会看到在代码的形式JSON。 这时候,你会问自己,“这是什么?什么是结肠?” 然后你会在这个讨论发现自己,并且被告知,这是一个标签,当它真的JSON的一部分。 这次讨论的话题的措辞:“请解释在JavaScript中结肠这种用法”,然后把“正确的答案”被标记为具有一个标签做。 正确的答案是,一个冒号可以在一个以上的方式使用。 所以,如果你不知道JSON是什么,或者认为你知道的(像我一样,但并没有真正理解)在这里读到它: JSON.org



Answer 4:

这仅仅是一个label

您可以使用continue [label name] (或break )在一个循环中去的标签。

它们是什么更多的说明可以在整个interwebs可以看出。



Answer 5:

它是用于在jsvascript.check详细标注的声明在这里 。

标记声明可以被用来breakcontinue以后。



文章来源: Please explain this usage of a colon in javascript