Javascript eval и оценка объекта

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

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

Я взломал его так, чтобы он оценивал следующее:

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

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

(Кстати, я знаю об опасностях eval, но это часть структуры отладки, которая не будет видна фактическим пользователям.)

Ответ 1

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

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

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