对象定义SyntaxError

时间:2012-10-11 21:14:40

标签: javascript

为什么第二行代码产生错误而不是第三行呢?

{ foo: 'bar' } // => 'bar'

{ "foo": 'bar' } // => SyntaxError: Invalid label

({ "foo": 'bar' }) // => { foo: 'bar' }.

1 个答案:

答案 0 :(得分:6)

语言规范的相关部分是http://es5.github.com/#x12.4

  

ExpressionStatement:[lookahead∉{{function}]表达式;

前瞻部分意味着只有当某个表达不是以{function开头时才出现在预期语句的位置,才会将其视为表达式。


{ foo: 'bar' }

是包含带有标签'bar'的表达式语句foo的语句块。标签允许您从命名循环中breakcontinue,但可以附加到任何语句,而不仅仅是循环。

{ "foo": 'bar' }

解析器开始解析它,找到表达式"foo",然后查找二进制运算符,但:不是有效的二元运算符,因此它失败并出现语法异常。

({ "foo": 'bar' })

这里括号输入表达式上下文,因此{被视为启动对象构造函数而不是块的开头。