La syntaxe JSON pour les noms de propriété
Quelle est la bonne syntaxe pour créer des objets en javascript qui fonctionnent sur la majorité des navigateurs web (je veux dire par là : IE 6+, Firefox 2+, Opera 9+ )
Est-ce valable
var a={ "class": "Person",
"name": "William Shakespeare",
"birthday": -12802392000000,
"nickname": "Bill"
} ;
Ou est-ce:
var a={ class: "Person",
name: "William Shakespeare",
birthday: -12802392000000,
nickname: "Bill"
} ;
Et quelle est la différence entre les deux?
Vous devez vous connecter pour publier un commentaire.
@AndreasN est correct: le JSON spécification impose l'utilisation de guillemets pour être réellement JSON. Si vous n'utilisez pas de guillemets, il peut être un littéral d'objet en Javascript, mais il n'est pas JSON. D'autres services en plus de côté navigateur Javascript utilisation de JSON (par exemple, services web en utilisant php, Java, etc.) et si vous construisez une chaîne qui manque les guillemets, il n'y a aucune garantie qu'il sera analysée correctement, bien que je soupçonne que la plupart des implémentations serait assez solide pour le faire.
Pour info il est dangereux en Javascript pour utiliser directement la fonction eval() sur les chaînes JSON à partir de sources qui vous ne pouvez pas éviter les attaques malveillantes. Encore une fois, voir le JSON site qui donne plus d'explication ainsi qu'un très court fichier javascript qui traite en toute sécurité de chaînes JSON dans des objets Javascript.
edit: je suppose que techniquement votre question de départ n'est pas à propos de JSON, mais plutôt le Javascript de la syntaxe pour objet littéraux. La différence est que les objets constructable à partir d'une chaîne JSON, d'exclure de nombreux autres objets littéraux, par exemple:
Littéraux d'objet "a" et "aname" peut être exprimé en JSON (par l'ajout de guillemets pour les noms de propriété). Mais littéraux d'objet "b" et "c" ne peut pas. Littéral d'objet "b" contient des fonctions (non autorisé en JSON). Objet littéral "c" ci-dessus contient des références à d'autres variables dans une voie qui n'est pas représentable en JSON, parce que certaines références sont partagés. Si vous faites un changement à
c.names
il va aussi changerc.all[1]
parce qu'ils partagent une référence à la même variable. JSON ne peut qu'exprimer des objets qui ont une structure de l'arbre (par exemple, chaque sous-élément de l'ensemble de l'objet est indépendant).Si IE ne avec votre deuxième exemple, c'est parce que "la Classe" est un mot réservé (seulement dans IE). Généralement parlant, il est toujours préférable de joindre vos noms de propriété avec des citations - faire cela signifie qu'il fonctionnera TOUJOURS, quelle que soit la circonstance.
La spec dire à utiliser "".
Firefox accepter sans, mais IE n'est pas.
Paire est défini comme
Valeur peut être une chaîne de caractères
la chaîne est définie comme
Vous devez utiliser le "citations" autour de propriétés qui contiennent rien d'autre que les caractères de mot
Autre que qu'il n'y a pas de différence entre les deux et j'imagine que les deux façons de travailler sur tous les navigateurs