Если я запустил это:
eval('{ear: {"<=": 6}}');
Я получаю сообщение об ошибке:
Uncaught SyntaxError: Неожиданный токен:
Создайте объект вручную:
var foo = {};
foo.ear = {};
foo.ear["<="] = 6;
Теперь, следующий код:
JSON.stringify(foo)
Возвращает следующую строку:
'{ "уха": { "< =": 6}}'
Та же строка, что и я, с которой я начал (за исключением белых символов, но это не имеет значения), поэтому eval(JSON.stringify(foo))
возвращает одно и то же сообщение об ошибке синтаксического сообщения. Однако:
$.parseJSON(JSON.stringify(foo))
выполняется правильно. В чем причина этого?
EDIT:
Как указывали nnnnnn и Рон Дадон, исходная строка и результат stringify
различны. Однако, как я указал в вопросе, даже результат stringify
, используемый в качестве ввода для eval
, приведет к сообщению синтаксической ошибки.
EDIT2:
На основе ответов и экспериментов эта функция интересна:
function evalJSON(text) {
return eval("(" + text + ")");
}