2012-10-07 57 views
2

我在測試時看到控制檯(Chrome)的行爲。如果我鍵入console.log({key:'value'})正在打印Object {key: "value"}這是我所期望的。但是當我在控制檯直接輸入{key:'value'}時,它僅在我期望Object {key: "value"}時打印'value'爲什麼{key:'value'}在控制檯上打印「值」

在IE10和FF中看到了相同的行爲。 這種行爲背後的原因是什麼?

回答

5

這是因爲你的對象被解釋爲一個塊語句,其中包含一個由一個標籤前面的字符串文本組成的單個語句。

// v---block----v 
    {key: "value"} 
// ^--label 

要讓控制檯將其解釋爲對象字面值語法,它需要成爲表達式的一部分。如果你裹着包袱,你會得到預期的結果。

({key:"value"}) 

旁註:

這裏是真正怪異的一部分。一個聲明是一個聲明,因爲它不返回什麼。那爲什麼它會返回"value"

在JavaScript中,語句具有類似於最終值的內容。 (我不記得它叫做什麼。)程序代碼中沒有任何有用或可達的東西,但是當一個程序被評估時,最終值將被返回給任何評估它的東西。

當您使用eval()評估程序時也是如此。其最終聲明價值將被退回。由於控制檯中的代碼是eval'd,它會獲取最終值並打印出來。

+0

我認爲你是對的,它被解釋爲JavaScript標籤。 – Anoop

+0

@Shusl:是的,這與您嘗試「返回」對象文字的問題非常相似。如果你有這樣的結果:'return {foo:「bar」};',而不是在'return'的同一行上放上'{',你在下一行放置它,解釋器放一個';'在'return'之後,因爲它將'{foo:「bar」}'視爲一個單獨的塊語句。 –

1

這是因爲你輸入的內容是被解釋的。

{key:'value'}是一個塊並返回「值」。你只能用key:'value''value'得到相同的結果。

如果您想要一個表達式返回對象,請鍵入({key:'value'})

相關問題