Вопрос по json, javascript – Странное поведение JSON-разбора в js: «Неожиданный токен:»

34

Как показано вэто jsfiddleЕсли у вас есть файл JS и вы создаете объект JSON без его использования, он ведет себя по-разному в зависимости от того, заключены ли ключи (члены) в кавычки или нет.

действительный код:{ a: 1};
неверный код:{ "a": 1 };

То, что вы получите, это сообщение об ошибке (в Chrome, отличается для FF / IE, но все равно не работает по синтаксису)

Uncaught SyntaxError: Unexpected token :

но если вы используете объект каким-либо образом, например:alert({ "a": 1 }); все в порядке снова.

Почему это происходит?

Ваш Ответ

3   ответа
2

ованиемjsonp когдаjsonpError: User Rate Limit Exceededjson

$.ajax({
     dataType: 'json', // try using json rather than json p
     ...
});
3

requireError: User Rate Limit Exceeded.json я получаю эту ошибку Переименование файла вbla.jsonError: User Rate Limit Exceeded

60

Заявление:

{ a: 1 };

являетсяnotError: User Rate Limit Exceeded

Это:

{ "a": 1 };

является синтаксической ошибкой, потому что она просто не разбирается. Цитируемое "а" запускает выражение выражения внутри блока, но затем следующий токен после строки представляет собой двоеточие, и нет формы выражения, которая выглядит как выражение, за которым следует двоеточие.

Сейчас:

var x = { "a": 1 };

работает, потому что & quot; {& quot; не интерпретируется как начало оператора блока. Это утверждение начинается сvarтак что это объявление переменной. В выражении с правой стороны от & quot; = & quot; маркер, единственное, что & quot; {& quot; может означать начало литерала объекта. Аналогично обратите внимание, что:

({ "a": 1 });

все в порядке, потому что открывающая скобка заставляет синтаксический анализатор ожидать вложенное подвыражение, так что опять же, & quot; {& quot; однозначно означает, что это начало литерала объекта.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded karnyj
Error: User Rate Limit Exceeded karnyj
Error: User Rate Limit Exceeded karnyj
Error: User Rate Limit Exceeded

Похожие вопросы