Réponses:
Non, les guillemets ne font aucune différence (sauf si, comme vous l'avez noté, vous souhaitez utiliser une clé qui n'est pas un identifiant JavaScript valide).
Comme une note de côté, le format d'échange de données JSON ne nécessitent des guillemets doubles autour des identifiants (et ne pas permettre à des guillemets simples).
À partir des noms de propriété / clés d'objet non cotés en JavaScript , mon article sur le sujet:
Les guillemets ne peuvent être omis que si le nom de la propriété est un littéral numérique ou un nom d'identifiant valide .
[…]
La notation entre parenthèses peut être utilisée en toute sécurité pour tous les noms de propriété.
[…]
La notation par points ne peut être utilisée que lorsque le nom de la propriété est un nom d'identifiant valide.
Notez que les mots réservés peuvent être utilisés comme noms de propriété sans guillemets dans ES5. Cependant, pour une compatibilité descendante avec ES3, je suggère de les citer quand même.
J'ai également créé un outil qui vous dira si un nom de propriété donné peut être utilisé sans guillemets et / ou avec notation par points. Essayez-le sur mothereff.in/js-properties .
Il n'y a aucune différence ici. Juste une question de style. L'une des raisons pour cela est de pouvoir utiliser «super» ou «classe» comme clé car ce sont des mots clés réservés.
Certaines personnes pourraient être tentées de passer une chaîne avec des espaces, puis d'appeler o [«Je peux avoir des espaces»] Mais j'appellerais cette mauvaise pratique.
Non, pas en javascript. Cependant, certains analyseurs JSON échouent lorsque les guillemets autour des clés ne sont pas présents.
Il y a des situations où ils sont différents. Par exemple, si vous utilisez jQuery et que vous créez une liste de paramètres à passer lors de l'appel de la commande jQuery $ () pour créer un élément, les mots entre guillemets sont transformés en paramètres et les mots sans guillemets sont transformés en fonctions. Par exemple, "taille" définira l'attribut taille de l'objet, et taille (sans guillemets), appellera la fonction taille () sur l'objet. Voir jQuery () , près du bas:
Bien que le deuxième argument soit pratique, sa flexibilité peut entraîner des conséquences inattendues (par exemple $ ("
<input>", {size: "4"}) appelant la méthode .size () au lieu de définir l'attribut size). Le bloc de code précédent pourrait donc être écrit à la place comme:
obj = { 12e34: true };n'est pas le même queobj = { '12e34': true };. Le premier vous obligerait à accéder à la propriété par le biaisobj['1.2e+35'], tandis que pour le second, vous utiliseriezobj['12e34']. Voir ma réponse pour plus de détails.