我在測試時看到控制檯(Chrome)的行爲。如果我鍵入console.log({key:'value'})
正在打印Object {key: "value"}
這是我所期望的。但是當我在控制檯直接輸入{key:'value'}
時,它僅在我期望Object {key: "value"}
時打印'value'
。爲什麼{key:'value'}在控制檯上打印「值」
在IE10和FF中看到了相同的行爲。 這種行爲背後的原因是什麼?
我在測試時看到控制檯(Chrome)的行爲。如果我鍵入console.log({key:'value'})
正在打印Object {key: "value"}
這是我所期望的。但是當我在控制檯直接輸入{key:'value'}
時,它僅在我期望Object {key: "value"}
時打印'value'
。爲什麼{key:'value'}在控制檯上打印「值」
在IE10和FF中看到了相同的行爲。 這種行爲背後的原因是什麼?
這是因爲你的對象被解釋爲一個塊語句,其中包含一個由一個標籤前面的字符串文本組成的單個語句。
// v---block----v
{key: "value"}
// ^--label
要讓控制檯將其解釋爲對象字面值語法,它需要成爲表達式的一部分。如果你裹着包袱,你會得到預期的結果。
({key:"value"})
旁註:
這裏是真正怪異的一部分。一個聲明是一個聲明,因爲它不返回什麼。那爲什麼它會返回"value"
?
在JavaScript中,語句具有類似於最終值的內容。 (我不記得它叫做什麼。)程序代碼中沒有任何有用或可達的東西,但是當一個程序被評估時,最終值將被返回給任何評估它的東西。
當您使用eval()
評估程序時也是如此。其最終聲明價值將被退回。由於控制檯中的代碼是eval
'd,它會獲取最終值並打印出來。
這是因爲你輸入的內容是被解釋的。
{key:'value'}
是一個塊並返回「值」。你只能用key:'value'
或'value'
得到相同的結果。
如果您想要一個表達式返回對象,請鍵入({key:'value'})
。
我認爲你是對的,它被解釋爲JavaScript標籤。 – Anoop
@Shusl:是的,這與您嘗試「返回」對象文字的問題非常相似。如果你有這樣的結果:'return {foo:「bar」};',而不是在'return'的同一行上放上'{',你在下一行放置它,解釋器放一個';'在'return'之後,因爲它將'{foo:「bar」}'視爲一個單獨的塊語句。 –