Are trailing commas in arrays and objects part of the spec?

后端 未结 6 1198
暗喜
暗喜 2020-11-22 10:26

Are trailing commas standard in JavaScript, or do most browsers like Chrome and Firefox just tolerate them?

I thought they were standard, but IE8 puked after encount

6条回答
  •  礼貌的吻别
    2020-11-22 11:01

    Specs: ECMAScript 5 and ECMAScript 3


    Section 11.1.5 in the ECMAScript 5 specification:

    ObjectLiteral :
        { }
        { PropertyNameAndValueList }
        { PropertyNameAndValueList , }
    

    So yes, it is part of the specification.

    Update: Apparently this is new in ES5. In ES3 (page 41), the definition was just:

    ObjectLiteral :
        { }
        { PropertyNameAndValueList }
    

    For arrays literals (Section 11.1.4) it is even more interesting (Update: this already existed in ES3):

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

    (where Elision_opt is Elisionopt, meaning the Elision is optional)

    Elision is defined as

    Elision :
        ,
        Elision ,
    

    So, an array literal like

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

    is perfectly legal. This creates an array with two elements but sets the array length to 2 + 3 = 5.

    Don't expect too much from IE (before IE9)...

提交回复
热议问题