Да, это особенность языка JavaScript, задокументированная в стандарте ECMAScript (3-е издание, раздел 7.3), что символы U + 2028 и U + 2029 считаются окончаниями строк. Следовательно, синтаксический анализатор JavaScript будет обрабатывать любой незашифрованный символ U + 2028/9 так же, как и символ новой строки. Поскольку вы не можете поместить новую строку в строковый литерал, вы получите синтаксическую ошибку.
Это неудачный упущение в дизайне JSON: на самом деле он не является надлежащим подмножеством JavaScript. Необработанные символы U + 2028/9 допустимы в строковых литералах в JSON и будут приняты JSON.parse
, но не в самом JavaScript.
Следовательно, безопасно генерировать код JavaScript с использованием анализатора JSON, если вы уверены, что он явно \u
- экранирует эти символы. Некоторые делают, некоторые нет; многие \u
-экранируют все не-ASCII символы, что позволяет избежать проблемы.