对象字面量之外的键值对如何仍然产生值?

How does a key-value pair outside of an object literal still produce a value?

尝试输入

donald: 'duck'

甚至

{donald: 'duck'} // hint: this is considered a scope block instead of an object literal by the console

在控制台上(我测试了节点、chrome 和 IE)。

我个人得到 "duck" 作为输出...有人能解释一下为什么吗?

在对象文字之外,[identifier]: 语法定义了一个 label。基本上,标签命名程序的特定点。它们是 JavaScript 的罕见功能,但可以在嵌套 for 循环中使用 breakcontinue 时使用:

outer_loop:
for(var i = 0; i < 10; i++) {
  inner_loop:
  for(var j = 0; j < 10; j++) {
    // will break inner_loop as normal
    break;

    // will break outer_loop instead
    break outer_loop;
  }
}

但是,如果您只是为某些语句声明一个标签,但从不使用它,那么它实际上就像从未存在过一样有效。因此声明

donald: 'duck'

将与

相同
'duck'

因为从未使用过标签功能。