2014-10-09 71 views
2

语法错误我在Chrome控制台发挥各地,并想知道为什么这个语句抛出一个语法错误:{} .hasOwnProperty('id');返回控制台

{}.hasOwnProperty('id'); 

我的期望是回归价值false
在Firefox和IE中也会出现语法错误。
如果我使用空数组而不是空对象,则可以使用相同的方法。
同样也适用,如果我把牙套周围:

({}.hasOwnProperty('id')); 
+0

仅供参考:'({})。hasOwnProperty('id');'也适用。 – Cerbrus 2014-10-09 11:55:41

+6

没有包围圆括号(或应用操作符)的'{}'被解析为语句块,而不是对象字面量。 – 2014-10-09 11:56:48

+2

在这种情况下,'{}'将被解释为块语句而不是对象字面量。 – BYossarian 2014-10-09 11:57:09

回答

3

问题片段中存在语法歧义。在JavaScript大括号具有两个含义:它们被用于分隔码块,例如:

if (x) { 
    ... 
} 

并且它们被用于声明对象常量:

var obj = { 
    prop: "value" 
} 

Constext用于在两者之间进行区分解释,并在以下情况:

{}.hasOwnProperty('id'); 

花括号被解析为阻止声明,所以这会产生语法错误。在另一方面:

({}.hasOwnProperty('id')); 

人们不能在括号内声明块,所以{}被识别为对象在此上下文中文字。

+0

这是一个完整的答案恕我直言。 – enguerranws 2014-10-09 12:04:37

0

{}被视为一个语句块而不是一个对象,因为你期望。因此错误。

编辑:作为@Cerbrus在评论中提到,({})。hasOwnProperty('id');将返回false而不是错误。这是因为当用括号括起来时,它被解释为对象。