为什么不使用对象外的属性定义语法语法错误?

时间:2015-01-07 04:44:49

标签: javascript object syntax-error

我在David Shariff's JavaScript quiz上看到了这段代码,并且感到惊讶的是它没有语法错误:

var bar = 1,
    foo = {};

foo: {
    bar: 2;
    baz: ++bar;
};
foo.baz + foo.bar + bar;

如何在这样的任何对象之外使用name: value语法?

2 个答案:

答案 0 :(得分:2)

这不是name: value;这是label: statement。点击MDN了解更多信息。此代码等同于:

var bar = 1,
    foo = {};

{
  2;
  ++bar;
};

foo.baz + foo.bar + bar;

答案 1 :(得分:1)

在这种情况下,foo:label。它在这种情况下不是很有用,因为没有任何附近的循环,但它是有效的语法。

请注意,foo:标签未以任何方式与foo变量相关联。直接在标签后面的结构只是一个块,奇怪地包含另外两个标签:bar:baz:,后面跟着两个同样简单的语句。

因此,foo对象仍为空,并且您的最后一行不会按预期方式运行。最后一行的结果,也就是测验问题的答案,是

  

NaN