2014-10-09 90 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而不是錯誤。這是因爲當用括號括起來時,它被解釋爲對象。