221 votes

Fuite des virgules en JavaScript

Sont des virgules arrière standard en JavaScript, ou faire la plupart des navigateurs comme Chrome et FF tout tolèrent ?

J’ai pensé qu’ils étaient standards, mais IE8 vomi après avoir rencontré un-IE ne pas soutenir quelque chose ne signifie bien sûr il n’est pas standard.

Voici un exemple de ce que je veux dire : (après le dernier élément du tableau livres)

217voto

Felix Kling Points 247451

Spécifications: ECMAScript 5 et ECMAScript 3


L'article 11.1.5 dans la spécification ECMAScript 5:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }
    { PropertyNameAndValueList , }

Donc, oui, il fait partie de la spécification.

Mise à jour: Apparemment, c'est nouveau dans l'ES5. Dans l'ES3 (page 41), la définition était juste:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }

Pour les tableaux littéraux (Article 11.1.4), il est même plus intéressant (mise à Jour: cela existait déjà dans l'ES3):

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

(où Elision_opt est Élisionde l'opt, sens de l'Élision est facultatif)

Elision est défini comme

Elision :
    ,
    Elision ,

Donc, un littéral de tableau comme

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

est parfaitement légal. Cela crée un tableau avec deux éléments, mais définit la longueur du tableau pour 2 + 3 = 5.

N'en attendez pas trop de IE (avant IE9)...

91voto

Joey Sabey Points 111

Juste un rapide rappel/avertissement que c’est un des domaines pour lesquels le JavaScript/ECMAScript standard et la norme JSON sont différents ; les virgules sont valides en JS mais non valide en JSON.

53voto

seeg Points 710

Ce qui est encore plus drôle, IE7 donne

alors que Firefox et Chrome

4voto

Endophage Points 6879

Vous pouvez trouver les spécifications pour le javascript (aka ECMA Script) ici. Vous pouvez trouver la définition pertinente pour les tableaux à la page 63 et que Felix a noté, la définition de l'objet de quelques pages plus loin, à la page 65.

Bien que cette spécification dit que c'est bien d'avoir une fuite en , je ne sais pas si ce serait vrai, en regardant en arrière quelques versions. Comme vous l'avez remarqué IE8 - sera de la merde même si vous laissez une virgule mais Chrome et FF gérer correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X