为什么使用以下语法
{a:1,b:2}.constructor
无效,而
[1,2].constructor
有效吗?
答案 0 :(得分:35)
{a:1,b:2}.constructor
语法不是无效,但它不明确,因为{}
表示一个块或一个对象?所以你必须用括号消除表达式的歧义,比如({a:1,b:2}).constructor
。现在JavaScript知道你打算使用一个对象。
如果您在明确是对象的上下文中使用该语法,则没有歧义:
console.log({a:1,b:2}.constructor) // works fine
答案 1 :(得分:13)
一行开头的曲线括号被识别为code block而不是object literal。
如果您在控制台中查看错误,可以看到Uncaught SyntaxError: Unexpected token :
。因此,错误不在于调用构造函数属性。
另外,当你在控制台中写字时
{a:1}
JS将此解释为具有label的块,而不是具有属性a
的对象。