2010-10-24 2 views
10

У меня есть часть структуры отладки, которая должна иметь возможность запускать объекты eval времени.оценка javascript eval и объекта

В частности, если у меня есть строка типа "{a: 1, b:2}", ее необходимо оценить в объекте с элементами a и b с этими значениями. Однако, если я делаю eval("{a: 1, b:2}"), это, кажется, оценивает его как утверждение и говорит что-то о незаконной этикетке.

Я взломал его так, что он оценивает так:

eval("var x=" + str + "; x;"); 

, который, кажется, работает, но кажется ужасным хака. Любые предложения о том, как сделать это лучше?

(BTW, я отдаю себе отчет в опасности Eval, но это является частью основы отладки, которые не будут видеть реальных пользователей.)

+3

См. Http://stackoverflow.com/questions/3360356/why-the-open-quote-and-bracket-for-eval-jsonstring-when-parsing-json – CMS

ответ

20

Вы можете сделать это с помощью (), чтобы он разобрать его как объект, а не утверждение, как это:

eval("(" + str + ")"); 

Хотя, вы должны использовать JSON.parse() первый, если браузер поддерживает его.

+1

JSON.parse() не будет работать с описанные примеры, поскольку они недействительны JSON. Например, действительный JSON охватывает все имена свойств в двойных кавычках. – PleaseStand

+1

@idealmachine - да, вы правы ... в то же время, я бы сказал, намерен ли вы использовать его как таковой, почему * не * использовать действительный JSON в первую очередь? В этом примере да, пользователь должен будет настроить разметку своих объектов. –

+0

Или напишите функцию для преобразования из нотации объекта JavaScript в JSON (например, добавить кавычки). Это легко сделать. – cdiggins

Смежные вопросы