2017-08-17 73 views
0

我亂搞JavaScript控制檯,並注意到爲什麼JavaScript中的語句會忽略對象字面值?

>> {}[1] 
[1] 

評估作爲數組。經過一些更多的搞亂我發現

>> b = {}[1] 
undefined 

給我的未定義的預期結果。起初我以爲花括號中被解釋爲一個塊,但試圖

>> {a:1}[1] 
[1] 

仍然給了我的[1]陣列。我希望如果它被解釋爲一個塊,它會導致語法錯誤。爲什麼會這樣?

更多信息:我從Don't understand why you should not use an object literal at the beginning of a statement發現,這可能是一個塊,但是這並沒有回答如何,這是不是一個語法錯誤,除非它是做一個超前,以確定它是否是一個對象字面或塊,但它不是對象文字,因爲它仍然評估爲[1]

編輯:我在Chrome和Firefox的調試控制檯和Node.js的命令行界面中試過。

+0

JavaScript是不可思議......這是值得watching- [鏈接](https://www.destroyallsoftware.com/talks/wat)(JavaScript的開始於1:20) – mm8511

+0

我覺得你已經回答了你自己題。在這種情況下它被解釋爲一個塊。你可以做''hello'',它會返回''hello'''。但是,如果您嘗試將此值存儲在變量中,則會導致拋出錯誤。 –

回答

3

我想如果它被解釋爲一個塊,它會導致語法錯誤。爲什麼會這樣?

塊內部,由label後跟number literal組成的表達式是有效的。

但這並沒有回答如何,這是不是一個語法錯誤,除非它是做一個超前以確定它是否是一個對象字面或塊

它並不需要向前看。由於{(即沒有)的左側是什麼,所以這是一個塊。

+0

哦,我的天啊。我甚至沒有考慮過標籤。 – duckbrain