2014-02-07 48 views
3

在Chrome的devtools鍵入這個:{num:1}.num給出了一個語法錯誤:大括號語法錯誤?:{NUM:1}後的JavaScript點.num

SyntaxError: Unexpected token . 

...但輸入這個返回1:

(function() { 
    return {num:1}.num; 
})(); 

爲什麼我在第一個示例中遇到語法錯誤,但不是第二個?

+1

'({num:1} .num)'在Chrome開發工具中可以使用 –

回答

5

由於在這種情況下大括號是不明確的,並且被解釋爲block statement,而不是對象字面量。喜歡的東西

{ 
    num: 1 
} 
.num 

num:被解釋爲label

您可以使用分組運算符迫使結構被解釋爲表達:

({num: 1}).num 

在第二種情況下,括號只能是對象文本,因爲return語句只能包含一個表達式(不是語句)

+0

我知道我可以在對象周圍包圍括號以確保正確解析,但爲什麼第二個示例沒有拋出像第一個錯誤? –

+0

'a = {num:1} .num;'在Chrome開發工具控制檯中可以使用 –

+0

謝謝,intersting。儘可能接受。 –