2016-03-11 71 views

回答

35

{a:1,b:2}.constructor是不是无效的语法,但它是不明确的,因为{}表示块或对象?所以你必须用括号来表达歧义,例如({a:1,b:2}).constructor。现在JavaScript知道你打算使用一个对象。

如果你使用的情况下它显然是一个对象,语法,那么就没有歧义:

console.log({a:1,b:2}.constructor) // works fine 
13

行首的曲线被识别为code block而不是object literal

如果您查看控制台中的错误,您可以看到Uncaught SyntaxError: Unexpected token :。所以,错误不在于调用构造函数属性。

此外,当在控制台

{a:1} 

JS其解释为具有一个label和不与属性a对象的块写。

+0

什么是' line'?依赖分号的语言(特别是带有有趣规则的JS)不知道“线路”。但'; {1:2} .constructor'无效。也许你的意思是'陈述'或'表达'在'线'上? – cat

+1

@tac,yep,这里的'语句'似乎更正确 – Grundy

相关问题