Quel est le comportement de taper {a: 1} donnant 1 et {a: 1, b: 2} donnant une erreur dans une console Javascript?

StackOverflow https://stackoverflow.com/questions/3731802

Question

Le tableau suivant indique dans Firebug ou jsconsole.com ou dans une autre console interactive Javascript:

>>> foo = { a : 1, b : 2.2 }
Object { a=1, more...}

>>> foo.a
1

>>> foo.b
2.2

>>> { a : 1, b : 2.2 }
SyntaxError: invalid label { message="invalid label", more...}

>>> { a : 1 }
1

pourquoi le 1 retour pour {a : 1} et pourquoi {a : 1, b : 2.2} donne une erreur? Dans Ruby, ils reviendraient de la même façon vous l'avez défini.

Était-ce utile?

La solution

La deuxième ligne vous donne un SyntaxError parce que le jeton { au début de celui-ci provoque une ambiguïté, les traite de l'analyseur comme si elle était un déclaration bloc , pas le début d'un littéral d'objet.

Par exemple, une déclaration bloc valide:

{ foo: 'bar' }

Le ci-dessus regarde comme un littéral d'objet, mais ce n'est pas, parce que le code est évalué dans contexte de l'instruction .

Il sera analysé comme un bloc, qui contient un instruction étiquetée (foo), suivie par une instruction d'expression (de 'bar').

Pour vous assurer que vous utilisez la grammaire d'un littéral d'objet, vous pouvez l'envelopper avec des parenthèses (également connu sous le nom l'opérateur de groupement ):

({ foo: 'bar' })

L'opérateur de groupement ne peut prendre des expressions, donc il n'y a pas d'ambiguïté.

Voir aussi:

Autres conseils

Je ne suis pas 100% positif, mais ce que je pense qui se passe est que, dans la deuxième ligne que vous définissez un bloc, pas un objet. Ainsi, l'erreur d'analyse vient quand l'analyseur atteint la virgule, car il attend une couleur semi. Les étiquettes défnies sont des étiquettes, comme dans une instruction goto ou un commutateur. J'espère que cette explication n'a aucun sens.

Console faire comme eval ( 'entrée vous')

eval({....}) --- this will get an error
eval('({....})')---eval string as a function
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top