Pourquoi Google Chrome console jette “SyntaxError: Unexpected token }” lors de la saisie (
De Google Chrome console, lorsque nous sommes à l'entrée
(
et Entrez, Chrome, dit "SyntaxError: Unexpected token }" Pourquoi? L'entrée est juste "(", y compris l'absence de "}".
Nous obtenons la même erreur quand nous sommes à l'entrée
console.log(
Il n'y a pas de "}"!!!
Prochain jeton doit être arguments " ou ")" message d'erreur devrait être "les arguments de la liste" ou "("ou quelque chose.
Et je veux savoir, est d'entrée de la console analysée comme StatementList(opt)
(défini dans ECMA-262)?
Soins pour poster une partie du code qui est en train de lancer dit erreur?
Il l'a fait, c'est juste pas facile à voir.
Connexes: stackoverflow.com/questions/11989226/...
Il l'a fait, c'est juste pas facile à voir.
Connexes: stackoverflow.com/questions/11989226/...
OriginalL'auteur itchyny | 2011-04-09
Vous devez vous connecter pour publier un commentaire.
Edit: j'ai trouvé le code exact qui obtient évalué. Le code est dans "src/third_party/WebKit/Source/WebCore/inspector/InjectedScriptSource.js".
Avant de la console Chromée évalue votre code, il l'enveloppe dans un
with
bloc d'apporter de la ligne de commande fonctions dans l'étendue. Donc, ce que vous tapez est réellement évalué à l'intérieur des accolades. L'inattendu "}" jeton est mis automatiquement par google Chrome.Le code que google Chrome passe à
eval
estParce que c'est un simple remplacement de texte, l'exemple suivant fonctionne et le résultat est un objet que vous pouvez l'étendre à voir les
answer
propriété:Qui (restructuré) est équivalent à:
La
}
au début ferme lawith
bloc. Le0,
partie est nécessaire pour forcer le littéral d'objet pour être analysée comme une expression à la place d'un autre bloc. Ensuite, le{ answer: 42
est le début d'un objet littéral qui se ferme par l'insertion des}
jeton.Pour plus de fun, voici quelques autres entrées que le travail (et leurs résultats):
0
est plus curieux...Merci pour la réponse rapide. Hmm... C'est très délicat... Donc Chrome semble analyser
'{' + text + '}'
. J'ai essayé}; '10 '+{
et obtenir"10 [object Object]"
, qui est le même résultat que Firefox.Wow! Super! J'ai vu InjectedScriptSource.js ligne de 280 à trouver exactement ce que vous dites! Merci beaucoup!
il serait un JavaScript attaque par injection 😉
OriginalL'auteur Matthew Crumley