Próbowałem tego prostego kodu JavaScript:eval() = Nieoczekiwany token: Błąd
eval('{"Topics":["toto","tata","titi"]}')
W konsoli Chrome, na przykład, to zwraca
SyntaxError: Unexpected token :
Próbowałem JSON na JSONLint i to ważny.
Czy widzisz błąd?
mogę zapytać, dlaczego eval ('function() {}') zgłasza wyjątek zbyt? – BiAiB
@BiAiB Z tego samego powodu co powyżej :) Zawartość 'eval' działa w kontekście * statement * i dlatego jest traktowana jako konstrukcja gramatyczna FunctionDeclaration. Błąd generowany przez to polecenie "SyntaxError: function statement wymaga nazwy". Podaj mu nazwę ('eval ('function f() {}'); f()') lub zmuś ją do konstruktu FunctionExpression ('f = eval ('(function() {alert (" hi ")}) "); f()'). Zobacz http://es5.github.com/x13.html –
dzięki! Najtrudniejsze było dla mnie to, że łańcuchy takie jak "3" są poprawnie ocenione, a nie "function() {}". Drugiego nie można ocenić jako wyrażenia ExpressionStatement: 'wyrażenie ExpressionStatement nie może zaczynać się od słowa kluczowego function, ponieważ może to być niejednoznaczne z funkcją FunctionDeclaration' (http://es5.github.com/x12.html#x12.4) – BiAiB