Safari est moins permissif que Firefox sur le Javascript

Première publication : 2007-08-02

Je suis en pleine période de développement d’une application web qui utilise pas mal de Javascript, notamment dans des requêtes Ajax.

J’ai commencé par travailler avec Firefox + Firebug et j’ai bien avancé, jusqu’à ce que je m’aperçoive que Safari était un peu moins permissif dans le code Javascript.

Voici un exemple de ce qui passe sans problème dans Firefox 2.0.0.5 sur Mac mais pas sur Safari 2 (sur Mac aussi) :

new Ajax.Updater('relations_experts_projets_' + up, '/admin.php', {
  method: 'get',
  evalScripts: true,
  parameters: {
    c: 'experts',
    a: 'list_projets',
    ajax: '1',
    ide: ide,
  },
});

Voici maintenant ce que Safari accepte :

new Ajax.Updater('relations_experts_projets_' + up, '/admin.php', {
  method: 'get',
  evalScripts: true,
  parameters: {
    c: 'experts',
    a: 'list_projets',
    ajax: '1',
    ide: ide
  }
});

Regardez de près, c’est subtil.

Il ne doit pas y avoir de virgule après le dernier élément d’un Hash.

Ayant beaucoup codé en PHP, j’ai appris à laisser volontairement les virgules après le dernier élément d’un tableau. C’est très pratique lorsqu’on veut changer l’ordre des éléments et qu’on oublie d’ajuster la virgule.

Il semble bien que je doive revoir mes habitudes. De là à penser que le PHP est trop permissif, il n’y a qu’un pas (j’ai d’autres exemples dans ma manche).

Quand la différence entre Firefox et Safari, je ne saurai dire lequel respecte la norme ECMAScript à le lettre et encore moins lequel a raison (de la respecter, de l’assouplir, ou bien de la durcir).


Commentaires

Grégory Colpart 2007-08-07 11:46:12

Tiens, je n’avais jamais vraiment remarqué que PHP acceptait une virgule en fin d’array (je me suis toujours cassé la tête à fermer proprement mes array) !

Guillaume 2008-02-23 11:55:16

Ayant beaucoup codé en Ruby, j’ai appris à NE PAS laisser volontairement les virgules après le dernier élément d’un tableau.

C’est pourtant toléré, mais je trouve a absurde. J’attend plutot un comportement du type: [1,2,] => [1,2,nil] Ou même une erreur (j’attend plutôt une erreur d’ailleurs)

Idem pour les Hash, ceci est toléré: {:a => 1, :b => 2,}

Quand à changer l’ordre des élements, je n’y vois pas vraiment l’intéret de garder cette virgue finale… aurais tu un exemple ?

Jérémy Lecour 2008-02-23 16:02:40

@Guillaume
il m’arrivait souvent de laisser une virgule en fin de hash lorsque je définissait de longs tableaux, avec un couple par ligne de texte. Ainsi je pouvais facilement faire des copier/coller de lignes sans risquer d’avoir une erreur.