为什么我不能直接访问对象文字的属性?

时间:2016-03-11 15:49:43

标签: javascript

为什么使用以下语法

{a:1,b:2}.constructor

无效,而

[1,2].constructor 

有效吗?

2 个答案:

答案 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的对象。