2011-02-28 31 views
29

我想知道是否在JavaScript中的數組後面的逗號是否有效?javaScript:逗號可以在數組中的最後一組值之後出現嗎?

var settings = { 
    'foo' : oof, 
    'bar' : rab, 
}; 

VS

var settings = { 
    'foo' : oof, 
    'bar' : rab 
}; 

注意第二個例子不具有的最後一個鍵/值後加上逗號。

+0

推薦(1)標題變化到「......中的物體或陣列」和(2)額外的示例在一個陣列字面尾隨逗號。 'var array_literal = ['foo','bar',];' –

+0

這個問題提供了有關IE支持的信息:[Internet Explorer 9是否在數組和對象文字結尾附加逗號?](https:// stackoverflow .com/questions/5036618/does-internet-explorer-9-choke-on-extra-commas-at-the-end-of-array-and-object-li) - 簡而言之,如果你只支持IE9 +你可以使用尾隨逗號。 –

回答

51

大多數瀏覽器和實現都允許使用尾隨逗號,大的但是是 「Internet Explorer」。

大多數InternetExplorer版本中的尾隨逗號導致麻煩。它會扔奇怪,瘋狂,奇怪和不合理錯誤 ..你不知道你在哪裏!這是可怕的,你會陷入和嚴重窪地。這種疾病也有一個名字,叫做「厄運的惡名」,它曾被稱爲。

結論:從來沒有。永遠!在Javascript中使用尾隨逗號。

+22

很好地利用戲劇和誇張+1 – meouw

+1

我可能是一個戲劇女王:-P – jAndy

+0

謝謝jAndy,我現在知道'ecod'。它在語義上是不正確的,還是隻是在ie中的錯誤? – superUntitled

31

從歷史上講,定義對象文本時ES3沒有允許尾隨逗號。這確實是IE做得對的一件事,但大多數其他bowser供應商都違背了規範並允許它反正。因此從技術上講在支持它的其他瀏覽器的錯誤。在ES3,一個ObjectLiteral被定義爲,

 
ObjectLiteral 
    { } 
    { PropertyNameAndValueList } 

後來ES5通過與廣大去,並通過把它在規範合法化後面的逗號解決了這個問題。現將ObjectLiteral定義爲:

 
ObjectLiteral 
    { } 
    { PropertyNameAndValueList } 
    { PropertyNameAndValueList , } 

注意尾部的逗號。

雖然尾隨逗號在對象常量限定,但它仍然不是JSON根據ES5允許的。因此,雖然下面的對象字面是有效的,

{ foo: "bar", } 

以下JSON是不是,

 
'{ "foo": "bar", }' 

的一個JSONObject的語法,

 
JSONObject 
    { } 
    { JSONMemberList } 

JSONMemberList 
    JSONMember 
    JSONMemberList , JSONMember 

JSONMember 
    JSONString : JSONValue 

總之,如果你不不要擔心規範或瀏覽器怪癖,那麼不要添加尾隨逗號。

+2

標誌.. IE總是會被指責,即使它做的事情:(:( – Guanlun

相關問題