javascript - Er avsluttende komma i arrays og objekter en del av spesifikasjonen?


Er avsluttende komma standard i JavaScript, eller tolererer de fleste nettlesere som Chrome og Firefox dem bare?

Jeg trodde de var standard, men IE8 kastet opp etter å ha støtt på en—selvfølgelig betyr det ikke at IE ikke støtter noe at det ikke er standard.

Her er et eksempel på hva jeg mener (etter det siste elementet i bøker-arrayet):

var viewModel = {
    books: ko.observableArray([
        { title: "..", display: function() { return ".."; } },
        { title: "..", display: function() { return ".."; } },
        { title: "..", display: function() { return ".."; } }, // <--right there
    ]),
    currentTemplate: ko.observable("bookTemplate1"),
    displayTemplate: function() { return viewModel.currentTemplate(); }
};

Svar #1

Spesifikasjoner: ECMAScript 5 og ECMAScript 3

Seksjon 11.1.5 i ECMAScript 5-spesifikasjonen:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }
    { PropertyNameAndValueList , }

Så ja, det er en del av spesifikasjonen.

Oppdatering: Tilsynelatende er dette nytt i ES5. I ES3 (side 41) var definisjonen bare:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }

For array-litteraler (seksjon 11.1.4) er det enda mer interessant (Oppdatering: dette eksisterte allerede i ES3):

ArrayLiteral :
    [ Elisionopt ]
    [ ElementList ]
    [ ElementList , Elision_opt ]

(hvor Elision_opt er Elisionopt, som betyr at elisjonen er valgfri)

Elision defineres som

Elision :
    ,
    Elision ,

Så, en array-literal som

var arr = [1,2,,,,];

er helt lovlig. Dette oppretter et array med to elementer, men setter array-lengden til 2 + 3=5.

Ikke forvent for mye fra IE (før IE9)...

Svar #2

Bare en rask påminnelse/advarsel om at dette er ett av områdene hvor JavaScript/ECMAScript-standarden og JSON-standarden skiller seg; avsluttende komma er gyldige i JS, men ikke gyldige i JSON.

Svar #3

Hva som er enda morsommere, gir IE7

[1,].length  --> 2

mens Firefox og Chrome

[1,].length  --> 1

Relaterte artikler